• Технология JPEG: анализ пространства решений

      Изображения в формате JPEG, помимо собственно файлов с расширением .jpg, можно встретить внутри PDF-файлов и TIFF-файлов.


      Стейкхолдеров технологии JPEG можно, наверное, разделить на следующие группы:


      • разработчики фотоаппаратов и сканеров;
      • фотографы (большие фотографии в хорошем разрешении с высокими требованиями к качеству);
      • соцсети и CDN'ы типа imgix, которые раздают залитые фоточки неконтролируемого UGC-происхождения, количества и размера в пережатом виде;
      • вебмастеры, которые управляют умеренным количеством не-UGC картинок с контролируемым качеством;
      • любители отсканированных бумажных книг и прочих исторических источников;

      Автор этой статьи принадлежит в основном к последней группе, и точно не принадлежит к числу художественных фотографов. Это должно вносить в повествование определенный перекос, который, тем не менее, полезен как раз для иллюстрации возможных траекторий в пространстве решений.

      Читать дальше →
    • Базы данных и NoSQL (Гл. 4 книги «Масштабируемые и высокопроизводительные веб-приложения»)

        В этой главе мы обсуждаем базы данных, реляционные и NoSQL, которые работают на одной машине. Именно этот режим работы будет являться тем кирпичиком, на котором строятся распределенные базы данных.
        Читать дальше →
        • +6
        • 18.1k
        • 4
      • Прямая видео-трансляция с TechCrunch Moscow

          Привет! Хотел порадовать хабражителей!

          Конференцию TechCrunch Moscow, на которой выступит множество известных личностей ру-нета можно будет смотреть онлайн, благодаря нашей технологии «Телемаркер». Трансляция начнется 13 декабря, где-то в 10:00 по Московскому времени.

          p.s. Телемаркер написан на благородном Ruby и мы все еще ищем рабочие руки :)

          Под катом то, как это примерно будет происходить. (осторожно, скрин)
          Читать дальше →
        • О монадических технологиях

            Кирпичёв правильно пишет про небрежность интуитивного понимания императивных языков: http://antilamer.livejournal.com/300607.html.

            Однако, мне кажется, что важно было бы озвучить, что всё то, что сейчас скрывается под именем «монада» — само по себе достаточно спутанно в плане педагогики и евангелизма.  Классическая шутка SPJ/Вадлера звучит как «нам следовало назвать ЭТО warm fuzzy things, чтобы не пугать людей теоркатом».  Шутка поразительно недальновидная.   Проблема лежит в той же плоскости, что и называние стоящих перед тобой задач словом «stuff» (это то, с чем борется Аллен в своём GTD).  
            Монады в настоящий момент являются миру как сложный ком из исторически обусловленных причин, проблем, решений, технических возможностей и теоретических основ (как алгебраических, так и аспектов теории вычислений). 
            Все эти наслоения можно (и нужно) расщепить в первом приближении так (порядок приблизительно случайный):
            • стремление к экспликации эффектов (чистое внедрение императивно-подобных моментов в вычисление), (см. труды Вадлера);  здесь мы включаем ввод-вывод, STM, параллельные вычисления и проч.)
            • удобный механизм для материализации базовых микро-стратегий вычисления — вызов функции (call-by-name/call-by-value), многозначность, смена состояния (присваивания!), обработка исключений, останов при неудаче, continuations, бэктрекинг;
            • typeclasses как механизм внесения монад в язык, и как следствие — удобный механизм для мета-перехвата вычисления (невероятно удобно для domain-specific embedded languages);
            • строгая проверка типов, проистекающая из использования typeclasses, и позволяющая механически проверять корректность использования объектов;
            • существование монадических законов, в которые укладываются монады, что позволяет материализовывать абстрактные комбинаторы; это позволяет находить порой неожиданные изоморфизмы между различными предметными областями, а также помогает при оптимизации и верификации программ;
            • проработанная теоретическая основа (теория категорий), на которой базируются монады; это облегчает жизнь создателям базовых библиотек, на которых потом базируется всё реальное программирование;
            • монады — лишь один из классов в длинной цепочке интересных алгебраически обусловленных классов, некоторые из которых слабее монад, а некоторые — сильнее: Functor, Applicative, Monoid, Traversable, Foldable, Monad со товарищи, Arrow со товарищи;
            • стремление к материализации некоторых видов вычислений в алгебраическую структуру (моноидальные вычисления); это открывает широкий простор для оптимизаций, верификации программ, создания абстрактных комбинаторов, а также устранение unbounded recursion — по мощности результатов это похоже на то, как когда-то ввод-вывод был надежно изолирован в IO Monad;

            Потратим по паре абзацев на каждый пункт.
            Читать дальше →
          • Аудит системы контроля версий, ч. I

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


              Для анализа нам потребуется описание структуры веток, список участников
              процесса и область их ответственности, описание потоков изменений. Для
              наглядности можно попробовать нарисовать пару диаграмм: граф потоков изменений
              по веткам и древовидную структуру потока, развернутую во времени. Мы считаем
              более важным (и более простым) первый график, тогда как традиционно во многих
              текстах по системам контроля версий используется второй, не так чётко
              высвечивающий структуру.


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


              Читать дальше →
            • Масштабируемые и высокопроизводительные веб-приложения. Гл. 1. Протокол HTTP. Draft.

                Обсуждаемые темы: HTTP-запросы; HTTP-ответы; Оптимизация с помощью HTTP keep-alive; Оптимизация с помощью HTTP-pipelining; Оптимизация с помощью HTTP-кэширования: Кэширование в современных клиентах, Стратегии ревалидации, Отключение кэширования и интерактивные страницы; Оптимизация с помощью компрессии; Специфическая оптимизация отдаваемого содержимого; Комбинирование контента.

                Комментарии приветствуются.

                Читать дальше →
              • Subversion: чеклист по правильным коммитам

                  Предполагаем, что читатель: а) работает в коллективе; и б) осознал необходимость правильной работы с системами контроля версий или хотя бы поставлен перед необходимостью использовать таковую.

                  В примерах будет использоваться Subversion, хотя все рекомендации полностью применимы к любой другой системе контроля версий.

                  Грубо разделим фазы разработки проекта на три — дебют, миттельшпиль и эндшпиль.

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

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

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

                  Читать дальше →
                • Рунет на радио, ч. I

                    www.moskva.fm/play/4015/20080130/fromtime:21:05:30/
                    Аркадий Волож на «Эхо Москвы», 30 января

                    www.moskva.fm/play/4009/20071228/fromtime:10:32:38/share/
                    Альберт Попков у [Бачинского] и Стилавина, 28 декабря

                    www.moskva.fm/play/2015/20071204/fromtime:14:15:00/share/
                    Эдуард Шендерович на Радио «Культура», 4 декабря

                    www.moskva.fm/play/4015/20071108/fromtime:22:10:30/share/
                    Елена Колмановская на Эхо Москвы, 8 ноября
                  • классическая литература на portal.acm.org

                      ACM.org выложили целую кучу классической литературы в формате PDF (Как завести эккаунт на acm.org). Мой выбор:

                    • Идеи для проектов: UI сайта знакомств, ч. II

                        Первая часть: squadette.habrahabr.ru/blog/33820.html

                        Кратко: сегментируйте пользователей, задавая ультраспецифицирующие вопросы.

                        Зачем, как совершенно справедливо спрашивают нас в комментариях, вообще нужна т. н. «анкета»? Ехармони ладно, они продают «формулу». Пикред сначала действовал очень правильно (симпатия строго по фотке), но сейчас как дань традиции сделал короткую анкету (которая не используется в поисках, и правильно).

                        Всё убирайте. Оставьте только базу (фотка, пол, возраст, город, свободное поле «о себе»).

                        Наймите хорошего копирайтера (например, того, кто писал тест на сайте фильма «Чужие против хищника», www.film.ru/avp). Заставьте его придумать набор вопросов с мощными коннотациями («Раммштайн» или «Токио хотел»? Снег или ветер? SU(3) или E_8? Не забудьте привязать вопросы к возрасту пользователя.) Задавайте десятки таких вопросов указанным в первй части способом. Позвольте пользователю ответить «Я не понимаю, о чём вы». Постоянно придумывайте новые вопросы.

                        Сопоставляйте пользователей по двум-трём ответам (http://www.oreilly.com/catalog/9780596529321/index.html). Это будет хит: «Чувааак, эта тёлка, как и ты, любит IDM, римановы многообразия и сумчатых! Да вы идеальная пара!»

                        P.S.: У нас есть целая куча вакансий: undev.ru
                      • Идеи для проектов: UI сайта знакомств, ч. I

                          Кратко: деформализуйте процесс заполнения пользователем анкеты на сайте знакомств и интегрируйте его в процесс просмотра каталога анкет.

                          Несколько лет назад я попытался зарегистрироваться на якобы революционном сайте знакомств EHarmony.com. Фишкой сайта объявлялась огромная анкета плюс супер-формула. После заполнения анкеты вам предлагаются предположительно необычайно точно совпадающие с вами потенциальные партнеры. В анкете что-то около сотни (или больше) вопросов.

                          Разработчики сайта подошли к вопросу в столь любимом многими режиме — Режиме Отключенного Мозга.

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

                          Вчера я опять попытался зарегистрироваться — похоже, не изменилось ничего. Ослы!

                          Для того, чтобы сказать пользователю «прочь с сервиса» — достаточно было бы написать это большими буквами прямо на главной странице сайта, совершенно не нужно для этого программировать форму.

                          Решить всю проблему и фантастически снизить барьер вхождения можно простейшим способом:

                          а) входная анкета должна содержать минимум полей: логин-пароль, имя, мальчик-девочка, возраст, кого ищу (девочку-мальчика), опционально город страну («можно задать позже»). Крупная кнопка «ПУСТИТЕ МЕНЯ К МЯСУ».

                          б) сразу после регистрации юзеру показываем топовые анкеты в автоматически подобранном дефолтном диапазоне возрастов (логичном, а не как в Мамбе).

                          в) самое главное: всё время работы с сайтом пользователю показываем в заметном месте предложение ответить на очередной (случайно выбранный) вопрос анкеты, и обновляем список кандидатов в соответствии с ответом. чтобы заставить пользователя кликнуть — сообщаем «после ответа на этот вопрос мы отсеем 35% не подходящих вам кандидатов». Если пользователь не кликнул — на следующей странице показываем ему другой вопрос, никогда ни на чём не настаивая.

                          Все остальные следствия из этой идеи тривиально додумываются. Очевидно одно — существование ОВИР-style анкет на сайте, ориентированном на широкую публику и дезинтегрированным процессом её заполнения — это нонсенс, дурацкая традиция, поддерживаемая ленью и тупостью.

                          P.S.: У нас есть целая куча вакансий: undev.ru

                          P.P.S.: Вторая часть: squadette.habrahabr.ru/blog/33821.html
                        • Идеи для проектов: Радио «Невменоз»

                            Радио «Невменоз» — это попытка повторить популярность Двача в другой ведущей модальности.

                            Любой пользователь может закачать на сайт Радио «Невменоз» любой mp3-файл. После автоматической проверки этого файла (длина скажем не более трех минут, не тишина, не слишком громко) он ставится в очередь на проигрывание медиа-сервером типа Icecast. Файлы в эфире разделяются отбивкой с названием радио. Содержимое файлов никак не регламентировано.

                            За понравившиеся файлы можно голосовать на сайте в течение всего времени проигрывания файла. Лидеры голосования повторяются например в конце каждого часа. После проигрывания файлы стираются с сервера для защиты владельцев.

                            Очевидный способ монетизации: во время проигрывания файла можно отправить SMS на короткий номер. Такой файл будет проигран повторно, возможно — cразу же после проигрывания следующего файла.
                          • Дайджест на тему «Системы контроля версий»

                              В марте 2007 года в США случился политический скандал: никому не понятным образом в и без того одиозный Patriot Act были внесены изменения, позволяющие президенту США единолично увольнять федеральных прокуроров. Оказывается, ничего не подозревающие конгрессмены проголосовали за целую кучу поправок «пачкой», не осознавая, что среди них находится настоящая «бомба». Два абзаца были удалены, и добавлен один новый, и всё это произошло буквально за несколько дней до голосования, без уведомления, без обоснования, без оповещения заинтересованных лиц.

                              В кратчайшие сроки после введения этой поправки семеро федеральных прокуроров были уволены. Отголоски этого решения в американской политической картине чувствуются до сих пор.

                              Американские гики во главе с Тимом О'Рилли и Карлом Фогелем (первый: владелец небезызвестного издательства, второй: ведущий разработчик Subversion) призывают законодательные власти Америки к введению полноценной системы контроля версий, позволяющей предотвратить возможность повторения подобных инцидентов.

                              Источники:

                              а) Tim O'Reilly: «Why Congress Needs a Version Control System»

                              б) Wikipedia: «Dismissal of U.S. Attorneys Controversy»

                              в) РГ: Федеральный закон Российской Федерации от 4 декабря 2006 г. N 202-ФЗ О внесении изменений в Федеральный закон «О науке и государственной научно-технической политике» и Федеральный закон «Об архивном деле в Российской Федерации» (пример того, как не надо составлять commit messages)


                              * * *

                              Блог «Better Explained» в кратчайшие сроки завоевал мегатонну человеческого внимания, опубликовав два чарующе прекрасных с визуальной точки зрения описания систем контроля версий.

                              а) Better Explained: «A Visual Guide to Version Control»

                              б) Better Explained: «Intro to Distributed Version Control (Illustrated)»



                              * * *

                              А также:

                              а) Презентация Бена Коллинза-Суссмана и Брайана Фицпатрика (ведущие разработчики Subversion): «Худшие практики использования Subversion»

                              б) Симпатичная шпаргалка по Git

                              в) Шпаргалка по Mercurial