Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2009-10-30

Потому что в кузнице не было гвоздя

Маршак:

Не было гвоздя -
Подкова
Пропала.
Не было подковы -
Лошадь
Захромала.
Лошадь захромала -
Командир
Убит.
Конница разбита --
Армия
Бежит.
Враг вступает в город,
Пленных не щадя,
Оттого, что в кузнице
Не было гвоздя.

world-art.ru/lyric/lyric.php?id=4382

А вот оригинал:

For want of a nail the shoe was lost.
For want of a shoe the horse was lost.
For want of a horse the rider was lost.
For want of a rider the battle was lost.
For want of a battle the kingdom was lost.
And all for the want of a horseshoe nail.

wikipedia.org/wiki/For_Want_of_a_Nail

Забавно, правда?

А еще забавнее, как я на это наткнулся. В MS Visual Studio, в его редакторе кода, нет явного способа удалять пробелы и прочие пробельные знаки в концах строк (при сохранении файла обычно это делается). Уж не найти редактора для программеров, где этой опции нет, а в виз.студии - нету!
Вообще, это позор.
Короче, я не поверив своим глазам, искал в инете способ удалять эти trailing spaces. И нашел: billfellows.blogspot.com/2009/05/strip-trailing-spaces-on-save-in-visual
И там же сцыль на стишок. Прикольно.
MS предлагает удалять лишние пробелы через вызов из меню редактирования команды переформатирования файла или выделенного участка. Код переформатируется согласно правилам (скобочки, отступы и проч.) и лишние пробелы удаляются. Вместе с тем форматированием, которое вы внесли от себя. Грубо.
Кстати, выбрать символы табуляции вместо набора пробелов для отступов, также - невозможно.
Ужоснах а не редактор.

2009-10-29

Запрет на дневной показ повысил популярность шоу

Тут на днях запретили "Дом 2". Ну не совсем, это было бы как-то недемократично. А просто перенесли на позднее время. Ночью показывают. Привело это к неожиданному (для идиотов) результату:

...доля ее аудитории выросла в два раза.
Целевой аудиторией шоу, по данным телеканала, являются молодые люди в возрасте от 18 до 30 лет. Тем не менее, какой была доля аудитории до введения запрет и после, в пресс-релизе не уточняется. Как пишет в номере от 28 октября газета "Коммерсант", в последний день, когда шоу транслировалось днем, его посмотрели 17-19 процентов зрителей этой категории.

Перенос шоу на ночное время состоялся 21 сентября. В ночь на 22 октября доля его аудитории в целом по России выросла до 23 процентов, а в Москве - до 28 процентов. При этом особый интерес к программе проявила женская часть целевой аудитории, отмечает издание. Так, доля женщин 18-30 лет, смотревших передачу в ночь на 23 октября, составила рекордные 55 процентов.

Кроме того, программой заинтересовались зрители, находящиеся вне ее целевой аудитории. Начиная с 21 октября, доля зрителей старше 55 лет, смотревших передачу после полуночи, выросла с прежних 10 процентов до 17 процентов.



lenta.ru/news/2009/10/28/dom2

Вы все еще хотите что-то запретить?


Забавно, 10 заблуждений, выносимых буржуями из школы. Доставляет.

2009-10-28

Разные MTU и блокирование ICMP

Вот уж вечные проблемы. Старый, добрый ну-просто-повсеместно распространенный TCP/IP. И до сих пор лезут проблемы.

Суть технологии состоит в том, что
когда два хоста соединяются друг с другом, то устанавливается DF бит
"Dont Fragmen"), который запрещает фрагментацию пакетов на роутерах.
Это заставляет роутер, который собирается перенаправить пакет через
соединение с MTU меньше размера пакета, отбрасывать пакеты и
отправлять хосту-отправителю сообщение типа ICMP 3:4. Данное сообщение
типа "Destination is unreachable" означает "Хост недоступен, поскольку
пакет слишком большой и роутер не будет его фрагментировать". В
добавлении к данному сообщению, при применении PMTUD, прилагается
размер MTU нижестоящего за роутером участка. Таким образом,
хост-отправитель, после получения ICMP 3:4 с информацией от PMTUD,
уменьшает размер отправляемого пакета и пересылает его заново. Как
итог -- пакеты доходят до хоста-получателя без фрагментации.

Все операционные системы с 1988 года поддерживают технологию PMTUD.
Однако, проблема может быть в том, что либо вышестоящий над вашим
соединением роутер, либо некий роутер между вами и удаленным сервером,
либо сам удаленный веб-сервер могут БЛОКИРОВАТЬ некоторые типы ICMP
пакетов, включая ICMP 3:4. В этом месте хочется передать привет
параноидальным администраторам -- НЕ ДЕЛАЙТЕ ТАК, НЕ БЛОКИРУЙТЕ ICMP
трафик! Как итог - соединение между хостами устанавливается, но пакеты
от одного хоста к другому не доставляются, отбрасяваясь где-то по
пути... Похоже на наши симптомы?

Собственно проблема не нова, ее начали обсуждать еще в 1998 году.
Называется она Path MTU Discovery Black Hole, и описана в RFC 2923.

По сути, потенциально этой проблеме подвержено любой PPPoE соединение,
поскольку его MTU меньше типового MTU в 1500 байт и, для прохождение
через PPPoE, TCP/IP пакет необходимо либо фрагментировать, либо
использовать PMTUD.

