• Мифы о CAP теореме

      Введение


      cap


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


      Событие, когда какая-то статья вызывает бурю эмоций, — крайне редкое. Первый раз такое возникло, когда я прочитал про chained replication. Меня пытались убедить, что это мощный подход и что это лучшее, что могло произойти с консистентной репликацией. Я сейчас не буду приводить доводы, почему это плохо работает, а просто приведу говорящую цитату из статьи Chain Replication metadata management:


      Split brain management is a thorny problem. The method presented here is one based on pragmatics. If it doesn’t work, there isn’t a serious worry, because Machi’s first serious use case all require only AP Mode. If we end up falling back to “use Riak Ensemble” or “use ZooKeeper”, then perhaps that’s fine enough.

      В моем вольном пересказе это означает примерно следующее: "У нас тут есть некий алгоритм. Мы не знаем, будет ли он работать правильно или нет. Да нам это и не важно". Хотя бы честно, сэкономило кучу времени, спасибо авторам.


      И тут, значит, попадается на глаза статья: Spanner, TrueTime & The CAP Theorem. Её мы разберем по полочкам ближе к концу, вооружившись понятиями и знаниями. А перед этим разберем самые распространенные мифы, связанные с CAP теоремой.


      Читать дальше →
    • Badoo перешли на PHP7 и сэкономили $1M

        Badoo перешли на PHP7 и сэкономили $1M

        Мы сделали это! Несколько сотен наших application-серверов переведены на PHP7 и прекрасно себя чувствуют. Насколько нам известно, это второй переход на PHP7 проекта такого масштаба (после Etsy). В процессе мы нашли несколько очень неприятных багов в системе кеширования байт-кода PHP7, но они исправлены. А теперь — ура! — благая весть для всего PHP-сообщества: PHP7 действительно готов к продакшену, стабилен, потребляет значительно меньше памяти и дает очень хороший прирост производительности. Ниже мы подробно расскажем, как мы перешли на PHP7, с какими трудностями столкнулись, как с ними боролись и какие результаты получили.
        Читать дальше →
      • Долгая история про локализацию даты без года в PHP

          Давайте начнём с простой задачки — вывести локализованную дату: там должен быть день, полное название месяца на языке локали и полный год. В наше время это действительно очень просто. В PHP есть своё i18n-расширение intl, которое входит в ядро с версии 5.3. И в этом intl есть класс IntlDateFormatter, у которого в свою очередь предопределено несколько форматов. Используем его LONG формат.

          <?php
          
          foreach (['en_US', 'ru_RU', 'es_ES', 'fa_IR'] as $locale) {
              $formatter = new IntlDateFormatter(
                  $locale, 
                  IntlDateFormatter::LONG, 
                  IntlDateFormatter::NONE, 
                  'Europe/Moscow'
              );
              echo $formatter->format(1455111783), PHP_EOL;
          }

          Результат:

          February 10, 2016
          10 февраля 2016 г.
          10 de febrero de 2016
          ۱۰ ﻑﻭﺭیﻩٔ ۲۰۱۶ ﻡ. // вот тут вообще-то RTL-текст, но я хз как это правильно оформить

          Пока неплохо. А теперь давайте слегка изменим условия: «вывести локализованную дату: там должен быть день и полное название месяца на языке локали». То есть, мы не хотим отображать год.
          Казалось бы, ерунда. Но есть нюанс...
        • Искусство командной строки



            Вот уже как неделю английская версия the art of command line висит в секции trending на Github. Для себя я нашел этот материал невероятно полезным и решил помочь сообществу его переводом на русский язык. В переводе наверняка есть несколько недоработок, поэтому милости прошу слать пулл-реквесты мне сюда или автору оригинальной работы Joshua Levy вот сюда. (Если PR отправите мне, то я после того, как пересмотрю изменения отправлю их в мастер-бранч Джоша). Отдельное спасибо jtraub за помощь и исправление опечаток.

            Enjoy!
          • Минимальный почтовый сервер на основе Postfix и Dovecot. Часть 1: Dovecot

            • Tutorial
            Цель: получить минимально работающий почтовый сервер, используя только Postfix и Dovecot, с минимальным изменением настроек по умолчанию. Получить каркас системы, на основе которого можно, в дальнейшем, настраивать спам фильтры, работу с базами данных, LDAP…
            Почтовая система должна:
            1. Поддерживать любое количество доменов и пользователей.
            2. Обслуживать пользователей, не привязанных к локальным учетным записям.
            3. Обеспечивать доступ к почтовым ящикам по протоколам POP3, IMAP с поддержкой TLS.
            4. Обеспечивать отправку и прием писем по протоколу SMTP с поддержкой TLS.

            Настройка проводилась в CentOS 6. Postfix 2.6.6, Dovecot 2.0.9. Никакие особенности ОС не применялись.
            Читать дальше →
            • +16
            • 98,5k
            • 3
          • Подкаст «Пятиминутка PHP»

              Пятиминутка PHP — еженедельный подкаст о новостях из мира PHP, интересных постах в блогах и современных подходах к разработке.

              Послушайте первые два выпуска и вы узнаете про:
              • SPL структуры данных (стек, очередь, массив) против классического array и что нам принесёт PHP 7
              • эффективное пересечение массивов, поиск элемента или проверку вхождения в массив
              • проблему с хешами паролей, даже если вы используете новые функции хеширования из PHP 5.5
              • Russia Laravel Meetup и DevConf 2015
              • сравнение производительности Golang, Scala, Elixir, Ruby, Python 3 и PHP в сферических попугаях в вакууме
              • оптимизацию использования памяти и как написать свой сборщик мусора на PHP
              • почему Doctrine ORM не подходит для PHP
              • рендеринг ReactJS шаблонов на сервере с помощью PHP
              • пример использования генераторов (yield)
              • прошлое, настоящее и будущее Code Coverage от автора PHPUnit
              • проблемы Zephir с PHP 7
              • хорошие статьи о PHP 7, которые уже есть на хабре
              • написание и тестирование API на PHP, Rails и Go от Phil Sturgeon
              • TDD — Train Driven Development

              Читать дальше →
            • PHP-Дайджест № 60 – интересные новости, материалы и инструменты (30 марта – 13 апреля 2015)



                Предлагаем вашему вниманию очередную подборку со ссылками на новости и материалы.

                Приятного чтения!
                Читать дальше →
              • Подробно об объектах и классах в PHP

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

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

                В PHP 7, который пока ещё активно разрабатывается, объектная модель переработана не сильно, были внесены лишь незначительные изменения. Просто потому что всё и так хорошо работает, а лучшее — враг хорошего. Были добавлены возможности, не затрагивающие ядро, но здесь об этом речи не пойдёт.
                Читать дальше →
              • PHP-Дайджест № 58 – интересные новости, материалы и инструменты (22 февраля – 16 марта 2015)



                  Предлагаем вашему вниманию очередную подборку со ссылками на новости и материалы.

                  Приятного чтения!
                  Читать дальше →
                • Дискретные структуры: матан для айтишников



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

                  Хотя раньше такого понятия, как «дискретная математика» вовсе не было, это не значит, что не возникало дискретных задач: Абель, Дирихле, Фибоначчи, Эйлер, чьи имена возникают по ходу изучения дискретной математики, — отнюдь не наши современники! Но просто в те времена для выделения самостоятельной ветви математики ещё не сложилось критической массы задач и приёмов, не было видно взаимосвязей между ними. А большое количество плодотворных взаимосвязей между, на первый взгляд, различными понятиями, — то, что математики в своей науке очень ценят.

                  Ну хорошо, математикам всё математическое интересно. А зачем дискретная математика программисту?
                  Читать дальше →
                • Пишем плагин для October CMS

                  На Хабре уже была публикация о выходе бета-версии OctoberCMS, на этом все закончилось. Русскоязычных материалов по этой CMS мало, поэтому я решил внести свой вклад.

                  Сегодня мы с вами напишем плагин каталога для сайта.

                  Подробнее о том, что эта CMS из себя представляет можно прочитать на официальном сайте. Скажу лишь, что CMS основана на фреймворке Laravel, поэтому у нас есть инструменты для командной строки artisan, Eloquent ORM, миграции, что значительно упрощает разработку.
                  Читать дальше →
                • Знакомство с парадигмами построения моделей предметной области

                    Введение


                    Возможно, кто-то задаст вопрос, а причем тут математика? Отвечу сразу: все, что здесь изложено, относится непосредственно к математике.
                    Изучая литературу по теории построения моделей предметной области, я обнаружил серьезный пробел. Авторы статей и книг сразу берут одну из нотаций моделирования: ER-диаграммы, или диаграммы классов, и в быстром темпе начинают их использовать для описания предметной области. При этом описание парадигмы, в которой производится это моделирование остается вообще не раскрытым. А следовательно, не раскрытыми остаются ограничения той или иной нотации. Увы, мы все умеем строить модели, но мало кто умеет объяснить то, что он построил в одной из существующих парадигм. Поэтому я часто слышу дикие с точки зрения любой парадигмы термины: класс типов, типы классов, виды типов и так далее, но ни разу не слышал корректный термин «класс классов». Этот пробел в нашем образовании очень серьезен. И я объясню почему.

                    Давайте зададим аналитикам простой вопрос.

                    Те, кто моделировал процессы, наверно, знакомы с нотацией BPMN. Очень часто при моделировании операции по заключению договора я встречаю такой фрагмент диаграммы:



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

                    • Бумажка с печатью
                    • Бумажки с печатью
                    • Класс бумажек с печатью
                    • Договор
                    • Договоренность
                    • Информация о договоренности
                    • Файл MS Word с названием договор
                    • Запись в базе данных
                    • Поток каких-то объектов

                    Пока я наблюдаю отсутствие согласия между аналитиками на предмет того, что же все-таки передается, и что значат термины «договор», «поток», «договоренность», «информация», «данные». Чтобы ответить на этот вопрос, мне пришлось копать глубоко и в сторону парадигм. Причем, ответ потребовал разбиения вопроса на два. Первый вопрос был: «Как корректно сформулировать вопрос?» А второй был: «Как на него ответить?». Для правильной формулировки нужно было выбрать подходящую парадигму. Эта статья посвящена рассказу о двух парадигмах: Аристотелевской и логической, и почему я выбрал логическую в качестве рабочей. Ответа на поставленный вопрос в этой статье я не дам. Ответ я дам в другой статье.
                    Читать дальше →
                  • Inversion of Control: Методы реализации с примерами на PHP

                      О боже, ещё один пост о Inversion of Control


                      Каждый более-менее опытный программист встречал в своей практике словосочетание Инверсия управления (Inversion of Control). Но зачастую не все до конца понимают, что оно значит, не говоря уже о том, как правильно это реализовать. Надеюсь, пост будет полезен тем, кто начинает знакомится с инверсией управления и несколько запутался.

                      Читать дальше →
                    • Несколько интересностей и полезностей для веб-разработчика #32

                        Доброго времени суток, уважаемые хабравчане. За последнее время я увидел несколько интересных и полезных инструментов/библиотек/событий, которыми хочу поделиться с Хабром.

                        ICEcoder



                        Это не просто песочница, а полноценный open source редактор в вашем браузере. Вообще существуют десктопные версии, но по-моему, наибольшие внимание разработчики уделают веб-версии. ICEcoder поддерживает HTML, CSS, LESS, SASS, JS, Coffee, PHP, RonR, Python, C/C++/C#, Java, Lua, Rust, SQL, Markdown, всего более 60 языков! Фичи: возможность совместной работы с кодом, Emmet, LiveReload, работа с БД, колопикер, diff tool, линтеры и еще целое множество удачных интерфейсных решений. Повторюсь — это все в вашем браузере!

                        Читать дальше →
                        • +45
                        • 50,5k
                        • 9
                      • Pro Git, 2-е издание


                          Вне всяких сомнений, Pro Git — это одна из лучших книг про систему контроля версий git. Совсем недавно появилось второе издание этой замечательной книжки. Большие изменения произошли в издательском процессе: исходный код книги теперь хранится в AsciiDoc, а не в Markdown, а различные форматы (PDF, ePub и Mobi) автоматически генерируются с помощью O'Reilly Atlas platform. Разработка книги активно ведётся на гитхабе, актуальная online-версия находится в открытом доступе на официальном сайте, а любители печатной продукции могут заказать себе экземпляр на Amazon. Второе издание получилось почти в два раза больше первого: на сегодняшний день PDF-версия содержит 570 страниц. Помимо улучшения старого материала, книжка также пополнилась новыми главами и разделами:
                          Читать дальше →
                        • Перевод интерактивного учебника «Problem Solving with Algorithms and Data Structures»

                          • Tutorial
                          imageПривет, Хабр!

                          Мы (@ali_aliev и avenat) с удовольствием представляем вашему вниманию перевод интерактивного учебника «Problem Solving with Algorithms and Data Structures» от Брэда Миллера (Brad Miller) и Дэвида Ранума (David Ranum) из Luther College, что в Айове, США.

                          О чём?

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

                          Авторы рассказывают о таких структурах данных, как стеки, очереди (в том числе с приоритетом), деки, хэш-таблицы, списки, деревья и графы. Последним двум вообще посвящены весьма не маленькие главы. Изложение не просто описательное: для каждой структуры предлагается вариант (а иногда и не один) её реализации на Python. Упор, естественно, делается на объектно-ориентированное программирование: создаётся класс, к нему пишутся методы, некоторые из которых авторы оставляют читателям для самостоятельной доработки. Затем идут примеры использования рассмотренной структуры и описание алгоритмов с её участием.

                          Одна из глав учебника посвящена рекурсии, в том числе её графическому представлению (фракталы). Разбирается несколько известных рекурсивных задач, а в конце наглядно демонстрируется, что эта методика, несмотря на её элегантность, отнюдь не «серебряная пуля».

                          Не обделены вниманием и классические алгоритмы для сортировки и поиска. И, естественно, для каждого из них анализируются производительность и «подводные камни», а так же даются рекомендации по применению. В последних главах, посвящённых деревьям и графам, даётся много материала об их разновидностях и связанных с ними алгоритмах. Изложение тут становится более сжатым, многие моменты просто описываются с тем, чтобы после прочтения главы читатель реализовал их самостоятельно.
                          Читать дальше →
                        • Жизнь разработчика (в картинках)

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

                            Когда я показываю босу, что окончательно пофиксил баг



                            Когда проджект-менеджер входит в офис



                            Читать дальше →
                          • Как вернуть деньги со счета мобильного, если вы не подключали сторонних услуг

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

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

                              Как вообще можно подписать на услугу без моего ведома?


                              У сотовых операторов есть «партнеры», оказывающие разного рода услуги (например, купить картинку-подарок в «Контакте»). Смысл подобных услуг заключается в следующем:
                              1. Вы вводите номер телефона.
                              2. Вам присылают код подтверждения.
                              3. Вы вводите этот код.
                              4. С этого моменты вы считаетесь официально подписанным на какую-то услугу (будь то одноразовую или нет).


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

                              Всё это делает возможным, например, следующую схему:
                              1. 1-го января в семь утра вводят ваш номер телефона.
                              2. Оператору присылают уведомление, что вы бессрочно подписались на такую-то услугу и подтвердили эту услугу.
                              3. С вашего счета начинают списывать 40 р. каждый день, пока не кончатся деньги или вы не заметите их утечку (если вы платите за телефон раз в месяц, то легко можете потерять тысячу рублей).

                              Читать дальше →
                            • Shortcuts в windows

                                Собрал все шорткаты из комментов к этому топику:

                                1. если выделить папку или файл и нажать F2 то включится редактирование имени, или если в проводнике нажать F4, то активным станет адресная строка
                                2. проматывать страницу вниз не скроллом и клавишей Page Down, а просто нажимая «space»
                                3. А Shift+Space — обратно
                                4. все действия Shift+… возвращает в обратном порядке(Ctrl+Tab,Ctrl+Shift+Tab; Alt+Tab,Alt+Shift+Tab...)
                                5. чтобы в эти самые «окна на таскбаре» попасть без мышки, можно нажать комбинацию Win+Tab
                                Читать дальше →