М̶е̶н̶я̶ю̶ ̶и̶м̶е̶н̶и̶е̶ Имею мнениеhttp://elfov.net/diary/Latest entries.PyRSS2Gen-1.0.0http://blogs.law.harvard.edu/tech/rssЕще одно доказательство превосходства CouchDB над всякими реляционными базамиhttp://elfov.net/diary/esche-odno-dokazatelstvo-prevoshodstva-couchdb-nad-vsyakimi-relyatsionnyimi-bazami/ <p>Хотел поменять varchar -> blob. Вместо blob, в выпадающем списке выбрал binary. 6k+ тикетов сдуло в тартарары.</p>2011-05-15 16:08:20Tux for windowshttp://elfov.net/diary/tux-for-indos/ <p>Теперь у меня на окне сидит такое: <table class="image" > <tbody> <tr> <td> <a href="/diary/attachment_large/tux-for-indos/office_tux.jpg"><img src="/diary/attachment/e_tux-for-indos/office_tux_600xNone.jpg" alt="tux for windows" title="tux for windows" /></a> </td> </tr> <tr> <th>tux for windows</th> </tr> </tbody> </table> </p> <p>Спасибы уходят Аркаше.</p>2011-01-24 16:12:35Qt такой Qthttp://elfov.net/diary/qt-takoj-qt/ <p>Обновил PyQt4, перегенерил формы в местном проектике, запустил и офигел:</p> <table class="image" > <tbody> <tr> <td> <a href="/diary/attachment_large/qt-takoj-qt/qt1.png"><img src="/diary/attachment/e_qt-takoj-qt/qt1.png" alt="None" title="None" /></a> </td> </tr> </tbody> </table> <table class="image" > <tbody> <tr> <td> <a href="/diary/attachment_large/qt-takoj-qt/qt2.png"><img src="/diary/attachment/e_qt-takoj-qt/qt2.png" alt="None" title="None" /></a> </td> </tr> </tbody> </table> <p>Сижу, обновляю дальше...</p>2011-01-05 17:34:10Привожу в порядок проектыhttp://elfov.net/diary/privozhu-v-poryadok-proektyi/ <p>Сделал setup.py для <a href="http://code.google.com/p/couchdb-python-curl/">couchdb-python-curl</a> и <a href="https://github.com/angry-elf/django-couch-utils">django-couch-utils</a>. Теперь их можно установить через easy_install. Еще б документацию написать...</p>2010-11-16 18:39:14Оперовцы меняют курс?http://elfov.net/diary/operovtsyi-menyayut-kurs/ <p>В 10.63 пофиксили пару неприятных багов - некликабельные (иногда) ссылки в rss и почте, не копируемый (иногда) текст в буфер при выделении мышью и нерабочий (точнее, дико тормозящий) флеш-плагин.</p> <p>А еще анонсировали Opera Mini для андроида вместо недобраузера opera mobile, который там типа есть сейчас. </p> <p>Внимательно слежу за новостями.</p>2010-10-15 10:34:49Наблюдениеhttp://elfov.net/diary/nablyudenie/ Мало кто догадывается, что методология XP (экстремальное программирование) включает в себя XI (экстремальную инсталляцию) и XD (экстремальный дебаг).2010-08-14 11:41:00Век живи...http://elfov.net/diary/vek-zhivi/ <p>Нашел простую и удобную замену опостылевшему <strong>dd if=/dev/zero of=file count=... bs=1048576</strong>.</p> <p>Гораздо понятнее и лаконичнее: <strong>head -c 100M /dev/zero > file</strong></p> 2010-07-28 11:26:05Я такими темпами скоро буду знать C++http://elfov.net/diary/ya-takimi-tempami-skoro-budu-znat-c/ <p> Передача фокуса в поле ввода, находящееся в списке других виджетов, который является встроенным виджетом в виджете с табами... Выглядит это проще, чем описано. </p> <pre> elif key == QtCore.Qt.Key_F5: self.ui.cars.currentWidget().ui.locations.itemAt(0).widget().ui.location.ui.address.setFocus() </pre> 2010-06-30 19:55:44Я б на третий питон перешёл только б за то...http://elfov.net/diary/ya-b-na-tretij-piton-pereshyol-tolko-b-za-to/ <pre> Python 2.6.5 (release26-maint, May 23 2010, 14:21:41) [GCC 4.3.4] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> 'ыфвафыаып' '\xd1\x8b\xd1\x84\xd0\xb2\xd0\xb0\xd1\x84\xd1\x8b\xd0\xb0\xd1\x8b\xd0\xbf' </pre> <pre> Python 3.1.2 (release31-maint, Jun 29 2010, 17:54:11) [GCC 4.4.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> 'ыфвафыаып' 'ыфвафыаып' </pre>2010-06-30 19:31:06KDE 4.4http://elfov.net/diary/kde-44/ <p>В генте наконец-то размаскировали kde 4.4 (то бишь, 4.4.4). Обновился. Первые впечатления достаточно приятные - допилили кучу мелочей, на которые постоянно натыкался в 4.3. Исправили kdm, который у меня обычно грузился в черный экран и приходилось вслепую делать Ctrl-Alt-F1, %user, %password, sudo /etc/init.d/xdm restart, %password... Я-то думал, что это бага дров nvidia на маке, ан нет, в свежем kdm всё пашет. </p> <p>На следущий день начались минусы. Первый - тормоза. Второй - ужасные тормоза. </p> <p>При сравнительно небольшой нагрузке (emerge c nice 5) переключение рабочих столов и перерисовка окон занимает ужасное количество времени. Даже окно со списком рабочих столов тормозит. И это у меня работает dri, opengl и вообще кошерная nvidia с родным драйвером. И даже все эффекты рабочего стола выключены. В 4.3 таких проблем не наблюдалось, компиляция кедам жить не мешала абсолютно. </p>2010-06-29 12:37:06HTML5-зацияhttp://elfov.net/diary/html5-zatsiya/ <p>Подправил шаблоны. Теперь они html5. Правда, опера 10.53 не понимает часть тэгов (типа article, footer, header, figure), так что их пока продублировал дивами. Как только будет рабочая 10.60, вынесу всё остальное. </p> 2010-06-19 13:39:38Все-такиhttp://elfov.net/diary/vse-taki/ Все-таки правильно, когда в телефоне полноценная ось и полноценный софт. Трещишь себе в жаббере, поигрываешь в игрушку, фоткаешь окрестности, тут же рассылая фотки всем желающим. Можно даже музычку послушать и кинцо посмотреть, не говоря уж о такой банальщине, как пописывание в бложек. Жаль, очень жаль, что нокия сотоварищи не померли десяток лет назад.2010-06-16 20:23:46Микрософт угощает голубцами с говномhttp://elfov.net/diary/mikrosoft-ugoschaet-golubtsami-s-govnom/ <table class="image" > <tbody> <tr> <td> <a href="/diary/attachment_large/mikrosoft-ugoschaet-golubtsami-s-govnom/microsoft.png"><img src="/diary/attachment/e_mikrosoft-ugoschaet-golubtsami-s-govnom/microsoft_950xNone.png" alt="Микрософт угощает голубцами с говном" title="Микрософт угощает голубцами с говном" /></a> </td> </tr> <tr> <th>Микрософт угощает голубцами с говном</th> </tr> </tbody> </table> 2010-06-09 17:04:02Борюсь с ботамиhttp://elfov.net/diary/boryus-s-botami/ Набежали боты, начали срать в каментах. Добавил простенький трюк с javascript'ом. Посмотрим, будет ли эффект.2010-06-05 19:40:48Аттачи CouchDB на продакшнеhttp://elfov.net/diary/attachi-coucdb-na-prodakshne/ <p>Долго думал, как сделать отдачу аттачей в этом блогодвижке. Я типа могу картинки вставлять (с ресайзами), они хранятся как аттачи к документам каучевским... Вот додумал.</p> <p>По умолчанию, завожу view-функцию, отдающую аттачи просто как есть, в лоб, по аналогии с django.static.serve, а на продакшне сделал так (внутри virtualhost'а нужного домена, разумеется): <pre> &lt;LocationMatch "^/diary/attachment(/.*\.jpg)$"&gt; - условие достаточно тупое, но мне пока хватает &lt;Limit POST PUT DELETE&gt; Deny from all &lt;/Limit&gt; ProxyPassMatch http://localhost:5984/stereoblog/$1 &lt;/LocationMatch&gt; </pre> <p> В итоге, на продакшне картинки отдаются каучем, т.е. у них сразу есть content-length, mime-type, etag (не знаю зачем) и он корректно обрабатывает if-modified-since... </p> 2010-05-19 20:56:49CouchDB и django-adminhttp://elfov.net/diary/couchdb-i-django-admin/ <p>Потратил несколько дней (с перерывом "на подумать" в две недели) на то что б понять, что django-admin хоть и можно допилить для поддержки couchdb, но занятие это:</p> <ul> <li>А. Абсолютно неблагодарное. Django-admin испрещён query-set'ами, id-шки подразумевает только числовые, пытается сортировать, фильтровать и пейджить абсолютно несовместимым с couchdb пейджером и прочая, и прочая. </li> <li>Бэ. Чуть более, чем полностью, ненунжное. Django-admin предоставляет классную возможность для стартующего проекта. Вместо редактирования базы данных через <a href="http://www.phpmyadmin.net/">PMA</a> и ему подобное, django-admin даёт удобный интерфейс для порождения сущностей, а главное - связанных сущностей, кое является большой головной болью в SQL-ориентированных базах. Глупо и бессмысленно - вначале мы денормализуем наши данные по максимуму, а потом имеем головную боль, как их собирать обратно. Сами же себе ставим палки в колёса, вместо того что бы поменять парадигму.</li> </ul> <p> После нескольких дней активного исследования, в голову пришла мысль - а что, собственно, сэкономит мне django-admin по сравнению с уже существующим удобным механизмом - futon'ом?</p> <ul> <li>Создание предопределённых сущностей. Спасибо, приплыли. CouchDB у нас, всё что у нас может быть предопределено - правило генерации id-шек и пара полей (например, type, определяющий сущность). Причем половина полей будет сложных типов, которые django-admin, как и django-forms не в состоянии будут ни отобразить, ни обработать. Значит придётся делать свои классы полей "JSONField" с соответствующей валидацией ("this is not valid json object"). Очень напоминает futon :)</li> <li>Разделение сущностей вместо навигации по длиннющему списку объектов. Секунду, а как это сделать? Написать view-функцию под каждую сущность (entity1/list, entity2/list) и скормить её в Admin-класс, что б нужный раздел админки выводил только нужные документы. Стоп, то же самое сделает и futon.</li> <li>Пейджинг? Хаха. Ничего альтернативного futon'у не получится при всём желании. Ну нету у нас страниц, да и впринципе они не нужны. Назад-вперёд - наше всё</li> <li>Сортировки? Фильтры? Поиск? К сожалению, от всего это пришлось отказаться, сделав ставку на CouchDB.</li> </ul> <p> Итого, моя реализация django-admin будет, в лучшем случае, подобием futon'а. В более вероятном случае - будет плохим подобием. Так как django-admin с большим трудом может заменить обычную нормальную среднестатистическую админку (из десятка написанных с использованием django проектов, ни один не использовал django-admin в качестве интерфейса администратора, везде было нужно гораздо большее, чем редактирование связанных сущностей). <p> Вывод: не стоит тратить время. При старте проекта - futon и только futon. Впоследствии - нормальная, полноценная админка, ничего общего с django-admin не имеющая. </p>2010-05-09 22:28:42CouchDB: индексыhttp://elfov.net/diary/couchdb-indeksyi/ <p><strong>В отлчии от mysql, в couchdb очень сложно делать неиндексированные выборки.</strong></p> <p>Как это выглядит? Любая выборка сложнее перечня документов с n по m требует написания view-функции. Если нужно, пишется reduce-функция. Причем движок не даст мне написать reduce-функцию, которая порождает слишком большой результат (отключабельно). </p> <p>Дальше ты можешь дернуть эту view-шку и получит какие-то ряды. Дергать ты можешь только одним способом. Внутренних сортировок нету, join'ов нету, есть только группировка по ключу (да, разумеется, работает с сумасшедшей скоростью). Итог - очень быстрая выборка данных. Не важно, какой был исходный набор данных - 100 рядов или 100 миллионов.</p> <p>Еще один неявный плюс. В процессе разработки с MySQL накапливается большое количество индексов. Часто они становятся ненужными до продакшен-стадии, часто нужных не хватает. Лишний индекс в большой таблице тормозит insert'ы. Недостающий - тормозит select'ы. Поиск недостающих предусмотрен движком базы. А вот поиск лишних - головная боль. В couchdb же лишние view-функции (т.е. лишние индексы) во-первых, не мешают ни выборкам, ни вставкам, во вторых, отсеиваются обычным grep'ом по исходникам. Красота!</p>2010-05-09 16:16:16Подновил движок блогаhttp://elfov.net/diary/podnovil-dvizhok/ <p>Добавил сайтмапы (даже с картинками).</p> <p>Унутре rss теперь картинки препроцессятся нормально.</p>2010-05-08 18:38:24CouchDB vs [My]SQLhttp://elfov.net/diary/couchdb-vs-mysql/ <p>Под этим тэгом я буду собирать мои наблюдения относительно сабжа.</p> <p>Религиозных отличий не просто много, а очень много, поэтому я буду заострять внимание на том, что мне лично кажется очень важным.</p> <p> <strong>В couchdb невозможно быстро сделать <em>delete from ...</em></strong></p> <p> Если вдруг появляется такая задача, приходится писать скрипт, делающий это. В процессе написания скрипта действие будет много раз переосмыслено и, возможно, изменится в корне. Легкость <em>delete from</em> в mysql позволяет делать быстрые и ненужные поступки (/me в этом месте сыплет пепел на лысину). </p> 2010-04-21 14:58:06Инженеры в Samsung - маги невиданной силыhttp://elfov.net/diary/inzheneryi-v-samsung-magi-nevidannoj-silyi/ Раз уж они смогли 1.5ТБ внешний диск отформатировать в FAT32... Винда умела такие трюки (форматировать в FAT32 разделы больше 32 гигабайт) во времена NT4, потом это запретили (даже мелкомягким стало понятно, что ничего хорошего из этого не выйдет)... Я так понимаю, понятие "забота о юзерах" самсунговцам абсолютна чужда. 2010-04-19 19:38:34