• Стажёр Вася и его истории об идемпотентности API

      Идемпотентность — звучит сложно, говорят о ней редко, но это касается всех приложений, использующих API в своей работе.


      Меня зовут Денис Исаев, и я руковожу одной из бэкенд групп в Яндекс.Такси. Сегодня я поделюсь с читателями Хабра описанием проблем, которые могут возникнуть, если не учитывать идемпотентность распределенных систем в своем проекте. Для этого я выбрал формат вымышленных историй о стажёре Васе, который только-только учится работать с API. Так будет нагляднее и полезнее. Поехали.


      image

      Читать дальше →
    • Шпаргалка Java программиста 8. Библиотеки для работы с Json (Gson, Fastjson, LoganSquare, Jackson, JsonPath и другие)

      • Tutorial

      image


      В одной из моих прошлых статей я рассказывал о своем opensorce pet проекте useful-java-links, идея которого собрать как можно больше ссылок на полезные Java библиотеки и фреймворки. У него так же есть подпроект Hello World project идея которого для каждой библиотеки собрать несколько простых примеров её использования.

      Читать дальше →
    • Под высокой нагрузкой: наши способы применения Tarantool



        Многие из вас уже слышали о нашем проекте Tarantool. Это СУБД, или, попросту говоря, база данных с сервером приложений внутри. Tarantool — проект с открытым исходным кодом, и с ним может работать кто угодно. Развивается этот проект уже больше восьми лет. В Mail.Ru Group Tarantool активно используется более чем в половине продуктов: в Почте, Облаке, Моём Мире, Агенте и др. Все сделанные нами доработки этой БД мы коммитим обратно на GitHub, и сообществу доступна та же самая версия БД, что и нам. Сейчас у нас есть клиентские библиотеки почти ко всем языкам, мы сильно прибавили в этом направлении за последний год. Часть из них написана сообществом, часть — нами. Если появляется какая-то более эффективная библиотека, то мы просто делаем её официальной. Мы стараемся, чтобы всё было прямо из коробки — и БД, и библиотеки.

        Одна из главных особенностей Tarantool заключается в объединении свойств БД и кэша. БД — это нечто надёжное, с транзакциями, серверным языком запросов. А кэш быстрый. И оба этих мира органично сливаются воедино в Tarantool. Эта БД предназначена для использования в высоконагруженных проектах и для работы с горячими данными.
        Читать дальше →
      • Перевод: full stack разработчик — это миф

        • Translation
        Вашему вниманию предлагается перевод любопытной статьи Скотта Хадфилда, CTO и со-основателя стартапа “Hello Pretty”. Сейчас в половине вакансий, связанных с вебом и серверной разработкой, встречается волшебная фраза “full stack”. Чаще всего с эпитетами вроде “джедай”, “супер-герой” и “ниндзя”. Кого ищут все эти люди, и кого им на самом деле удается получить в свою команду?
        Читать дальше →
      • Шпаргалка Java программиста 4. Java Stream API

        • Tutorial


        Несмотря на то, что Java 8 вышла уже достаточно давно, далеко не все программисты используют её новые возможности, кого-то останавливает то, что рабочие проекты слишком сложно перевести с Java 7 или даже Java 6, кого-то использование в своих проектах GWT, кто-то делает проекты под Android и не хочет или не может использовать сторонние библиотеки для реализации лямбд и Stream Api. Однако знание лямбд и Stream Api для программиста Java зачастую требуют на собеседованиях, ну и просто будет полезно при переходе на проект где используется Java 8. Я хотел бы предложить вам краткую шпаргалку по Stream Api с практическими примерами реализации различных задач с новым функциональным подходом. Знания лямбд и функционального программирования не потребуется (я постарался дать примеры так, чтобы все было понятно), уровень от самого базового знания Java и выше.

        Также, так как это шпаргалка, статья может использоваться, чтобы быстро вспомнить как работает та или иная особенность Java Stream Api. Краткое перечисление возможностей основных функций дано в начале статьи.

        Читать дальше →
      • 300 потрясающих бесплатных сервисов

        • Translation


        Автор оригинальной статьи Ali Mese добавил ещё 100 новых бесплатных сервисов. Все 400 потрясающих сервисов доступны здесь. И еще подборку +500 инструментов от 10 марта 2017 г. смотрите здесь.



        A. Бесплатные Веб-Сайты + Логотипы + Хостинг + Выставление Счета

        • HTML5 UP: Адаптивные шаблоны HTML5 и CSS3.
        • Bootswatch: Бесплатные темы для Bootstrap.
        • Templated: Коллекция 845 бесплатных шаблонов CSS и HTML5.
        • Wordpress.org | Wordpress.com: Бесплатное создание веб-сайта.
        • Strikingly.com Domain: Конструктор веб-сайтов.
        • Logaster: Онлайн генератор логотипов и элементов фирменного стиля (new).
        • Withoomph: Мгновенное создание логотипов (англ.).
        • Hipster Logo Generator: Генератор хипстерских логотипов.
        • Squarespace Free Logo: Можно скачать бесплатную версию в маленьком разрешении.
        • Invoice to me: Бесплатный генератор счета.
        • Free Invoice Generator: Альтернативный бесплатный генератор счета.
        • Slimvoice: Невероятно простой счет.

        Читать дальше →
      • Знакомимся с Otto, наследником Vagrant

          Otto — это новый продукт от Hashicorp, логический наследник Vagrant, призванный упростить процесс разработки и деплоя программ в современном мире облачных технологий. Концептуально новый подход к проблеме, проверенные технологии под капотом и открытый исходный код. Персональный DevOps ассистент разработчика.


          Читать дальше →
          • +21
          • 32k
          • 9
        • Шпаргалка Java программиста 2: Триста пятьдесят самых популярных не мобильных Java opensource проектов на github

            Что это и зачем оно надо: Как известно, главное преимущество Java мира в том в нем существует огромное количество open-source проектов на на все случаи жизни, однако найти нужный на github'e не так просто, так как описание проекта часто мало информативно, зачастую сложно даже понять этот проект для Android'a или нет. В этой статье я автоматически и полуавтоматически собрал Java проекты, убрал старые и проекты только для Android'a, выбрал 350 набравших больше всего звезд, разделил по категориям и перевел описания.

            Если вы хотите убедиться что базы данных пишут не только на C, найти проекты для работы с большими данными или нейронными сетями, пишите свой язык программирования для JVM и хотите посмотреть как это уже сделано или же просто хотите узнать какие новые возможности можно найти в Java мире open-source то это статья вам, думаю, может пригодится.

            В чем смысл серии статей 'Шпаргалки Java программиста'
            За время работы Java программистом я заметил, что как правило программисты постоянно и планомерно используют от силы 10-20% от возможностей той или иной технологии, при этом остальные возможности быстро забываются и при появлении новых требований, переходе на новую работу или подготовке к техническому интервью приходится перечитывать все документации и спецификации с нуля. Зато наличие краткого конспекта особенностей тех или иных технологий (шпаргалок) позволяет быстро освежить в памяти особенности той или иной технологии.


            Другие статьи серии: часть 1. JPA и Hibernate в вопросах и ответах

            Update: Внимание, актуальная версия со много большим количеством ссылок, находиться теперь в моем github'e проекте useful-java-links, по этой ссылке.


            Читать дальше →
          • Wi-Fi: неочевидные нюансы (на примере домашней сети)

              Сейчас многие покупают точки доступа 802.11n, но хороших скоростей достичь удается не всем. В этом посте поговорим о не очень очевидных мелких нюансах, которые могут ощутимо улучшить (или ухудшить) работу Wi-Fi. Всё описанное ниже применимо как к домашним Wi-Fi-роутерам со стандартными и продвинутыми (DD-WRT & Co.) прошивками, так и к корпоративным железкам и сетям. Поэтому, в качестве примера возьмем «домашнюю» тему, как более родную и близкую к телу. Ибо даже самые администые из админов и инженеристые из инженеров живут в многоквартирных домах (или поселках с достаточной плотностью соседей), и всем хочется быстрого и надежного Wi-Fi.
              [!!]: после замечаний касательно публикации первой части привожу текст целиком. Если вы читали первую часть — продолжайте отсюда.
              Читать дальше →
            • Эффективная работа с SQLite на примере ICQ

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

                Несколько слов об исходной задаче. Основная сущность у нас — профиль ICQ, у которого есть список контактов, а у тех есть сообщения. Наше приложение существует уже много лет, разрабатывалось разными людьми с разными подходами, номер версии основной БД уверенно приближался к 30. Кроме того, количество фич в продукте невозможно предсказать заранее, это тоже повлияло на архитектуру. В общем, модель данных изначально была примерно такой:

                Читать дальше →
                • +42
                • 26k
                • 8
              • Dropbox — продолжаем меряться

                  Скучно работается… Ну что же. попытаемся ещё больше автоматизировать то что предлагалось тут и здесь =)

                  На этот раз у нас остаётся лишь basy-скрипт. который позволяет довольно просто и вполне интерактивно нащёлкать себе рефералов. Да, MAC адрес автоматически обновляется, поэтому необходимость в виртуальной машине по сути отпадает… Хотя я бы всё же рекомендовал производить манипуляции со скриптом на ней. Ну просто потому что в процессе своей работы скриптик периодически затирает конфиг дроп-бокса.

                  Смотрим чего вышло и что с этим делать…
                  Читать дальше →
                • Веб-приложения на Clojure

                  На Хабре не так уж и много статей о Clojure, и это печально, намерен это исправить. Ниже я расскажу об отличном на мой субъективный взгляд инструменте — языке программирования Clojure и его библиотеках для создания веб-приложений.
                  Читать дальше →
                • О том, как я собирал на Linux'е application bundle для MacOS

                    Итак, довелось мне недавно обновить билд-скрипт одного приложения написанного на Java Swing. Приложение давно разрабатывается, и писалось ни одним поколением программистов, но дело свое делает хорошо и четко, поэтому собирается под основные платформы (Window's, Unix, MacOS). Вот и решили мы проапдейтить сборку нашего старого app bundle'а для MacOS, а заодно и положить в него встроенную jre версии 1.8. И тут начали выясняться интересные вещи: старый bundle был собран под Java 6 от Apple, и отныне не работал, формат Info.plist поменялся, ибо Oracle больше нравятся свои пропертя, старый JavaApplicationStub отныне вне закона, да здравствует JavaAppLauncher, ну и много другого интересного. Лично мне по душе больше Linux, да простят меня любители MacOS, и даже такая знакомая консоль терминала слабо согревала мою душу после долгих мытарств по просторам интернета в поисках опыта таких же отважных людей, победивших мою проблему. Это практически невероятно, но в конце концов, я обнаружил статью в блоге David Clunie, в которой он шаг за шагом описал практически все мои попытки найти пути решения поставленной задачи. Кого заинтересовал прошу подкат, для любителей оригиналов вот ссылка на заветную статью, заранее прошу прощения за качество моего перевода, т.к. он не будет полным и дословным.
                    Читать дальше →
                  • Тестирование светодиодных ламп IKEA

                      Хорошие светодиодные лампы пока достаточно дороги, а из-за изменения курсов валют они стали ещё дороже.
                      Одни из самых низких цен на светодиодные лампы сейчас в магазинах IKEA.
                      Я протестировал 11 актуальных светодиодных ламп LEDARE, стоящих от 169 до 599 рублей.



                      Читать дальше →
                    • Data Lake – от теории к практике. Сказ про то, как мы строим ETL на Hadoop

                        В этой статье я хочу рассказать про следующий этап развития DWH в Тинькофф Банке и о переходе от парадигмы классического DWH к парадигме Data Lake.

                        Свой рассказ я хочу начать с такой вот веселой картинки:



                        Да, ещё несколько лет назад картинка была актуальной. Но сейчас, с развитием технологий, входящих в эко-систему Hadoop и развитием ETL платформ правомерно утверждать то, что ETL на Hadoop не просто существует но и то, что ETL на Hadoop ждет большое будущее. Далее в статье расскажу про то, как мы строим ETL на Hadoop в Тинькофф Банке.
                        Читать дальше →
                      • Как Бандеролька делает упаковку, которая пересекает океан и не боится «Почты России»

                          В конце 2012 года на рынок смартфонов вышел хороший аппарат Google Nexus 4, и наши клиенты тут же начали покупать его в американских магазинах и заказывать доставку домой через Бандерольку. Но такой телефон хотелось иметь не только им — сотрудники «Почты России» попробовали их воровать. Мы приостановили отправку, выплатили страховку и начали думать, как сделать упаковку, которую нечестные почтальоны не смогут вскрыть.


                          Читать дальше →
                        • Забудьте САР теорему как более не актуальную

                          • Translation
                          или «Прекратите характеризовать хранилища данных как CP или AP»

                          capДжеф Ходжес в своем прекрасном посте «Заметки о распределенных системах для новичков» рекомендует использовать САР теорему для критики найденных решений. Многие, похоже, восприняли этот совет слишком близко к сердцу, описывая свои системы как «СР» (согласованность данных, но без постоянной доступности при сетевой распределенности), «АР» (доступность без согласованного состояния при сетевой распределенности), или иногда «СА» (означает «Я всё ещё не читал статью Коды (Coda Hale) почти 5-летней давности»).

                          Я согласен со всеми пунктами статьи кроме того, что касается САР теоремы. Она слишком всё упрощает и слишком многие понимают её неверно для того, чтобы использовать для определения характеристик системы. Так что я прошу перестать ссылаться на САР теорему, говорить о ней и дать ей уже спокойно уйти на покой. Вместо неё мы должны использовать более точную терминологию для обсуждения различных компромиссов.

                          (Да, я понимаю всю иронию написания целой статьи по теме того, о чём призываю не писать других вообще. Но, как минимум, у меня будет ссылка, которую я смогу давать интересующимся, когда меня будут спрашивать, почему я не одобряю обсуждение САР теоремы. Также, я хочу извиниться, если статья вам покажется слишком напыщенной, но эта напыщенность опирается на множество ссылок.)

                          САР использует слишком узкое определение


                          Если вы хотите ссылаться на САР как на теорему (а не на расплывчатый концепт в маркетинговых материалах к вашей базе данных), вы должны быть точны. Математика требует точности. Доказательство сохраняется только если вы вкладывается в слова, то же самое значение, что было использовано при доказательстве. И оно опирается на очень точные определения:
                          Еще 3000 слов увлекательного чтива
                        • Автоматическое тестирование JavaFX приложений



                            Добрый день!

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

                            В статье я расскажу как находить компоненты на JavaFX форме, как проверять их свойства, как кликать на них и так далее. Это минимально необходимый набор входных точек в автоматизацию тестирования JavaFX приложений.
                            Читать дальше →
                            • +12
                            • 10.5k
                            • 6
                          • Виртуальные сети: VXLAN и VMware NSX


                              Созданные почти четверть века назад виртуальные локальные сети VLAN были для своего времени неплохим способом управления узлами сети. Но в условиях массового перехода на облачные технологии и повсеместным внедрением виртуальных машин возможностей традиционных VLAN для современных ЦОД стало явно недостаточно. Причем самыми болезненными вопросами стало ограничение доменов второго уровня на четырех тысячах VLAN при невозможности переноса виртуальных машин через границы L2.

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

                              И как это делается?
                              Читать дальше →