solovyov.net

Blog

2023

Server-Sent Events (SSE), but with POST

I really like Server-Sent Events: the protocol is quite simple and effective, and using it from a browser is easy. Listen for a message event on an EventSource, and it just works. gostatic hot reload functionality is built using [...]

2022

ngrok for the wicked, or expose your ports comfortably

I've started using ngrok a lot lately (I know, I know, late to the party). But then last week, Homebrew has updated it to a version where it wants some $25 to supply custom domain names. I mean, I [...]

PostgreSQL collation

I've got into a situation with PG I've never been into before. There is a financial reports table, containing some description of a transaction, with columns like date, amount and comment. And this comment field is often used to search [...]

2021

History Snapshotting in TwinSpark

TwinSpark is a library we use to write Kasta frontend now. You can see examples of basic behavior by opening a link, but a cornerstone of TwinSpark is HTML-replacement functionality, which is what concerns us now. You see, controlling [...]

Code streaming: hundred ounces of nuances

A few months ago I got a feeling that I’d enjoy live streaming some coding. Not sure exactly, but it seemed to be somewhere along the lines of “sitting at home,” “not enough people around to complain to” and things [...]

2020

Useful shell prompt

There are only a few apps I use every day and shell — ZSH — is one of the most used. It’s been that way since the beginning of the ’00s and back then I spent a lot of time [...]

API pagination design

Returning all results for a given query could be a challenge for an API, especially if there are thousands of results. It puts a load on a server, on a client, on a network, and often is unnecessary. Thus people [...]

ElasticSearch query builder

This post strives to be useful to anyone who uses ElasticSearch, but all examples are going to be in Clojure since it’s what we use. ElasticSearch is a wildly useful database (if I may say so), but at times it feels [...]

Higher-order functions are like inheritance

HOF as a concept is quite simple: it’s a function which takes a function as an argument. Alternatively, it’s a function which returns a new function. In both cases it’s a higher-order function. Is it useful? Massively! Most sequence-processing functions [...]

A tale of webpage speed, or throwing away React

Back in 2011, I happened to get a job writing Backbone.js app. If you never did that, don’t. I was complaining about difficulties with composition left and right to whoever would listen. As I started digging into alternatives for [...]

Clojure, GraalVM, PolyglotVM: paste.in.ua

A bit more than 10 years ago I wrote a pastebin app: paste.in.ua. It’s quite simple and it came into existence because the one I was using went offline and I didn’t want to use Github’s Gist because of [...]

PostgreSQL query JIT

We’re proud users of PostgreSQL. Proud in a sense we’re really glad that our main data store is such a stable, performant, introspective, and overall great DBMS. It’s been very reliable for us and in times of turbulence made it [...]

Blog workflow

A long time ago I had a blog that had an admin interface. That ended 10 years ago, and it’s been Emacs and git since then. Until yesterday! A few months ago I found an app - Drafts.app - which [...]

SSDNodes review

A while ago when reading yellow site I stumbled upon a comment from XERQ, who is a founder of SSDNodes. The company’s value proposition is to pay them for a year and get a massive discount on [...]

Sleep

I did not sleep enough for the last 3 nights and noticed an interesting thing. When I was woken up this morning I felt really bad, sleepy, and in general, had a feeling of “I really need to sleep.” But [...]

Inheritance considered harmful

Many years ago I was a Python developer. That is, the only language I knew well was Python. I had some perspective though - via Perl, Elisp, C# and bits of others. And it’s not like I didn’t see any [...]

Gostatic got HTML hot reload functionality

After years of reminding myself to do it, I finally did it: gostatic now got hot reload! And it took me only two month (nothing compared to years of wait) to make a release and write this post. I should [...]

Switching languages with Karabiner

Life has blessed me with being born in Ukraine; this complicates life a bit though when dealing with computers. For example, you can’t just use a single layout like all those peoples in the USA or elsewhere where they have [...]

2019

HTTP2 server push for static sites

It’s been a long time already since we’ve got HTTP2 push working at Kasta. And it’s a fantastic technology: if you know some resource is going to be needed by a client (browser or app), you can send that [...]

Як перекладалась Kasta

