|
Ангэ · Эсэф
 |
|
Из Ставангера в Берген я ехал автостопом, решил опробовать этот чудесный способ передвижения и в Норвегии. Водители, как и все остальные норвежцы, отлично говорили по-английски, рассказывали забавные истории и в целом были отличными ребятами. Особенно запомнился пирсинг/тату-мастер на пижонском красном Мерседесе, который завёз меня километров на 30 дальше, чем ему нужно было ехать чтобы подбросить меня до парома. А ещё -- парень-Пушкин, так я про себя его назвал, потому что у него был дед-эфиоп, и он рассказывал истории про то, как ездил в Эфиопию и что там есть классный вулкан. Дорога вдоль западного побережья пересекала немалое количество проливов, фьордов и островов с помощью мостов, туннелей (самый длинный был километров 15 длиной) и паромов (их было два и за них пришлось платить, хотя к этому относились не слишком внимательно и при некоторой доле наглости можно было бы проехать и бесплатно). Единственная трудность западно-норвежского автостопа состояла в том, что часто нельзя было останавливаться на обочинах, т.к. дорога была слегка серпантинного типа. Потому однажды пришлось пройти пешком километра четыре, чтобы дойти до места, где машины могли бы остановиться. Пока я ехал -- радовался, что наконец могу созерцать норвежскую природу, радовался свободе и тому, что наконец еду автостопом после, наверное, полугодового перерыва. ( дальше фотографии ) |
 |
|
Сейчас Ставангер считается самым богатым городом Норвегии, главным образом из-за нефти. Когда в 1969-м году в Северном море обнаружили нефть (что положило началу богатству и процветанию Норвегии) — Ставангер был избран центром нефтебизнеса. Кстати, интересно, что нефтяные разработки в Норвегии национализированы и ими занимается главным образом государственная компания StatOil. У города интересная история взлётов/падений и отраслей с ними связанных — вначале город был известен судостроительством, затем, уже в ХХ-м веке, на смену пришло консервное дело — в Ставангере делали консервы с сельдью в оливковом масле (даже есть музей консерв :)), которые, как я понимаю, экспортировались во многие страны. Ну а сейчас — эра нефти. После такого вступления наверное представляется индустриальный город со зданиями из стекла и бетона, но здесь совсем другие символы достатка :) ( дальше ) |
 |
|
После парка Вигеланда я отправился в Фольк-музей, что находится на полуострове Bygdøy, который, как потом оказалось, является довольно мажорским районом и в нём оочень красивые домики, прямо как с картинок журнала об элитной недвижимости. ( дальше ) |
 |
|
У меня часто спрашивали: "Почему именно Норвегия и зимой?", потому я сразу отвечу. Причин несколько: я люблю север, люблю black metal, и Норвегия — слегка экзотическая страна, если выбирать из стран Европы. Мне хотелось посмотреть северное сияние, фьорды, красивую природу, наконец попробовать себя в получении шенгенской визы и также немаловажно, что WizzAir открыли дешёвый рейс Киев — Осло (билет в оба конца с багажом обошёлся мне всего 454 гривны). Так что вот — долгие и тщательные приготовления, сбор документов для визы, поиск хостелов и хороших ребят из hospitalityclub.org и couchsurfing.com (в итоге хостелы мне не понадобились вовсе), ранняя покупка билетов (я рискнул и заказал многие билеты даже до получения визы, и в итоге выиграл немало денег) и наконец виза получена и я улетаю в Осло! Маршрут был выбран такой: Киев - Осло - Ставангер - Берген - куда-то на фьорды - Осло - Тромсё - Осло - Киев. ( дальше ) |
 |
