26 февр. 2010 г.

Стихоплетство - Расстрел

Прости меня за все, что было,
Прости за все, что не сбылось.
Ты сердце мне свое открыла,
Я влил туда лишь только злость.

Ты так хотела быть счастливой,
Я ж только радости хотел;
И наш союз нетерпеливый,
В конце концов перегорел.

Твоя душа, что раньше пела
И вечною весной цвела,
Углями черными сгорела,
Кошмарной копоти полна.

Случайно встретившись сегодня,
В глаза взглянув, я обомлел.
Там приговор из преисподней,
Там мера высшая - расстрел!

24 февр. 2010 г.

Свобода или ...?

Читаю Ефремова - Таис Афинская. Зацепил вот этот параграф:

У нас все просто: или свободен, или раб. Если свободен, то или богат, или беден: славен или искусством, или знаниями, воинской или атлетической доблестью. А у вас каждый свободный на какую-то ступеньку выше или ниже другого. Одному что-то позволено, другому меньше, третьему совсем ничего, и все преисполнены зависти, все таят обиду. Кажется, будто здесь только рабы, запертые между двух пустынь, как в большой клетке.
Ничего не напоминает?

23 февр. 2010 г.

Приемы выхода из стресса

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

Интересная все-таки наука - психология.

P.S.: Самый последний прием порадовал - "По возможности, активизация чувства юмора". Мне кажется, что если с чувством юмора все в прорядке, то стресс не страшен, в принципе:)

Фразы - панграммы

Панграмма - это фраза, в которой присутствуют все буквы алфавита. Для русского языка самая распространенная панграмма следующая:

Съешь же ещё этих мягких французских булок, да выпей чаю.

В поставке Windows для тестирования шрифтов была использована немного другая фраза (без частицы "же"):
Съешь ещё этих мягких французских булок, да выпей чаю.

Таким образом буква "ж" выпала из просмотра шрифтов:)

Самая известная панграма на английском языке следующая:
The quick brown fox jumps over the lazy dog

Кстати, если у вас есть Word 2007 наберите в нем =rand.old(3,3) и нажмите Enter. Easter Egg от Майкрософт.

Великая Оболганная Война

Знаю, что много букв, но прочитать советую. Ибо это относится почти ко всем современным фильмам о том времени. Вот: http://www.lgz.ru/archives/html_arch/lg502004/Polosy/art10_1.htm

22 февр. 2010 г.

Друзья

Сегодня в гости приезжали друзья по институту. Посидели, попили чаю.
Ребята простые, радобают на Дзержинских заводах инженерами. У обоих семья, скоро будут дети (у одного через неделю, у другого в июне). И вот сидели мы с ними и болтали. Просто болтали. Никто ничего не пытался вызнать, узнать что-либо. Никаких понтов или хвастовства. У всех какие-то хобби: один фотографирует, другой играет в футбол и пье вино.
И так мне это понравилось. Вспомнил молодость. Учебу в институте. Ту легкость в общении, которая была с ребятами (разумеется не со всеми). Мне кажется, что чем выше на социальной лестнице находится человек, тем сложнее с ним общаться. Конечно, правило выполняется не со 100% вероятностью, но чаще всего это так.

Трудности кодировок