Вирішив написати в блог про те, як Kasta отримала українську мову. Враз і написання нею потренувати, а то я і книжки українською давно вже не читав, і не розмовляю майже, сумно. :( Пост буде складатися з двох частин — частина [...]

New Job!

Я в Касте уже 4 года Chief Technical Officer. Они ни в коем случае не были ни лёгкой прогулкой, ни скучным отсиживанием задницы. За эти 4 года мы (без всякого порядка) сменили платформу, пережили 3 (и не пережили один) Black Friday’я, выстроили [...]

Механическая клава

Недавно припекло мне попробовать механическую клавиатуру. Тяжело назвать причину, куча всяких - много уже всяких восторженных статей перечитал, “моя жизнь никогда не будет такой, как до механической”, чуть может желание что-то поменять, ничего прям совсем необходимого, но захотелось. Пошёл я смотреть на трушные клавы, [...]

2017

Обработка RAW в Fujifilm X-T1

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

Server Side Rendering at modnakasta.ua

I’ve decided to translate an article I wrote for modnaKasta technical blog since it should be fairly interesting for a wider audience than just Russian-speaking people. modnakasta.ua is a single page application right now, which uses React internally and is written in [...]

Test Driven Walking

Все знают TDD - Test-Driven Development. Пишешь сначала тесты, которые проверяют те случаи, которые ты придумал, а потом пишешь код, который удовлетворяет этим тестам и только тестам - не забегая вперёд. Когда реальная жизнь показывает, что кода недостаточно, пишешь новые тесты (которые подсказала [...]

2016

InfluxDB

Где-то в сентябре мне пришла в голову прекрасная мысль, что без хотя бы относительно вменяемого мониторинга приложения нам вообще-то нельзя, и надо бы узнать, сколько запросов в секунду мы обрабатываем, как долго это происходит, и что там люди чаще всего открывают. Иначе говоря, [...]

Fluid.app + Gmail

So I’ve decided once again I dislike having my mail client opened in one of the browser tabs and I want it somehow separate. I’m still unsure why’d I got this feeling, but I like the result - read on if you’re [...]

Новый 2016!

Я в 2015 году не написал ни одного поста в блог, меньше писал в твиттер и вообще всякой активности в онлайн у меня было меньше обычного. Всë потому, что я с прошлого января1 — CTO в modnaKasta, [...]

2014

Пробки - странная штука

Обычно мост Метро в 9 утра двигается очень медленно, и хвост торчит аж до развязки на “Левобережной”, и проехать его занимает минут может 10, не знаю - долго довольно. Но сегодня на въезде со стороны Броваров сразу после “Лесной” на одной из двух [...]

Когда стоит использовать Go?

Понятное дело, что это мой личный блог, и потому этот дисклеймер в теории писать нет смысла, но на практике я всë равно напомню - всë, что я тут пишу, это мои личные мысли, если не указано обратное (что это факты или мысли [...]

Clojure Cup 2014

Прошëл год и мы решили, что необходимо провести работу над ошибками и сделать что-то, что работало бы после двух дней бешеного забега, и, возможно, позволило бы попасть в тройку победителей. :) В этот раз по разным причинам не смогли участвовать двое из [...]

ClojureScript: how to begin

This is a short guide which intends to give you shortest path to writing ClojureScript with React and reloadless workflow. It doesn’t teach you how to write actual applications, only how to set up all the necessary (and boring) boilerplate. For [...]

Переписал Showkr на ClojureScript

После того, как я закоцал и восстановил себе сервер, я обнаружил (ну и вспомнил в какой-то степени), что Showkr (описание) перестал нормально собираться. Я там не зафиксировал версии библиотек, что-то себе сломало обратную совместимость, и всë такое. В прошлый раз я [...]

Dokku

Недавно перевëз свой сервер на Digital Ocean, и заодно переехал с системы настройки “сча поправлю конфиг и забуду навсегда” на Dokku. Докку - это система деплоя, такой себе “Heroku для дома”. У докку есть список так называемых “билдпаков”, которые описывают, как собирать тот [...]

Почта: удобство против защищëнности

Все страсти со слежкой, NSA, усилением контроля над интернетом в России и т.д. заставляют всë большее количество людей задуматься о том, что возможно стоит перейти с “читай-кто-угодно” Gmail и подобных (я утрирую, конечно, вопрос лишь в принципиальной возможности и относительной простоте прочтения чьего угодно [...]

Музыка

Недавно обнаружилось, что я пропустил целых два альбома Сепультуры - несмотря на то, что я порядочно их слушал (судя по last.fm’у, даже больше, чем Korn и Static-X, хм), это всë-таки не самая любимая группа и слежу я за ними не сильно вниматель. Но [...]

2013

Clojure Cup 2013

Недели три назад мне пришла в голову идея, что было бы прикольно поучаствовать в Clojure Cup и написать что-то прикольное на кложуре (сорри, я буду называть еë кложура, а не кложа, как делаю и в реальной жизни, потому что я так вижу [...]

webhooker

Когда ты хостишь репозитории сам, то можешь сделать какие угодно хуки и по push’у в свой репозиторий делать что угодно - например, рендерить свой сайт. Но когда ты перемещаешь эти репозитории на GitHub, приходится пушить изменения и туда, [...]

Шоррткаты

Я люблю использовать комбинации кнопок для перехода к определëнным приложениям. У меня достаточно странный способ работы с кучей приложений - у меня они все на определëнных рабочих столах лежат (и я туда перехожу по Альт + цифра), но к каким-то я перехожу (или [...]

Теория погружения

Когда кто-нибудь жалуется на современное искусство или тяжëлую музыку, я рассказываю одну мысль, которая мне пришла в голову пару лет назад, и человеку обычно становится проще смириться с чем-то. Мысль это простая и очевидная (на мой вкус) после того, как она у тебя [...]

Go Replace!

Как-то раз два с лишним года назад я решил посмотреть на Go, поизучать, как это - писать на нëм программы, и насколько хороший выходит результат. Идея для первой программы родилась легко - так как мой любимый Python тормозит на запуске, я решил [...]

Go Replace!

Once upon a time two and something years ago I decided to check out Go to learn if it’s easy to write applications using it and how good (or bad) result is. Idea for a first application popped up immediately - [...]

Общение с архетипами

(архетип как образец, паттерн в сленге программирования) Только что прочитал статью Tailgating Y Combinator. Там некая девушка рассуждает о том, что люди слишком много значения вкладывают во внешний вид и переломить это практически нереально. В еë примере они приехали на собеседование Y Combinator’а [...]

Английский в слайдах задолбал

У наших докладчиков есть одна интересная привычка - они делают слайды на английском. Говорят на русском или на украинском, но слайды стабильно у большого количества народа - на английском. С ошибками, конечно же - не у каждого и не каждый раз, но очень, [...]

Translating in-browser applications

Earlier or later, if an application is not targeted on an English-speaking market exclusively, you’re going to work on localization. Such a moment happened for us a few weeks ago: when there are no more excuses left and something had to be done. [...]

Переводы браузерных приложений

Рано или поздно, если приложение ориентировано не на англоязычный рынок, всем приходится сталкиваться с локализацией. Пару недель назад у нас подошëл момент, когда дальше уже нельзя и пора что-то делать. :) И я пошëл искать библиотеку, которую можно было бы использовать для переводов. [...]

Рекрутëры, эйчары, хедхантеры и прочие проФФесионалы

В Украине, впрочем, как и везде в мире, спрос на разработчиков давно уже превышает предложение. И это является одним из главных факторов роста зарплат. Казалось бы, это должно еще и заставлять тех, кто ищет программистов, делать свою работу лучше. К сожалению, подход “отправить [...]

Электронные книги

Короткий пост непонимания. Вот есть у нас довольно прекрасная (ну т.е. не лучшая в мире, но всë-таки еë присутствие лучше еë отсутствия) компания Amazon, которая продаëт книги. И книги эти бывают бумажные, а бывают электронные. Прогресс же, 21 век и всë такое. И вот [...]

Mac OS X: too many open files

Иногда на Макоси возникает такая ошибка, и я боролся с ней разными способами: поднимал значения в kern.maxfiles и kern.maxfilesperproc, менял лимиты в launchctl limit - и обычно это не помогало, но как-то всë же я проходил дальше и всë работало. Но тут стало невыносимо, [...]

MacOS: too many open files

Sometimes MacOS gives you an error like this. I tried to fix that by whatever Internet told me: made kern.maxfiles and kern.maxfileperproc values bigger, changed limits in launchctl limit - it did not really help though. Usually the error went away just because [...]

Raspberry Pi

Прямо перед Новым Годом я себе сделал небольшой подарок - купил Raspberry Pi. У меня в голове не было какого-то определëнного плана, что я буду с ним делать, но уж очень хотелось. ;) Особенной любви к возне с железом у меня нет, [...]

Хотлайн и работа с клиентами

Есть такой прекрасный сайт - Хотлайн. Это самый большой агрегатор цен в Украине и я вообще никогда не парюсь, где смотреть цены на что бы то ни было вообще - хочется руль? нож? палатку? - всë там. Кроме довольно юзабельного обычного сайта, [...]

Gostatic: ещë один прекрасный блог-движок

Очевидно, что раз написав движок для блога, остановиться уже невозможно. Я чувствую себя Асприном, который пишет очередную МИФическую историю (я даже попытался сделать отсылку на них в названии, но не думаю, что получилось). Короче, ещë один. Зачем? Предыдущий тоже генерировал статику [...]

RequireJS & AMD

Отсутствие модулей - это одна из самых неприятных проблем джаваскрипта, даже когда пишешь не слишком большое приложение. Когда пишешь большое, полноценное внутрибраузерное приложение, это становится проблемой первого порядка - без системы модулей что-то писать становится невозможно. Конечно, эту проблему решают разными способами и давно, [...]

2012

Cross-compiling Go

I saw a thread on cross-compilation in golang-nuts group recently and decided to replicate information here so I won’t forget and (maybe/hopefully) it’ll make it easier to discover for others how to cross-compile go applications. I’m on OS X and my Go source code [...]

Showkr - an in-browser application

Some time ago I made quite simple, but (I hope) useful web application called Showkr. And now I decided to tell a story about why and how I did that - I think that could be useful considering growing popularity of in-browser [...]

Showkr - приложение в браузере

Я за последние пару-тройку недель по вечерам и выходным понемногу сделал дикий, но симпатичный (и, может, полезный) сайт Showkr. И решил рассказать миру о том, зачем и как я это сделал - я думаю, что вторая часть может пригодиться, учитывая растущую популярность приложений [...]

2011

SQLAlchemy tutorial: how to start

SQLAlchemy is a best Python ORM by far, and it has really thorough and detailed documentation. Being like that has a flip side though: it explains a lot of basic concepts right through beginning. I personally find it much easier to start with [...]

SQLAlchemy учебник: как начать

SQLAlchemy - очевидно, лучшая ORM для питона, с обширной и подробной документацией. У такой документации есть и обратная сторона: вместо быстрого введения она подробно объясняет все базовые концепции. Мне лично легче начинать с небольших рецептов и простых примеров, а не с серьёзных трактатов [...]

rsync вместо cp

Надо было залить довольно большое количество больших бинарных файлов на сервер, на котором нет никаких ftp-демонов и прочих извращений. Я обычно пользуюсь scp (с -r для директорий), но сейчас файлов было действительно много и мне было бы лень стартовать несколькочасовую процедуру закачки заново. Поэтому [...]

Урлы и #!

За последнее время проскочило великое множество статей на тему того, какая плохая штука шебенги (#!) и как все срочно должны перестать их использовать. Меня эта тема немножко волнует и мне тоже хочется высказаться. Начнëм с того, почему они плохие. Основные аргументы: сайты с ними тормозят они [...]

Почему ничто не может двигаться быстрее света?

Недавно на реддите проскочил совершенно замечательный ответ на вопрос, почему же всë-таки скорость света считается предельной и невозможно разогнаться быстрее неë. Он меня настолько впечатлил - тем, насколько всë легко укладывается в голове (в отличие от того, что обычно пишут в книгах и учебниках), [...]

Bazaar: hate and... hate

Несколько месяцев назад я сменил работу и по несчастливому стечению обстоятельств оказалось, что основная система контроля версий здесь - Базар. Я его и раньше не любил, но мне триста раз указывали, что это всё просто непривычно, и он на самом деле не хуже, [...]

2010

Антиметапрограммирование

Бывает, пишешь какой-нибудь код, сам или с командой, в которой каждый озабочен качеством кода и его читаемостью, все пытаются заботиться о том, чтоб потом другой человек мог понять написанный код, и думаешь - эх, вот жаль в питоне мало сахара, сейчас бы пару [...]

Пакетный менеджер в Emacs

Когда используешь Емакс достаточно долго, накапливается большое количество всяких сторонних .el-файлов, пакетов собственно. Всякие yasnippet, grep+, smex’ы и прочие ack’и. Само по себе это, конечно, клёво, но за ними приходится следить, обновлять руками, ложить их в тот же репозиторий с емаксовыми конфигами - а [...]

Управление проектами в Емаксе

EDIT: на дворе 2019 год и я давным-давно пользуюсь projectile, чего и вам советую. :) У Емакса какое-то подобие проектов из коробки появилось только в 23 версии, и то очень простое - только переменные директорий (directory variables, что-то типа file variables, только [...]

Google Maps API vs API Яндекс.Карт

Описанный в прошлом посте сервис Дислокации использовал с самого начала Яндекс.Карты как движок карт. Причин на то было несколько - я думал, что они будут распознавать адреса лучше, чем гуглевские; у них значительно лучше документация, чем у Мапии; нет вопросов [...]

Дислокации

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

Перезагрузка блога

Ну что, привет, в очередной раз на новый лад - я опять сменил себе движок блога. :) И на этот раз уже не очень важно, что это - потому что он просто генерирует статический сайт. ;) Я даже пошëл на столь экстремальный шаг, [...]

2009

Mercurial 1.4.1

Хочу похвастаться - вышел Меркуриал 1.4.1, замечательный тем, что в него включили моë расширение - schemes. Это аналог алиасов, но только для адресов. После его включения и добавления в ~/.hgrc таких строчек: [schemes] p = ssh://piranha.org.ua/hg/ можно писать hg push p://byteflow/ вместо полного [...]

GAE писали идиоты

К сожалению, этот пост не изменит ничего, но тем не менее я не могу не поделиться наблюдением о том, что авторы питоновской части GAE - идиоты. Они попытались скопировать синтаксис джангового орма, при этом порядочно искалечив его, но не это самое плохое. Самое [...]

Opster

Two months ago I’ve released little command line parsing library for Python called opster (actually it was called finaloption then, but I’ve renamed it because of remark from native speaker ;-)). What’s the reason to write one more command line parser when [...]

Finaloption

UPD. Библиотека переименована в Opster. Я тут выпустил библиотеку для парсинга коммандлайновых аргументов. Зачем еще одна, когда уже в питоне есть getopt и optparse, когда не так давно появились argparse и optfunc? Ну… как обычно, потому что они все неправильные и делают не [...]

Юникод в Python 2.x - что это и зачем?

В реальном мире строковыми данными обмениваются в какой-то кодировке. Например, koi8-r, cp1251, utf-8. И когда тебе приходят данные, ты во многих случаях знаешь, какая это кодировка. Но когда тебе приезжают данные из разных мест в разных кодировках, работать с ними одновременно довольно напряжно [...]

Mercurial 1.3

Это, конечно, не полноценная статья в блог, но тем не менее довольно клëвое событие - вышел Mercurial 1.3. Событие клëвое тем, что в него добавили поддержку сабрепозиториев - аналог externals из svn. ;) Пока она еще не отполирована, поддерживает [...]