В тоже время, если у вас обыкновенная машина с DSL модемом, вы не
столкнетесь с этой проблемой, поскольку на этапе инициализации
соединения с удаленными серверами размер пакета будет вычислен исходя
из размера MTU PPPoE соединения.

Однако, если у вас DSL роутер (например как у меня, на базе линукса),
то вы в зоне риска, поскольку ваша машина, при установлении соединения
с удаленными серверами, по умолчанию оперирует размером пакета исходя
из MTU локальной сети, которое установлено в 1500. В тоже время,
пакеты от удаленных серверов к вам проходят через канал роутера,
который имеет MTU PPPoE соединения, т.е. 1492...


opennet.ru/base/net/pppoe_mtu

Вот уж действительно, не надо блокировать ICMP. А не будешь блокировать - легко зафлудят. Что делать, куда бежать? Интересно, какие проблемы будут в версии 6 IP?


Сцылки дня:

2009-10-27

two weeks notice

Это по по ихнему фильма так называется. Или, в нашем прокате, Любовь с уведомлением.
Это фильма такая. Очень симпатичная, если не анализировать. Милый такой дамский роман по типу Золушки. Хотя не совсем. В общем, стоит посмотреть. Хороший отдых.

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


Сцылки дня:

2009-10-25

The following packages have been kept back

gpac{a} libogmrip0{a} mencoder{a} mjpegtools mplayer{a} ogmrip transcode tzdata

Это мне манагер пакетов дебианчика намекает, что не все ладно в датском королевстве. Коллективный разум рекомендует воспользоваться опцией dist-upgrade при обновлении системы, типа
aptitude update
aptitude dist-upgrade

Только в моем случае это проблемы не решает. Хотя, говорят, обычно помогает.
В моем же случае пришлось снести под корень конфликтные пакеты:
aptitude purge ogmrip
aptitude purge tzdata-java
aptitude purge mjpegtools
aptitude purge mencoder
aptitude purge mplayer
aptitude purge mplayer-nogui
aptitude purge smplayer

Потом, правда, пришлось вернуть smplayer, ибо кино смотреть я привык в нем. А когда я устанавливаю его из репозитория debian-multimedia, обратно конфликт. Потому как мультимедийная сборка хочет библиотек, которых в ленни еще нету (видимо и не будет). Да и ладно, работает ведь плеер, что и требуется, в конечном-то итоге.

2009-10-24

Сразу видно, кто из ху

Вот как так можно с людями? Как люди позволяют так с собой?
Или это уже и не люди, а паства? Стадо?
Зато честно, сразу видно, что почем.



Слил отсюда:
http://s.lurkmore.ru/images/2/29/PGMfat.jpg

А в то же время...

У меня, судя по тесту insightin.com/test
словарный запас буржуйского весит 8200 слов. Это при том, что словарный запас я и не развиваю. Прикольно.


Сцылки дня:
Дима Вернер, человек и "анекдот.ру".

38 попугаев

Вот засада: карта трубопровода в географических координатах (Geodetic Coordinates), ну там Latitude, Longitude. Градусы. А длина труб нужна в метрах.
Крутой геософт вроде как считает длины и автоматом заполняет колонку в БД, именованную "длина", но, бяка такая, как и положено роботу, заполняет по тупому - в градусах. Длина труб в градусах. Фигня какая.

Хорошо, что БД лежит в Оракле. У Оракла есть документация и в ней написано: используйте метод

SDO_GEOM.SDO_LENGTH(
geom IN SDO_GEOMETRY,
tol IN NUMBER
[, unit IN VARCHAR2]
) RETURN NUMBER;

если вам длину надо. А необязательным параметром "юнит" укажите единицы измерения.
Обожаю СУБД ораклевую.
Интересно, в постгре также легко задачки решаются?

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

select hm.arcnum, SDO_GEOM.SDO_LENGTH(hm.geom, 0.00001, 'unit=M') ln
from tgk.heatmain hm
where hm.arcnum=3;

И получаю в колонке 'ln' то, что надо.

6.1.1 Coordinate System (Spatial Reference System)

A coordinate system (also called a spatial reference system) is a means of assigning coordinates to a location and establishing relationships between sets of such coordinates. It enables the interpretation of a set of coordinates as a representation of a position in a real world space.

The term coordinate reference system has the same meaning as coordinate system for Spatial, and the terms are used interchangeably. European Petroleum Survey Group (EPSG) specifications and documentation typically use the term coordinate reference system. (EPSG has its own meaning for the term coordinate system, as noted in Section 6.6.11.)
6.1.2 Cartesian Coordinates

Cartesian coordinates are coordinates that measure the position of a point from a defined origin along axes that are perpendicular in the represented two-dimensional or three-dimensional space.
6.1.3 Geodetic Coordinates (Geographic Coordinates)

Geodetic coordinates (sometimes called geographic coordinates) are angular coordinates (longitude and latitude), closely related to spherical polar coordinates, and are defined relative to a particular Earth geodetic datum (described in Section 6.1.6). For more information about geodetic coordinate support, see Section 6.2.
6.1.4 Projected Coordinates

Projected coordinates are planar Cartesian coordinates that result from performing a mathematical mapping from a point on the Earth's surface to a plane. There are many such mathematical mappings, each used for a particular purpose.
6.1.5 Local Coordinates