|
Когда наступила надобность сверстать слайды для следующей презентации — я наконец решил воспользоваться LaТеХ-ом (это уже далеко не первый мой подход, но пока самый продуктивный). В процессе работы у меня возникали различные мелкие задачи: нарисовать диаграмму, нарисовать синтаксическое дерево, нарисовать несколько деревьев "в разных позах", раскрасить исходный код, ну и наконец всё это представить в виде более или менее симпатичных слайдов. Поскольку часто полученные знания были достойны того, чтобы ими делиться, а весь этот подход по сравнению с традиционным WYSIWYG (в лице Open или Microsoft Office) весьма любопытный и просветляющий — я решил написать на эту тему несколько постов. Они не будут претендовать на роль учебных, т.к. я постараюсь быть кратким и выражать самую суть, чтобы позволить прочувствовать эту атмосферу, заинтересовать и дать толчок к дальнейшему изучению. Кроме того, я сам только изучаю LaTeX, потому не могу служить авторитетом в данной области. ( Итак, начнём с LaTeX ) |
 |
|
Сегодня у martreya День Рожденья! Ура, ура, ура! :) |
 |
|
Роман Чепляка выложил в HTML нашу статью о xmonad, весьма хорошем оконном менеджере, написанном на haskell. Ранее она публиковалась в журнале Open Source, выпуски 27, 28, 29. Можно смело сказать, что статья является самой подробной из всего написанного про xmonad на русском :) |
 |
|
Хотите написать умную статью, но не знаете о чём? Вам поможет это! О правильном использовании написано в разделе Examples :) P.S. Спасибо за наводку замечательному блогу http://www.defmacro.org, не перестаю получать удовольствие от тонкого юмора в статьях автора :) P.P.S. А в материалах конференции WMSCI 2005 такие статьи даже печатают! Подробнее обо всей этой истории здесь. |
 |
|
Примерно неделю назад мы с Мариной ( martreya) вернулись из двухнедельного автостопа по Турции. Поездка получилось отличной, полной ярких впечатлений и интересной. Турки - замечательные люди, спокойные, улыбчивые и дружелюбные. История страны невообразимо насыщена, кого здесь только не было: и хетты, и греки, и римляне, и турки-сельджуки, и турки-османы! Стамбул (Константинополь) - бывшая столица трёх империй: Восточно-Римской, Византийской и Османской. В общем, предварительно начитавшись статей и путеводителей мы двинулись в путь :) Маршрут был такой: Киев - Одесса - (1.5 дня на теплоходе) - Стамбул - Изник - Ассос - Эгейское море - Измир - Гюмюльдюр - Сельчук - Эфес - Конья - Гёреме (Каппадокия) - Невшехир - Стамбул - (1.5 дня на теплоходе) - Севастополь - Киев. Карта: 
В процессе путешествия удалось немного изучить турецкий язык :) Слов 70, которые часто нам были нужны, типа числительных, местоимений и т.д. Ещё я читал, что у него весьма логичная грамматика, и благодарен Ататюрку за введение латиницы вместо арабской вязи, ибо надписи на дорожных знаках так читать несравненно легче. Несмотря на то, что во время путешествия я записывал некоторые впечатления в блокнот, я всё никак не соберусь упорядочить их и привести в какой-то художественный вид. В отличие от меня, Марина - молодец, выкладывает фотографии и пишет отличные отчёты, ссылки на которые я сейчас и приведу. Вступление Одесса Стамбул (часть первая) Изник Ассос(Бехрамкале) Гюмюлдюр Эфес Сельчук UPD: Конья Гёреме, Каппадокия Каппадокия (часть вторая) Гёреме, музей Стамбул (часть вторая) Море |
 |