Реиспользование приложений

Есть в Джанге такая сущность, как приложение - какой-то кусок функционала. На мой взгляд, то, что Джанга заставляет юзера делить свой проект на такие кусочки это один из ее самых толстых плюсов (наряду с отличной документацией). Она идет даже дальше того - предоставляет [...]

Byteflow 0.7

Я решил, что нет никакого смысла ждать с моря погоды и таки выпустил релиз Byteflow - 0.7. ;-) Такой странный номер потому, что до 0.9 какого-нибудь по фичастости и стабильности еще надо поработать, а вот от 0.1 явно уже [...]

Консультации по Mercurial

UPD. К сожалению, сейчас у меня нет возможности этим заниматься Я тут поразмышлял на досуге и подумал, что пора уже свои знания использовать для служения человечеству. ;) Так что welcome - если вам (или вашей команде) требуется тренинг, консультации по Меркуриалу (да и вообще [...]

Короткие ссылки — rev=canonical

Буквально вчера мне в читалку приехал пост Саймона Виллисона о довольно новом способе сокращать урлы. Идея заключается в том, что сокращалки урлов на самом деле - не очень хорошая штука, особенно с точки зрения жизни этих ссылок (вопрос о том, нужно ли сокращать [...]

Short urls — rev=canonical

Just yesterday my feed reader fetched Simon Willison’s article about relatively new method of url shortening. The idea is that url shorteners in fact are not very good thing, especially from URL term of life point of view. What if tinyurl.com is [...]

Python переходит на Mercurial

Гвидо сегодня анонсировал, что питон переходит на меркуриал. Отлично! ;) Вообще, читаю несколько фидов в твиттере про PyCon и так жалко, что у меня никакой возможности съездить туда не было.

Дедлайн

I couldn’t understand why my productivity went down when I had deliberately made more time available to write. Then I realized it was because I wasn’t flying as much. Before, I’d sit on a plane and pull out a computer and start [...]

Exception #10

Написать можно было и пораньше, конечно, но лучше так, чем никогда. ;) def saturday(): raise Exception(10)