Local coordinates are Cartesian coordinates in a non-Earth (non-georeferenced) coordinate system. Section 6.3 describes local coordinate support in Spatial.
6.1.6 Geodetic Datum

A geodetic datum (or datum) is a means of shifting and rotating an ellipsoid to represent the figure of the Earth, usually as an oblate spheroid, that approximates the surface of the Earth locally or globally, and is the reference for the system of geodetic coordinates.

Each geodetic coordinate system is based on a datum.
6.1.7 Transformation

Transformation is the conversion of coordinates from one coordinate system to another coordinate system.

If the coordinate system is georeferenced, transformation can involve datum transformation: the conversion of geodetic coordinates from one geodetic datum to another geodetic datum, usually involving changes in the shape, orientation, and center position of the reference ellipsoid.


oracle.com/docs/.../sdo_cs_concepts


Сцылки дня:
Собрание сочинений Алексея Федорчука, популизатора линукса.

2009-10-23

Поколение М

Это не я придумал, это Ходорковский придумал. На мой взгляд, название неудачное. А изложенное мнение вполне даже удачное. Практически согласен.

... если политическое решение о модернизации в сегодняшней России будет принято, то кто будет осуществлять эту модернизацию?

Коррумпированная часть бюрократии и примыкающие к ней бизнес-группы — уже понятно, что нет. Это Медведев признал.

Силовая элита — тоже нет. Она предназначена охранять, но не создавать. Все попытки совмещения этих несовместимых задач не шли на пользу ни функции охраны, ни функции созидания.

Абсолютно понятно: модернизацией не может заниматься один лидер, пусть даже самый сильный, если ему не на кого опереться. Модернизацию не могут осуществить одиночки. Это дело непосильно для сотен и пусть даже тысяч его союзников из бюрократического лагеря.

На мой взгляд, для осуществления настоящей модернизации необходим целый социальный слой — полноценный модернизационный класс. Для которого модернизация страны есть не фиктивная кампания, спущенная сверху, а вопрос выживания, самооформления в собственной стране и, если угодно, вопрос постепенного прихода к власти. Суммируя и обобщая исторический опыт различных модернизаций, можно утверждать, что численность модернизационного класса должна составлять не менее 3% трудоспособного населения. То есть в нашем случае — не менее 2 млн человек.
...
Модернизаторами России могут быть люди только созидательного, а не паразитически-распределительного типа мышления. К сожалению, в последние годы элиты и властная машина способствовали в основном возвышению последних и удалению первых.

Эту общность, способную стать коллективным модернизационным субъектом, назовем условно поколением модернизации — «поколением М».

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


vedomosti.ru/newspaper/print/2009/10/21/216863

2009-10-22

LISP

Изумительный по полезности пост. Как написать бота на лиспе за час, с нуля. Просто свет в массы! Всем, кто не умеет программировать но хочет научиться - фтыкать обязательно.

Если же у Вас есть свободная пара часов и желание научиться писать таких роботов самостоятельно — читайте дальше. Я расскажу как. От Вас потребуется знание компьютера на уровне продвинутого пользователя и определённая сила воли, чтобы напрягать в течение этих двух часов свой мозг. Писать робота, кстати, мы будем на LISP.

Почему именно на LISP?

Потому что есть определённая иерархия программистов.

VBasic, PHP: гопники
Perl, Python: гастарбайтеры
C/Cpp: рабочий класс, мужики
Assembler: инженеры
LISP: элита


fritzmorgen.livejournal.com/248335

Жаль, самые трудные для понимания места программы, ближе к концу, остались неразжеванными. Видно автор подустал. Ну да ничего, можно рассматривать как домашнее задание.

Помню, в ВУЗе я писал лабы на лиспе под AutoCAD. Тогда он был версии 10. Под DOS.
Кстати, EMACS тоже программируется на лиспе, дедушке функциональных языков.


Сцылки дня:

2009-10-21

Разомни

Всем компьютерным засидельцам - читайте этот стишок не менее трех раз в день:



Дернул отсюда:
meta-delo.blogspot.com/2009/08/office-training


Сцылки дня:

2009-10-20

Adobe AIR 2.0

Прочел список возможностей (далеко не полный, о как) и сразу захотелось влиться в ряды эйр-девелоперов. Оченно соблазнительно:

Возможность запуска внешних приложений - да, теперь можно будет инициировать открытие приложений из AIR, например, если вы работаете с документами Word или Excel, то сможете предоставить пользователю возможность напрямую из приложения открыть файл в его родной программе

Родные инсталляционные пакеты для приложения. Если раньше ваша программа паковалась в независимый от платформы формат *.air (очень схожий с jar), то теперь можно создавать нативные приложения для каждой платформы (вопрос остается открытым - будет ли возможность создать независимый дистрибутив, когда в пакет включена и сама среда AIR). Конечно, вариант с air-пакетом также останется.
Расширенные возможности работы с файлами и интеграция с десктопом - FilePromise, URLFilePromise, что позволит работать с файлами и переносить их между приложением и ОС (по сути, возможность указать URL или файл как доверенный и обработать в приложении, потом передав ОС).

Расширенная работа с сокетами. Это, пожалуй, самое важное и ожидаемое нововведение - создание серверных сокетов, чего ранее не умел делать Flash, зато сможет AIR

