• Отказоустойчивая обработка 10M OAuth-токенов на Tarantool

      image


      Многие уже наслышаны о производительности СУБД Tarantool, её возможностях и особенностях. Например, у него есть классное дисковое хранилище — Vinyl, кроме того, он умеет работать с JSON-документами. Но в многочисленных публикациях обходят стороной одну важную особенность. Обычно БД рассматривают просто как хранилище, но всё же отличительная черта Tarantool — это возможность писать код внутри и очень эффективно работать с этими данными. Под катом рассказ, как мы строили одну систему почти полностью внутри Tarantool, написанный в соавторстве с Игорем igorcoding Латкиным.

      Читать дальше →
      • +52
      • 9.3k
      • 2
    • Приложение двенадцати факторов — The Twelve-Factor App

      • Translation
      Уважаемые читатели! Представляю вашему вниманию перевод методологии создания веб-приложений The Twelve-Factor App от разработчиков платформы Heroku. Мои комментарии скрыты спойлерами по ходу статьи.

      Введение


      В наши дни программное обеспечение обычно распространяется в виде сервисов, называемых веб-приложения (web apps) или software-as-a-service (SaaS). Приложение двенадцати факторов — это методология для создания SaaS-приложений, которые:

      • Используют декларативный формат для описания процесса установки и настройки, что сводит к минимуму затраты времени и ресурсов для новых разработчиков, подключенных к проекту;
      • Имеют соглашение с операционной системой, предполагающее максимальную переносимость между средами выполнения;
      • Подходят для развертывания на современных облачных платформах, устраняя необходимость в серверах и системном администрировании;
      • Сводят к минимуму расхождения между средой разработки и средой выполнения, что позволяет использовать непрерывное развертывание (continuous deployment) для максимальной гибкости;
      • И могут масштабироваться без существенных изменений в инструментах, архитектуре и практике разработки.

      Методология двенадцати факторов может быть применена для приложений, написанных на любом языке программирования, и которые используют любые комбинации сторонних служб (backing services) (базы данных, очереди сообщений, кэш-памяти, и т.д.).
      Читать дальше →
      • +21
      • 42.8k
      • 5
    • Подробно об объектах и классах в PHP

      • Translation
      Сегодня объекты используются очень активно, хотя это трудно было предположить после выхода PHP 5 в 2005 году. Тогда я ещё мало что знал о возможностях этого языка. Пятую версию PHP сравнивали с предыдущей, четвёртой, и главным преимуществом нового релиза стала новая, очень мощная объектная модель. И сегодня, десять лет спустя, около 90% всего PHP-кода содержит объекты, не изменившиеся со времени PHP 5.0. Это убедительно говорит о том, какую роль сыграло внедрение объектной модели, неоднократно улучшавшейся на протяжении последующих лет. В этом посте я хотел бы рассказать о том, как всё устроено «под капотом». Чтобы люди понимали суть процессов — почему сделано так, а не иначе — и лучше, полнее использовали возможности языка. Также я затрону тему использования памяти объектами, в том числе в сравнении с эквивалентными массивами (когда это возможно).

      Я буду рассказывать на примере версии PHP 5.4, и описываемые мной вещи справедливы для 5.5 и 5.6, потому что устройство объектной модели там почти не претерпело изменений. Обратите внимание, что в версии 5.3 всё не так хорошо с точки зрения возможностей и общей производительности.

      В PHP 7, который пока ещё активно разрабатывается, объектная модель переработана не сильно, были внесены лишь незначительные изменения. Просто потому что всё и так хорошо работает, а лучшее — враг хорошего. Были добавлены возможности, не затрагивающие ядро, но здесь об этом речи не пойдёт.
      Читать дальше →
    • Ломаем каптчу Яндекса

        На прошлой неделе был топик «Ломаем капчу» — каптча там была довольно простая, но в комментариях предложили сломать каптчу Яндекса. Мне эта идея показалась интересной, и я решил попробовать.



        Читать дальше →
      • Знакомство с Content Delivery Network

          Содержимое: что такое CDN? История возникновения. Зачем она нужна? Кому она нужна, а кому нет? Порог вхождения, стоимость, издержки. Основные технологии.

          CDN — сокращение от content delivery network, то есть “сеть доставки контента”. Чаще всего это множество серверов с специализированным ПО, которые ускоряют доставку (“отдачу”) контента конечному пользователю. Сервера расположены по всему миру таким образом, чтобы время ответа посетителям сайта было минимальным. Под “контентом” чаще всего подразумевают видео и статические элементы веб-сайтов (не требующие выполнения кода на сервере или запросов в базу данных, такие как css/js), но к “контенту” относятся и совсем неожиданные вещи — например, игры в Стиме (использует CDN для отдачи игр), обновления для операционных систем и т.д.



          Немного истории

          Резкий рост Интернета в середине 90-х привёл к ситуации, что сервера тех лет не могли в одиночку выдержать нагрузку (много ли может отдать могучий двухпроцессорный сервер на базе Pentium Pro на частоте в 266 МГц с 128 мегабайтами памяти?). Лимит производительности серверов и потребность во всё большей и большей производительности породила ныне забытые слова: “ферма серверов”, “иерархическое кеширование”… Айтишный новояз удивительно чувствителен к возрасту — и слова вроде “servers farm” или “information superhighway” сейчас ассоциируются с тёплыми ламповыми CRT-мониторами, а не с прогрессом. В ходе разработки и внедрения разных решений была замечена одна важная особенность: есть два типа контента — статический и динамический.
          Читать дальше →
        • Как обсуждать деньги на собеседовании, если вы кого-то нанимаете и немного про работу с людьми

            Друзья, спасибо за комментарии к статье “Как обсуждать деньги на собеседовании: стратегия переговоров для соискателя”. В перерыве между тренингами нам удалось поймать Дмитрия Коткина, руководителя наших переговорных программ, чтобы он осветил тему обсуждения денег на собеседовании со стороны нанимателя:



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

            А под катом ответы на вопросы в статьях про обсуждение денег + небольшое размышление о том, почему возникает чувство несправедливости при пересмотрах зарплат.
            Читать дальше →
          • Расширенный материал по Java 8

              Не секрет, что многие Java-программисты, начиная свой путь в индустрии, уделяют большое внимание «тяжелым» технологиям — OpenJPA, Spring, JAX-RS, EJB, WS-*,… Это дает возможность как скорее влиться в современные корпоративные проекты, так и максимизировать скорость роста зарплаты.

              Многие из них в конце концов «спускаются» до технологий лежащих в основе указанных фреймворков — JDBC, Servlet API, NIO/NIO.2. Однако прискорбно, что зачастую не остается время на детальное изучение самого языка и возможностей платформы.

              Речь идет не о тонкостях или экзотике, а о том, что составляет существенную часть работы фреймворка: Servlet-контейнер использует множественные ClassLoader-ы, JPA2-провайдер использует манипулирование байткодом, абсолютное большинство библиотек используют Reflection API, всеобщее использование Generics только «усугубилось» с появлением функциональных интерфейсов (java.lang.function.*) и лямбд.

              На недопонимание изначальной платформы (ClassLoader, Reflection API) накладываются «новвоведения» Java 5 (Generics), а теперь еще и Java 8 (методы в интерфейсах, ссылки на методы, лямбды, Stream API, JSR 308: Pluggable Type Systems). Надо обратить внимание на то, что Generics + Java 8 — это не просто языковые фичи, это частично переход к функциональному стилю программирования.

              Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).

              Я собрал определенное количество полезных (на мой взгляд) ссылок по следующим темам
              1. Методы в интерфейсах, ссылки на методы, множественное наследование
              2. Лямбды (Project Lambda)
              3. Stream API
              4. Функциональные алгоритмы
              5. Аннотации
              6. Генерики
              7. Reflection API
              8. Загрузка классов

              Надеюсь кто-то сочтет их полезными.
              Читать дальше →
            • Пара слов о числах с плавающей точкой в Java


                Несколько дней назад мне на глаза попался занимательный такой вопрос, касающийся того, каков будет результат выполнения данного кода:
                double a = 2.0 - 1.1;
                

                или такого:
                double f = 0.0;
                for (int i=1; i <= 10; i++) {
                	f += 0.1;
                }
                

                Вопреки всем моим ожиданиям, ответ: 0.89999999999999991 в первом случае и 0.99999999999999989 во втором.
                Для тех, кто хочет узнать почему, а так же еще несколько занимательных фактов про этот тип данных, милости просим.

                Читать дальше →
              • ElasticSearch и поиск наоборот. Percolate API


                  Вопрос умной категоризации чего-либо встаёт остро при разработке очень многих сайтов. Конечно, всегда можно отдать это на заполнение человеку и результат поначалу будет куда лучше машинного, но, что если категоризировать нужно в реальном времени сотни и тысячи «товаров».
                  Придется отдать это на откуп машине. Тут вариантов не так много, а написание собственного ИИ для 99.9% задач пустая трата времени.

                  Заинтересовавшимся как это решить с помощью ElasticSearch прошу под кат.
                  Читать дальше →
                • Создание API: в рамку и на стену

                  • Translation
                  • Tutorial
                  Каждый программист — проектировщик API. Хорошие программы состоят из модулей, а протокол взаимодействия модулей — это тоже API. Хорошие модули используются повторно.

                  API — это большая сила и большая ответственность. У хорошего API будут благодарные пользователи; поддержка плохого превратится в кошмар.

                  Публичный API — не воробей, опубликуешь — не уберешь. Есть только одна попытка сделать все правильно, поэтому постарайся.

                  API должно быть легко использовать, но сложно использовать неправильно. Сделать что-то простое с помощью такого API должно быть просто; сложное — возможно; сделать что-то неправильно должно быть невозможно, или, по крайней мере, трудно.

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

                  Перед разработкой API собери требования с долей здорового скептицизма. Осознай общие задачи и реши их.

                  Оформляй требования как шаблоны использования API. Сверяйся с ними в процессе проектирования.
                  Читать дальше →
                • Интересные приемы программирования на Bash

                  Эти приемы были описаны во внутреннем проекте компании Google «Testing on the Toilet» (Тестируем в туалете — распространение листовок в туалетах, что бы напоминать разработчикам о тестах).
                  В данной статье они были пересмотрены и дополнены.
                  Читать дальше →
                • JSR 133 (Java Memory Model) FAQ (перевод)

                    Добрый день.
                    В рамках набора на курс «Multicore programming in Java» я делаю серию переводов классических статей по многопоточности в Java. Всякое изучение многопоточности должно начинаться с введения в модель памяти Java (New JMM), основным источником от авторов модели является «The Java Memory Model» home page, где для старта предлагается ознакомится с JSR 133 (Java Memory Model) FAQ. Вот с перевода этой статьи я и решил начать серию.
                    Я позволил себе несколько вставок «от себя», которые, по моему мнению, проясняют ситуацию.
                    Я являюсь специалистом по Java и многопоточности, а не филологом или переводчиком, посему допускаю определенные вольности или переформулировки при переводе. В случае, если Вы предложите лучший вариант — с удовольствием сделаю правку.
                    Этот статья также подходит в качестве учебного материала к лекции «Лекция #5.2: JMM (volatile, final, synchronized)».

                    Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).

                    Ну и да, приходите учиться ко мне!


                    JSR 133 (Java Memory Model) FAQ


                    Jeremy Manson и Brian Goetz, февраль 2004

                    Содержание:
                    Что такое модель памяти, в конце концов?
                    Другие языки, такие как C++, имеют модель памяти?
                    Что такое JSR 133?
                    Что подразумевается под «переупорядочением» (reordering)?
                    Что было не так со старой моделью памяти?
                    Что вы подразумеваете под «некорректно синхронизированы»?
                    Что делает синхронизация?
                    Как может случиться, что финальная поля меняют значения?
                    How do final fields work under the new JMM?
                    Что делает volatile?
                    Решила ли новая модель памяти «double-checked locking» проблему?
                    Что если я пишу виртуальную машину?
                    Почему я должен беспокоиться?
                    Читать дальше →
                  • Как устроена инфраструктура обработки данных Sports.ru и Tribuna.com?

                      В первом посте об аналитической системе Sports.ru и Tribuna.com мы рассказали о том, как используем нашу инфраструктуру в повседневной жизни: наполняем контентом рекомендательную систему, наблюдаем за бизнес-метриками, ищем среди пользовательского контента бриллианты, находим ответы на вопросы “Как работает лучше?” и “Почему?”, нарезаем пользователей для почтовых рассылок и строим красивые отчеты о деятельности компании. Всю техническую часть повествования мы скромно спрятали за этой схемой:

                      Бирюзовым обозначены компоненты в нашей собственной ИТ-инфраструктуре, оранжевым - все то, что мы используем как внешний сервис

                      Читатели законно потребовали продолжить повествование со смешными котиками, а olegbunin пригласил рассказать о всем, что было скрыто, на РИТ++. Что ж, изложим некоторые технические детали – в продолжении веселого поста.
                      Читать дальше →
                      • +42
                      • 19.8k
                      • 3
                    • Книги для тимлидов и руководителей проектов. Часть 2

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

                        Итак, я просил ответить на вопрос какие книги из статьи вы читали?

                        Результаты опроса:
                        Название книги
                        Количество голосов
                        Процент
                        Том ДеМарко. Deadline. Роман
                        об управлении проектами
                        247
                        54%
                        Фредерик Брукс. Мифический человеко-месяц, или Как создаются
                        программные системы
                        174
                        38%
                        Джоэл Спольски. Джоэл о программировании
                        165
                        36%
                        Том Демарко и Тимоти Листер. Человеческий фактор. Успешные
                        проекты и команды
                        148
                        32%
                        Джейсон Фрайд, Дэвид Хайнемайер Хенссон. Rework.
                        Бизнес без предрассудков
                        108
                        24%
                        Джеффри Янг и Уильям Саймон. iКона. Стив
                        Джобс
                        94
                        21%
                        Том ДеМарко, Тимоти Листер. Вальсируя с Медведями: управление
                        рисками в проектах по разработке программного обеспечения
                        70
                        15%
                        Том Демарко, Тимоти Листер. Балдеющие от адреналина и зомбированные
                        шаблонами. Паттерны поведения проектных команд
                        51
                        11%
                        Кармин Галло. iПрезентация. Уроки
                        убеждения от лидера Apple Стива Джобса
                        48
                        11%
                        Патрик Ленсиони. Смерть от совещаний
                        21
                        5%
                        Патрик Ленсиони. Пять пороков команды. Притчи о
                        лидерстве
                        19
                        4%
                        Патрик Ленсиони. Пять искушений руководителя: притчи о лидерстве
                        16
                        4%
                        Патрик Ленсиони. Три признака унылой работы. История со смыслом
                        для менеджеров (и их подчиненных)
                        11
                        2%

                        А теперь еще один бонус — список книг по заданной тематике, которые прислали нам читатели:
                        Читать дальше →
                      • Советы начинающим iOS разработчикам

                          Если не знаешь, надо не бояться, а узнавать.
                          Айн Рэнд “Атлант расправил плечи”



                          Добрый день, меня зовут Игорь Томич и я лектор курсов iOS-разработки и сооснователь онлайн курсов Master Up. Это мой первый пост в наш корпоративный блог, в котором я решил поделиться советами для начинающих iOS-разработчиков. Свое первое приложение для iOS я начал писать в начале 2009 года, а в мае 2012 году провел первый курс обучения по рарзработке под эту же платформу и к этому времени у меня скопилось достаточно “часто повторяемых ошибок” и путей их решения.
                          Читать дальше →
                        • Знай сложности алгоритмов

                          • Translation
                          Эта статья рассказывает о времени выполнения и о расходе памяти большинства алгоритмов используемых в информатике. В прошлом, когда я готовился к прохождению собеседования я потратил много времени исследуя интернет для поиска информации о лучшем, среднем и худшем случае работы алгоритмов поиска и сортировки, чтобы заданный вопрос на собеседовании не поставил меня в тупик. За последние несколько лет я проходил интервью в нескольких стартапах из Силиконовой долины, а также в некоторых крупных компаниях таких как Yahoo, eBay, LinkedIn и Google и каждый раз, когда я готовился к интервью, я подумал: «Почему никто не создал хорошую шпаргалку по асимптотической сложности алгоритмов? ». Чтобы сохранить ваше время я создал такую шпаргалку. Наслаждайтесь!
                          Читать дальше →
                        • Первые несколько миллисекунд HTTPS соединения

                          • Translation
                          После нескольких часов чтения обзоров, Боб с нетерпением нажал на кнопку перехода к оформлению заказа на галлон цельного молока, и…
                          Воу, что только что произошло?


                          Интересно? Прошу под кат
                        • Минифест (манифест разработчиков-минималистов)

                          • Translation
                          От переводчика

                          На днях в сети появился минисайт minifesto.org со здравой, на мой взгляд, тезисной выжимкой опыта подхода к стартапам (да и к разработке в целом). Манифестность текста смягчается от начала к концу, но это не делает его хуже.

                          Снова прошу прощения за отсутствие перевода словосочетания “computer science”.


                          Кратко


                          • Боритесь за закон Парето, следите за тем, чтобы 20% вашего труда давало вам 80% результата;
                          • Расставляйте приоритеты, ведь минимализм нужен для того, чтобы делать то, что нужно, а не распыляться по мелочам;
                          • Лучшее — враг хорошего: сначала просто сделайте, потом сделайте правильно, потом сделайте лучше;
                          • Убивайте в зародыше, не бойтесь начать всё сначала. Чем быстрее ошибётесь, тем быстрее научитесь;
                          • Повышайте свою ценность. Постоянно думайте о том, чем можно помочь команде, — и развивайтесь в этом направлении;
                          • Сперва основы. Мыслите последовательно, ориентируясь на лучшие практики мира Computer Science;
                          • Посмотрите с разных сторон. Простое получается тяжелее, чем сложное, поэтому включайте воображение;
                          • Синтаксис — основа взаимодействия. Мы пишем код для людей, а не для машин;
                          • Не запутывайте. Старайтесь проектировать слоями, по мере возможности не зависящими друг от друга;
                          • Вычищайте оставленное-на-всякий-случай. Минимализм борется с отвлекающим от основного.

                          Читать дальше
                        • Как HTTPS обеспечивает безопасность соединения: что должен знать каждый Web-разработчик

                          • Translation


                          Как же все-таки работает HTTPS? Это вопрос, над которым я бился несколько дней в своем рабочем проекте.

                          Будучи Web-разработчиком, я понимал, что использование HTTPS для защиты пользовательских данных – это очень и очень хорошая идея, но у меня никогда не было кристального понимания, как HTTPS на самом деле устроен.

                          Как данные защищаются? Как клиент и сервер могут установить безопасное соединение, если кто-то уже прослушивает их канал? Что такое сертификат безопасности и почему я должен кому-то платить, чтобы получить его?
                          Читать дальше →