Редактирование комментариев

Редактирование комментариев для блога (если они есть) - абсолютно необходимая вещь. Ну т.е. не так, чтоб кровь из носу, но я надеюсь, что тег этого поста дает мне немного свободы говорить такие безапеляционные вещи. ;) Написал я комментарий, отправил [...]

Узкие шаблоны

Я давненько (полтора месяца прошло) уже ничего не писал - как обычно январь и февраль у меня какие-то странно безумные месяцы. Непонятно, почему в этом году так - сессии-то уже нету, может по привычке? ;) Но писать есть о чем, [...]

Размер шрифта

Ян Бикинг написал несколько слов о дизайне, которые напомнили мне об отзывах на текущий дизайн моего блога. В принципе, его слова (и статья Вилсона Майнера, которая собственно и сподвигла меня таки сделать редизайн - там есть на неё ссылка) [...]

2008

Смерть банкам!

Мой пост совсем не в тему блога приходится, но моя душа просто кричит о своём согласии с мнением Ллео о банках - я даже несколько лет назад начинал писать в свой ЖЖ пост по тому же поводу, но меня хватило лишь [...]

Mercurial 1.1

Вышел Меркуриал 1.1 со списком изменений на 2,5 страницы. :) Есть там и результаты моих усилий, и в общем фичи очень клёвые. Помимо графика дерева изменений в вебморде мне очень нравится zeroconf - после его включения hg paths в [...]

Mercurial 1.1

Mercurial 1.1 is out and list of changes takes 2.5 pages. There are some my efforts in this release, ;-) but in overall two most appealing features for me is a graph of changeset tree in webinterface and zeroconf extension - [...]

Редизайн блога

Идея эта у меня висит ещё с лета, когда я увидел ifany.org - очень симпатично сделанный, с моей точки зрения, сайт. Но когда я попытался натянуть дизайн на свой блог, оказалось, что мне не нравятся всякие мелочи. В результате [...]

Мои инструменты

Я тут немножечко протормозил с продолжением поста Лориена на тему используемых инструментов - довольно напряжённые были последние пару дней (да и последующие тоже такими будут, судя по всему :), но вот всё же собрался - и пишу. :) Собственно основное [...]

FirePython - нет print'ам?

Когда я разрабатываю какое-то веб-приложение, то практически не пользуюсь разного рода отладчиками и всякими вспомогательными инструментами: в 90% случаев с головой хватает print variable для того, чтоб понять, в чём проблема. Ну, иногда я всё-таки делаю import pdb; pdb.set_trace(), в [...]

Firepython - no prints?

While I’m developing some web application I almost never use any debuggers or supporting tools: in 90% of cases usual print variable is enough for understanding a trouble. Of course, there are some very complicated cases, when I do import pdb; pdb.set_trace(). But I [...]

Blogging Spree

That’s my first post in this blog. The idea of having blog in English arose a lot of time ago but I always had some lame excuses for myself to not do that. But two weeks ago I’ve added ForeignKey to Site [...]

jQuery scrollBottom

Наконец-то я собрался и сделал, чтоб ссылки “комментировать”/“ответить” вели себя так, как я хотел этого с самого начала. :) Всё просто - при нажатии ссылки появляется форма, и нижняя граница браузера скроллится к нижней границе формы. А так как в принципе [...]

Статьи про меркуриал

Я вдруг подумал, что читать DOU могут не все :-) и явно тогда стоит сообщить, что я написал все три статьи из цикла (введение, основы и расширения). Вообще задумывалось четыре статьи, но я сейчас просто не [...]

Тёмная сторона Django

В любом случае, когда используешь инструмент длительное время, то некоторые вещи в нём начинают раздражать. А так как Джангу я использую вот уже больше двух лет, то некоторые вещи меня раздражают очень порядочно, так что этот пост будет именно о [...]

Mercurial: расширения

Продолжение, см. также: Mercurial: введение в распределённые системы контроля версий, Mercurial: основы. Несмотря на то, что Меркуриалом можно полноценно пользоваться, используя только встроенную функциональность, существует достаточно большое количество различных расширений, которые значительно увеличивают круг возможностей и решаемых задач. Немалая [...]

Ubiquity: емаксоподобный файрфокс