Прямой доступ к микрофону и аудио-потоку. Эту возможность ожидали очень многие! Теперь записывать звук с микрофона можно без обязательного участия удаленного сервера, получая доступ к сырым данным потока в виде PCM ByteArray. Данные можно сохранять в wav-файл и проигрывать из приложения. В принципе, возможно и прямое кодирование в другой формат.

Встроенная СУБД получает расширенную поддержку транзакций и точек сохранения. Для этого вводятся новые функции savepoints(), setSavepoint(), releaseSavepoint() и rollbackToSavepoint().

Максимальный размер окна приложения теперь расширен до 4095x4095 пикселей, что позволяет запускать AIR-приложения на больших экранах и использовать всю доступную площадь. Также добавлена поддержка сенсорных экранов и multi-touch.

Поддержка мобильных приложений. Да, да, ДА! Можно создавать мобильные приложения, в том числе и для iPhone - и это будут родные приложения для платформы от Apple

# Обновленный движок рендеринга Webkit (такой же, как в Safari 4 beta), теперь позволяет:
* использовать самый быстрый движок JavaScript - SquirrelFish Extreme (со множеством оптимизаций, включая полиморфное кеширование и облегченный JIT компилятор)
* CSS трансформации (CSS Transformations)
* CSS Transitions
* CSS анимация (CSS Animations)
* градиенты (CSS Gradients)
* Быстрый Selector API для доступа к DOM-узлам (Webkit CSS selectors)


abrdev.com/?p=1014

2009-10-18

Дорожное

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

Камеры поставили на тестовую эксплуатацию.Камеры стали сыпать штравами. Причём не взирая на чины и награды. БОЛЬШИМ людям стали приходить штрафы. А прикрыть такой штраф не легко — там всё автоматизировано и просто замолчать не получается — приходится шишек разных из срааного превышения привлекать. Всю местную ГИБДД поставили в непристойную позу. Сначала решили написать фильтр, чтобы "свои" номера не штрафовать. Не получилось. Во–первых. своими оказались не только БОЛЬШИЕ люди, но и их дети, любовницы, племанники и т.п. А визитку с подписью камере не покажешь. А во–вторых, там ещё система отслеживающая угнаные авто стоит. И оказалось до безобразия много машин с неправильными/просроченными документами, числящихся в угоне, с несовпадающей маркой машины и т.п, да ещё и зарегистрированные непонятно на кого. Представляете, как одино БОЛЬШОМУ человек, когда к нему приходят и заявляют, что таможенная пошлина с его машины не уплачена, и пени набежало на две такие машины? Или, что его машина числится в розыске? Короче опять вздючили всех и вся. Посадили человечка вручную фильтровать всю информацию. Но! Во–перых, толку с камер ноль стало, т.к. человечек одну десятую информации успевает просмотреть. А во–вторых человечек всё равно ошибается и не то пропускает (ну, невоможно всех блатных "в лицо" знать). И человечка дрючат и увольняют раз в месяц — расстрельная должность, самоубийц на ней работать нет.

yosha-orlow.livejournal.com/245503


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

2009-10-17

Wheel

Некоторые понимают это как "круг доверия". Ну, как мнемоническое правило - сойдет. Всем (юниксоидам) известно, что работать надо на компе под учеткой непривилегированной, рядового пользователя. Но иногда надо выполнить действие, требующее прав админа, рута. Ну, типа апдейт системы запустить или еще чего. Для этого все используют средство su или sudo. Я лично предпочитаю su, хотя это и не приветствуется спецами по безопасности. Да, так опаснее, но лично мне удобнее.

Если система многопользовательская, в смысле - действительно многие пользуются, то есть шанс, что командой su воспользуется тот, кому не положено. Всякое бывает, не правда ли? Чтобы снизить вероятность этого печального события, добрые люди придумали концепцию "вил" - wheel. Это группа такая, кто в ней есть, тому можно использовать su. Остальным - нельзя. Сама команда su может содержать внутреннюю поддержку этой группы.

Но это все не очень интересно. Интересно то, что в BSD вилы поддерживаются полностью и включены, а в линуксовых дистрах и многих коммерческих дистрибутивах юникса - нет. Даже если поддержка есть, то она не включена по умолчанию, надо дополнительно кнопки давить, чтобы включить поддержку вил.

Why GNU `su' does not support the `wheel' group
===============================================

(This section is by Richard Stallman.)

Sometimes a few of the users try to hold total power over all the
rest. For example, in 1984, a few users at the MIT AI lab decided to
seize power by changing the operator password on the Twenex system and
keeping it secret from everyone else. (I was able to thwart this coup
and give power back to the users by patching the kernel, but I wouldn't
know how to do that in Unix.)

