Archive for September, 2007

Erlang lists:filter

Последние несколько дней понемногу читаю книженцию по ерлангу (давно собирался, но начал вот только-только). Очень рад, что я знаю и пользуюсь Питоном, а не каким-нибудь Перлом или C# — намного легче воспринимается передача функции в функцию, сами высокоуровневые функции — все эти filter, map.

Однако одна штука заставила меня попотеть — в книге lists:filter (кстати, интересно, что в ерланге не надо, как в питоне, очевидно импортировать модули — просто вызываешь, и всё) всегда вызывался вместе с fun (анонимной функцией, та же lambda, только покруче ;). Т.е.

lists:filter(fun(X) -> X rem 2 == 0, lists:seq(1, 10)).

И когда я пытался кинуть туда свою функцию, оно мне говорило invalid expression. : Такой вот код никак не работал:

is_even(X) -> X rem 2 == 0.
lists:filter(is_even, lists:seq(1, 10)).

И поиски мануала, как всегда в первый раз, приводили к тому, чему я знаю. :( Когда что-то знаешь — найти легко, а когда не понимаешь сути проблемы — начинается подбор кода к гуглю, чтоб выдал необходимое. :) В конце-концов, разобрался:

lists:filter(fun is_even/1, lists:seq(1, 10)).

Вообще вот эта штука — /1 (arity, как её в ерланге называют, или просто количество параметров) — довольно прикольная вещь. В питоне это всё реализуется опциональными параметрами, а в ерланге — просто разные функции для разного количества параметров (практически перегрузка из ООП). В некоторых случаях это будет давать несколько больше кода, в некоторых — меньше, но в сочетании с pattern matching‘ом это всё пока для меня выглядит феноменально. :)

P.S. Самое смешное, что у меня пока не получается создавать функции в интерпретаторе. Только написав отдельные модули. :(

P.P.S. Немного не хватает фич ipython’а и самодокументируемости.

P.P.P.S. Решение первых двух задач из проекта Эйлера помогает запомнить основные приёмы и синтаксис очень порядочно. :)

1 comment »

Но мы же люди!

PuTTY

Иногда прикольно полазить по сайту одной из самых частоиспользуемых утилит. Обнаруживаются такие штуки, как:

  • PuTTY tray - можно регулировать прозрачность, усылать в трей и - самое прикольное - нажимать на гиперссылки. :)
  • WinTabber - утилитка, с помощью которой можно добавить табы практически к любому приложению. К той же путти.
  • PuTTY tabs - табы специально для путти. Но, к сожалению, отдельным окном.
  • PowTTY - MUD-клиент на основе путти.
  • PuTTYcyg - самое вкусное, но только почти. :( Практически заменитель виндовой консоли, но не даёт его полного API… :(
0 comments »

ZFS во FreeBSD

На Opennet’е дали ссылочку на презентационный ролик по использованию ZFS во FreeBSD. Оно стоит того, чтоб посмотреть полностью (хотя там не слишком быстро всё показывается - всё же презентация). Поржал. :)

0 comments »

Nginx и WSGI

Сегодня наткнулся на просто невероятную вещь - mod_wsgi для nginx’а. На английском упоминаний нету вообще нигде, но не сомневаюсь, что они скоро появятся. :)

UPD. Он, конечно, совсем новый и ещё не юзабельный для продакшена, но, судя по всему, пока разработчик порядочно активен - только что добавился TODO

7 comments »

mod_wsgi

Всё, перевёл все свои виртуалхосты, использующие питон, на mod_wsgi, который куда лучше и проще настраивается, чем mod_python.

Кроме того, он позволяет запускать процессы в таком себе daemon-режиме, благодаря чему теперь мой меркуриал запущен из-под моего юзера - а это значит, что репозитории, которые в нём лежат, одновременно и доступны для записи, и принадлежат мне (и без всяких предоставлений юзеру www-data прав на запись). Очень удобно.

Меркуриал, кстати, невероятно рулит. Позволяет через браузер ходить по репозиторию (и смотреть не только последние версии, как svn), clone/pull проходит на порядок быстрее, чем в svn’е, а скорость annotate сравнить вообще нельзя - оно же всё локально происходит. :)

14 comments »

Статическая типизация

Static typing guarantees that you’re using consistent types throughout your program. It does not guarantee that this consistent code isn’t doing something entirely braindead.

Из reddit’а

0 comments »

Предпросмотр

В результате 20-минутной возни с кодом по заявкам телезрителей был сделан предпросмотр - отдельной кнопкой в форме комментирования, аяксом.

6 comments »

Написание и отображение постов

Сегодня прикрутил последнюю, похоже, часть в цепочке от написания поста до его отображения - highlight.js. И теперь пост проходит markdown, typogrify и уже в браузере код расцвечивается хайлайтом. :)

Правда, сначала он показал мне баг в smartypants (который входит в состав typogrify) - он превращал кавычки в красивые (“”) не только в тексте, но и в коде. А я хорошо помнил, что он уже два года не обновлялся, и просто чуял, что придётся мне сейчас рыться в его коде. :( Но всё же не поленился залезть в гугль, и увидеть что автор после двухлетнего перерыва обновил его и этот баг починен. :)

Вообще, из всего этого набора больше всего мне не нравится именно markdown, потому что он однозначно рассчитан на английский язык - квадратных скобочек (для расставления ссылок) в русской раскладке нету. И ещё не нравится выделение кода четырьмя пробелами перед ним - неудобно в обычном текстедите их вставлять. :( Но альтернативы не вижу - Textile хуже имхо, а ReST - ничем не лучше маркдауна, у него обратные апострофы используются, которых точно также нету в русской раскладке. :(

15 comments »

Импорт из WP

При всех плюсах настоящих пользователей у них есть один огромный минус - что-то я никак не придумаю, как из вордпресса импортировать комментарии. :( Они ведь там не имеют реальных пользователей, а здесь мне - придётся создавать… И если человек придёт второй раз комментировать?

Или послать всем письма на предмет активации? Но что-то мне это решение не кажется особенно удачным… ;)

Или может импортировать только посты? Но это уже не так весело и интересно… :(

5 comments »

def mySqrt(x): return x*x

Ну они там и курят, мозги в трубочку сворачиваются. :D

0 comments »

Django’s ORM

Наткнулся тут (спасибо реддиту) на блог замечательного учаснега Адама Гомаа, последний пост которого вещает о том, что Джанговский ОРМ - мертвяк и припарки не помогут, потому он решил писать свой собственный декларативный слой над SQLAlchemy (потому как текущие действительно просто ужасны).

Однако ж рефакторинг query.py - уже близко и я чую, что должно всё стать заметно лучше. :) Джеймс Беннетт, имхо, ответил совершенно правильно. :)

0 comments »

Nine Inch Nails

Всё-таки Трент Резнор - не самый ординарный человек. Почитал и снова убедился. :)

2 comments »

lighttpd angel

Похоже, лайти наконец-то научился (хоть пока только в транке, но всё же) делать нормально graceful перезагрузку. Теперь его можно будет использовать и не напрягаться чрезмерно по поводу его рестартов и падений. :)

0 comments »

Апгрейд пингбека

Мне вот подсказали, как сделать лучше выдирание контента из пингующей странички, и решение действительно настолько удобное и правильно, что я не понимаю - как я сам не додумался? ;)

Поэтому опять - проверка на работоспособность. :)

0 comments »