|
В последнее время я начал проверять орфографию с помощью программы aspell и обнаружил, что в виндовой её поставке нет русского словаря с буквой "ё". Соответственно, при проверке aspell ругается на слова типа "поёт", "смеётся" и т.д., что мне совершенно не нравится. Оказалось, что такая проблема со словарями есть далеко не только у aspell-а, и довольно часто отдельно выпускаются словари с буквой "ё" и без неё. Более того, опросив пару человек в аське, я удивился тому, что многие из них не употребляют в наборе букву "ё", так как "она неудобно расположена на клавиатуре", "и так понятно где она, а где е" и т.д. Немного поисследововав этот вопрос, можно узнать следующие факты:
- Ё была предложена в 1783, впервые использована в печати в 1795, однако формально вошла в алфавит только в советские годы
- относительно названия надстрочного элемента (вот тех двух точек) нет единого мнения. Употребление слов "умляут", "трема" считается некорректным, поскольку относится к диакритике символа, а диакритика связана с произношением звука (и т.к. ё фонетически не связана с е (ё=йо, е=йэ), то две точки сверху - не диакритический символ)
- медленное введение в обиход и распространение буквы ё объясняется её неудобной для быстрого письма формой и техническим несовершенством печатных средств докомпьютерной эпохи. Заметьте, обе эти причины отсутствуют в компьютерном наборе. Хотя, конечно, им на смену может прийти несколько необычное расположение этой буквы на клавиатуре
- в результате необязательности употребления буквы "ё", сейчас мы можем наблюдать множество исковерканных личных имён (Ришелье, Монтескье, Рентген, Рерих и т.д. - все они были с буквой Ё ;))
И что мне кажется более важным: появляются разногласия при написании слов типа "маневр", "желчь", "блеклый", "издевка" и т.д. Таким образом, когда мы видим букву "е" - мы должны задумываться о том как правильно прочесть это слово: с "е" или с "ё". Если бы "ё" было обязательным в этих случаях, разногласий бы не возникло. Действующие правила орфографии не требуют написания буквы "ё", однако рекомендуют её написание в неоднозначных словах. Однако, задумываетесь ли вы например при написании очередного поста в ЖЖ, что слово "все" может быть прочитано как "всё"? Уверен, что нет. Увидев такое слово в неоднозначном предложении, приходится возвращаться к нему и переосмысливать прочитанное, что не менее важно, чем то, что взгляд "спотыкается о букву Ё", что например является одним из главных аргументов "против" в статье Лебедева про Ё из его книги "Ководство". Для того, чтобы исследовать какой процент фрэндов моего ЖЖ использует букву "ё" в своих постах, я написал небольшой скрипт - ёметер :) Он извлекает список друзей, затем последние 25 постов каждого пользователя и проводит простой анализ. Для каждого пользователя затем выдаётся "yo-ratio" (отношение постов с "ё" ко всем постам), так же отношение фрэндов хотя бы раз употребивших "ё" ко всем фрэндам. У меня этот результат таков:
total users = 106, significant users = 100,
yo users = 64, ratio = 0.64
Таким образом 36 процентов моих фрэндов ни разу не употребило "ё" за последние 25 постов! К вам, собственно, и обращён этот мой пост :) Ссылки: - исходный код yometer.py (для использования необходим python и доступ в интернет) - статья про Ё в русской википедии - много ссылок в конце этой статьи - параграф из книги "Ководство" А. Лебедева UPD: Для поднятия насущности вопроса публикую под катом список фрэндов, не употребляющих "ё" :) (отредактирован после работы скрипта - вычеркнуты англоязычные и украиноязычные юзеры) ( список ) |
 |
|
Сегодняшняя встреча SpB Haskell user group прошла просто замечательно - услышал много нового и интересного, да и сам что-то хорошее рассказал :) В программе было три доклада:
- "Комбинаторы сериализации" (слайды) - мой доклад.
- "Свободные теоремы" (или "Теоремы нахаляву" - вольный перевод Theorems for free) (слайды) - доклад
deni_ok
- "Функциональные структуры данных (часть вторая)" (слайды) - доклад
antilamer
(чуть позже возможно появятся фотографии и аудиозапись) Я получил свой первый опыт чтения докладов широкой (да ещё и весьма интеллектуальной) публике, получив при этом массу fun-a. Смею надеяться - первый блин не вышел комом :) Остальные доклады тоже весьма порадовали - и интересные результаты, получающиеся в результате вывода этих самых "халявных" теорем, и полезные и интересные техники, описанные Женей, вместе с его замечательными иллюстрациями :) и последующая мини-лекция о realtime-вычислениях и проблемах, с этим связанных, рассказанная Иваном Тарасовым ( _navi_), так сказать, в кулуарах. Что же, с нетерпением жду следующих встреч! :)
Настроение: |
artistic |
Музыка: |
The Velvet Underground | |
 |
