• Уроки написания утилитки на $1 000 000



      Осенью 2008 года мы с приятелем потратили две-три недели свободного от основной работы времени, чтобы написать маленькую утилитку для бэкапа баз данных (MS SQL Server и потом MySQL). Сегодня она приносит нам около $230 000 в год и можно с уверенностью говорить, что суммарно мы заработаем на ней больше $1 000 000.

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

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

        С версии 0.8.46 в nginx появились опции, позволяющие легко и просто настроить прозрачное кэширование для анонимных пользователей.

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

        Читать дальше →
      • Контролируемое кэширование страниц в nginx

        Введение

        Как известно, nginx умеет кешировать ответ сервера, и выдавать его по запросу вместо обращения к бэкенду, экономя тем самым ресурсы сервера. Скорость отдачи таких закешированных страниц иногда поражает, ради таких скоростей иногда не жалко переносить на javascript многие функции сайта только для того, чтобы иметь возможность закешировать ещё 1 страницу целиком (Например, вынести отрисовку плашки с авторизацией юзера на js, чтобы иметь возможность кешировать страницу, которая идентична для всех пользователей, за исключением этой самой плашки).

        Я много раз использовал возможность кэширование nginxом страниц, и натыкался на пару неудобных для себя вещей:
        • Можно легко закешировать вообще все страницы, но для динамических сайтов или для сайтов с авторизацией нужно ли это?
        • Можно закешировать отдельно несколько url, вида /album/*, но не переписывать же конфиг nginx каждый раз при появлении новых разделов сайта?

        Читать дальше →
      • Поддержка протоколов TLS/SSL для сокетного соединения на AS3



          Мы разрабатываем Flash клиент для клиент-серверного приложения с постоянным сокетным соединением и нам важно защититься от прослушки трафика. Один из способов такой защиты — SSL/TLS шифрование. Во Flash сделать это можно двумя путями — использовать родной SecureSocket или TLSSocket из библиотеки as3crypto. Ниже мы обсудим плюсы и минусы, производительность, а также проблемы с которыми мы столкнулись при внедрении обоих вариантов.
          Читать дальше →
        • Продуктивная работа с MySQL в командной строке

          • Translation
          Даже если Вы используете GUI-инструменты для работы с MySQL, однажды Вам предстоит столкнуться с командной строкой. Поэтому полезно знать некоторые трюки, которые облегчают работу.

          Примечание: эти команды работают только для Unix/Linux.
          Читать дальше →
        • Алгоритм поиска пути Jump Point Search

          Этот алгоритм является улучшенным алгоритмом поиска пути A*. JPS ускоряет поиск пути, “перепрыгивая” многие места, которые должны быть просмотрены.  В отличие от подобных алгоритмов JPS не требует предварительной обработки и дополнительных затрат памяти. Данный алгоритм представлен в 2011 году, а в 2012 получил высокие отклики. Что из себя представляет данный алгоритм и его реализацию можно прочитать дальше в статье.


          Читать дальше →
        • Сервер онлайн-вещаний на базе nginx

            Введение


            Привет всем! Несколько месяцев назад на Хабре была опубликована статья «Вещание онлайн-видео с помощью nginx» , в которой Aecktann рассказал о своем опыте внедрения разрабатываемого мной модуля к nginx для вещания видео — nginx-rtmp-module. С тех пор продукт активно развивался и в этой статье я более подробно расскажу о нем.

            Вещатель нужен для передачи видео-потока клиенту. Речь идет либо о живом потоке, либо о вещании записанного видео (VOD, Video-on-demand). Существует большое количество технологий вещания видео. Среди них можно выделить традиционные протоколы, такие как RTMP или MPEG-TS, а также появившиеся в последнее время технологии адаптивного вещания поверх HTTP. К последним относятся HLS (Apple), HDS (Adobe), Smooth Streaming (Microsoft), MPEG-DASH. При выборе технологии основным фактором является ее поддержка на клиентской стороне. Именно поэтому вещание в формате RTMP на текущий момент является одним из самых распространенных. Протокол HLS поддерживается устройствами компании Apple, а также некоторыми версиями Android.
            Читать дальше →
          • Java собеседование. Коллекции

              С недавнего времени у меня появилась настойчивая мысль, что профессиональное развитие сильно замедлилось и это хочется как-то исправить. Да, читаю книги, слушаю курсы, но в то же время приходит и понимание того, что возможно пришло время сменить работу, здесь вроде как все изучено, плавно уходим в рутину. Данная мысль сподвигла меня на рассылку своего резюме в несколько компаний — лидеров рынка. После прохождения собеседования в 3 из них, я решил, как водится внести свои 5 копеек в освещение обширной темы собеседования, а именно технических вопросов по Java коллекциям, с которыми приходится сталкиваться. Да, знаю, читатель скажет: «коллекции — избитая тема, сколько можно», но часть из приведенных ниже вопросов, я задавал своим знакомым разработчикам, которые занимают именно позиции разработчиков («крепких середнячков», по меркам недалекой от Москвы глубинки, которые уверенно справляются со своей работой на практике, а вот в теории скажем так есть пробелы, потому, что работа не требует решения каких-то нетривиальных задач, да и потому что не всем это интересно — изучать как внутри работает структура данных), вызывало растерянность. Думаю, что рассмотренный материал будет не очень интересен разработчикам выше уровня Junior (я попрошу их комментировать, дополнять и критиковать изложенный здесь материал), а вот Junior`ы уверен, найдут в этой статье интересное для себя.
              Читать дальше →
            • Автоматическая оптимизация настроек MySQL, PostgreSQL

                Оптимизация настроек всегда дело тонкое и выставить именно те параметры, которые дадут максимальную производительность, зачастую можно только уже в процессе работы приложения, когда уже есть статистика нагрузки и видны узкие места.
                Но очень полезно сделать и первичную оптимизацию при запуске СУБД. В этом посте рассмотрены пути автоматической оптимизации MySQL и PostgreSQL утилитами mysqltuner и pgtune.

                Читать дальше →
              • Тюнинг MySQL — thread_cache_size

                  Параметр thread_cache_size играет немаловажную роль в производительности нагруженного MySQL-сервера. В некоторых случаях можно увеличить производительность на 30-50%.

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

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

                    Конечно, можно воспользоваться публичным анонимайзером, ТОРом или VPN'ом, но это не всегда удобно и не всегда возможно: например, публичный терминал в интернет-кафе или любой компьютер, на котором у нас нет прав, не позволит нам воспользоваться TOR'ом или VPN, а «анонимные прокси» вообще вещь в себе: никогда не знаешь как монетизирован именно этот хост. Личный анонимайзер же будет работать на любом устройстве и с большой вероятностью не будет заблокирован на бордере. Предлагаемый метод не отменяет TOR или VPN (или SSH), а дополняет их возможностью доступа с чужих хостов.

                    Нулевое необязательное требование: домен. Это около 10 долларов в год, в принципе не обязательно, но удобно и желательно.

                    Во-первых, нам понадобится личный экзит-поинт в нужной стране. К нашим услугам www.leaseweb.com, где всего за 9 евро в месяц можно пользоваться VPS'кой. Очень полезный в хозяйстве инструмент для многих нужд! На этом хосте должен быть настроен Apache и PHP, я опущу этот вопрос, так как он достаточно подробно освещен другими.

                    Во-вторых, нам понадобится скрипт, который будет показывать собственную адресную строку, искомый сайт во фрейме ниже и будет обладать другими полезными опциями вроде скрэмблера URL'ов, выкидывания всего embedded-хлама и кукисов, хранение кукисов на стороне сервера и т.п. Решений несколько, простое и работающее — Glype Proxy, который можно взять на glype.com.

                    Установка скрипта проста.
                    Читать дальше →
                  • Рендер Diablo3. Как это работает

                    Как устроены графические движки популярных игр с мировым именем? Какие технологии применяют разработчики в самых крупных игровых компаниях? Действительно ли, чтобы сделать красивую игровую графику необходимо применять самые передовые технологии современной 3D графики? На эти вопросы мы попробуем ответить на примере рендер части игры Diablo3, от компании Blizzard Entertainment.
                    Читать дальше →
                  • Продуктивное использование PHPStorm

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

                      Не претендуя на библию или «настольную статью программиста» я хочу поделиться полезными находками в моей любимой IDE, не скатываясь в тупую копипасту мануалов и скучных списков хоткеев, только то, что я сам использую постоянно и над чем удивляются коллеги: «о! а так можно?»
                      Что ж там такое?
                    • Как не терять деньги при оплате через PayPal

                        Часто платите через PayPal и хотите быть уверенным что не переплачиваете 1-2% от суммы платежей? Тогда загляните под кат. Пользователям PayPal «со стажем», возможно, это будет не интересно, но кто знает…
                        Все равно читать...
                      • Какой Java поток нагружает мой процессор

                        Что Вы делаете, когда Ваше Java приложение потребляет 100% ЦП? Оказывается Вы легко можете найти проблемные потоки, используя встроенные Unix и JDK утилиты. Никакие инструменты профилирования не потребуются.
                        С целью тестирования мы будем использовать простую программу:
                        Читать дальше →
                      • Russian Code Cup 2012: подробный разбор задач с финала в картинках, видео и примерах

                          10 сентября 2012 года завершился чемпионат по программированию Russian Code Cup 2012. Подробный рассказ о том, как все происходило, публиковался ранее, а сегодня мы разберем задачи, которые были предложены финалистам. Их было всего шесть, и каждая из них — отдельная интересная история:


                          На решение этих задач выделялось три часа. Единственным решившим пять задач из шести оказался победитель Russian Code Cup 2012 Владислав Епифанов. Чуть менее половины финалистов решили по четыре задачи. Первые три задачи сделали почти все. Задачу про колоду карт правильно решил только один Евгений Капун. Второе место на турнире заняла Наталья Бондаренко, решившая четыре задачи быстрее других и с меньшим числом попыток.

                          Читать дальше →
                        • Сниппеты для Twitter Bootstrap

                            Фреймворк Twitter Bootstrap уже давно стал одним из самых любимых средств ленивых сторонников быстрого прототипирования и разработки интерфейсов, а где популярность там много разных сторонних интересных штук.
                            На этот раз я случайно попал на пополняющуюся коллекцию сниппетов.
                            Думаю многим пригодится, сейчас там набор небольшой (23 штуки), но уже достаточно полезный чтобы поделиться.
                            Кликабельные картинки:

                            Интерфейс аля gmail



                            Читать дальше →
                            • +109
                            • 96.3k
                            • 23
                          • Простой способ защиты от классического HTTP DDoS

                              Данное решение позволяет вычислять любых ботов, за исключением тех, которые полностью имитируют работу браузера.

                              Как это работает


                              Бот запрашивает страницу, например habrahabr.ru/search. Бот не умеет загружать вместе со страницей картинки, скрипты, css и пр. Значит в логе будет отображен запрос к /search/ и всё.
                              Если на habrahabr.ru/search заходит живой человек через браузер, то вместе с /search/ в лог попадет множество картинок, скриптов, css и пр.
                              Читать дальше →
                            • Piecon — динамическая круговая диаграмма в фавиконе


                                Крошечная (2 килобайта в минифицированном виде) JavaScript-библиотека Piecon генерирует круговую диаграмму на месте фавикона. API предельно прост и состоит из трёх методов объекта Piecon.
                                Читать дальше →
                              • Как работает сортировка у Реддита

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

                                Этот пост — продолжение разбора алгоритмов сортировки (в прошлый раз был Hacker News). В этот раз, мы разберем как работает сортировка постов и комментариев на Reddit. Алгоритмы у Реддита достаточно простые, чтобы понять их и реализовать.

                                Первая часть этой записи будет сфокусирована на сортировке постов, а вторая на сортировке комментариев. Они довольно сильно различаются, и за идеей способа сортировки комментариев стоит Randall Munroe (автор xkcd).

                                Разбираем сортировку постов

                                Реддит open-source-ный проект и его код полностью доступен на гитхабе. Он написан на питоне, исходники вы можете увидеть тут. Их алгоритмы сортировки написаны под Pyrex, для дальнейшей компиляции (трансляции) в C-код. Pyrex был выбран из-за производительности. Я переписал их реализации на чистый питон, чтобы они легче читались.
                                Читать дальше →