User
Опьяняющая сила Composer Plugins
Composer
— это самый важный инструмент в наборе современного PHP-разработчика. Времена ручного управления зависимостями остались в далеком прошлом, и их место заняли такие замечательные вещи как Semver
. Вещи, которые помогают нам спать по ночам, ведь мы можем обновлять наши зависимости не обрушивая все вокруг. Хоть мы и используем
Composer
довольно часто, не все знают о том, как расширить его возможности. Такая мысль даже не возникает, ведь он и так делает свою работу хорошо по-умолчанию, и кажется, что это не стоит времени или усилий, чтобы попытаться или хотя бы изучить. Даже в официальной документации обходят стороной этот вопрос. Наверное, потому что никто не спрашивает…Однако, недавние изменения сделали разработку плагинов для
Composer
намного легче. Сам же Composer
также недавно перешел из альфа-версии в бету, пожалуй, это самый консервативный цикл релизов из когда-либо задуманных. Этот инструмент, который изменил современный PHP-мир, сделал его таким, каким мы видим его сейчас. Этот краеугольный камень профессиональной разработки PHP. Он просто перешел из альфы в бету.Итак, сегодня я подумал, что мне бы хотелось исследовать возможности composer-плагинов, и по ходу дела создать немного свежей документации.
Вы можете найти код этого плагина на Github.
Оценка потенциала возобновляемых источников энергии. Региональный опыт
Первые шаги с Java 9 и проект Jigsaw – часть первая
Еще со времен книги "Java. Новое поколение разработки" мы следим за развитием давно анонсированных новых возможностей этого языка, объединенных под общим названием "Project Jigsaw". Сегодня предлагаем перевод статьи от 24 ноября, вселяющей достаточную уверенность, что в версии Java 9 Jigsaw все-таки состоится.
Как накрутить счетчик Google Analytics или Google ненавидит Казахстан
Думаю многие читали историю про Катю, я решил написать в том же стиле, т.е. информация о том почему Google ненавидит Казахстан будет в спойлерах.
И так.
Предыстория.
Однажды изучаю статистику в Google Search Console, я заметил что в разделе «Вид в поиске» появился еще один пункт, этот пункт вел на отчет о проиндексированных AMP страницах.
Зайдя на эту страницу я увидел надпись
Мне конечно же сразу захотелось узнать что это за ускоренные мобильные страницы. Пройдя по ссылке я увидел гайдлайн по созданию AMP страниц. Почитав гайдлайн я приступил к созданию amp страниц на своем сайте.
Диалоги о Java Performance
Введение в PHP 7: Что добавлено, что убрано
Однако в седьмой версии была убрана устаревшая функциональность, что привело к некоторым проблемам с обратной совместимостью, затруднив перевод старых приложений на новую версию. Эта статья может послужить вам кратким руководством, если вы планируете написание новых или перевод своих существующих приложений на PHP 7.
Dagger 2. Часть первая. Основы, создание графа зависимостей, Scopes
Всем привет! В последнее время появилось много средств, библиотек, которые существенно облегчают написание кода под Android. Только успевай за всем следить и все пробовать. Одним из таких средств является библиотека Dagger 2.
В сети уже много различного материала, посвященного данной библиотеке. Но когда я только начинал ознакамливаться с Dagger 2, читал статьи, смотрел доклады, я во всем этом находил один общий недостаток — мне, как человеку, не работавшему со Springом и прочими подобными фреймворками/библиотеками, было довольно сложно понять, откуда берутся зависимости, как они "провайдятся" и что вообще там происходит. На слушателей/читателей обычно сразу "вываливается" большое количество кода с новыми аннотациями. И это как-то работало. В итоге, после доклада/статьи в голове все никак не могло сложиться в единую понятную картину.
Сейчас, оглядываясь назад, я понимаю, что мне тогда очень не хватало схематичного отображения, картинок, явно показывающих "что, откуда и куда". Поэтому в своем цикле статей я постараюсь восполнить данный пробел. Надеюсь, это поможет новичкам и всем заинтересованным лучше понять Dagger 2 и решиться попробовать его у себя в проекте. Могу сразу сказать, это стоит того.
И да, изначально я хотел написать одну статью, но материала и картинок вышло уж как-то много, поэтому информацию я буду выкладывать небольшими порциями, чтобы читатель мог постепенно погружаться в тему.
Badoo перешли на PHP7 и сэкономили $1M
Мы сделали это! Несколько сотен наших application-серверов переведены на PHP7 и прекрасно себя чувствуют. Насколько нам известно, это второй переход на PHP7 проекта такого масштаба (после Etsy). В процессе мы нашли несколько очень неприятных багов в системе кеширования байт-кода PHP7, но они исправлены. А теперь — ура! — благая весть для всего PHP-сообщества: PHP7 действительно готов к продакшену, стабилен, потребляет значительно меньше памяти и дает очень хороший прирост производительности. Ниже мы подробно расскажем, как мы перешли на PHP7, с какими трудностями столкнулись, как с ними боролись и какие результаты получили.
Архитектура Stack Overflow
Чтобы понять, как все это работает, давайте начнем с показателей Stack Overflow. Итак, ниже приводится статистика за 12 ноября 2013 и 9 февраля 2016 года:
- 209,420,973 (+61,336,090) HTTP-запросов к нашему балансировщику нагрузки;
- 66,294,789 (+30,199,477) страниц было загружено;
- 1,240,266,346,053 (+406,273,363,426) битов (1.24 TБ) отосланного HTTP-трафика;
- 569,449,470,023 (+282,874,825,991) битов (569 ГБ) всего получено;
- 3,084,303,599,266 (+1,958,311,041,954) битов (3.08 ТБ) всего отослано;
- 504,816,843 (+170,244,740) SQL-запросов (только из HTTP-запросов);
- 5,831,683,114 (+5,418,818,063) обращений к Redis;
- 17,158,874 (not tracked in 2013) поисков в Elastic;
- 3,661,134 (+57,716) запросов Tag Engine;
- 607,073,066 (+48,848,481) мс (168 часов) выполнения SQL-запросов;
- 10,396,073 (-88,950,843) мс (2.8 часов) затрачено на обращение к Redis;
- 147,018,571 (+14,634,512) мс (40.8 часов) затрачено на запросы к Tag Engine;
- 1,609,944,301 (-1,118,232,744) мс (447 часов) затрачено на обработку в ASP.Net;
- 22.71 (-5.29) мс в среднем (19.12 мс в ASP.Net) на формирование каждой из 49,180,275 запрошенных страниц;
- 11.80 (-53.2) мс в среднем (8.81 мс в ASP.Net) на формирование каждой из 6,370,076 домашних страниц.
Вы можете спросить, почему существенно сократилась продолжительность обработки в ASP.Net по сравнению с 2013 годом (когда было 757 часов) несмотря на прибавление 61 миллиона запросов в день. Это произошло как и из-за модернизации оборудования в начале 2015 года, так и из-за некоторого изменения параметров в самих приложениях. Пожалуйста, не забывайте, что производительность – это наша отличительная особенность. Если Вы хотите, чтобы я более подробно рассказал о характеристиках оборудования – без проблем. В следующем посте будут подробные спецификации железа всех серверов, которые обеспечивают работу сайта.
Итак, что изменилось за прошедшие 2 года? Кроме замены некоторых серверов и сетевого оборудования, не очень многое. Вот укрупненный список хардварной части, которая обеспечивает работу ресурса (выделены различия по сравнению с 2013 годом):
- 4 Microsoft SQL Servers (новое железо для 2-х из них);
- 11 Web-серверов IIS (новое оборудование);
- 2 сервера Redis (новое оборудование);
- 3 сервера Tag Engine (новое оборудование для 2-х из 3-х);
- 3 сервера Elasticsearch (те же, старые);
- 4 балансировщика нагрузки HAProxy (добавлено 2 для поддержки CloudFlare);
- 2 брандмауэра Fortinet 800C (вместо Cisco 5525-X ASAs);
- 2 маршрутизатора Cisco ASR-1001 (вместо маршрутизаторов Cisco 3945);
- 2 маршрутизатора Cisco ASR-1001-x (новые!).
Что нам необходимо, чтобы запустить Stack Overflow? Этот процесс не сильно изменился с 2013 года, но из-за оптимизации и нового железа, нам необходим только один web-сервер. Мы этого не хотели, но несколько раз успешно проверили. Вношу ясность: я заявляю, что это работает. Я не утверждаю, что это (запуск SO на единственном web-сервере) — хорошая затея, хотя каждый раз выглядит весьма забавно.
Сделай сам: SQL JOIN на Java
Давайте проведем ликбез и вместе посмотрим, как же работают эти джойны, и даже сами реализуем парочку алгоритмов.
Поддержка мультиязычности в веб-проектах — базовые варианты реализации
Занимаясь проектами связанными с веб-разработкой я сталкивался с различными вариантами реализации подержки нескольких языков для сайтов, порталов и веб приложений. Здесь я описал базовые варианты реализации архитектуры БД, которые мне встречались чаще всего.
Думаю для новыичков в веб-разработке эта статья окажется полезной, а тех кто уже имет опыт построения мультиязычных систем приглашаю для обсуждения тех вариантов, которые вы предпочитаете.
Справочник по синхронизаторам java.util.concurrent.*
В java.util.concurrent много различных классов, которые по функционалу можно поделить на группы: Concurrent Collections, Executors, Atomics и т.д. Одной из этих групп будет Synchronizers (синхронизаторы).
Синхронизаторы – вспомогательные утилиты для синхронизации потоков, которые дают возможность разработчику регулировать и/или ограничивать работу потоков и предоставляют более высокий уровень абстракции, чем основные примитивы языка (мониторы).
Тест производительности проектов
Часто у нас стоит задача протестировать какую нагрузку выдерживает сайт наших клиентов. Для себя, в качестве инструмента тестирования, мы выбрали yandex-tank. Это будет краткая заметка о том как быстро начать работать с этим инструментом.
Amelisa. Оффлайн и реалтайм движок для React и Mongo
Написал недавно движок для синхронизации данных, имеющий первоклассную поддержку оффлайна. Например, можно уйти в оффлайн, изменять данные, закрыть браузер, открыть браузер, открыть сайт (выйти в онлайн) и данные смержатся без потерь. Также во время онлайна данные между клиентом и сервером синхронизируются в реальном времени. Хочу рассказать, в чём была идея, какие есть подобные решения/технологии и кому это может пригодиться.
Почему я больше не использую MVC-фреймворки
Уважаемые хабравчане.
Поскольку дискуссия вокруг статьи идет весьма активно, Жан-Жак Дюбре (он читает комментарии) решил организовать чаты в gitter.
Вы можете пообщаться с ним лично в следующих чатах:
https://gitter.im/jdubray/sam
https://gitter.im/jdubray/sam-examples
https://gitter.im/jdubray/sam-architecture
Также автор статьи разместил примеры кода здесь: https://bitbucket.org/snippets/jdubray/
По поводу кода он оставил следующий комментарий:
I don't code for a living, so I am not the best developer, but people can get a sense of how the pattern works and that you can do the exact same thing as React + Redux + Relay with plain JavaScript functions, no need for all these bloated library (and of course you don't need GraphQL).
Записывайтесь на новые онлайн-курсы от Mail.Ru Group на Stepic
В конце прошлого года мы в партнерстве со Stepic запустили бесплатные онлайн-курсы по дисциплинам из программ Технопарка, Техносферы и Технотрека. А сегодня мы спешим порадовать вас запуском ещё двух:
- Разработка веб-сервиса на Java (часть 2) — запуск 12 февраля.
- Веб-технологии — запуск 18 февраля.
Построение стакана котировок (FullOrderBook) по историческим данным
Совсем недавно решал задачу построения стакана котировок на основе исторических данных Московской Биржи. В открытых источниках ничего подобного не нашел, пришлось начинать с нуля и копать самому. Есть некоторые нюансы, о которых нужно знать. Про них буду упоминать по ходу.
Про биржевую торговлю, инфраструктуру и тестирование алгоритмов на исторических данных много писал и пишет IT Invest, спасибо ему. От себя добавлю, что на данных OrderLogs мы анализируем глубину рынка, ликвидность, спреды и еще много чего. Результаты используем в наших торговых алгоритмах.
Специально выбрал Фондовый рынок, так как тут больше всего вопросов. Валютный и Срочный рынок имеют свои особенности, но там проще. Реализация алгоритма на Java, код на GitHub.
Цель: Получить стакан котировок на любой момент времени.
Коллекции в Java: о чём многие забывают
Содержание:
- List.subList
- PriorityQueue
- EnumSet и EnumMap
- Set.add(E) и Set.remove(E) возвращают булево значение
- Map.put(K, V), Map.remove(K), List.set(idx, E), List.remove(idx) возвращают предыдущий элемент
- Map.keySet() и Map.values()
- Arrays.asList может быть ключом
- Collections.max
- LinkedList, Stack, Vector, Hashtable
ООП-конструктор админки для Битрикс
Information
- Rating
- Does not participate
- Date of birth
- Registered
- Activity