|
Сегодня, просматривая свою коллекцию книжек и paper-ов по функциональному программированию, решил посмотреть, что там пишет Simon L. Peyton Jones в своей книге "The implementation of functional programming languages". И был приятно удивлён - как же классно он пишет! Хотел всего лишь прочесть вступление и зачитался! :) Меньше чем за 30 первых страниц книги получаем чёткое, сжатое, понятное и хорошо иллюстрированное описание таких тем:
- синтаксис лямбда-исчисления (в дальнейшем ЛИ)
- карринг
- операционная семантика ЛИ
- бета-редукция, альфа- и эта-преобразования и что они значат
- порядок редукции, его оптимальность
- нормальный порядок редукции
- теоремы Чёрча-Россера
- пример выражения, у которого нет нормальной формы
- как выражать рекурсивные функции в ЛИ
- Y-комбинатор
- денотационная семантика ЛИ, отличие денотационной семантики от операционной
- bottom _|_
- строгость и ленивость функций
Конечно, почти все эти темы и ЛИ в общем являются классикой, так сказать ядром функционального программирования, и я про них неоднократно читал раньше в разных источниках. Но столь хорошее описание встречаю, наверное, впервые. ( Дальнейший обзор книги )
Настроение: |
geeky |
Музыка: |
muse | |
 |
|
Весёлая, однако, штука - википедия! Читал статью про метасинтаксические переменные, а буквально через два-три перехода по ссылкам внутри статей - уже попал на статью про куннилингус! :) При этом узнал, что и до него, и после нежелательно чистить зубы и есть чипсы и сухарики :) А в дополнение выпуск xkcd на эту же тему: [xkcd.com - The problem with Wikipedia] |
 |
|
Вчера, с подачи antilamer (спасибо за вдохновляющий поток эмоций! :)), поразбирался с QuickCheck - средством для тестирования функционального кода, которое основывается на проверках неких свойств, которые задаются относительно определённых функций и проверяются на случайно сгенерированных данных. Классический пример: есть функция reverse для обращения списков. Тогда можно придумать такие достаточно ярко её характеризующие свойства:
propReverseUnit x = reverse [x] == [x]
-- (то есть, обращая список из одного элемента - получаем тот же список)
propReverseAppend xs ys = reverse (xs++ys) == reverse ys ++ reverse xs
-- (обращая конкатенацию списков, получаем конкатенацию обращений частей
-- в обратном порядке)
propReverseReverse xs = reverse (reverse xs) == xs
-- (обращая обращение списка - получаем тот же список)
Теперь из-под ghci запускаем QuickCheck:
Main> quickCkeck propReverseReverse
OK, 100 tests passed
и - вот он, момент истины! - QuickCheck сгенерил 100 случайных списков, на которых проверил данное свойство и поскольку оно всегда выполнилось - выдал OK. При этом свойства могут быть и посложнее нежели описанные выше - в них могут присутствовать необходимые для выполнения свойства условия, генерируемые данные могут быть определённым образом классифицированы, кроме этого можно создавать свои генераторы значений, в том числе для рекурсивных типов (легко!) и даже генераторы случайных функций! Для того, чтобы дополнительно управлять случайными значениями, которые генерятся и направлять эти значения в нужное русло - существуют понятие "генератор", которые можно (и иногда нужно) описывать для своих и стандартных типов данных, а также некоторый небольшой фрэймворк, который позволяет эти генераторы комбинировать с помощью стандартных, довольно удобных и отлично продуманных комбинаторов - получая при этом новые необходимые генераторы. На предстоящей встрече Spb Haskell User Group , как раз ожидается доклад по QuickCheck от Дмитрия Тимофеева ( dtim), который, думаю, будет весьма интересно послушать, при этом уточнив пока неясные для меня моменты. В общем, весьма любопытная штука и немного необычный (по крайней мере для меня) подход к тестированию, который отлично работает в условиях отсутствия побочных эффектов и превращает процесс тестирования в весьма увлекательный процесс размышления над свойствами своей программы. Изначально QuickCheck был написан для Haskell и активно там используется, но поиск в гугле выдал и порт для Erlang .
Настроение: |
geeky | |
 |