Disclaimer. Здесь под емаксоподобностью не подразумеваются столь милые сердцу емаксеров хоткеи или ещё какие-то внешние проявления. :-) В случае, если ваш канал позволяет, посмотрите видео представления этой штуки. Вкратце, что это такое - такая небольшая консоль, которая позволяет набирать команды с параметрами (и [...]

Exception #09

Опять у питонского мира праздник намечается - девятый Exception будет уже в эту субботу. Так что не забудьте зарегистрироваться и прийти. ;-) Тем более наметилась попытка придать слегка официальный статус обсуждениям после семинара. =)

Картинки в статьях

Наконец-то долгожданная фича, до которой у меня никак не доходили руки (и мозги ;), работает: теперь из админки можно загружать и публиковать картинки. Пока только с синтаксисом markdown’а, но если кто хочет проапгрейдить - патчи велкам. ;) Думаю, со временем можно [...]

1.0

Ура. Она вышла! :-)

zsh-lovers

В очередной раз искал, как сделать что-то в zsh, и наткнулся на html-версию man-странички zsh-lovers. В этот раз проглядел её (всё ещё не до конца) более внимательно и впечатлился. Раньше не знал клёвых штук, например вот такая команда делает символические [...]

На чём запускать Джанго?

Как я и писал в комментариях к предыдущему посту на эту тему, я решил, что тестирование производительности с помощью byteflow - не самая удачная идея, потому как довольно тяжёлая логика мешает веб-серверам показать себя. Потому взял простое приложение [...]

django-urllisting

Вчера оформил как отдельное приложение и релизнул одно своё творение, которое делает самую малость - проходит по всем urlconf’ам джанги и создаёт их полный список. Если кинуть в настройки словарь URL_VALUES, где будет соотстветствие имя параметра - значение с какими-то [...]

Music excavated

Уже довольно давно мы с Севой понемногу (ну совсем понемногу) делаем свой небольшой проект. Началось всё с того, что нас малость задолбало хранить разрастающуюся разнородную коллекцию txt и html файликов с текстами песенок. Хранились они по той простой причине, что для их нахождения [...]

Mercurial: основы

Продолжение, см. начало: Mercurial: введение в распределённые системы контроля версий Одним из несомненных плюсов меркуриала является его интерфейс, который покажется знакомым каждому, кто хоть какое-то время работал с subversion в командной строке. Естественно, что отличий хватает (сам принцип работы совершенно иной), но наиболее часто [...]

WSGI серверы кратко

За последние несколько дней обнаружилась (для меня) уйма интересных WSGI серверов. Я уже довольно давно использую (естественно, для Джанги) Apache mod_wsgi для продакшена и CherryPy’евский WSGI-сервер для разработки. Но недавно обнаруженный fapws2 заинтересовал меня и я наконец-то собрался его [...]

OpenID в Byteflow

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

Mercurial: введение в распределённые системы контроля версий

Что, почему, для чего? Примерно года полтора назад я заинтересовался распределёнными системами контроля версий (хотя и слышал о них раньше, обычно о git’e, который в то время под Windows не работал, что мне было критично), когда наткнулся на сайт Bazaar‘a. Подогревали мой [...]

Расположение файлов в проектах Django

Последнее время мне всё более и более странным (я бы даже сказал “недальновидным”) кажется решение авторов оригинального туториала по Джанге показывать именно такой формат расположения файлов в джанге (и уж тем более то, какой sys.path они там используют): в туториале все [...]

Особенность статей о git'е

Заметил одну интересную особенность статей о Гите - каждая из них рассказывает о формате его репозитория, в который раз талдыча про его простоту и понятность, в то время как статьи про Меркуриал и Базар содержат более близкую пользователю информацию. Похоже, всё [...]

Watchlist: подписка на комментарии

Какое-то время назад Бурчик перевёл свой блог на Byteflow, и благодаря его стараниям в движке появилась возможность получать новые комментарии по почте. “Возможность” - это, конечно, сильно сказано, потому как получали их все [...]

Граф чейнджсетов в Меркуриале

В транке меркуриала появилась одна очень клёвая штука - дерево чейнджсетов в hgweb’е. Раньше его можно было посмотреть только локально, а сейчас - и онлайн. Например, вот byteflow. Кстати, последние изменения в crew1 говорят о [...]

Rebase для бедных в Mercurial

Пока честный rebase для меркуриала находится в стадии проекта для GSoC, я расскажу про то, как его сделать с помощью существующих инструментов - всё же это бывает полезно. Итак, что у нас есть? У нас есть какой-то проект, разрабатывающийся где-то там (вне пределов [...]

Доступ к репозиторию hg через ssh

Довольно долго для расшаривания репозиториев меркуриала мне хватало обычного доступа по HTTP: легко настроить (дал права пользователю веб-сервера - www-data, и всё), просмотреть, работает всё чётко и без запинки. Но в конце-концов достало меня раз за разом набирать пароль для заливания своих изменений в [...]

Hgshelve

NOTE: Not to be confused with a mercurial extension, named shelve. Few days ago there was a lot links on the Internet to gitshelve, which implements persistent versioned storage of objects in the git. I’ve read it description and realized that [...]

Exception #08

Итак, 24 мая опять намечается тусовка питонистов! ;-) Что хорошо - у Ивана получилось, как он и обещал, устроить это всё через пару месяцев. А что отлично - что это будут мастерклассы. Три штуки. Меня лично больше всего интересует [...]

Музыкальные языки

Из исходника и обсуждения в jabber-конференции pythonua@cjr родился прикольный список соответствия языков программирования стилям музыки. 1С: блатняк Ada: военный марш Algol: рок, блюз Awk: панк Basic: в траве сидел кузнечик Brainfuck: goa trance С: классический хард-рок C++: heavy-metal Delphi: пост-диско Erlang: симфонический оркестр Forth: industrial Fortran: бит Haskell: mathcore J: grindcore Java/C#: поп JavaScript: rave Lisp: progmetal Lua: [...]

Фичи Django 1.0

Джеймс Беннет пару дней назад опубликовал список фич, которые важны для релиза Django 1.0, по причине того, что они очень большие и важные, либо того что они простые, маленькие и порядочно улучшают/облегчают использование в обычных случаях, либо (менее важно) [...]

QS-RF

Сегодня про это пишут все, но я всё равно не могу промолчать. :-) Ветку разработки queryset-refactoring смержили в транк Django, что означает приход порядочной толпы приятностей. ;-) Мне лично очень нравится возможность посмотреть SQL до выполнения собственно запроса (QuerySet.query.as_sql()), ну и [...]

Как постгрес тормозил

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

Обновления

Буквально только-только реализовал в Byteflow одну маленькую (совсем), но очень полезную штуку, подсказанную Катапом: в стандарте Atom’а есть два разных поля, использующихся для указания даты для элемента - published и updated, при этом updated - обязательное. Раньше в updated [...]

