среда, 13 августа 2008 г.

Синглтон в 3 строки

Сегодня показали интересную реализацию синглтона на питоне:

Read More...

понедельник, 11 августа 2008 г.

default параметр в getattr

В примере увидел интересный способ использования getattr. Третий необязательный параметр функции (getattr( object, name[, default])) - значение, которое будет возвращено, если атрибута с указанным именем не существует. Если использовать лямбду, которая делает "ничего" - lambda : None, то во многих случаях можно отказаться от использования дополнительной функции hasattr:

Read More...

пятница, 8 августа 2008 г.

Оператор with в Python

В прошлом посте я жаловался, что в Python мне не хватает чего-то похожего на C++-ные деструкторы, которые вызываются в любом случае для объекта созданного в стеке при выходе из области видимости, даже когда возникает исключение. В комментария, AQUAGNU упомянул оператор with, который в Python 2.5 был еще на "птичьих правах" (для его использования надо импортировать with_statement из модуля __future__), а в 2.6 стал зарезервированным словом.

Оператор with автоматизирует выполнение операций при входе в блок кода и при выходе из него не зависимо от того, было ли исключении при исполнении блока. Под операциями входа в блок и выхода из блока имеется ввиду, например, открытие и закрытие файла, залочивание и разлочивание при синхронизации. Это можно делать (как я раньше и делал) при помощи try/finally:
with все несколько упрощает:
Объект, который подается на вход with, называется менеджером контекста. У него должен быть реализован протокол менеджера контекста, состоящий из двух методов:
__enter__() - вызывается перед началом выполнения блока (контекста);
__exit__(type, value, traceback) - вызывается по завершению выполнения блока. Параметры, передаваемые ему, описывают исключение, если блок его сгенерировал.

В общем виде это выглядит так (взято отсюда):

В 2.5 версии контекст менеджерами могут выступать файлы, thread.LockType, threading.Lock, threading.RLock, threading.Condition, threading.Semaphore, threading.BoundedSemaphore. Применение with для Lock было показанное во втором примере. Для остальных случаев, прийдется реализовать протокол менеджера контекста или сделать адаптер:

Вот такой вот забавный оператор with.

PS: оказывается with был еще в делфи
PS2: дополнительно можно почитать здесь и здесь.

Read More...

вторник, 29 июля 2008 г.

Стартап: что мы делаем?

Прошло около 3-х месяцев как стартовал наш проект. Сегодня на хабре появилась первая информация о том, что мы делаем: Интеграция пользователей в социальный граф. Подход MetaID

Read More...

пятница, 11 июля 2008 г.

Любимая С++ фича

В своем посте My Favorite C++ Feature автор говорит, что его любимая фича в С++ - деструкторы. Согласен с ним в это на 100%, особенно вызов деструктора при выходе из области видимости. Использовать подобные конструкции мне доставляет прямо таки эстетическое удовольствие:

Это позволяет писать более читабельный код, не используя лишний раз try-catch. И это как раз то, чего мне сейчас не хватает в Python'e. Хотя, там есть деструкторы (__del__), но не факт, что он вызовется в нужный мне момент.

Кроме деструкторов, в С++ я обожаю шаблоны, но практика показывает, что использование шаблонов усложняет код и увеличивает время сборки проекта.

Вообще, тему С++ фич можно расширить - фичи с использованием С++. Здесь я могу назвать два своих самых любимых паттерна - smart pointer (как раз из-за деструкторов) и visitor (за возможность добавления новой функциональности иерархии классов без внесения изменения в их код и за возможность избежать использование dynamic_cast). А какие ваши самы любимые С++ фичи?

Read More...

четверг, 3 июля 2008 г.

Завязывайте вы с этим С++

Только что прочитал крик души бывшего С++ программиста - Язык имеет значение. Как-то все слишком складно получается - перешел на Haskell - получил 40% сэкономленного времени. А че ж никто не переходит? Никто что ли не слышал про него?

Может некоторые и "сцут". Но причина скорее всего не в этом. Ведь переходят же на другие языки, даж проекты портируют. Мне кажется, что в первую очередь дело в кадрах. Найти хорошего программиста очень сложно, а найти хорошего программиста на Хаскеле - практически нереально. Вот и пользуются тем, что есть. Оно то конечно - спрос рождает предложение, но пока хаскелистов днем с огнем не найдешь и спрашивать их не шибко будут. Все таки мы живем во взаимозависимом мире. А вы как думаете?

updated:
Вообще, это я как не программист считаю, а как программист я скорее согласен с повсеместным переходом на Хаскель (или другой язык, существенно экономящий время и приятным на ощупь :) Столкнувшись с Питоном, я оценил (и, думаю, в дальнейшем оценю еще больше), насколько он экономит время, по сравнению с С++, позволяет больше концентрироваться именно на том, что делаешь, а не на том как делаешь.

Read More...

среда, 18 июня 2008 г.

Поаутсорсить на Индию???

Сегодня мне звонил чувак (HR какой-то компании) аж из Индии и на довольно сносном русском предлагал поработать на них... Неужели я что-то пропустил и индусы уже нанимают украинцев?

Read More...