|
У меня вот родились котята с месяц назад (мама - наша Маська, папа - некий сторонний перс), теперь ищем им хозяев. На эту тему сделал здесь пост: Пост про котят с фото Там есть и фотки, и небольшое описание, и контакты. А ещё сделаю превью одного котёнка здесь:
 Был бы очень благодарен за помощь в раздаче, ибо в воскресенье утром (29.07) возвращаюсь в Петербург, и было бы весьма неплохо их к тому времени раздать. Котята весьма позитивные, игривые и пока неизбалованные, так что рекомендую :) Спасибо! |
 |
|
Вчера благополучно переехали в Санкт-Петербург, буду теперь некоторое время здесь жить :) Старый номер телефона можете смело удалять, теперь контакты такие: +7 921 3782469. У нас тут есть чукотские сказки, шахматы, автомобильная сирена по утрам и новый нескрипящий диван! Все желающие повидать меня в СПб are welcome! :) Кроме того, примерно 15 июля ещё вернусь на несколько дней в Киев.
Настроение: |
excited | |
 |
|
Наткнулся на прикольный пример изоморфизма. Есть игра для двух игроков: каждый по очереди называет число от 1 до 9. Повторяться нельзя. Выигрывает тот игрок, который первым назовёт числа, сумма которых равна 15. Спрашивается: какой известной игре эта игра изоморфна? Комментарии пока скрываются :). P.S. Изоморфизм - это по сути взаимно-однозначное соответствие между двумя множествами, которое сохраняет структуру этих множеств - то есть какой-то набор правил (аксиом), соответствующий множеству, будет выполняться в обеих множествах. Например есть колода карт с зелёными рубашками и колода карт с синими рубашками. Между ними можно провести взаимно-однозначное соответствие, при этом каждой из них можно всё так же играть (то есть соблюдается определённый набор правил, которому соответствует каждая колода). Таким образом, это соответствие сохраняет структуру и потому может называться изоморфизмом. UPDATE (ответ) Более половины комментариев были верными - ответом является игра в крестики-нолики на магическом квадрате 3х3 (сумма чисел в котором по вертикалям, горизонталям и главным диагоналям которого равна 15). Выглядит он вот так:
При этом я немного некорректно поставил условие: действительно, как справедливо отметили некоторые из отвечавших, следует ограничить условия победы тем, что суммировать можно три и только три числа из названных игроком (что соответствует победе тремя крестиками или ноликами, поставленными в ряд). Спасибо всем за ответы, было интересно!
Настроение: |
geeky | |
 |
|
Захотел я почитать в Википедии статью про DSL ( domain specific languages) и не пожалел :) Набрал не в той раскладке " dsl", и по запросу " выд" английская Википедия достаточно неожиданно выдала мне с релевантностью 9,9% интересную статью про белорусский арабский алфавит. Поначалу я подумал, что это очередной википедийный вандализм (а-ля недавняя байка про МГУ), но нет. Как оказалось, белорусский язык записывался в XVI-м веке арабскими буквами местными татарами, которые почти в абсолютном большинстве забыли родной язык, но не хотели терять свою религию и нашли такое решение: пересказать Коран на белорусском и записать его с помощью арабской письменности. Возникли проблемы с некоторыми звуками, которых изначально не было в арабском ("ж", "ч", "п", "дз", "ц", а также "у краткое"), но они были решены введением новых символов. Таким образом, возникли "китабы" (kitabs) - целые книги, записанные подобным образом - преимущественно религиозные и фольклорные. Сейчас китабы хранятся в библиотеках АН Беларуси, АН Литвы, Вильнюсского, Петербургского и Казанского университетов, а также в частных коллекциях. Такой вот интересный пример транслита.
Ссылки по теме: Статья на русской ВикипедииБолее подробная статья о кетабах (англ.)
Настроение: |
weird | |
 |