Размер репозитория

Чисто ради интереса решил привести один маленький забавный факт о размере репозиториев. Есть у нас немаленький проект, при этом чекаут исходников джанговой части из SVN занимает 79 мегов. При этом этот же проект, переконверченный в меркуриал - рабочая копия и полная [...]

OpenID server

Этот пост будет кратким - благодаря стараниям Олега в Byteflow теперь присутствует сервер OpenID. Клёво. :-) P.S. А ещё byteflow - второй по тегу django на ohloh.net, после самой джанги. :-)

render_to improved

[UPD от 12 ночи] Чуть больше года назад, когда меня окончательно задолбало писать render_to_response c кучей параметров, я себе написал маленький декоратор render_to, который заметно уменьшал количество писанины. Но вот не так давно обсуждали его в джаббер-конференции [email protected] (кстати, официальная конференция python.com.ua), [...]

S-expression markup

У меня некоторое время назад появилась мысль - а почему бы не сделать простой синтаксис разметки на секпах? Ведь это сразу убивает одну из самых напряжный вещей в маркдауне - невозможность набирать разметку, не переключаяся на латиницу. Даже брать [...]

Mercurial vs git

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

Exception #07

Итак, после полугодового перерыва - Exception опять с нами. В этот раз в расширенном формате (два зала с параллельными докладами) и не только про питон (хех, про Ребол - это точно интересно :). Так что, господа, устремляемся регистрироваться! :-) P.S. Хорошие [...]

ImprovedImageField

В процессе работы над одним проектом я в очередной раз столкнулся с тем, что джанговский ImageField меня ну никак не устраивает - в нём отсутствует возможность ресайза при аплоаде, некак загружать картинки в разные директории1, кроме как по дате, [...]

5 инструментов

Давненько я ничего не писал, хотя причины вполне объективные - всю вторую половину января я усиленно делал диплом и готовился к запуску сайта, и потому начало февраля выдалось очень продуктивным - 2 февраля таки запустился наш проект, [...]

Производительность JavaScript

Только что зашёл ради интереса на проверялку скорости от MooTools, проверился в двух браузерах - в Firefox 2 и в Conkeror’е (который суть XULRunner - тот же движок, что и Firefox 3). И вот что интересно: несмотря на относительно немалое [...]

Кто скушал мои мозги?

Заметил совершенно случайно, он при коннекте в топ запрыгнул: S UID PID PPID C PRI NI RSS SZ WCHAN STIME TTY [...]

Разметка постов

Я сейчас пишу все свои посты (и, соответственно, и вы все комментарии здесь) с использованием Markdown’а. Он достаточно прост для написания, несложен для чтения (в отличии от требующих значительно большего количества букв HTML или, OMG, bbcode ;-), но у него [...]

Conkeror. Кошерный браузер.

Я думаю, что большое количество людей слышали, видели, а то и сами пробовали расширения для Файрфокса, которые облегчают работу с ним с клавиатуры: Hit-o-hint, Firemacs, Vimperator. Я как-то пытался пользоваться каждым из них, но у них было одно общее свойство [...]

2007

OpenID refactoring

Хорошие новости - я порядочно переделал механизм работы с опенидом в блоге. Правда, сами внутренности openidconsumer почти не подверглись издевательствам, изменения прошли в основном в коде работы с пользователем. Но зато для пользователей поменялось всё порядочно. Во-первых, теперь после попытки логина с неизвестным блогу [...]

Дебаг Джанги

Как проходит дебаг джанги обычно? В 90% случаев хватает внимательно изучить желтенький джанговский трейсбек ошибки, со всеми переменными и кодом, ещё в 9% хватает расставить print‘ы, а в совсем запущенных случаях приходит на помощь

Пользователь и его профиль

Известная штука, что у Django есть статическая (неизменяемая официально поощряемыми путями) модель User и костыль для дополнительных полей (которые может каким-либо образом использовать приложение) в виде настройки USER_PROFILE, указывающей на модельку-профиль. В результате использования такого костыля, если не делать дополнительных [...]

Сортировка почты

Настраивал себе локально чтение почты (кое-какие потоки почты забираю вместо перенаправления на гмейл, проще жить выходит :-), ну и сортировку соответственно. Так как я не слишком люблю клиенты типа Тандербёрда или Сильфид, то основным способ у меня всегда был procmail. [...]

Django performance: Apache vs Nginx

Неделю назад я сравнивал производительность и устойчивость работы nginx’а с Django с помощью mod_wsgi и fastcgi. Сравнение показало, что скорость работы при наличии быстрой локальной (читай - практически не оказывающей влияние) БД практически не отличается, отличается только количество используемых ресурсов. А сегодня я [...]

Django performance: Apache vs Nginx

Just a week ago I have compared performance and stability of nginx working with Django through mod_wsgi and fastcgi. Comparison revealed that performance with fast local DB (i.e. time of DB work is negligibly small) is almost identical and all the difference [...]

Темы

С подачи lorien‘а блог обзавёлся возможностью переопределять только нужные темплейты в темах. Всего лишь добавил загрузчик темплейтов (это оказалось очень просто), да настройку THEME - теперь первым делом темплейты ищутся в themes/{{ THEME }}/, а уж потом в templates/. [...]

JSON в куках

В принципе, идея лежит на поверхности: JSON - такой формат, который легко понимается и серверными языками, и джаваскриптом, и часто человеком. Потому хранить какие-то маленькие кусочки информации в виде словаря в одной куке бывает очень даже удобно. Но есть один момент, [...]

Nginx + Django: mod_wsgi vs FastCGI

Вчера вечером таки связался с автором mod_wsgi (до этого были какие-то проблемы он говорит, что мне отвечал, но у меня даже в спамбоксе пусто было) и скомпилировал nginx с mod_wsgi (ха-ха, как много решают слеши в нашей жизни ;-). Запуск джанговского приложения под [...]

Nginx + Django: mod_wsgi vs FastCGI

(Translation of my previous post). Yesterday I have finally sorted out my trouble with compilation of nginx' mod_wsgi and got it working (how much means slash in our life ;-). Configuration to get Django application running is quite simple - django.wsgi, [...]

Пробелы в Питоне

Нашёл отличную статью Оливера Фромме про пробелы и отступы в Питоне. Рекомендуется к прочтению, особенно противникам Питона.

Пара слов о декораторах

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

Шрифтовая эпопея

В общем, после моих жалоб на качество линуксовых шрифтов я получил несколько наставлений. ;) Первый несколько помог, спасибо Паше, но оставались кривоватые места - не так много, но изредка напрягающие. И вот по ссылке из ещё одного коммента [...]

