• Как сделать хороший промо-ролик для стартапа. Часть 1. Проблема-решение

      image

      Вы прошли долгий и трудный путь от идеи до реализации вашего проекта. Стадия закрытого тестирования завершена, и вы готовы презентовать ваше детище миру. Главным и какое-то время единственным рекламоносителем вашего проекта может стать промо-ролик. Его можно выложить на YouTube и в социальных сетях, разослать партнёрам и инвесторам, разместить на главной странице сайта, сопроводить им пресс-релиз для СМИ или оживить выступление на конференции.

      Цель промо-ролика: кратко и понятно рассказать про суть и ценность проекта, заинтересовывать целевую аудиторию и побудить стать пользователем.

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

        С данной темой доклада я выступал на CodeFest. А здесь я перескажу словами, что, как и зачем.


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

        Видеоприглашение на конференцию:

        Читать дальше →
      • Хорошая альтернатива тарифным пакетам



          Сейчас практически все создатели различных веб-сервисов стремятся продавать свой продукт по принципу тарифных пакетов — чем дороже выбранный пакет, тем больше в нем опций и возможностей сервиса.

          Казалось бы, это хорошее решение — как для клиента, так и для разработчика, т.к. в тарифных пакетах каждый клиент находит свое оптимальное соотношение цена/возможности, а владелец сервиса таким образом лучше удовлетворяет спрос и максимизирует прибыль.
          Читать дальше →
        • Спасибо за HTML5 File API или читаем ID3-тег и заполняем форму не загружая MP3-файл

          HTML5 Powered with Offline & Storage
          С появлением HTML5 у нас появляется много новых и интересных возможностей. Позволяющих создавать еще более качественные приложения.

          Например, File API. Доступ к файлам клиента довольно удобная штука. Мы можем к примеру заполнить форму используя информацию из выбранного пользователем файла:
          • Заполнить форму об аудио-файле из тегов
          • Заполнить форму о фото из EXIF
          Читать дальше →
        • Как Agile и Google календарь изменили мою жизнь

            Как менеджер проектов в своё время я попытался интегрировать различные Agile/SCRUM методики в свою повседневную жизнь. Ведь она тоже в каком то смысле является долгосрочным и довольно динамичным проектом.

            Неоднократно пробовал использовать популярные GTD инструменты, но в итоге именно Google календарь ввиду своей наглядности и привязке ко времени — оказался наиболее эффективным. Получается такой вот Self SCRUM Board с итерациями и планерками :)

            image
            Читать дальше →
          • RealSync — односторонняя синхронизация исходников в реальном времени для веб-разработчиков

              Представляю общественности утилиту RealSync (GPL). Ее призвание — облегчить работу тех, кто периодически мучается от лагов сетевой папки Samba при поиске/редактировании файлов веб-проекта. Идея RealSync в том, что вы теперь работаете с файлами сайта на локальной машине в привычной IDE, а результат, как и прежде, смотрите на удаленном разработческом веб-сервере, куда RealSync копирует изменения в реальном времени. В результате вы можете, например, запустить поиск по всем файлам в IDE — они же локальные, а не подключены через сетевую папку по Samba, так что поиск работает очень быстро; при этом ваш Ctrl+S продолжает попадать на сервер моментально, как и при работе через сетевую папку.

              RealSync — утилита для Windows, MacOS и Linux, позволяющая в реальном времени содержать на удаленном сервере точную копию файлов (например, скриптов на PHP, Python, Ruby и др.) из папки на вашем локальном компьютере, даже в условиях плохой связи, когда вы работаете из дома. Все изменения, производимые в локальной папке, попадают на сервер практически моментально (задержка около 0.2 с), независимо от того, сколько этих изменений и каким именно образом они были внесены (хоть через IDE, хоть через Блокнот или Far).

              Главное отличие RealSync от аналогов — в том, что он крайне устойчив к нестабильности интернет-соединения, реконнектам и тайм-аутам. При этом используется SSH-соединение, доступ через которое конфигурируется автоматически при первом запуске утилиты (т.е. не нужно возиться с ключами — настройка производится в интерактивном режиме).

              Фактически, случайно «убить» RealSync почти невозможно. Вы можете держать его постоянно свернутым в трее и забыть про его существование (CPU он почти не ест). Если утилита видит, что соединение разорвалось на длительный срок, автоматически запускается знакомый многим алгоритм RSYNC для быстрого копирования большого количества различий. В режиме же реального времени применяется собственный протокол поверх SSH, чтобы при нажатии Ctrl+S в редакторе вы сразу же видели изменения на сервере. Передача файла сопровождается приятным «треньканьем» (отключаемым при необходимости в конфиге), а временная потеря связи — покраснением иконки (когда связь восстановится, иконка обратно станет серой, а RealSync «догонит» накопившиеся изменения).

              И зачем этот велосипед, когда есть Samba или Денвер или XAMPP?

              Читать подробности
            • Настройка nginx

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

                Неплохой начальной точкой для настройки nginx является конфиг, который идёт в комплекте с дистрибутивом, но очень многие возможности этого сервера в нём даже не упоминаются. Значительно более подробный пример есть на сайте Игоря Сысоева: sysoev.ru/nginx/docs/example.html. Однако, давайте лучше попробуем собрать с нуля свой конфиг, с бриджем и поэтессами. :)
                подробности
              • Morris.js: средство рисования красивых графиков при помощи jQuery и Raphaël

                • Tutorial
                В позавчерашнем выпуске «Mozilla Hacks Weekly» увидал гиперссылку «Morris.js», пошёл по ней, почитал, порадовался — а теперь и вам поведаю.

                Morris — это легковесный джаваскрипт (всего-то 3052 байта после миниатюризации) с открытым исходным кодом (распространяемым по упрощённой лицензии BSD), который для работы требует jQuery и Raphaël и строит с их помощью графики на простой сетке горизонтальных линий, наподобие такого:

                [график]

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

                Графики реагируют на мышь: вспучиваются точки, соответствующие указанному мышью моменту во времени, и подле них появляются подсказки.

                Достоинство скрипта — простота API. Приведённый мною пример создаётся вот таким вызовом:

                // поквартальные данные, тонкие линии, цвета их заданы в явном виде
                Morris.Line({
                  element: 'quarterly',
                  data: [
                    {q: '2009 Q3', a: 100, b: 75},
                    {q: '2010 Q2', a: 75, b: 50},
                    {q: '2010 Q3', a: 75, b: 50},
                    {q: '2011 Q1', a: 50, b: 25},
                    {q: '2011 Q3', a: 50, b: 25},
                    {q: '2011 Q4', a: 75, b: 50},
                    {q: '2012 Q2', a: 100, b: 75}
                  ],
                  xkey: 'q',
                  ykeys: ['a', 'b'],
                  labels: ['Series A', 'Series B'],
                  lineColors: ['#167f39','#044c29'],
                  lineWidth: 2
                });

                Читать дальше →
              • Разработка производительного игрового сервера на Netty + Java

                  Piccy.info - Free Image Hosting

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

                  Читать дальше →
                • Вахтёр: на страже системы

                    «Однажды, в студёную зимнюю пору,
                    Залили на сервер бэкдорчиков гору...»


                    Народное админское творчество



                    Вобщем как то раз на одном из серверов обнаружился php-shell, через который злобные хакеры поломали уютный дневничок™ хорошего человека.
                    После двухчасового ковыряния в логах Апача нашлась дыра, через которую залили шелл.
                    Дыру прикрыли, дневничок вернули к жизни из бэкапов, и сели думу думать.
                    Ну, рассказывай уже, чего удумал...
                  • Clustered index в InnoDB и оптимизация запросов

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

                      Clustered index – форма организации таблицы в файле. В InnoDB данные хранятся в дереве, в таком же, в котором лежат обычные B-TREE ключи. Таблица InnoDB сама по себе уже является большим B-TREE. В качестве значений ключа используется clustered index. Согласно документации, в качестве clustered index выбирается PRIMARY KEY. Если PRIMARY KEY отсутствует – выбирается первый UNIQUE KEY. Если и такого нет, то используется внутренний 6-тибайтный код.

                      Что же вытекает из такой организации данных на диске?
                      Читать дальше →
                    • Генерация уникального идентификатора пользователя средствами Nginx

                      Приветствую Вас, хабрачитатели!

                      Расскажу об одной задачке, которая встала передо мной, и как я ее решил.

                      Сразу оговорюсь — часовой поиск в G и в Я удовлетворяющего результата не принес, но за следующий час было реализовано собственное решение.

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


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

                      В качестве веб-сервера и первичного балансировщика нагрузки у меня имеется Nginx.

                      В моей системе для php используетcя php-fpm через fastcgi, так же через fastcgi работает c++ сервер бизнес логики.

                      Читать дальше →
                    • О регистрации на сайтах

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


                      Пример удачной регистрации на сайте Tumblr.

                      Начну с определения самого понятия «регистрация», с ним всё не так просто, как может казаться. В результате полевых исследований нашей компании оказалось, что разные люди (клиенты, посетители и мы сами) нередко воспринимают это слово по-разному. Для того, чтобы избежать непонимания, опишу то, как я сам вижу регистрацию.
                      Читать дальше →
                    • Легкая публикация PEAR-пакетов

                        Скажу сразу: у меня создание PEAR-канала и публикация пакета заняли около часа. Но, если отбросить все тупиковые способы, сэкономить на гуглении, и не использовать сомнительные утилиты, то вполне возможно уложиться в 10 минут.

                        У PHP программистов больше поводов не любить PEAR, чем любить. Действительно, создается впечатление, что за последние 5 лет ни библиотеки в репозиториях, ни сам инсталлятор, практически не изменились.
                        Тем не менее, до сих пор, установить PHP-бибиотеку проще всего посредством PEAR. Это, конечно, при условии, что она будет одинаково востребована для всей системы. Например, такие продукты, как PHPUnit и Docblox устанавливаются именно через PEAR, и крайне неудобно устанавливать их другими способами: например, клонированием GitHub репозитория.

                        Скорее всего у вас есть библиотека, которой вы бы хотели поделиться с сообществом. Ну или когда-то появится. Это не важно. Важно то, что рано или поздно вам захочется сделать так, чтобы ваш продукт можно было установить всего в 2 команды…
                        Читать дальше →
                      • Наносим удар по ddos ботнету своими силами



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

                          Читать дальше →
                        • Бета-тестирование iPhone-приложений

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

                          Ни для кого не секрет, что бета-тестирование на смартфонах — довольно трудоемкий процесс, а уж на iPhone — и подавно. Все дело в его многоступенчатости: сперва пользователю нужно найти UDID своего устройства, затем отправить его разработчикам. Только после этих действий со стороны юзера его аппарат вносится в список зарегистрированных девайсов, а уж потом собирается рабочая версия и отсылается ему на почту письмо с просьбой об установке.
                          Читать дальше →
                        • Мой опыт разработки/продвижения/поддержки. Perfect Ear

                            Здравствуйте, коллеги,

                            наконец-то у меня дошли руки написать немного о своем опыте на примере моего главного на сегодняшний день приложения Perfect Ear (в русском маркете известного как Абсолютный Слух).

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

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

                            В конце приведу некоторые цифры.

                            Читать дальше →
                          • Как защититься от SWF-декомпиляторов

                            У меня в последнее время с завидной частотой спрашивают: «Как защитить данные, летающие между Flash Player и сервером?». Вместо ответа я предлагал прочитать любые книжки по криптографии, а от сильно наглых отбивался следующим кодом.

                            var myAge:Number = 23; //Ключ
                            var someTextToEncode:String = 'Sometext, or xml, or anything else'; //Текст для шифрования
                            var arr:Array = new Array();
                            var l:Number = someTextToEncode.length;
                            var encodedText:String = '';
                            for (var i:Number = 0; i< l; i++){
                            encodedText += String.fromCharCode(someTextToEncode.charCodeAt(i) + myAge); //Шифруем методом сдвига позиции кода символа. Просто и со вкусом. 90% "хакеров" на этом этапе уже отсеятся.
                            }
                            post(encodedText); //Метод, посылающий шифрованные данные на сервер


                            И от меня отвязывались, копипастя код. И всё у меня было хорошо, до тех пор, пока один из любопытных не спросил: «А как же защитить ключ? Ведь любую флешку можно утащить с сайта и декомпилировать!»

                            Способ, как оказалось, очень прост и не требует наличия никаких обфускаторов. Речь пойдёт о стендалон-флешках, скомпилированных одним файлом.
                            Читать дальше →
                          • Стратегия оптимизации веб-проекта с использованием MySQL

                              Введение


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

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

                              Если вы смогли определить, что это — ваш случай, и ваш проект на MySQL, то эта статья может вам помочь принять конкретные меры и исправлению ситуации с закреплением результата и предотвращением возникновения откровенных проблем с СУБД впоследствии.
                              Читать дальше →