продукты РСС
О чистоте кода
17 января 2012, 1:20
Нам пишет Алексей Чикин:
Хочу задать вопрос именно тебе, как человеку, который сделал Е2. Что важнее, сделать готовый продукт такой, чтобы был прост в обращении, красив, удобен, но при этом сделать его так, как умеешь, без использования всех этих современных паттернов проектирования, замудростей с объектно-ориентированным программированием и выпиливании внутреннего кода до совершенства, или же надо сделать, чтобы всё было кошерно, чтобы код удовлетворял всем современным требованиям?
Просто у меня дилемма. Я сделал нечто, что мне нравится, но я сделал это так, как я умею. И мои умения далеки от гуру-программирования. Стоит ли это нечто представить публике или всё таки убить какое-то время на изучение и рефакторинг кода?
То есть вопрос в следующем. Важно что там и как внутри устроено или результат важнее?
Смотрите, что является вашим продуктом? Код или полезное действие, который он обеспечивает? Я не даю исходники Эгеи, потому что продуктом является сам движок, а не его код. Бывает, конечно, наоборот: если вы делаете какую-то опенсорсную библиотеку, то сам код и является продуктом. В этом случае, несомненно, важно, как он устроен внутри. Но в большинстве случаев пользователи не взаимодействуют с кодом вообще никак и никогда, и поэтому его внутреннее устройство не имеет значения.
Но всё не так просто.
Проблема в том, что такое отношение к коду практически неизбежно влияет на качество самого продукта. Самое главное, что плохой код сильно мешает продукт развивать. Цена внесения изменения сильно выше, из-за того что нужно разобраться, как именно его внести, чтобы не сломать хрупкую конструкцию из хаков, патчей, нигде не сформулированных соглашений. Цена ошибки при таком изменении тоже, очевидно, возрастает — глюки и тормоза образуются лавинообразно.
Эгея вышла только этим летом, потому что я посвятил предыдущие три года приведению в относительный порядок её кода. Это немыслимо длительный срок для обновления программы, даже для некоммерческого проекта выходного дня. Сейчас мне намного проще добавлять разные плюшки благодаря проделанной тогда работе. Если бы я лучше писал код 8 лет назад, сегодня Е2 как продукт был бы в сто раз лучше, чем есть.
Или вот Биатлонтайм. Там совершеннейшая, беспросветная жесть под капотом. Потому что всё приходится программировать очень быстро. Вдруг оказывается, что судьи добавили кому-то 20 секунд времени штрафа согласно правилу такому-то, а код сайта не знает о том, что так вообще может быть. Приходится делать через жопу, прописывая исключение прямо в коде, потому что результаты публиковать надо прямо сейчас, и это важнее красоты кода. А вот заставлять себя потом привести всё это в порядок удаётся не всегда, и это уже мне мешает добавлять новые штуки на сайте.
Так что, конечно, вне всякого сомнения, результат важнее качества кода, но нельзя из этого делать вывод, что на качество кода можно плевать, потому что оно очень быстро начинает влиять на результат.
Отдельно хочу предостеречь вас от приравнивания понятий «качество кода» и «использование современных паттернов проектирования». Между ними нет ничего общего. Использование современных паттернов, ООП, модных фреймворков, валидной семантической вёрстки, распределённых систем контроля версий и всего другого сами по себе никому не нужны. Используйте их только тогда, когда сами точно знаете, какую именно пользу они приносят вашему продукту.
Почему в Эгее нет «ката»
24 октября 2011, 1:58
Я терпеть не могу блоги, где текст частично спрятан за ссылку. Вместо того, чтобы просто перепрыгнуть глазами на очередной абзац, ты должен куда-то нажимать, а потом ждать, пока оно загрузится. Ждать не хочется, поэтому ссылку открываешь в фоновой вкладке, а сам переходишь к чтению огрызка следующей записи. В результате чтение одного блога оборачивается десятком открытых вкладок. Более того, в каждой из этих вкладок открыты тексты, которые ты уже частично прочитал, и по мере того, как ты их разгребаешь, приходится заново вникать в том, о чём шла речь; искать, откуда продолжать чтение. Своими руками я не готов распространять эту болезнь по интернету, поэтому в моём движке такой функции нет и никогда не будет.
Вот доводы, которые мне приводят в защиту функции «Читать дальше».
«Но ведь не факт, что все мои заметки будут интересны читателям, зачем заставлять их скролить всё это, пускай выберут именно то, что им интересно читать». Этот довод я слышал неоднократно, хотя мне он представляется весьма нелепым. Ответ на него я когда-то уже давал у себя в комментариях, но кто ж его там найдёт? Процитирую прямо тут: «Если я что-то пишу, значит я хочу, чтобы это читали, и создавать специальные инструменты, чтобы написанное мною проигнорировать, я не буду. Я ожидаю от пользователей [Эгеи] такого же уважения к собственному труду».
«Я хочу быть как Илья Варламов и регулярно писать заметки с кучей фотографий, но тогда страницы получатся совершенно неимоверной длины». Вообще в Эгее можно изменить число записей на странице, сделать, например, не 10, а 5 или даже 3. Но «фотоальбом» и «запись в блоге» — несколько разные вещи. Формат блога явно не подходит для фоторепортажей (недаром отчёты о путешествиях лежат у меня в отдельном разделе сайта). И тот факт, что в Же-же есть кат, слабо лечит, всё равно читать фоторепортёров там довольно неудобно. Илья использует более эффективный приём решения этой проблемы: он просто пишет очень интересные репортажи.
«Слишком длинная страница с кучей фотографий сильно увеличит трафик, хотя даже не факт, что все заметки на ней прочитают». Как нетрудно догадаться, экономия трафика — случайный положительный эффект от плохого решения. Многие люди склонны из-за случайных положительных эффектов (СПЭ) считать плохие решения хорошими. Я всегда привожу в пример москвичей, которые по слепоте считают хорошим решением давать одной и той же станции метро разные названия на разных линиях, хотя это шиза. Чтобы экономить трафик, можете озаботиться скриптом, который будет откладывать подгрузку изображений. Если он будет хорошим и вы поделитесь, я рассмотрю возможность его включения в движок, но «Читать дальше» тут ни при чём.
Напомню, что Эгея — движок для хороших и интересных блогов. Блоги на Эгее всегда хочется читать дальше, и для этого не нужно нажимать никаких кнопок или ссылок.
YUI AutoComplete
10 мая 2006, 11:57
| Pixel-Apes' Tocco | YUI AutoComplete | |
| внешний вид | автозаполнение прямо в строке ввода | полностью настраиваемый; выпадающий список вариантов под строкой ввода, или автозаполнение прямо в строке, или и то, и другое |
| возможность выбора одного из нескольких предлагаемых вариантов | нет | да |
| подгрузка списков подсказок через AJAX | нет; список всех вариантов скачивается сразу | да |
| возможность ввести задержку перед предложением вариантов | нет | да |
| выбор разделителя списка | нет; используется запятая | да |
| анимация | нет | да; список "выезжает" из поля ввода |
| вес | 3,5 КБ + размер списка | более 200 КБ + новый список скачивается заново периодически |
Пожалуйста, не используйте YUI AutoComplete в своих веб-приложениях для понта. Чтобы страница занимала больше 200 килобайт должны быть веские причины.
Tocco
26 апреля 2006, 16:19
Если кому-то оно нужно, то можете смело качать и пользоваться. Краткое пояснение и пример использования прилагаются.
Лицензия - GNU GPL 2. Вкратце. Tocco или его части могут быть использованы только в бесплатных веб-приложениях. Заметка об авторских правах и ссылки на http://pixel-apes.com/tiny-js/tocco/ и http://ilyabirman.ru/ должны присутствовать где-либо в описании приложения. В случае модификации исходного кода, наряду с этим должна присутствовать информация о том, кто и когда внёс изменения. В сам js-файл включать сообщения об авторских правах не обязательно, чего зря тратить трафик пользователей.
Данилу Иванову ещё раз большое спасибо за помощь в борьбе с backspace'ом.
Setty 1.0
17 апреля 2005, 23:22
Спасибо Кусо Мендокуси, что согласился разместить Setty там, где ему и положено быть, а также за полезные советы на тему того, как сделать Setty более удобно прикручиваемой штукой.
e2NP без e2
21 октября 2004, 23:43
[Server]
Host=yourserver.com
Fullpath=/np.php?password=yourpasswordТеперь
np.php будет вызывать каждый раз при смене трэка. В нём вы можете проверять пароль, а также:$_GET['track']- название текущего трэка$_GET['pos']- позиция, в трэке в момент, когда e2NP его обнаружил$_GET['length']- длина трэка$_GET['cv']- версия e2NP (передаётся только один раз!)
"e2NP".В
$_GET['track'] на самом деле содержится не название текущего трэка, а заголовок окна WinAMP. Разбивать эту строку на название группы и трэк вам придётся вручную.Кроме того.
$_GET['pos'] - это не то же самое, что $content['nowplayin']['elapsed'] в шаблоне design_all в e2. Дело в том, что e2NP чаще всего будет обнаруживать ваш трэк через 1-2 секунды, после начала его воспроизведения; именно это число и будет передаваться вашему np.php. В случае же с e2, elapsed содержит именно текущую позицию, т.к. e2 прибавляет к позиции, полученной от e2NP, то время, которое прошло с тех пор, как эта позиция была получена... Уф. В общем, если вы хотите пользоваться e2NP без e2, то либо всё это нужно будет реализовывать самостоятельно, либо придётся ограничится только названием трэка.Итак, e2 RC1 и e2NP 3
18 октября 2004, 16:33
Во-первых, версия v812 будет назваться Release Candidate 1, потому, что мне надоело уже откладывать и откладывать релиз. Если v812 окажется достаточно стабильной (что крайне маловероятно), то её и назовём релизом.
См. также: Верлог e2.
e2NP 3: NowPlayin Client
Во-вторых, новая версия NowPlayin! Впервые мне не стыдно её показать людям. Она, в отличие от e2NP 2.x:
- Имеет удобный текстовый ini-файл
- Не требует никаких дурацких dll'ок, поэтому работает не только на моём компьютере
- Не выполняет недопустимую операцию, когда не может получить доступ к интернету
Она была сделана благодаря:
- полезной ссылке на статью WinINet Functions в MSDN, которую дал Shade в комментариях к позапрошлой заметке
- помощи Дмитрия Бирмана по освоению WinINet и подключению его к программе
- помощи Павла Леонидовича Цытовича и Юлии Шабунио в борьбе с указателями и строками на Си.
См. также: Документация по NowPlayin.
Calliope
19 августа 2004, 20:21
Скоро e2 переедет на Calliope, если его автор, наконец, сделает списки (смайлик). А то форматтер моих-рук-дела сильно глючный, и добавление в него новых фич делает его ещё более глючным. И тормозным.
Кстати, использующийся сейчас в e2 кавычкер Helicon разработал тот же человек. И имя ему Константин Савельев! (Спасибо, типа)