Reinteract

Симон Виллисон дал ссылку на reinteract, интерактивный интерпретатор для питона, можно даже сказать - следующее поколение IPython. Но IPython - это консольная штука, а [...]

Переезд

Вчера вечером заимпортировал все более-менее значимые посты из старого вордпрессовкого блога, осталось решить непонятную траблу с flatpages (сейчас почему-то работает только about :( ), и переезд можно будет считать окончательно завершённым - поставлю со старого блога редирект на этот, по [...]

query.py

Я сейчас не очень плотно слежу за сообщениями в django-developers, но всё же избирательно тыкаю на треды (избирательность больше зависит от автора первого поста, чем от темы ;) - и наткнулся на сегодняшний (для Австралии :-) пост Трединника о рефакторинге [...]

Подкасты

Недавно Макс Ищенко подал отличную идею - непонятно, почему я не додумался сам - когда едешь в машине, слушать подкасты. А так как я езжу в ней каждый день утром и вечером минимум почти по часу (сегодня, если верить [...]

Сноски и обновление пингбека

Как я и писал, я решил добавить поддержку сносок. Оказалось это совсем просто, потому что порт Markdown на Python уже имеет такой плагин. Потому все изменения свелись к тому, что кинул mdx_markdown.py в каталог проекта и немножко

Комментарии

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

Связанные объекты

Сегодня наконец-то отбросил свою лень в сторону и сделал то, о чём так долго твердили большевики! :) Перед всем этим текстом хочу сказать спасибо Диме Догадайло, который собственно всё это и сделал. Недавно он мне говорил, что хочет этот код выложить в опенсорс, [...]

Линухсы, линухсы...

Линукс не был моим основным десктопом (точнее, вообще не появлялся на нём) в течении вот уже трёх с половиной лет (краткое появление в сентябре прошлого года не считается, он появился по работе и быстро исчез ;), но вот с пару неделек назад я [...]

Apache + mod_wsgi + Django

Меня тут попросили описать то, как я запускаю джанговские приложения в апаче. Я решил не растягивать резину в долгий ящик и просто привести свой конфиг с комментариями. :) <VirtualHost *> ServerAdmin [email protected] ServerName piranha.org.ua [...]

Кеширование ContentType в память

Сегодня обсуждали немного generic relation’ы из Джанги, и пришли к выводу, что неплохо было бы сами ContentType‘ы закешировать прямо в память - мы постоянно используем один и тот же набор из нескольких типов (модельки, которые можно тегать и ставить [...]

Seek'n'read

Ощутил в полной мере только что, чем грозят флешки. Вот казалось бы, не слишком быстро, но жить можно: [root@(none) root]$ hdparm -t /dev/discs/disc0/part1 /dev/discs/disc0/part1: Timing buffered disk reads: 26 MB in 3.05 seconds = 8.52 MB/sec Но время [...]

Erlang lists:filter

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

PuTTY

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

ZFS во FreeBSD

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

Nginx и WSGI

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

mod_wsgi

Всё, перевёл все свои виртуалхосты, использующие питон, на mod_wsgi, который куда лучше и проще настраивается, чем mod_python. Кроме того, он позволяет запускать процессы в таком себе daemon-режиме, благодаря чему теперь мой меркуриал запущен из-под моего [...]

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

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’а

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

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

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

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

Импорт из WP

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

def mySqrt(x): return x*x

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

Django's ORM

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

Nine Inch Nails

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

lighttpd angel

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

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

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

Pingback server

Фух, наконец-то сделал я его. Если говорить откровенно, самая плохая часть в нём - выдирание контента. Я б не против её переделать (а то там бьютифулсуп неоднократно парсит :( ), но сейчас я уже не в состоянии, хочу просто проверить, [...]

Pingback client

Ну, вот вроде и внедрил клиента pingback’а себе в блог. Реализацию, естественно, спёр из Cicero. :) Вот сейчас попробую послать его сам себе. Правда, там (в Cicero) он был жестко привязан к модели данных, а я немного его [...]

KMFDM

Одна из немногих групп, которые растут с каждым альбомом, ИМХО. Как началось в ‘92 всё с Money, так до этого момента музыка как минимум не падала в качестве, а так и поднималась. Огромной художественной ценности, в силу отсутствия каких-то сложных запилов [...]

Django queryset refactoring

Адриан сегодня написал в рассылку, что хочет ускорить проведение рефакторинга QuerySet’a! Так что есть надежда, что в джанговом ORM’е скоро появится group by и прочие вкусные штуки. :)

Плюшки

Вечер, естественно, таким продуктивным, как два целых выходных, быть не мог, но всё же немножко добавилось - во-первых, толковое отображение того, где просматривающий сейчас находится (архив он смотрит или отфильтровал по тагу), и, во-вторых, фиды по тагу. Теперь есть 4 вида [...]

Ссылочка

Добавил в меню сверху ссылочку, чтобы было понятно, куда идти в случае жажды увидеть исходный код и когда я его закоммитил. И вообще куда можно написать баг-репорт или пожелание (я таки понемногу начинаю надеяться, что не только я буду [...]

Изменения

Хе-хе, вчера написал вечером про то, что комментарии можно редактировать, изменения в репозиторий закоммитил, а обновить блог - забыл. :) Теперь всё на месте и работает. Только, правда, оно как-то не слишком быстро меняет на текстареа и обратно. Это похоже потому, [...]

Редактирование комментариев

Отлично, к концу дня стало возможным редактирование комментариев. Итого из возможностей нормального блога сейчас не хватает только pingback’ов. Если меня случайно не пробьёт в какой-то из вечеров заняться, то придётся ждать пару недель до реализации… потому что на следующих двух обоймах [...]

jQuery

JavaScript - это такая злая и непонятная мне штука, и только jQuery помогает мне его побороть. Без этого фреймворка я бы просто забил бы, наверное, на все аяксовые и джавоскриптовые [...]

Поддержка OpenID

Что-то меня прям пробило на код. :-) 4 месяца ничего не трогал, а за последние два дня прям сделал выше всяких норм. :-) В общем, OpenID работает. Причём он привязан к собственной джанговой системе аутентификации. При логине с новым опенидом предлагается [...]

Markdown

Совсем забыл написать - естественно, в комментариях можно использовать маркдаун. :)

Таги

Когда я впервые употребил при Поле (мой CTO) слово “тег”, он меня поправил и сказал “таг”. Но я всё никак не могу привыкнуть и начать его произносить. :-( Однако ж написать его намного проще - больше времени на контролирование себя [...]

Светлое будущее

Пятница вечер и суббота утро - отличная вещь. Именно она мне позволила сделать иерархические комментарии и фиды ко всему, чему надо. На очереди OpenID и теги! :)