Вчера вечером, совершенно неожиданно, пришла в голову мысль сделать кросспостинг этого блога в систему ВКонтакте.ру. Поскольку наработки у меня уже были, я решил, что это дело будет весьма легким. Но как я ошибался, кто бы знал.
Проблемы начались с парсинга RSS потока. В Питоне есть гениальная и простая библиотека feedparser. Все советуют ее использовать и по всему интернету разбросаны примеры ее использования. Но, есть один нюанс. Эта библиотека написана для версии питона 2. Я пытался ее сконвертировать для работы с третьей версией и она даже стала запускаться, но заглючила притащеная ей библиотека SGMLParser. Самое противное, что на сайте у этих ребят нигде не написано, что она предназначена исключительно для питона 2. Я был разочарован. В итоге пришлось побыстрому набросать свой собственный парсер на основе библиотеки minidom.
Дальше больше. Теперь у меня был прекрасно распарсеный RSS фид. Осталось самое малое - запостить его ВКонтакт. И вот тут меня ожидал еще один неприятный сюрприз. Фид у меня в кодировке UTF8, а ВКонтакт ожидает данные в формате CP1251 (дикие люди, весь мир уже давно перешел на UTF8). Это простое несовпадение кодировок, стоило мне многих часов упорного труда. В итоге, я лег в 5:30 утра, усталый и злой, так как не смог заставить питон посылать то, что мне надо (вернее в той кодировке, которая нужна).
Встав в 11 утра, я твердо решил добить этот вопрос. Вооружившись снифером и такой-то матерью, я вышел на бой с ненавистными кракозябрами. Теперь я в совершенстве знаю, как в Питоне представляются строки, байты, кодировки и как они посылаются на сайты в любых запросах. К двум часам дня, кодировки были побеждены.
Пришлось опять самому писать перекодирование (escaping) CP1251 символов для POST реквеста, так как стандартный Питоновский модуль нагло продолжал конвертировать мой текст в UTF8. Универсальность не всегда хороша, как оказалось.
Что в итоге: есть скрипт, который берет RSS фид этого блога, определяет появились ли новые статьи, и если появились, постит их ВКонтакт, убирая предварительно весь HTML (кстати стандартного striptags в Питоне тоже нет, пришлось искать сторонний - опять для питона 2 - и конвертить его для тройки).

Выводы:
1. Отпуск до добра не доводит
2. Питон 3 еще долго будет порабощать мир - слишком велик вес питона 2
3. Еще раз убедился, что документация для Питона бедновата
4. Справедливости ради стоит признать, что Питон - очень мощный язык

P.S.: На лекции по Питону в универе у меня прозвучала фраза: Анаконда написана на Питоне. Красиво:)

21 февр. 2010 г.

Красота перевода

Konstantin Simonov

Wait for me, and I'll come back!
Wait with all you've got!
Wait, when dreary yellow rains
Tell you, you should not.
Wait when snow is falling fast,
Wait when summer's hot,
Wait when yesterdays are past,
Others are forgot.
Wait, when from that far-off place,
Letters don't arrive.
Wait, when those with whom you wait
Doubt if I'm alive.

Wait for me, and I'll come back!
Wait in patience yet
When they tell you off by heart
That you should forget.
Even when my dearest ones
Say that I am lost,
Even when my friends give up,
Sit and count the cost,
Drink a glass of bitter wine
To the fallen friend -
Wait! And do not drink with them!
Wait until the end!

Wait for me and I'll come back,
Dodging every fate!
"What a bit of luck!" they'll say,
Those that would not wait.
They will never understand
How amidst the strife,
By your waiting for me, dear,
You had saved my life.
How I made it,we shall now,
Only you and I.
You alone knew how to wait-
We alone know why!

1941

translated by Mike Munford

Это прекрасно!!!

Интересная мысль

В сегодняшем Дилберте промелькнула интесная мысль:

Half of life is making people go away

Навевает филосовские размышления...

Простые сложности

Изучаю язык Пайтон на интуит.ру. С ужасом читаю описания некоторых конструкций языка. Такое ощущение, что автор сам не понял материал и поэтому нагоняет кучу тумана, чтобы другие не поняли, что он не понял.
Дабы не быть голословным, вот пример - описание функций генераторов:

Простые генераторы

Разработчики языка не остановились на итераторах. Как оказалось, в интерпретаторе Python достаточно просто реализовать простые генераторы. Под этим термином фактически понимается специальный объект, вычисления в котором продолжаются до выработки очередного значения, а затем приостанавливаются до возникновения необходимости в выдаче следующего значения. Простой генератор формируется функцией-генератором, которая синтаксически похожа на обычную функцию, но использует специальный оператор yield для выдачи следующего значения. При вызове такая функция ничего не вычисляет, а создает объект с интерфейсом итератора для получения значений. Другими словами, если функция должна возвращать последовательность, из нее довольно просто сделать генератор, который будет функционально эквивалентной "ленивой" реализацией. Ленивыми называются вычисления, которые откладываются до самого последнего момента, когда получаемое в результате значение сразу используется в другом вычислении.

Для примера с последовательностью Фибоначчи можно построить такой вот генератор:

def Fib(N):
a, b = 0, 1
for i in xrange(N):
yield a
a, b = b, a + b

Использовать его не сложнее, чем любой другой итератор:

for i in Fib(100):
print i,

Более извращенного описания простой концепции, я не видел. Кому интересно, про генераторы намного понятнее написано здесь (англ.).