|
Что же, в прошлый раз мы вспомнили формы записи операторов и рассмотрели написание простого вычислителя постфиксных выражений на Haskell. Следующим шагом является создание транслятора выражений из инфиксной формы - в префиксную. Однако, перед этим нам необходимо улучшить разбор выражения на токены, поэтому в данной статье мы рассмотрим монадические комбинаторные парсеры на примере модуля Parsec, а также использование их на практике. ( Haskell postfix: часть вторая. Комбинаторные парсеры Parsec. ) |
 |
|
В очередной раз убеждаюсь, что хорошая штука opensource :) Я пользуюсь Linux Ubuntu и недавно сменил основной аудио-проигрыватель с Amarok на Exaile, поскольку Amarok, будучи KDE-приложением, несколько тормозил при запуске в моём Gnome. Exaile - является некоторым подобием Amarok под Gnome, вполне приятный плэйер, в котором есть интеграция с last.fm, неплохой менеджер артворков, нотификации, работа с мультимедийными клавишами out of the box, приятный внешний вид и т.д. После перехода я обнаружил, что некоторых мелочей мне не хватает и решил сделать их сам. Что же, получаем исходный код для разработчиков: svn co svn://exaile.org/usr/local/svn/exaile/trunk trunk и вперёд! :) Заодно познакомлюсь с Python и GTK. Захожу на канал #exaile в IRC, знакомлюсь с одним из двух разработчиков Exaile - sjohannes, пытаюсь задавать какие-то вопросы. В принципе ребята на вопросы отвечают, но помогать в разборе кода особенно не хотят. Что ж, посмотрю сам. Поначалу я реализовал простенькую фичу. Заключалась она в добавлении возможности "Load", которая параллельно очищала плэйлист и добавляла в него выбранный трек или альбом: добавил menu item "Load" в контекстное меню, навесил на него обработчик. В итоге всё вылилось в такой вот ticket с патчем. Особого успеха у sjohannes этот патч не имел - сказал, что не думает что это особенно нужная функциональность, но, тем не менее, на следующий день пришло письмо от некоего благодарного пользователя, так что хоть кому-то он да понадобился :) Вторая же возможность, которую я добавил, была навеяна похожей функциональностью Eclipse IDE и сразу понравилась разработчикам. Я говорю о возможности "Show in collection", которая может быть полезна при желании быстро перейти от трека в плэйлисте к соответствующему треку в коллекции (это важно при прослушивании случайных треков, при этом иногда хочется послушать полностью ту группу, которая только что играла и, как следствие, нужно искать её в коллекции, что возможность делает автоматически). В Eclipse этой возможности соответствует переход от текущего редактируемого файла к его ноде в дереве проекта. В итоге, я сделал ещё один патч. Эта идея и её реализация уже гораздо больше впечатлила sjohannes, и он сказал, что непременно включит её в следующий релиз (см. UPDATE). Что ж, буду рад :) Хочется отметить, что Python, как и обещалось многими, оказался действительно интуитивно понятным языком, с хорошим синтаксисом. Практически все вещи, что я делал почти наобум - работали именно так, как полагалось. Мне кажется, что это весьма важное качество языка - works as expected. Насчёт GTK и биндингов под Python - pyGTK, тоже ничего плохого сказать не могу, хорошая документация, поработал с деревом и его моделью без особенных проблем. Хотя здесь, конечно, моё мнение весьма поверхностно и сравнивать мне не с чем, ибо я никогда не занимался разработкой GUI под Linux. Резюмируя, можно сказать, что теперь я на собственном опыте прочувствовал один из плюсов открытых исходных текстов - при определённой квалификации и желании можно достаточно просто реализовать нужные и вполне полезные вещи и, возможно, донести их другим, что не может не радовать. UPDATE: Функциональность "Show in collection" добавили в Exaile в ревизии 2358 ("svn log -r 2358").
Current Location: |
/home |
Настроение: |
geeky | |

|
|