Апдейт

Что-то забросил я этот блог. За последние два дня таки взялся и проапдейтил софт: теперь всё работает под последним транком Django (и последним же pytils ;), поубирал разные нестыковки в коде, причесал его (всё же за последние четыре месяца [...]

Сложность языка

Чем дальше, тем больше я сталкиваюсь с английским (а понемногу и с другими иностранными) языком. И вот у этого самого английского есть одна очень заметная штука - он заметно проще русского (ну с чем я ещё могу сравнивать? ;)). Рассуждать [...]

Emacs tabbar

Какое-то время назад я писал про то, как я переключаю буферы в Emacs’е. Но в конце-концов меня задолбало отсутствие табов и я решил поставить и разобраться в таббаре (я его раньше ставил, но он раздражал своим внешним видом и [...]

Django newforms

Сама по себе Джанга замечательна именно тем, что многие, очень многие вещи в ней делать намного проще, чем где-либо ещё. То есть практически любой компонент сделан так, что использовать его невероятно удобно. Но вот обработка форм (в Джанге ею занимались [...]

iTunes

Попробовал в очередной раз (уже 7.0). В очередной же раз убедился в совершеннейшей неюзабельности сего продукта для нормального человека. Глобальные хоткеи - отсутствуют, а посторонние программы глючат и работают бестолково в большинстве случаев. Интерфейс достаточно тяжёлый, чтоб тормозить на неплохих [...]

Korn - UNplugged

В большинстве случаев я слушаю вообще довольно тяжёлую музыку (преобладающее направление - industrial metal/rock, но походу даже до death-metal и metalcore’а дохожу), и среди неё обретается в том числе и Korn (http://www.last.fm/user/p1r4nh4/) - особенно после выхода последнего альбома, See [...]

Bugatti

Bugattis flooded European racetracks for almost two decades, winning more races than any other marque. But in those instances when Bugatti went head-to-head with Alfa, Bugatti usually lost. The P2 quickly dominated racing and continued to be competitive over a [...]

Django render_to_response

Есть в Django одна очень часто используемая мной функция - шорткат render_to_response. По сути, её параметрами является имя темплейта и словарь передаваемых в него переменных. И вот переменные можно передать двумя путями. Либо явно указать его здесь в словаре, либо [...]

Поворачиваемость

Когда ты видишь дерево, о которое сейчас ударишься, - это называется недостаточная поворачиваемость. А вот когда только слышишь и чувствуешь - это избыточная. ;)

2006

LiLaLo

Замечательная программа для записи того, что происходит в консоли. Заодно генерит потом HTML, чтобы можно было удобно посмотреть/показать. 5 баллов. ;) P.S. Ей бы еще английский вариант описания…

The Pirate Bay

…кросавчеги. ;) Я этого раньше как-то не видел. P.S. Кому будет напряжно прочесть весь текст, читать со слов “instead of simply”. ;)

И еще про грамотность

Отсюда Skive: Хотя, может быть, безграмотность это как расстегнутая ширинка, указывать на нее во всеуслышание тоже вроде хамства, нужно намеками или с глазу на глаз, тогда я не прав выше. Но я с трудом представляю себе ситуацию, когда обладатель этой [...]

Истории о Ходже Насреддине

Однажды, когда Ходжа Hасреддин был муллой, люди попросили у него помолиться, чтобы Аллах послал дождь для хорошого урожая. Ходжа исправно молился, но дождя все не было. Hаконец, люди стали говорить, что молитвы нового муллы не доходят до Аллаха. Мои молитвы [...]

Учение - свет (с)

Читаю и рыдаю. ;) From: Odhiambo Washington Subject: Re: [vexim] Unknown User To: vexim mailing list * On 02/11/06 09:36 +0000, Adam Sweet wrote: | Alexander Solovyov wrote: | > Ave, Mark Tinka. | > According to your message: | > | >> I've tried working with the 'local_part_suffix [...]

Грамотность

Последнее время всё чаще замечаю, что чем безграмотнее человек - тем он бестолковее программирует, проектирует, пишет конфиги… Тем более дурацкие вопросы задаёт, тем сложнее после него разобраться, где что как и почему, и т.д. Именно когда безграмотен, а никагда пытаецо кагто [...]

Установка django

Попросили написать о том, как поставить django в WinXP. В принципе, достаточно простая вещь. Поставить Python 2.4 (хотя, теперь уже наверное можно и 2.5 ставить? ;) Скачать либо последний релиз, либо svn Django. Реально есть два варианта действий. Попроще: setup.py [...]

Emacs

UPD: Вряд ли кто сюда доберётся, но если что - конфиг мой лежит на гитхабе. Ясное дело, любой человек, который достаточно плотно общается с компами - ищет себе подходящий редактор. Но если у большинства людей эта проблема не стоит достаточно [...]

zsh

Несмотря на то, что большинство знакомых моих пользуются tcsh или bash, есть люди - и я среди них ;) - которые просто знают, что zsh лучше. ;) Даже если не упоминать пресловутое автодополнение (его вроде в bash’е в третьей версии кардинально улучшили?) - [...]

Web servers

Н-да… Однако nginx и lighttpd - нельзя сравнить. Конечно, у lighttpd есть поддержка cgi (что, в принципе, очень удобно и хорошо), однако во всём остальном (особенно учитывая, что у nginx’а наконец появился параметр

Переключатель раскладки клавиатуры

Обычно все для этого используют две различных комбинации - Alt+Shift или Ctrl+Shift. Я же, спасибо Линуху, уже года три использую в этом качестве кнопку Caps Lock. Плюсов куча - во-первых, это всего одна кнопка, а не комбинация. Во-вторых, её никогда не нажмёшь [...]

Text Editors

Выбор текстового редактора - это однозначно очень напряжная штука. Помню, когда-то давно, окончилось это где-то на первом курсе - я использовал Aditor, и был вполне доволен. Но как раз и отказался от него потому, что как раз начал в консольке рыться [...]

Оптимизация в питоне

Есть тут у нас на сервере скрипт, который занимается относительно простым с виду делом - выводит в том формате, котором нам хочется, файлики в определённом каталоге. Ну чтоб качать их можно было. Написан был мной и Саней еще в [...]

Lets go

Первый пост в этот блог. Это уже вроде третий блог, не считая жж-шного, но два предыдущих как-то не прижились… Ну посмотрим на этот. UPD от 11.10.2007: импортировано в четвёртый блог, в первый раз запущенный 4-го апреля 2007 года. ;) UPD от 07.03.2010: пятая инкарнация. [...]