Blog

  • Рили симпл

    Очень удобный аддон для Фаерфокса, о котором мне поведал simpson: Really Simple Sticky. Например, когда нужно постоянно держать перед глазами небольшой todo-лист. Одно жаль – нет горячей клавиши, чтобы его быстро показать… В остальном – очень рекомендую.

  • Vim, подстройка

    Уже наверное, года четыре постоянно приходится пользоваться Vim для редактирования файлов на серверах. Всегда знал, что настроить его можно, периодически встречал некоторые настройки, но никогда не обременял себя тем, чтобы взяться и отключить-таки этот злосчастный word-wrap или выставить-таки табуляцию нормальную. А сегодня просматривал Хабра-ленту и встретил, кажется, аж три поста, посвященный Vim’у. В общем, руки зачесались. Во-первых, чтобы где-то хранились настройки для редактора, надо создать файл .vimrc в вашей домашней директории, у меня это /home/decoder/.
    Открываем его и вбиваем самое главное:

    syntax on
    set tabstop=4
    set shiftwidth=4
    set smarttab
    set expandtab
    set smartindent
    set nowrap

    Думаю, все настройки вполне понятны. Вообще, в этом файле можно задавать кучу разных настроек, которые влияют на работу редактора. Я пока только мельком просмотрел, а разбираться толком буду чуть позже.

  • Тест Джоэла

    Как я говорил, читаю Спольски. В первой его книге “Джоэл о программировании” есть тест качества бригады разработчиков ПО. Решил вот опубликовать его результаты для компании, в которой сейчас работаю.

    1. Пользуетесь ли вы системой управления версиями исходного кода?

      Нет. Эта компания — вторая, в которой я работаю php-программистом. По какой-то непонятной мне причине ни в ней, ни в предыдущей не использовались такие системы, что очень печально. Насколько меньше стало бы проблем. Кстати, сам Джоэл советует в этом случае программисту самому начинать использовать CVS и постараться приобщить к этому остальных разработчиков.

    2. Можете ли вы выполнить сборку продукта за один шаг?

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

    3. Выполняете ли вы ежедневную компиляцию?

      Ну, нет. К сожалению, не знаю, как работает команда Java-программистов.

    4. Ведете ли вы базу данных ошибок в программе?

      Нет.

    5. Исправляете ли вы ошибки, прежде чем писать новый код?

      Нет. Часто ошибки обнаруживаются уже на этапе “промышленной эксплуатации”. И чаще всего исправление ошибок поручается совсем другим людям, которые до того никакого отношения к проекту не имели. Очень печальная ситуация.

    6. Есть ли у вас актуальный график работы?

      Хаха. Да, есть какая-то ерунда, которая забита в календарь в эксчендж-сервере, но актуальной ее точно не назвать. А также нет детализации графика, которой “требует” Джоэл.

    7. Есть ли у вас спецификации?

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

    8. Создали ли вы спокойные условия для работы программистов?

      Этот пункт меня расстраивает больше всех других, наверное. Нет, нет и нет. Рядом с программистами сидят менеджеры, вечно звенят телефоны, кто-то ходит, разговаривает. У половины программистов отвратительные кресла, через час сидения на которых задница становится квадратной. В общем, я бы сказал, что условия отвратительные.

    9. Стараетесь ли вы использовать для работы лучшие из существующих инструментов?

      Допустим, что да. То есть должен сказать, что у нас есть разные программисты. И разные приложения пишутся на разных языках (C#, Java, PHP, Perl) и используют разные базы данных (Oracle, MySQL, PostgreSQL). Правда, не знаю, кто и чем руководствуется при выборе языков, инструментов и технологий.

    10. Привлекаете ли вы к работе тестеров?

      Нет. Тоже момент ужасный. Все тестируют сами программисты. Потом еще может менеджер немного потестить.

    11. Предлагаете ли вы соискателям рабочих мест написать во время собеседования код?

      Ну, когда меня собеседовали, то вторая часть была — выполнение тестовых заданий. Задания были очень простые, вряд ли могли меня как-то оценить. Все, что можно было по ним сказать, что да, я хотя бы книжку “PHP за 24 часа” прочитал. Спольски сам советует проверять немного другое. Но зачтем.

    12. Проводите ли вы проверку “юзабилити” на случайных людях?

      Не, если генеральному понравилось, значит, так и будет.

    Итого три балла. Что по этому поводу пишет Джоэл: “В идеале вы должны набрать 12 очков. 11 очков — терпимое количество, а 10 или менее указывают на серьезные проблемы. Фактически большинство софтверных организаций работает, имея лишь два или три очка, и они нуждаются в серьезных улучшениях, потому что такие компании, как Microsoft, постоянно держать 12 баллов.”

    А как у вас?
  • Вечные поиски и моя лень

    Для меня просто постоянная проблема — выбрать себе редактор. Есть много просто замечательных, вроде TextMate. Но у него есть существенные минусы:

    1. Он не работает с windows-1251 (а у меня есть проекты, которые все еще в этой кодировке).
    2. У него нет по умолчанию автозавершения (а так как я очень ленивый, то мне это надо).
    3. Он стоит денег (помимо того, что я ленивый, я еще и бедный 🙂
    4. Он существует только для MacOS. Есть, конечно, E (for Windows) и какие-то аналоги для Linux, но E снова стоит денег. Получается, снова платить? Это (версии для всех платформ) важно потому, что дома у меня MacOS, а на работе Windows. Весьма вероятно, что скоро буду работать и на каких-нибудь никсах.

    Я также пробовал Eclipse, но у него обнаружилась своя проблема. На работе есть один проект. К сожалению, использовать системы контроля версий тут не принято. Для проекта используются сервер для разработчиков и production-сервер (как же оно по-русски — все время забываю?). На самом деле пока что и тот, и тот — для разработчиков, production-сервер — это терминал, на котором в действительности приходится тестировать работу приложения. В Эклипсе я долго-долго правил код (будто на сервере для разработчиков), потом скопировал на продакшн. Начинаю тестить на терминале, но получается какая-то раньше, как будто код старый… Смотрю, а он действительно старый. Причем и на продакшене, и на девелоперском. И только в самом Эклипсе он новый. Это ужасно, это какой-то бред. Ведь до того, чтобы проверить файлы не через проект в программе, я дошел совсем не сразу. Короче, ну его к чертям этот Эклипс. Не просто так, судя по всему, я никогда не рвался работать в нем.

    В общем, я в очередной раз вернулся к бесплатному Komodo Edit. Который почти всем хорош. Раздражают только мелкие детали. Например, когда пишешь код (вылезает подсказка), понимаешь, что что-то не так написал, и удаляешь несколько символов. Такие IDE как Zend Studio при этом показывают новую подсказку (варианты), а Komodo замолкает до тех пор, пока не дойдешь до момента, где он врубится-таки в ситуацию. Например, наберешь название функции до конца и он покажет какие там аргументы. Но я-то чаще эти подсказки использую, чтобы как раз-таки вспомнить, что там это за функция. Ну да ладно, наверное, придется с этим мирится.

    А к чему я это вообще начал-то? По какой-то причине Komodo Edit часто некорректно распознает кодировку файла. Я все про ту же windows-1251. Открываешь файл, и он думает, что это Latin-1 (на Windows) или MacCyrillic (в MacOS). Для того, чтоб его поправить приходится сделать последовательность кликов: Edit -> Current File Settings… -> Encoding: Cyrillic (CP-1251). Кажется, будто быстро. Но я же говорил, что я ленивый. Меня жутко напрягает все это делать каждый раз при открытии файла, а бывает, что последовательно открываешь по пятнадцать файлов подряд в поисках чего-то.

    Я начал искать пути ее решения. Сначала поискал расширения и плагины, но ничего такого не нашел. Потом осведомился, нет ли у Komodo каких-то “директив”, которые можно прописать прямо в файле, как это можно сделать в Vim для определения настроек табов (отступов) в конкретном файле. Тоже ничего.

    Тогда стал думать на тему макросов. Для них можно использовать два языка Python и JavaScript. Пайтоном я интересуюсь и пытаюсь даже изучать постепенно, но пока не готов на нем что-то делать (слишком большие промежутки между “уроками” и требуется много времени, чтоб вспомнить, как там и что).

    В общем, стал искать варианты для JavaScript. И хотел было реализовать вариант с “директивами”. Для поиска их нет никаких преград – простейшей регуляркой я достаю указанную мной кодировку, но вот что с ней дальше делать – вопрос. Вопрос, на который я так и не нашел никакого ответа. Просмотрел Komodo Javascript API, но и там про кодировку файла ничего не говорится. Поэтому я расстроен. Может, у кого-то есть мысли на эту тему?

    В общем, пока что-то конкретное не сделал, решил хоть как-то уменьшить эту цепочку кликов. И сделал макрос, который просто открывает сразу диалог “Current File Settings…”. Это просто:

    komodo.assertMacroVersion(2);
    komodo.doCommand(‘cmd_editPrefsCurrent’);

    И повесил его на сочетание клавиш Ctrl + Alt + P.
    Этот же пост публикую на Хабре. Может, кто знает ответ там?

  • Снова о программировании

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

    И тут недавно в руки мне попалась первая книга Сураски “Джоэл о программировании”. Невероятно интересная книжка, которую читаю взахлеб. Конечно, тут много говорится о темах, которые около программирования, в основном о самом процессе. Как к нему надо подходить и организовывать. Благодаря этой книге я понял, что над многими вещами я даже не задумывался, хотя следовало. Например, то, что он пишет (в самом начале) про конкатенацию строк в Си (и потом часто упоминает). Элементарная вещь, которая должна бросаться в глаза каждому, но я не заметил, когда читал K&R. Или о “прерываниях” программиста. Или о тесте Джоэла. В общем, умный человек делится своим опытом.

    Сам Джоэл сразу пишет, что его мнение в отношение любого освещаемого вопроса предвзято. Как я понял, в основном это касается операционной системы. Он предпочитает Windows, он с этой системой работает, и он ее хорошо знает. Но он ни разу не сказал ничего плохого про *nix. Да, пару раз критиковал, но аргументированно. А вот что меня поразило, это ненависть к Windows научного редактора издания. Он чуть ли не каждой сноской пытается доказать, что Win – зло. У меня самого от демонстрации такой слепой ненависти (в сочетании с аргументированными доводами Джоэла в пользу некоторых аспектов Вин) развивается обратное чувство – я стал все больше задумываться о том, что, может, хочу все-таки программировать именно для этой платформы? Проблема в том, что последнее время я все больше сближался именно с никсами, а чтобы перейти на другую ОС, придется потратить много лет.

  • Чернорабочий Атмарк

    Все забывал выложить фотографию моей плантации с чернорабочим Атмарком 1.0.

  • Яндекс-блоги

    Уже несколько месяцев пытаемся включить наш сервис микроблоггинга Публико в список сервисов Яндекса. Пара месяцев, правда, была потрачена лично мной ни на что (в это время я должен был привести RSS-ленту к валидному виду, что сделал в течение 10 минут, и научить наш сервис информировать Яндекс о новых записях, что делать очень не хотелось и я дооолго не делал). Но, наконец, я все подготовительные работы завершил. И в Яндексе ответили, что все данные приняты и переданы менеджеру, а при возникновении каких-либо вопросов они напишут. С тех пор прошла неделя. Списки сервисов (блогов и микроблогов) на поиске по блогам меняются каждый день. Но Публико там не появляется. И писем от них тоже нет. Что же это такое?

  • Простое решение

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

    Недавно в голову пришло одно просто решение! Надо просто убрать уплотнитель, чтобы закрытая дверь имела небольшой ход. Тогда чуть дернув дверь, понимаешь, что щеколда запирает ее. И все, все довольны.

    Вспомнил, что часто именно так лично я проверяю, закрыта дверь или нет. Интересно, а как это делают остальные?..

  • 4Gb

    Итак, я все-таки немного раскошелился и купил себе 4 гига памяти для бедненького моего Мака, у которого на борту все это время был лишь один и, хотя в большинстве случаев этого вполне хватало, часто, когда у меня было запущено большое количество программ, необходимость в экстра-памяти остро ощущалась. Купил 2 самсунговских планки по 2 Гб PC2-6400 800Mhz. Весь процесс установки я запечатлел. Прошу прощения за качество фотографий — Айфон при плохом освещении совсем плох. А еще за интерьер.
    Перед установкой

    Хорошо, что остался этот полиэтилен после заказа книжек 🙂

    Долго, очень долго мучился с этой дурацкой крышкой, перепробовал несколько отверток, а спас нож, которым я грубо отковырял ее.
    Стояла только одна гиговая планка :-/
    Которую я немедленно вытащил 🙂
    Новая и старая память
    Новые модули установлены!
    Крышка успешно закрыта…
    Загру-у-узка…
    И-и-и… Победа! 4 гига на борту, а я безмерно счастлив! 🙂
  • Javascript, динамическое создание кнопки и событие onclick

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

    Что было. Динамически создавал несколько объектов (textarea и две кнопки). По нажатию на одну из кнопок должно было аджаксом сохраниться то, что я написал, на вторую – восстановиться предыдущее значение. Поэтому при создании кнопок я вешал на них onclick функции типа savetext и restore с определенными параметрами. Делал это так:

    cancelbtn.setAttribute( ‘onclick’, ‘javascript:restore(“‘ + id + ‘”, “‘ + field + ‘”, “‘ + field_id + ‘”)’);

    И это работало в Firefox, но отказывалось работать в Internet Explorer 7 и ниже.

    В случае, если параметров нет никаких, то все делается просто. Но в моем случае надо было динамически создать кнопку и повесить на ее событие onclick выполнение функции с несколькими параметрами. В Javascript я не силен, поэтому немного поискал и нашел на одном из бесчисленных форумов совет от vasa_c. Применимо к моему примеру выглядит это так:

    document.getElementById(‘cancel_’ + field_id).attachEvent(“onclick”, (function(e) {restore(id, field, field_id);}));

    Упд. (23 июня) Совсем забыл написать одно очень важное замечание. Спустя день, когда начал тестировать код всюду, обнаружилось, что Мозилла в свою очередь не воспринимала тот самый способ, который нравился Ослу. Пришлось проверять браузер (Осел или нет) и в зависимости от этого навешивать событие.