• Когда картинка красноречивее 1024 слов – прототипирование с MockingBird

      image Для написания ТЗ я задался вопросом поиска простого и удобного средства создания прототипов веб-страниц. Хотелось чего-то бесплатного и в онлайне, некой альтернативы Axure. Такой сервис удалось найти, его я и предлагаю вашему вниманию. Итак, встречайте www.gomockingbird.com – сервис, позволяющий создавать очень красивые прототипы легко и удобно.
      Помимо представления самого сервиса, этим постом хотелось также привлечь внимание общественности к полезной практике прототипирования.
      Читать дальше →
    • Магваеполия — создай успешную студию сам! Исходники

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

        image
        Читать дальше →
      • Как FriendFeed использует MySQL для хранения данных без схемы

        • Translation

        Условия


        Мы используем MySQL для хранения любых данных FriendFeed. Наша база данных растёт вместе с числом пользователей. Сейчас у нас более 250 миллионов записей, это записи пользователей (post'ы), комментарии, оценки («likes»)

        По мере того как росла база данных, мы время от времени имели дело с проблемами масштабируемости. Мы решали проблемы стандартными путями: slave-сервера, используемые только для чтения, memcache для увеличения пропускной способности чтения и секционирование для увеличения пропускной способности записи. Однако, по мере роста, использованные методы масштабируемости привели к затруднению добавлению новой функциональности.

        В частности, изменение схемы базы данных или добавление индексов к существующим 10-20 миллионов записей приводили к полной блокировке сервера на несколько часов. Удаление старых индексов требовало времени, а не удаление ударяло по производительности, так как база данных продолжала использовать их на каждом INSERT. Существуют сложные процедуры с помощью которых можно обойти эти проблемы (например создание нового индекса на slave-сервере, и последующий обмен местами master'a и slave), однако эти процедуры настолько тяжелые и опасные, что они окончательно лишили нас желания добавлять что-то новое, требующее изменение схемы или индекса. А так как наши базы сильно распределены, реляционные вещи MySQL как например JOIN никогда не работали для нас. Тогда мы решили поискать решение проблем, лежащее вне реляционных баз данных.

        Существует множество проектов, призванных решить проблему хранения данных с гибкой схемой и построением индексов на лету (например CouchDB). Однако, по-видимому ни один из них не используется крупными сайтами. В тестах о которых мы читали и прогоняли сами, ни один из проектов не показал себя стабильным, достаточно зрелым для наших целей (см. this somewhat outdated article on CouchDB, например). А все это время MySQL работал. Он не портил данные. Репликация работала. Мы уже в достаточной мере понимали все его узкие места. Нам нравился MySQL именно как хранилище, вне реляционных шаблонов.

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

          Очень компактный, но в то же время довольно удобный визуальный редактор jHtmlArea. По первой букве в названии можно догадаться, что используется jQuery.

          Он в чем-то схож с более известным jWysiwyg. Несмотря на то что имеет меньший размер, обладает не меньшими возможностями. На мой взгляд код организован гораздо удобнее, очень легко расширяем. Также огромный плюс в том, что иконки в меню можно располагать в любом порядке.
          Читать дальше →
        • Якорная навигация на jQuery (graceful degradation)

            Недавно я наткнулся на интересный плагин для jQuery: BBQ — Back Button & Query Library.

            И решил на ее основе сделать свой плагин для навигации на основе якорей. Задачи, которые я себе ставил:
            1. нормальная работа ссылок в условиях выключенного javascript (читай — нормальная индексация страниц поисковиками)
            2. поддержка обычных anchor-ссылок безо всяких дополнительных запросов
            3. поддержка отображения подгруженного контента в разных областях страницы

            Результат можно посмотреть здесь. А еще можно почитать чуть подробнее.

            UPD: дамы и господа, некоторые жалуются на недоступность странички (403 Forbidden), однако, я ничего такого не вижу. В комментах привели ссылку на рабочий вариант, который можно попробовать, если моя ссылка у вас не заработала: http://vbolshov.org.ru.nyud.net/anchornav/.

            как это использовать
          • 7+ превосходных инструментов для оптимизации изображений

            • Translation
            Перевод статьи 8 Excellent Tools for Optimizing Your Images
            К сожалению на момент перевода один из сервисов перестал работать. Но хабровчане предложили еще много хороших решений!

            Одним из самых простых способов уменьшить время отклика страниц на вашем сайте является оптимизация изображений.

            Есть несколько бесплатных инструментов помогающих уменьшить и оптимизировать изображения. В этой статье вы найдете удобные инструменты для создания картинок для веба настолько маленьких по весу, насколько это возможно.
            Обзор инструментов — под катом.
            Читать дальше →
          • WebSockets — полноценный асинхронный веб

              Пару недель назад разработчики Google Chromium опубликовали новость о поддержке технологии WebSocket. В айтишном буржунете новость произвела эффект разорвавшейся бомбы. В тот же день различные очень известные айтишники опробовали новинку и оставили восторженные отзывы в своих блогах. Моментально разработчики самых разных серверов/библиотек/фреймворков (в их числе Apache, EventMachine, Twisted, MochiWeb и т.д.) объявили о том, что поддержка ВебСокетов будет реализована в их продуктах в ближайшее время.
              Что же такого интересного сулит нам технология? На мой взгляд, WebSocket — это самое кардинальное расширение протокола HTTP с его появления. Это не финтифлюшки, это сдвиг  парадигмы HTTP. Изначально синхронный протокол, построенный по модели «запрос — ответ», становится полностью асинхронным и симметричным. Теперь уже нет клиента и сервера с фиксированными ролями, а есть два равноправных участника обмена данными. Каждый работает сам по себе, и когда надо отправляет данные другому. Отправил — и пошел дальше, ничего ждать не надо. Вторая сторона ответит, когда захочет — может не сразу, а может и вообще не ответит. Протокол дает полную свободу в обмене данными, вам решать как это использовать.

              Я считаю, что веб сокеты придутся ко двору, если вы разрабатываете:
              — веб-приложения с интенсивным обменом данными, требовательные к скорости обмена и каналу;
              — приложения, следующие стандартам;
              — «долгоиграющие» веб-приложения;
              — комплексные приложения со множеством различных асинхронных блоков на странице;
              — кросс-доменные приложения.

              Заинтриговал? Давайте посмотрим подробнее
            • Realplexor: производительный Comet-сервер с API для PHP и Javascript (realtime)

                Dklab Realplexor — это Comet-сервер, позволяющий держать одновремено сотни тысяч долгоживущих открытых HTTP-соединений с браузерами пользователей. JavaScript-код, запущенный в браузере, подписывается на один или несколько каналов Realplexor-а и вешает обработчик на поступление данных. Сервер может в любой момент записать сообщение в один из таких каналов, и оно будет моментально передано всем подписчикам (хоть одному, хоть тысяче), в режиме реального времени и с минимальной нагрузкой для сервера.

                Хотя идейным вдохновителем Realplexor-а был предыдущий проект, dklab_multiplexor, код Realplexor-а не имеет с ним практически ничего общего. Поэтому я и решил сменить название. Несопоставимы также возможности продуктов (см. ниже), да и размер кода увеличился в 7 раз.

                Realtime-направление сейчас довольно активно развивается на Западе, и в нем особенно выделяется продукт Tornado — событийно-ориентированный веб-сервер на языке Python. Правда, Tornado — это не столько Comet-сервер, сколько инструмент, с помощью которого можно запрограммировать «в том числе» и Comet-сервер. Ключевые слова: Comet, Push Server, Long polling, JavaScript, XMLHttpRequest.

                Главные преимущества Realplexor-а:
                • простота использования: наличие API для JavaScript, API для PHP (в будущем — и для других языков);
                • простота конфигурирования;
                • широкий функционал (либо отстутствующий, либо недоступный напрямую в аналогах).

                Лучше один раз увидеть...


                Я сделал отдельную онлайн-песочницу, чтобы продемонстрировать функционал нового Realplexor-а и то, для чего вообще нужны Comet-серверы (кстати, это физически тот же самый демон Realplexor-а, что использует мой новый стартап РуТвит). Песочница реализует что-то типа многоканального чата: зайдя, вы получите как будто бы 2 независимых «браузера», запущенных на разных компьютерах.
                • Верхний «браузер» отображает каналы — в них моментально появляются новые сообщения, как только кто-то их туда отправляет на стороне сервера. Конечно же, эту страницу могут просматривать одновременно сотни тысяч пользователей, и они все будут видеть одно и то же (реализовано с использованием Realplexor JavaScript API). Можно «на лету» добавлять новые каналы (подписка) или скрывать уже имеющиеся (отписка).
                • Нижний браузер содержит формы, позволяющие добавлять сообщение в произвольный канал, указав его имя. Форма AJAX-ом отправляется на сервер, и уже там PHP-скрипт записывает в Realplexor полученный текст через PHP API. (И да, так можно чатиться.)
                По умолчанию на странице открыто 3 канала с именами Alpha, Beta и RuTvit. Но, конечно, вы можете закрыть эти каналы и открыть новые. Вот, например, страница с единственным открытым каналом по имени Habrahabr: http://rutvit.ru/realplexor/demo?ids=Habrahabr.



                Песочница демонстрирует следующие функции Realplexor-а:
                Читать дальше →
              • 50 ресурсов в стиле «Hand Drawing» наборов иконок, кистей, текстур и шрифтов

                  На глаза попалась очень красивая и приятная для глаза сборка бесплатных ресурсов наборов иконок, кистей, текстур и шрифтов, выполненных в стиле «нарисовано от руки». Пример:



                  Остальное смотрим тут: 50 Free Resources Of Hand Drawing Style Icons, Brushes, Textures and Fonts
                • Zen coding — пишем HTML/CSS быстрее

                    Добрый день смотрим сразу как это работает:



                    Zen Coding
                    chikuyonok — Сергей Чикуёнок
                    pepelsbey — Вадим Макеев

                    Этот способ ускоренного написания HTML и CSS кода разрабатывается Сергеем Чикуёнком, который «знает толк в извращениях».

                    HTML код пишется на CSS манеру:
                    div#content>h1+p

                    Нажимаем нехитрое комбо на клавиатуре (Ctrl+,) и получаем результат:
                    <div id="content">
                        <h1></h1>
                        <p></p>
                    </div>
                    Читать дальше →
                  • jQuery.keyboard v0.2.0


                      Снова приветствую Хабрасообщество. Недельку назад я выкладывал свою либу jQuery.keyboard. Там было несколько недостатков, нереализованных идей, да и огромное количество предложений и положительных отзывов побудили меня к быстрому написанию новой версии
                      Читать дальше →
                    • jQuery.keyboard v0.1.0


                        У меня есть на примете как минимум два проекта, в которых понадобится активное управление с помощью клавиатуры. Поэтому, я сел и написал удобный и красивый плагин для jQuery, который выкладываю во всеобщий доступ под свободной лицензией LGPL.
                        Читать дальше →
                      • mod_rewrite: Просмотр списка правил только один раз

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

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

                          Хочу поделится достаточно простым и универсальным средством борьбы с такой особенностью, который обнаружил только-что :-)

                          Читать дальше →
                        • Глубокая трассировка в Internet Explorer

                          • Translation
                          image
                          После прочтения поста Стива Сойдерса о бесплатном инструменте — dynaTrace Ajax, я был дико заинтригован. Он предлагает полную анализ трассировки в IE6-8, включая JavaScript, прорисовку и сетевой трафик. Я протестировал несколько сайтов, но более интересный результат получил с тяжелым JavaScript'ом в Gmail в IE8.
                          Читать дальше →
                        • Запускаем софтверный бизнес в России

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

                            Зачем нужен этот топик? Чтобы после прочтения можно было однозначно ответить на вопросы «А оно мне надо?», «Стоит ли переводить проект в разряд стартапа (или наоборот)?», «Как заработать на своем труде в России?» и на ряд других более конкретно. И это только касательно России (если все будет хорошо, то выложу аналогичный топик и относительно международного софтверного бизнеса).

                            Внимание: вся нижеприведенная информация изложена с позиций минимизации затраченного времени (и увеличения надежности мероприятия) и с учетом отсутствия прописки в городе регистрации юр. лица (и отсутствия рабочего офиса).

                            Продукт и команда


                            Перед стартом обязательно имейте хотя бы что-нибудь. Что-нибудь, что приносит деньги. Без денежного потока (пусть даже в 10-20 тысяч рублей) затевать все это бессмысленно (далее будет понятно, почему, но первичные расходы на оформление всей волокиты составляют порядка 30к рублей). Естественно, открывать свое юридическое лицо и оформлять бизнес стоит в том случае, если вы собираетесь расти. И не просто расти, а очень сильно расти. Иметь оборот в 20-30 тысяч рублей можно и не имея никакого юридического лица, а при «нелегальном» обороте в районе 100 тысяч уже могут начаться различные проблемы с государством (и красиво оформить это может уже не получиться).

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

                            Ладно, вроде у нас есть, что продавать (будь это хоть утилита «Time Machine для Windows»). У нас есть пара человек, которые разделяют ответственность за компанию и готовы работать во имя ее успешности. Что дальше?

                            Дальше самое интересное.
                            Читать дальше →
                          • Онлайн-доклад «Зачем знать алгоритмы»

                              Завтра (3го ноября) в 16-00 буду опять рассказывать широко известный в узких кругах доклад с Highload '2009 под названием «Зачем знать алгоритмы» — про внутреннее устройство СУБД и поисковиков на пальцах.

                              Посмотреть и послушать можно по адресу firmbook.ru/Catalog/Conference/X03RAmDfHEmwN1A-A1tq9Q — бесплатно и удаленно, такая вот онлайн конференция iCoder.

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

                              Времени дают два часа, доклад короче, должно остаться время пообщаться о разном. Заходите ;)
                            • Рейтинг ведущих веб-студий Украины

                                О рейтинге



                                Давно была задумка составить рейтинг веб-студий Украины, да и запросы на такой рейтинг были. И недавно появилась отличная возможность это сделать.

                                Все началось с исследования для нашей компании, а если точнее с конкурентной разведки. Цель стояла следующая: определить ведущие веб-студии в Украине, собрать максимум информации о них и выработать ряд управленческих решений для повышения конкурентоспособности собственной компании на рынке разработки сайтов.
                                Читать дальше →
                              • Список полезных инструментов для php разработчика

                                • Translation
                                PHP один из самых широко используемых языков для создания вебсайтов. PHP фреймворки, такие как Zend, CakePHP, CodeIgniter и т.д и open source классы и библиотеки упростили разработку.
                                Независимо от того, являетесь ли вы опытным разработчиком или новичком, инструменты, которые вы используете, имеют прямое влияние на вашу продуктивность. Здесь собран список действительно полезных утилит и расширений для PHP разработчиков, которые помогут ускорить разработку, и улучшит итоговое качество кода.
                                Читать дальше →
                              • Договор на техническое обслуживание и поддержку сайта

                                  Добрый день, коллеги!

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