However, occasionally the rulers do tell someone. Under the usual
`su' mechanism, once someone learns the root password who sympathizes
with the ordinary users, he or she can tell the rest. The "wheel
group" feature would make this impossible, and thus cement the power of
the rulers.

I'm on the side of the masses, not that of the rulers. If you are
used to supporting the bosses and sysadmins in whatever they do, you
might find this idea strange at first.


administratosphere.wordpress.com/2007/07/19/the-wheel-group

Ричард наш Столлмен не хочет поддерживать вилы, потому как он на стороне масс, не правителей. Ему не нравится, когда у людей нет возможности завладеть привилегиями рута.
Такие дела.


Сцылок дня сегодня нет.

2009-10-15

Телефон

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

Смена симки в салоне-магазине занимает пару минут. "Я хочу симку поменять", - "Ваш паспорт и номер телефона?", - "вот-с...". - "Вот ваша симка, всего хорошего".


Сцылки дня:

эмтиэс, паразитен

Сегодня сдох телефон. С утра еще работал, а к вечеру - "поиск сети", "нет сети". Я его и выключал, и батарейку вытаскивал, и симку протирал , и по колесам пинал и стекла протирал.
Ничего не помогает. Поставили в тел (коммуникатор) другую симку - прекрасно работает, значит, железка в порядке. Поставили симку в гарантированно исправный тел - "поиск сети", "нет сети".

Симка умерла. Пойду завтра в офис МТС-а, менять. Заодно и роуминг включу, на всякий случай.
Симка старая, уж более пяти лет, наверно.

Завтра вставать в 7 утра. Невероятно.

2009-10-14

Advanced Message Queueing Protocol

Передача сообщений, очереди сообщений, асинхронная передача сообщений, гарантированная передача сообщений - ну просто как музыка!
AMQP - протокол. А RabbitMQ это брокер (сервер) обслуживания очередей сообщений.
Очень полезно и очень интересно.

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

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

1. Сообщение (message) — единица передаваемых данных, основная его часть (содержание) никак не интерпретируется сервером, к сообщению могут быть прицеплены структурированные заголовки.
2. Точка обмена (exchange) — в нее отправляются сообщения. Точка обмена распределяет сообщения в одну или несколько очередей. При этом в точке обмена сообщения не хранятся. Точки обмена бывают трех типов: fanout — сообщение передается во все прицепленные к ней очереди; direct — сообщение передается в очередь с именем, совпадающим с ключом маршрутизации (routing key) (ключ маршрутизации указывается при отправке сообщения); topic — нечто среднее между fanout и exchange, сообщение передается в очереди, для которых совпадает маска на ключ маршрутизации, например, app.notification.sms.* — в очередь будут доставлены все сообщения, отправленные с ключами, начинающимися на app.notification.sms.
3. Очередь (queue) — здесь хранятся сообщения до тех пор, пока не будет забраны клиентом. Клиент всегда забирает сообщения из одной или нескольких очередей.
...
Я его использовал для рассылки сообщений всем серверам кластера (fanout exchange) и организации аналогов “почтовых ящиков”, в которые доставляются сообщения, адресованные определенным клиентам (direct exchange). Для получения сообщений нет необходимости опрашивать сервер, достаточно подписаться на сообщения из очереди, и сервер передаст их в тот момент, когда они появятся.

В качестве клиентской библиотеки я выбрал библиотеку txAMQP для Twisted Framework (Python). ... В AMQP и вокруг AMQP есть много интересного и перспективного. К примеру, брокер RabbitMQ умеет масштабироваться и работать в едином кластере.


habrahabr.ru/blogs/webdev/62502


Сцылки дня:
сравнение CMS-ок, сделанных на Django. Между собой.

2009-10-13

buildout, not buildout

главное - у кого ружье.

А сегодня, дети, я расскажу вам сказку.
В стародавние времена Plone был как все нормальные программы, самостоятельный. Но прошло время и добрые люди решили, что негоже ему быть как все, пусть будет одним из пакетов Python. А чтобы стало еще загадочнее, сотворили чудо чудное, диво дивное, buildout имя ему. И под этим соусом поменяли раскладку файлов и каталогов у Плона, так, что обновить старые версии по простому можно только до 3.2. Сам 3.2 уже на билдауте.

И написали люди добрые инструкцию, в которой рассказали, как можно превратить Плон старый в Плон новый, хороший, годный. Только допустили маленькую неточность. В инструкции сказано - "скопируйте ваш Data.fs из старого инстанса в новый". А на самом деле, рабочий вариант - "сделайте экспорт вашего сайта в файл bla.zexp и импортируйте его в новый инстанс".

И будет вам щасте.

Привожу проверенный мною алгоритм превращения не-билдаута в билдаут:

1. сделать резервную копию, полную (старого плона).
2. сделать экспорт сайта в файл зексп.
3. остановить зопу.
4. установить в отдельный каталог диска версию 3.3.1 (в смысле, билдаутную).
5. пофиксить окружение и скопировать нужные (свои, нестандартные) расширения, продукты, плагины
(из старой версии в новую).
6. запустить новую зопу.
7. добавить необходимых пользователей в корень зопы.
8. импортировать сайт (из файла зексп).
9. мигрировать сайт до текущей версии.
10. проверить все.
11. использовать вилдаут для последующих обновлений,
с шагами 5,9,10 после успешного билдаута и шагом 1 до билдаута.


Сцылки дня:

2009-10-12

Мосдума

Сегодня были выборы. Вроде как в городскую думу. Я не ходил, лень было. Лень пораньше встать и переться через весь город (3 часа на дорогу) к избирательному участку.
Вот почему бы избиркому не усовершенствовать малость нынешнюю технологию выборов? Надо то всего, добавить централизованную регистрацию проголосовавшего. Сейчас в бумажке на участке расписываешься и там будешь на бумажке расписываться, только еще запись в БД пойдет, что пришел, бюль взял.

Чтобы я мог появиться на любом из избирательных участков и выдав автограф, получить свой бюллетень. Примитивная БД и терминалы к ней на участках. Достаточно просто и легко. Почему нет?
Хотите, я сам сделаю? Занедорого.

А вообще, как-то нечувствительно эти выборы прошли, никто не старался, даже не имитировали демократию.
А оно и верно, к чему она, демократия? Я могу назвать не слишком много вопросов, ответ на которые имеет смысл спрашивать у демоса. Например, - какие передачи ставить в программу зомбоящика на следующий сезон.

2009-10-10

Быдлокодер?

Забавно, выпал на статью о Экслере в луркморе, оттуда вышел на быдлокодера и уже там прочел замечательное:

Одним из признаков быдлокодера является часто употребляемое слово "функционал", в контексте "у моей программы вооот-такой функционал". Быдлокодер не учил матан и не знает что функционал это "функция, определённая на множестве функций со значениями обычно в вещественных числах".

Просто замечательно.

Меня уже давно, мягко говоря, задирает употребление слова "функционал" там, где по логике должно быть слово "функциональность" или другие его синонимы.

Не могу понять причину, по которой из языка пропадает "ьность".


Сцылки дня:
Aspen Interactive Movie Map, 1979 год, фактически Street View. Нафоткали улицы Аспена и засунули в сенсорный экран, 1979 год. Фантастика!

Прослойка

Заманчивая идея обернуть БД в интерфейс, удобный именно вам. Сколько проектов, столько велосипедов.

...
А разработчику не очень важно знать, как именно организована структура хранения данных на уровне SQL (структура для хранения данных реализована в виде самих данных, реализована стандартными средствами СУБД или смешана). Он оперирует понятиями объект-атрибут. Предметную область в этом случае можно представить графом. Помимо стандартных характеристик объекта (атрибуты (информация), связи) у терминологического поля имеются:
1. можно организовывать не только связи, но и взаимодействия (триггеры);
2. маршруты графа (замкнутые, незамкнутые, часто меняются);
3. отказ от необходимости знать, как выглядят SQL-таблицы на самом деле;
4. методы (добавить пользователя, отправка письма по почте, а в другой объект что-то добавить).

Объектная модель

Объектная модель должна позволять выбрать множество A по известным параметрам B: A(B). Вот несколько практических примеров:

* список пользователей, у которых возраст > 20: user(user.age>20);
* список подарков у пользователей с возрастом более 20: gifts(user.age>20).

В чем особенность этой модели? Разработчику необязательно знать, как связаны объекты «Пользователь» и «Подарок». Ему достаточно описать требуемую бизнес-логику в каком-то виде (API, предоставляемый системой), а сервер сам построит необходимые связи и выдаст нужный результат.
...
Для реализации такой модели создается так называемый объектный сервер. Это самостоятельно приложение, которое имеет некоторые интерфейсы для взаимодействия с другими приложениями. Объектный сервер знает о своих компонентах и сам определяет, какую именно у него запросили информацию. Клиентское же приложение, в котором разработчик описывает свои запросы к базе, не знает структуру базы, но имеет механизмы, которые позволяют запрашивать требуемую информацию у объектного сервера.
...


habrahabr.ru/blogs/webdev/71279


Сцылки дня:
Письма президенту

2009-10-09

Почему я не люблю верстку

В смысле верстку страниц HTML. И CSS не люблю.
Я сегодня совершил подвиг.
Среди 2500 (да, две тышшы пицот!) строк кода хтмл я нашел и исправил багу, связанную с версткой.

Было
< span class="kupu-tb-buttongroup" style="float: right" id="kupu-zoom" >
Стало
< span class="kupu-tb-buttongroup" id="kupu-zoom" >

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

Ну и как вот после этого относиться к верстке? Ну вот какой м. придумал такую сложную модель контейнеров и боксов? Ведь факт, можно ж проще. Повбывал бы.

Поделюсь методом нахождения баги. Метод прост как брюква.
Выкидывайте блоки кода крупными кусками, пока не обнаружите, что бага пропала. Верните последний кусок обратно и выкидывайте мелкие куски кода, пока бага опять не пропадет. Верните последний кусок и выкидывайте еще более мелкие куски... и так до полного удовлетворения.


Сцылки дня:

2009-10-08

zcml

До чего все не просто устроено в плоне. Сегодня пытался узнать, почему в стандартной шкуре плона элемент breadcrumbs находится в блоке шапки а в шкуре нестандартной эти бредкрамбсы находятся в блоке контента.
Узнал.

Бредкрамбсы - это viewlet, расклад вьювлетов в стандартном шаблоне определяется файлом zcml
Plone\buildout-cache\eggs\plone.app.layout-1.1.8-py2.4.egg\plone\app\layout\viewlets\configure.zcml
Например, для бредкрамбов там так написано:
<browser:viewlet
name="plone.path_bar"
manager=".interfaces.IPortalTop"
class=".common.PathBarViewlet"
permission="zope2.View"
/>

а в моей нестандартной теме есть файл
Plone\parts\instance\Products\vePloneTheme\browser\viewlets.zcml
в котором написано:
<browser:viewlet
name="vePloneTheme.path_bar"
manager="plone.app.layout.viewlets.interfaces.IContentViews"
class="plone.app.layout.viewlets.common.PathBarViewlet"
layer=".interfaces.IThemevePloneTheme"
permission="zope2.View"
/>

Разницу видно? У них разный менеджер, суть - блок, в котором будут отрендерены мои бредкрамбсы.

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

Магия.


Сцылки дня:
система документооборота Naudoc (на базе Zope, отечественная!)

2009-10-07

Plone upgrade

Удобная штука, Plone buildout.
У меня был установлен плон 3.2 и по неизвестной мне причине, я не смог установить на него замечательный продукт для поддержки мультиязычных сайтов (LinguaPlone).
Дай, думаю, апгрейдну плон до наисвежайшей версии и посмотрю, что будет. Процедура апгрейда, благодаря билдауту, проста до безобразия.

Остановить плон (bin/plonectl stop).
Сделать резервную копию всего каталога (на аварийный случай).
Прописать в buildout.cfg правильную строчку, в моем случае
extends = http://dist.plone.org/release/3.3.1/versions.cfg
Запустить bin/buildout -v
Стартовать плон (bin/plonectl restart).
Нажать кнопу "upgrade" в разделе portal_migration в ZMI.
Аллес.

Все само качнется из тырнета и установится. Минут 10-15 на не самом хорошем канале (менее мегабита).

А потом, с помощью того же билдаута, влегкую установился и LinguaPlone.
Ура, заработало.


А для редактора jEdit (проверил, хорошая штучка) рекомендую установить плагины "whitespaces" и "console". Первый позволяет удалять завершающие пробелы в строках (и не только). Второй позволяет не выходя из редактора запустить редактируемый скрипт (и не только). Поддержка разных кодировок символов - на недосягаемой высоте.


Сцылки дня:

2009-10-06

Вид поиска или подписка на новости по теме?

В любом случае, мысль толковая. Человек выбирает то, что его интересует и бот потом уведомляет о новинках в выбранном.

… Надо дать ему возможность оставить свои пожелания, и по мере поступления новых книг, производить все новые и новые поиски – до тех пор, пока нужные книги не будут найдены.

В качестве основы, как можно догадаться, используется все тот же быстрый поиск, который перебирает все поисковые слова, введенные пользователями, и формирует таблицу результатов. ...
После этого почтовый робот рассылает e-mail уведомления: «Здравствуйте, по вашему запросу найдена новая книга…»

С точки зрения пользователя все выглядит весьма удобно: достаточно один раз ввести свои запросы, а потом тебе на почту приходят сообщения. Как говорится, «мы работаем, чтобы вы отдыхали». :-)


habrahabr.ru/blogs/webdev/70656

Я бы не стал называть это поиском. Скорее "у нас есть новости по интересующей вас теме".

2009-10-04

jEdit

Сколько программеру надо текстовых редакторов? У меня в фаворитах один (SciTE), пользуюсь им постоянно. Но, поскольку он универсален, определенно есть специализированные инструменты для конкретных задач. Так, для Python я использую клипсу с плагином PyDev, для PHP - студию от Zend, для HTML - дримвивер макромедийный, ну и так далее.

Но ведь не задавить стремление к совершенству (или к новому?). Сегодня попался на глаза текстовый редактор, мне лично не знакомый. jEdit.
Судя по описанию - вкусняшка.
Качаю, буду смотреть.


Сцылки дня:

«Попробуйте не разговаривать, а писать. Реакция на бумагу потрясающая!!! Жалоба, докладная записка, заявление... Бумага на каждый чих. И спокойно, спокойно: „Когда Вы дадите мне ответ? Зарегистрируйте мой документ. Дайте входящий номер. Вы же не хотите, чтобы я с этим шла в РУНО, отдел соцзащиты и т.п. Крёстная моего ребенка журналист, хочет сделать репортаж о нашей школе“. (Все в таком духе).

У учителей неплохая зарплата. Они держатся за свои места. Младший обслуживающий персонал, если он хамоват, чудно ведется на: „Вы бога не боитесь? Я вам здоровья пожелаю и свечку за вас поставлю“. Как правило, страшно боятся сглаза.

Это мы, мышицы

Мультик про кота Леопольда, когда мыши попали на рентген. Их ответ на вопрос - "а это что такое?" был - "а это мы, мышицы".

Оказывается, мышечный корсет, вернее его слабость, отвечает за боли в спине:

...
Причина болей в спине по Бубновскому: у человека есть ГЛУБОКИЕ мышцы (они расположены столбом круг позвоночника). Они осуществляют питание межпозвонковых дисков и нервных корешков (доставляют туда влагу). Происходит нарушение работы этих мышц (либо в результате травмы, когда происходит мышечный спазм, либо в результате сидячего образа жизни, когда они постоянно находятся в напряженном состоянии). Итак, в результате нарушения питания высыхает фиброзное кольцо и прорывается грыжа. Однако это ничем вам не грозит, так как сама грыжа не содержит нервных окончаний и задеть корешок не может. Также из-за недостатка влаги происходит воспаление нервного корешка, появляются ноющие в любом положении боли, как правило в голени (могут и в бедре и в спине).
Есть такое понятие, как мышечная память. Она длится 2 суток. Мышцы помнят, как расслабляться. Поскольку при сидячем образе жизни (компьютер, телевизор и т.д.) мышцы спины постоянно напряжены, к тому же ослаблены, в один прекрасный момент вы делаете неловкое движение, ГЛУБОКИЕ мышцы спазмируются и не расслабляются.
СМЫСЛ ЛЕЧЕНИЯ У БУБНОВСКОГО - РАССЛАБЛЕНИЕ ГЛУБОКИХ МЫШЦ. Расслабление и нормализация их работы -> нормализация питания позвоночника и нервных корешков -> исчезновение болей и уменьшение грыжи (специальные клетки - фагоциты - удаляют ненужные организму ткани), однако большая грыжа полностью не исчезнет, вы можете рассчитывать на уменьшение в два раза. Однако это не имеет большого значения, так как сама грыжа никаких болей не причиняет.
Если у вас заметный невооруженным глазом перекос - вам прямая дорога к Бубновскому. Схема подача-снятие нагрузки (т.е. тренировка на тренажерах) постепенно приводит их в расслабленное состояние.

НУЖНО ОЧЕНЬ ХОРОШО УЯСНИТЬ: чтобы вы не делали - блокады, операцию по удалению грыжи, карипазим - без поддержания глубоких мышц в нормальном состоянии мышечные спазмы рано или поздно повторятся. у кого-то через пол-года, у кого-то через 5 лет.
...


spinet.ru/conference/post4450

Вообще, эта теория вполне соотносится с разными другими "нетрадиционными" взглядами на причины заболеваний. Например, методика Бейтса для глаз опирается на тот же базис. Базис прост до очевидности: в теле нет ничего лишнего и все это надо поддерживать в хорошей форме, регулярно давая умеренные нагрузки. И обязательно чередуя нагрузки с расслаблением, как можно более полным.
Ну вы поняли, здоровый образ жизни. Все хорошо в меру. Очевидно. Почти невыполнимо.
Но надо стараться, жизнь и так коротка, чтобы позволять себе роскошь проводить часть ее на больничной койке.


Сцылки дня:

2009-10-03

Plone viewlets, практика

English.
Так сложилось, что сегодня я осознал, что такое есть вьювлеты плона. На весомой и грубой практике.
А было это так.

Заказчику надо многоязычный сайт. Первая моя попытка сделать это в стиле "поставьте в плон продукт и радуйтесь" не удалась. Потому я подготовил (как альтернативу) простое решение, сколько языков, столько и сайтов. На каждом сайте материалы только на нативном (для этого сайта) языке. Благо, сам интерфейс плона интернационализирован по самое небалуйся, в настройках нужный язык выбрал, и гуляй. Редакторы контент будут забивать, я тут не при чем, разве только тестовые странички для показухи сделать пришлось.

А потом я споткнулся о задачу создания кросс-ссылок между языковыми версиями. Хорошо бы, подумал я, каждая страница была со ссылками на другие языковые версии этой страницы. Одна из проблем в том, что не каждая страница имеет переводы на другие языки. Да и разделы, в общем случае, могут не отражаться один на другой. Ручная работа?
Пока решил сделать просто и изячно - через site_actions сделать ссылки на корни сайтов, с флажками стран для разных языков.
В параметрах экшена есть некий Icon, видимо картинка. Забил я пару экшенов, подготовил картинки. Проверяю - нет картинок в результате, только текст. Тегом <img ... даже и не пахнет. Что за засада? Почему атрибут Icon в экшене есть а картинки на сайте нет? Захотел я посмотреть код, который рендерит мои экшены.

И тут на арену выходят вьювлеты. Сайт-экшены рендерятся вьювлетом. Он расположен в файле
Plone\buildout-cache\eggs\plone.app.layout-1.1.8-py2.4.egg\plone\app\layout\viewlets\site_actions.pt
а если в ZMI смотреть, то в узле
Plone/portal_view_customizations
в строке
plone.site_actions (zope.publisher.interfaces.browser.IDefaultBrowserLayer)
Открывши его и щелканув на кастомайзе, можно мальца переделать вьювлет.

И я его переделал. Теперь он иконки кажет за милую душу. Если в экшене иконка не указана (как обычно) то работает как раньше, выводит текст.




Сцылки дня:

2009-10-02

Как бы транзакции

Сегодня за день уложился полный цикл. Сломал сайт, починил сайт.
Испытывал сегодня языковый сервис для плона, LinguaPlone. По задумке, он позволяет легко поддерживать разноязычные версии страниц сайта. А на практике я сломал сайт.
Для установки предлагают воспользоваться механизмом buildout. Я воспользовался. Мне говорят - у тебя плон старый, надо новый. Я методом перебора нахожу версию продукта, подходящую к моему плону, билдаутю и вижу, ошибки компиляции питона. Тут бы мне похерить эту затею, или соломки подстелить. Нет, чего там. Билдаут еще раз, ошибок нет, запуск сервиса, установка продукта - бабах, exception.
Все, сайт поломался.

Чинил я его долго. Заколдованный круг какой-то. Удаляю продукт - сайт не работает, потому как при (неудачной) установке он успел зарегистрироваться в базе. Ставлю продукт, сайт не работает, потому как продукт кривой или криво встал. Удалить нельзя, потому как сайт лежит.
Вот что за транзакции такие? Обещали же - если в процессе обработки запроса будет ошибка, транзакции откатываются. Но, блин, факт - не все и не всегда откатываются.

Починил просто. Пошел в список транзакций (undo) и отменил все нафик. После чего снес продукт.

Мораль: смотрите внимательно, что вам на консоли и в логах пишут. Не игнорируйте предупреждений и тем более ошибок. Делайте резервные копии, для скорейшего восстановления. Тестируйте всякое на спец. полигонах, в виртмашинах со снапшотами, очень удобно.

Вот теперь думаю, еще попытку сделать установки многоязыкости или ну его нафик?


Сцылки дня:

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) humor (23) Java (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Manager (15) web-browser (15) Никонов (15) Klaipeda (14) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) serialization (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)