• 256 цветов в терминале ⇒ уровень nightmare



      Я тут строю некоторый велосипед с длинным отладочным выводом в stdout и меня взволновал вопрос серьезной расцветки лога. Современные терминалы xterm умеют и любят 256 цветов, но вот люди, которые придумывали escape-последовательности для этой палитры, стреноженные обратной совместимостью и латентной склонностью к криптографической эмпирике, все сделали так, что у меня ушло несколько часов, чтобы со всем этим разобраться. Интернет тоже не изобилует подробными разъяснениями, как оно там устроено.
      Вкратце, текст в иксовый терминал можно нынче выводить кучеряво. Я набросал некое подобие сервиса, типа визивига для генерации escape-последовательностей. Выбрал цвета, начертание шрифта — получи набор закорючек. Тех же, кому интересны потроха — прошу под кат.
      Читать дальше →
    • Используем Twitter Bootstrap в RefineryCMS

        RefineryCMS — это еще одна RoR CMS. Поддерживает Rails3.2, удобна. Я не стану тут заниматься пересказом пресс-релизов, если интересно — на сайте можно поиграться в демо. Поскольку родилась она не вчера, из коробки поддерживать Twitter Bootstrap не умеет. Есть костыль refinerycms-bootstrap, но меня он не впечатлил. Поэтому я расскажу, как быстро прикрутить bootstrap самому. NB! Эта заметка не предполагает, что вы уже видели RefineryCMS, но и не рассказывает именно о ней: рассказ пойдет строго о прикручивании TB.
        Читать дальше →
        • +9
        • 11.9k
        • 3
      • EventMachine ⇒ сбор информации из разных источников с последующей обработкой


          Самый простой способ наступить на грабли — использовать асинхронность. Я знаком с программистами, зарекомендовавшими себя как крепкие профессионалы, которые буквально пасовали перед многопоточностью. Для затравки расскажу мою любимую историю про deadlock (прошу прощения за боян, но уж больно хорош). Лет десять назад Associated Press поведало миру, как в аэропорту шведского города Крисианстад пилот пытался посадить пассажирский самолет, однако никто из диспетчеров не ответил на его запрос. Оказалось, что диспетчер еще не вернулся из отпуска. В итоге самолет кружил над аэропортом, пока срочно не вызвали запасного диспетчера, который и
          посадил самолет через полчаса. Разбор полетов показал, что причиной стало опоздание самолета. На борту которого и находился тот самый диспетчер, спешивший на работу из отпуска.

          Итак, когда мы сталкиваемся с асинхронностью, нам приходится ломать привычную картину в голове: субъективно окружающий нас мир однопоточен. Если мы послали письмо, а через неделю получили ответ, для нас все происходит в пределах одного потока; нам не приходится отвечать за действия респондента и почтальона. А нашему коду — приходится.
          Чтобы упростить жизнь программиста, можно использовать паттерн Реактор. Лучшая (на мой взгляд) его имплементация для руби — EventMachine. Но и с ней бывают не очевидные моменты. Об одном из них я и планирую вкратце рассказать.
          Читать дальше →
        • If it looks like Google+, runs like Google+, and quacks like Google+, then it probably is Diaspora

            Слово «Диаспора» — греческого происхождения. Я нахожу вот это определение из библиологического словаря наиболее соответствующим смыслу, который вкладывали создатели:
            Диа́спора (греч. διασπορά — рассеяние), пребывание части народа вне страны его происхождения. Применительно к Свящ. Писанию термин обозначает ветхозав. общины, рассеянные в языч. землях (Иер 25:34; 2 Макк 1:27; Ин 7:35; Иак 1:1).

            Согласно википедии, идея создания проекта появилась у группы студентов Курантовского института математических наук (независимого подразделения Нью-Йоркского университета): Dan Grippi, Maxwell Salzberg, Raphael Sofaer, Ilya Zhitomirskiy, — после выступления 5 февраля 2010 года профессора Колумбийского университета Эбена Моглена «Freedom in the Cloud», в котором Моглен охарактеризовал централизованные социальные сети как «шпионящие за свободой».

            Я перепечатал основные вехи создания «распределенной социальной сети» не случайно: я слежу за проектом практически с основания, а сегодня руки добрались до регистрации на одной из «нод» — распределенных серверов под управлением «Диаспоры». Я зарегистрировался (на https://diasp.org) и немного охренел. Никому ничего не напоминает этот интерфейс?

            Подробности
          • zsh :: настраиваем «правое» приглашение командной строки

              Ковыряясь с настройками zsh, наткнулся на весьма интересное решение для приглашения командной строки, которое размещается в этом шелле справа. Обычно туда принято помещать часы, но мне весьма приглянулась идея разместить там также нотификатор заряда батареи. В зависимости от уровня заряда, нотификатор показывается зеленым, желтым или красным цветом. Автор идеи зачем-то приплел к решению python, я все переписал на родном шелле.
              Выглядит это как-то вот так:
              Command line prompt, zsh
              Читать дальше →
            • Эмуляция интерфейса iPhone с помощью CSS

                UiUiKit Некоторое время назад мне потребовалось «красиво» оформить логи бесед в жаббире. Поскольку рисовать я не умею вовсе, я обратился за подмогой к мирозданию. Поиск по готовым решениям открыл для меня малоизвестную, но, безусловно, заслуживающую внимания библиотечку. Строго говоря, это не библиотека. Это тщательно написанная и выверенная каскадная таблица стилей, позволяющая имитировать iPhone-интерфейс в браузерах.
                Координатные данные проекта UiUiKit (Universal iPhone UI Kit):

                Оригинально библиотека заточена под web-приложения именно для iPhone, поэтому всякий CSS3+ ограничивается указанием свойств только для webkit'а. Я пропатчил CSS директивами для остальных и развернул демонстрационную страничку, чтобы можно было сразу потыкать в элементы интерфейса.
                Выглядит симпатично (на картинке в начале топика — скриншот моего браузера). Приятного использования!
              • Карма и «Заря»

                  Здравствуйте, с вами снова инфернальный нонконформист Матюшкин со своей чешущейся кармой.

                  Я далек от того, чтобы солиптически загибать мироздание в тор Клейна вокруг себя, но наблюдения мои меня обескураживают. Спонсор хроники событий — настольный будильник «Заря».

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

                  Так что карму таки допиливают в администрации. Что ж, будем посмотреть, как говорят на исторической родине Остапа Бендера.
                • Здравствуйте, доктор, у меня проблемы с кармой

                    «90-60-90», или проезд по городу мимо гаишника


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

                    Гаец с радаром

                    Поехали!
                  • Почему так?

                      Я хотел бы разжечь холивар.

                      У меня вот какой вопрос есть. Про расчет кармы. Я на сегодняшний день написал 5 заметок. Общее число ± за них — 157 плюсов против 11 минусов. Количество добавлений в закладки — 331 (я не добавляю свои заметки в закладки).
                      Рейтинг — +103.5. «509-й в рейтинге хабралюдей».

                      При этом карма снова меньше пяти и я не могу опубликовать следующую заметку. Кто этого не хочет? Желаю подискутировать с этим человеком.

                      Завтра я, наверное, опубликую не смогу опубликовать свои соображения насчет концепций расчета кармы.
                    • Аккуратная настройка клавиатуры

                        Вокруг нас появляется все больше людей, которые знают, чем дефис отличается от минуса, минус от тире, а знак дюйма от кавычек. Что там говорить, мне вчера секретарша прислала письмо, оформленное типографически точно. Для того, чтобы немного приблизиться к совершенству, не обязательно отягощать себя открытым окном «дополнительные символы» и унылым копипастом оттуда.
                        Большинство проблем в современных оконных менеджерах решается штатными средствами. Но что делать тем, кто хочет иметь возможность в одно нажатие набирать какие-нибудь экзотические символы, наподобие знака бесконечности (∞), интеграла (∫) или карточных мастей ()?
                        Под катом я расскажу и как настроить клавиатуру для правильной типографики («—») штатными средствами, и как расширить возможности до быстрого набора любых символов.
                        Поехали!
                      • PyUNO — быстрое незначительное редактирование xls-отчета из Python

                          Просто и быстро


                          Не так давно я столкнулся с необходимостью запротоколировать список изменений в нашем ПО. Заказчик прислал мне формуляр, который я должен был заполнить в соответствии с их внутренними требованиями к документации. Я открыл прилагавшийся к письму файл «Изменения 1.xls» и немного приуныл. Точнее, мне в голову последовательно пришли мысли об увольнении, а затем — о самоубийстве. Формуляр состоял из 14 колонок. Быстро перемножив в уме количество колонок с числом внесенных нами атомарных изменений (около пятисот), я пошел курить.
                          Сделать такую работу руками мне не под силу. Большинство данных (номера новых версий, описания изменений и т. п.) у меня, конечно, имелись в наличии, но в разных местах и самых причудливых форматах. Но семьсот копипастов — увольте. Поэтому мне пришлось немного освоить PyUNO. На всякий случай — опишу вкратце процесс управления документом OOo из питоновского биндинга, вдруг кому пригодится.
                          Поехали!
                        • Xaraya CMS — глава первая, «Введение»

                            Xaraya (читается «Зарая») — не просто еще одна CMS. Она предоставляет вдумчивому администратору сайта, готовому потратить некоторое время на освоение архитектуры и понимание внутреннего устройства, фактически готовый фреймворк, позволяющий сделать все, что угодно.
                            Порог входа в Xaraya несколько выше, чем у других известных мне CMS, но, во-первых, ненамного, а во-вторых — поверьте, оно того стоит.
                            В данной статье я попытаюсь максимально упростить начало работы с Xaraya, а заодно — расскажу о том, как прикрутить к сайту всяких библиотекарш и шахматы. Все нижесказанное относится к ветке 1.* (последняя на данный момент версия — 1.2.3, качать имеет смысл сразу full, чтобы дополнительно не искать модули). Ветка 2.* как-то меня не впечатлила, очень многое переделано, обратной совместимости нет, многие модули еще не адаптированы — в общем, сыровато для стабильной работы.
                            Xaraya Logo
                            Поехали!
                          • Сквозная авторизация на своем сайте через Twitter

                              Прошли те времена, когда каждый форум на персональной страничке каждого Васисуалия Свердыщенко требовал отдельной регистрации.
                              Мы потихонечку привыкаем к тому, что оставить комментарий от имени своего OpenID/OAuth провайдера можно фактически везде. Также для всех популярных CMS давно написаны плагины сквозной авторизации Twitter/Facebook/Google/Яndex/Вконтакте. Кроме того есть DISQUS… Но что делать, если мы хотим предоставить пользователю стороннего сервиса какие-то дополнительные полномочия, не вынуждая его заводить отдельную учетную запись на нашем сайте? Особенно, если для нашей CMS пока нет чудо-плагина?
                              Я расскажу о том, как быстро и безболезненно прикрутить сквозную авторизацию к экзотической CMS и какие на этом пути встречаются подводные грабли.

                              Xaraya + Twitter

                              Поехали!
                            • Добавляем нужное в Firefox за час

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


                                Поехали!