В данной статье рассмотрены особенности форматирования сообщений для системы интернационализации фреймворка Yii 2. В основном, это сведения из документации фреймворка и библиотеки ICU, с дополнительными пояснениями и примерами. Большая часть информации подойдет для любого фреймворка, который использует библиотеку ICU для интернационализации сообщений. В примерах подразумевается перевод сообщений с английского на русский ('en-US' => 'ru-RU'). Настройка системы интернационализации в статье не рассматривается.
zelenin @zelenin
Разработчик
Remix Mini, ПК на кастомной версии Android, собрал более $1 млн на Kickstarter
2 min
17KКраудфандинг — очень удачное решение для реализации многих проектов. При этом некоторые проекты, будучи выведены на Kickstarter или Indiegogo, показывают просто рекордные результаты. Один из таких проектов-рекордсменов — миниатюрный ПК на Android, который получил название Remix Mini.
В качестве ОС установлена кастомная версия Adnroid, созданная китайским стартапом Jide. Кстати, эта компания основана экс-сотрудником Google. Особенностью кастомизированной версии Android, названной Remix OS, является наличие панели задач, поддержка работы одновременно с несколькими приложениями (мультиоконность), плюс большое количество других приятных возможностей.
+15
Забудьте о DAO, используйте Repository
6 min
176KНедавно задумался о том, чем отличаются паттерны, позволяющие абстрагироваться от работы с хранилищем данных. Много раз поверхностно читал описания и различные реализации DAO и Repository, даже применял их в своих проектах, видимо, до конца не понимая концептуальных отличий. Решил разобраться, закопался в Google и нашел статью, которая для меня разъяснила все. Подумал, что неплохо было бы перевести ее на русский. Оригинал для англочитающих здесь. Остальным интересующимся добро пожаловать под кат.
+18
React на ES6+
5 min
72KTranslation
Это перевод поста Steven Luscher опубликованного в блоге Babel. Steven работает в Facebook над Relay – JavaScript фрэймворком для создания приложений с использованием React и GraphQL.
За этот год, в процессе реорганизации Instagram Web, мы насладились использованием ряда особенностей ES6+, при написании нашх React компонентов. Позвольте мне остановиться на тех моментах, когда новые возможности языка могут повлиять на то как вы пишите React приложения, и сделают этот процесс легче и веселее, чем когда-либо.
+17
«Домашка» по Yii2
3 min
4.4KTutorial
Не так давно был написан пост о «подводных камнях и ракушках», в котором было «домашнее задание» — ответ на которое так никто и не прислал, но думаю многие задавались вопросом — как все таки связывать модели из разных модулей. Хочу вам предложить вариант решения данной задачи.
0
Анализ SSL/TLS трафика в Wireshark
7 min
214KTutorial
Как скрыть от посторонних конфиденциальную информацию?
Самое простое – зашифровать.
В Интернет и Интранет-сетях шифрацией данных управляет протокол SSL/TLS.
Солдат спит, служба идет.
Однако иногда возникает необходимость выполнить обратное – расшифровать перехваченный трафик.
Это может потребоваться как для отладки работы приложений, так и для проверки подозрительной сетевой активности.
Или в целях изучения работы SSL/TLS (очевидные, вредоносные цели не обсуждаются).
Как и при каких условиях можно расшифровать дамп SSL/TLS трафика в Wireshark?
Попробуем разобраться.
+42
Telegram открыл платформу для ботов
2 min
45KСервисами мгновенных сообщений пользуются не только люди, но и боты. Создатели IM-клиента Telegram учли этот факт и первыми среди конкурентов открыли API для ботов. Теперь сторонние разработчики могут спокойно создавать своих ботов и подключать их к Telegram.
Для ботоводов открыт специальный раздел со справочной информацией по созданию ботов.
Боты — обычные аккаунты Telegram, которыми управляют не люди, а программы, и у них часто есть элементы ИИ. Они могут делать что угодно — преподавать, играть, искать информацию, транслировать сообщения на широкую аудиторию, напоминать о событиях, подключаться к другим сервисам, даже передавать команды в Интернет вещей, рассказывают разработчики Telegram.
Для ботоводов открыт специальный раздел со справочной информацией по созданию ботов.
Боты — обычные аккаунты Telegram, которыми управляют не люди, а программы, и у них часто есть элементы ИИ. Они могут делать что угодно — преподавать, играть, искать информацию, транслировать сообщения на широкую аудиторию, напоминать о событиях, подключаться к другим сервисам, даже передавать команды в Интернет вещей, рассказывают разработчики Telegram.
+32
Popcorn Time для порно
2 min
46K«Да в вашем интернете одна порнуха», — брюзжит бабушка на внука, хотя тот, может, никогда и не видел фильмов эротического содержания. Но в реальности бабулька права: «взрослый» контент составляет очень большую часть трафика в интернете.
Из истории развития технологий известно, что порноиндустрия традиционно находится на переднем краю научно-технического прогресса и неизменно в числе первых пробует все технические новинки, от онлайн-платежей до медиастриминга. Так вышло и с инновационной P2P-системой распространения видеофильмов Popcorn Time, которая предусматривает передачу фильмов по протоколу BitTorrent с возможностью почти сразу начать просмотр любого фильма в каталоге. Ею заинтересовалась порноиндустрия.
+33
Авторизация для API с помощью токенов
3 min
43KTutorial
Как и обещал ранее, продолжаю свою серию статей про создание API на Symfony2. Сегодня я бы хотел рассказать о авторизации. Из популярных бандлов есть JWTAuthenticationBundle и FOSOAuthServerBundle, у каждого есть свои плюсы и минусы, но мне хотелось бы рассказать как сделать авторизацию самому, чтобы понимать как это работает.
+6
Охватывающий SQL в Postgres
8 min
25KTranslation
Одна вещь, которая заставляет меня смотреть со стороны на ORM, как они так стараются скрыть и абстрагировать все силу и выразительность SQL. Прежде чем я напишу дальше, позвольте мне сказать что, Frans Bouma напомнил мне вчера, что есть разница между ORM и людьми, которые их используют. Это всего лишь инструменты (в ORM) и я с этим согласен, так же я согласен, что не плохой фастфуд делает людей полными, а это люди, которые едят его слишком много.
Вместо того чтобы, ругать ORM я хотел бы рассказать вам, почему я не использую ОО абстракцию в основании моей базы данных. Если коротко: потому что SQL может вам сильно помочь выразить значение вашего приложения с точки зрения данных. Единственный способ знать как работает ваше приложение это знать по каким данным оно генерируется.
Вместо того чтобы, ругать ORM я хотел бы рассказать вам, почему я не использую ОО абстракцию в основании моей базы данных. Если коротко: потому что SQL может вам сильно помочь выразить значение вашего приложения с точки зрения данных. Единственный способ знать как работает ваше приложение это знать по каким данным оно генерируется.
+23
Разворачиваем web-приложение при помощи Fabric
7 min
16KTutorial
Приложения растут, становятся сложнее. Растет количество манипуляций, необходимых для их развертывания и обновления.
В этой статье я расскажу о том, как превратить увлекательное и, местами, непредсказуемое приключение в простую, рутинную и скучную операцию с предсказуемым результатом.
- Одни и те же повторяющиеся действия занимают существенное количество времени
- Про какие-то действия забывают, другие путают местами
- Человеческий фактор, легкомысленность и недальновидность
В этой статье я расскажу о том, как превратить увлекательное и, местами, непредсказуемое приключение в простую, рутинную и скучную операцию с предсказуемым результатом.
+14
Новые возможности платформы VoxImplant: Instant Messaging и Presence + демо на ReactJS/Flux
3 min
6.5KTutorial
Внимание! Данная статья устарела. Вы можете ознакомиться с более свежими статьями здесь или почитать блог на нашем сайте.
В последнее время мы были заняты работой над большим обновлением VoxImplant, которое должно сделать платформу еще более гибкой и удобной для разработчиков коммуникационных сервисов. Количество новых функций достаточно большое, поэтому будем рассказывать о них по-порядку и начнем с месседжинга и презенса. Так как банальное описание функционала мало кому интересно, то сразу разберем пример создания приложения для внутрикорпоративных коммуникаций с использованием популярного ReactJS и Flux. Это позволяет достаточно оперативно сделать более-менее сложное приложение, ну и заодно показать как использовать VoxImplant при таком подходе. Presence у нас тоже с некоторыми интересными особенностями, про которые мы расскажем более детально и объясним потом зачем это может быть нужно.
+7
Раз плюнуть: обзор и результаты генетического теста Атлас и дайджест основных ДНК-тестов в России и мире
5 min
84K«Домашний» ДНК — бизнес относительно молодой. Большинство компаний предоставляют типовую услугу, состоящую из 3 базовых элементов: пробирка для сбора материала, курьер, доступ к личному кабинету с расшифровкой данных о наследственных рисках и предрасположенностях к заболеваниям.
Сегодня я покажу скриншоты результатов генетического теста «Атлас», нашего партнера, и быстро перечислю основных крупных игроков этого рынка у «них» и у «нас».
Компания «Атлас» с 2011 года предоставляет возможность узнать об особенностях своего организма по целому ряду направлений: фармакогенетика, предрасположенность к заболеваниям, наследственные риски, внешние особенности и т. п., и действует при этом по узнаваемой схеме: вы покупаете пробирку для сбора генетического материала (слюны), услуги курьера и доступ к личному кабинету.
Что оказалось в нашем личном кабинете — под катом.
Сегодня я покажу скриншоты результатов генетического теста «Атлас», нашего партнера, и быстро перечислю основных крупных игроков этого рынка у «них» и у «нас».
Компания «Атлас» с 2011 года предоставляет возможность узнать об особенностях своего организма по целому ряду направлений: фармакогенетика, предрасположенность к заболеваниям, наследственные риски, внешние особенности и т. п., и действует при этом по узнаваемой схеме: вы покупаете пробирку для сбора генетического материала (слюны), услуги курьера и доступ к личному кабинету.
Что оказалось в нашем личном кабинете — под катом.
+29
Inno Setup: создание инсталлятора на примере развертывания C# приложения
13 min
198KTutorial
Введение
Я не являюсь профессиональным программистом. В том смысле, что не зарабатываю денег этим ремеслом, а использую свои навыки в качестве инструмента для основной, научной, деятельности. Поэтому все мои «поделки» живут лишь отведенный им на решение конкретной задачи период и не выходят за пределы каталогов проекта. Кроме того, уже довольно давно я отошел от разработки под ОС Windows, ибо Linux для решения моих задач более удобен.
Однако ученым тоже хочется кушать, прилично одеваться и заправлять машину. Поэтому (правда довольно редко) возникает необходимость немного пофрилансить.
Недавно мне подкинули не слишком сложный проект — одна фирма хочет написать аналог программы, имеющейся у другой. Немного реверсинга, немного кодинга, в целом проект вполне обыденный. Однако тут же возник вопрос о создании инсталлятора — клиент ведь желает продукт «под ключ», чтобы клацнуть на «сетап», понажимать «Далее» и получить готовую к работе программу.
Созданием инсталляторов я не занимался никогда. Поэтому данный вопрос был основательно «загуглен», в числе прочего попалась и такая статья с Хабра. Выбор средств для подобной задачи довольно широк, и включает как проприетарные, так и открытые продукты. Вот список того, что я «пощупал»
- InstallShield — классика жанра, достаточно солидный проприетарный продукт
- Adnvanced Installer — проприетарный инструмент с широкими возможностями кастомизации через GUI. На сайте сказано, что если Вы блоггер и будете писать об этом продукте много хороших слов, то у Вас есть возможность получить Free License
- WiX — открытый бесплатный продукт, основанный на XML-скриптах. Мощная, хорошо документированная штука. Разбираться с ним я пока не стал, ибо время дорого (да и к XML душа лежит не очень). Возможно когда нибудь я к нему вернусь. Да, к нему есть плагины для Visual Studio, что несомненный плюс.
- Inno Setup — опенсорсный проект, код которого доступен на гитхабе. В силу бесплатности и низкого порога вхождения мой выбор остановился именно на нем, как инструменте позволившем выполнить работу быстро и качественно.
Так что в статье мы будем рассматривать пример использования Inno Setup, для которого имеется полезный фронтэнд Inno Script Studio, позволяющий выполнять создание простых инсталляторов с помощью мастера и менять настройки через GUI. GUI понадобился мне для первого знакомства, с продуктом, но мы не будем уделять ему большого внимания — мой «линукс головного мозга» в последнее время всё больше и больше уводит меня от желания использовать разного рода «мастера» (это субъективно, прошу не пинать). Мы рассмотрим хардкорный способ написания скрипта с чистого листа.
+16
JSONB запросы в PostgreSQL
7 min
272KTranslation
Ранее я писал, как включить поддержку jsonb в postgres/psycopg2. Сегодня экспериментировал с тем, как запрашивать данные в колонках типа JSON.
На эту тему есть документация, но мне было не совсем понятно, как работают различные операции:
На эту тему есть документация, но мне было не совсем понятно, как работают различные операции:
CREATE TABLE json_test (
id serial primary key,
data jsonb
);
INSERT INTO json_test (data) VALUES
('{}'),
('{"a": 1}'),
('{"a": 2, "b": ["c", "d"]}'),
('{"a": 1, "b": {"c": "d", "e": true}}'),
('{"b": 2}');
+32
Как запустить простой статический сайт за пять ≈пятиминутных шагов при помощи Node.js и Express
2 min
39KTutorial
В качестве отклика на инструкцию «Как сделать простой веб-сайт за один час» я решил опубликовать собственную, состоящую из пяти простых и обозримых ≈пятиминутных шагов.
Шаг 1. Установитьдвижок Node.js в соответствии с инструкциями, имеющимися в вики для каждой из поддерживаемых операционных систем. (Для Windows достаточно скачать и запустить MSI-файл, для CentOS — воспользоваться системным менеджером пакетов, и так далее.)
Шаг 2. Создать пустой каталог и поместить в нём файл«site.js» следующего содержания:
Настройки staticSiteOptions можно переменить по собственному вкусу.
Шаг 3. В том же каталоге подать команду«npm install express», которая автоматически создаст подкаталог «node_modules» и установит туда Express, скачав из Интернета.
Шаг 4. В том же каталоге создать подкаталог«static» и поместить в нём файлы статического сайта. Этот подкаталог станет корнем сайта. Файлы с именами «index.html» будут использоваться как файлы-индексы. Иными словами, при ответе сервера на запрос с адресом, содержащим только имя некоторого каталога (будь то корень сайта или один из его подкаталогов), будет показан файл с именем «index.html» из указанного каталога (если есть).
Шаг 5. В том же каталоге подать команду«node site», которая запустит сервер. Убедившись в её работоспособности, обеспечить автозапуск этой команды в этом каталоге после каждой перезагрузки операционной системы. (Например, на CentOS 6.2 можно использовать upstart для этой цели.)
Всё.
Шаг 1. Установить
Шаг 2. Создать пустой каталог и поместить в нём файл
site.js
// Перечисление зависимостей:
var path = require('path');
var express = require('express');
// Описание настроек:
var staticSiteOptions = {
portnum: 80, // слушать порт 80
maxAge: 1000 * 60 * 15 // хранить страницы в кэше пятнадцать минут
};
// Запуск сайта:
express().use(express.static(
path.join(__dirname, 'static'),
staticSiteOptions
)).listen(staticSiteOptions.portnum);
Настройки staticSiteOptions можно переменить по собственному вкусу.
Шаг 3. В том же каталоге подать команду
Шаг 4. В том же каталоге создать подкаталог
Шаг 5. В том же каталоге подать команду
Всё.
-9
Как легко расшифровать TLS-трафик от браузера в Wireshark
2 min
157KTranslation
Многим из вас знаком Wireshark — анализатор трафика, который помогает понять работу сети, диагностировать проблемы, и вообще умеет кучу вещей.
Одна из проблем с тем, как работает Wireshark, заключается в невозможности легко проанализировать зашифрованный трафик, вроде TLS. Раньше вы могли указать Wireshark приватные ключи, если они у вас были, и расшифровывать трафик на лету, но это работало только в том случае, если использовался исключительно RSA. Эта функциональность сломалась из-за того, что люди начали продвигать совершенную прямую секретность (Perfect Forward Secrecy), и приватного ключа стало недостаточно, чтобы получить сессионный ключ, который используется для расшифровки данных. Вторая проблема заключается в том, что приватный ключ не должен или не может быть выгружен с клиента, сервера или HSM (Hardware Security Module), в котором находится. Из-за этого, мне приходилось прибегать к сомнительным ухищрениям с расшифровкой трафика через man-in-the-middle (например, через sslstrip).
Что ж, друзья, сегодня я вам расскажу о способе проще! Оказалось, что Firefox и Development-версия Chrome поддерживают логгирование симметричных сессионных ключей, которые используются для зашифровки трафика, в файл. Вы можете указать этот файл в Wireshark, и (вуаля!) трафик расшифровался. Давайте-ка настроим это дело.
Одна из проблем с тем, как работает Wireshark, заключается в невозможности легко проанализировать зашифрованный трафик, вроде TLS. Раньше вы могли указать Wireshark приватные ключи, если они у вас были, и расшифровывать трафик на лету, но это работало только в том случае, если использовался исключительно RSA. Эта функциональность сломалась из-за того, что люди начали продвигать совершенную прямую секретность (Perfect Forward Secrecy), и приватного ключа стало недостаточно, чтобы получить сессионный ключ, который используется для расшифровки данных. Вторая проблема заключается в том, что приватный ключ не должен или не может быть выгружен с клиента, сервера или HSM (Hardware Security Module), в котором находится. Из-за этого, мне приходилось прибегать к сомнительным ухищрениям с расшифровкой трафика через man-in-the-middle (например, через sslstrip).
Логгирование сессионных ключей спешит на помощь!
Что ж, друзья, сегодня я вам расскажу о способе проще! Оказалось, что Firefox и Development-версия Chrome поддерживают логгирование симметричных сессионных ключей, которые используются для зашифровки трафика, в файл. Вы можете указать этот файл в Wireshark, и (вуаля!) трафик расшифровался. Давайте-ка настроим это дело.
+81
Angular 2.0.0-alpha для тех, кто не в силах ждать
9 min
54KTutorial
Совсем недавно (5-6 марта) прошла конференция ng-conf, и много докладов на ней было посвящено грядущему релизу Angular 2, на нескольких из них даже показали альфа версию. Конечно же после прослушивания очень захотелось опробовать его лично. Если вам тоже не терпится — прошу под кат.
В этой статье мы разберёмся, где взять билд альфа версии Angular 2.0, создадим на нём небольшое приложение — To-do list, и запустим его в браузере без полной поддержки ECMAScript 6.
+21
Алгоритм PageRank применили для определения наиболее успешных футбольных команд
1 min
9.6KИзвестный благодаря Google алгоритм ранжирования сущностей по числу взаимных ссылок между ними был применён двумя исследователями из Македонии для определения того, какая футбольная команда должна находиться на троне сильнейших. В итоге выяснилось, что математика как нельзя лучше соответствует действительности — вверху пьедестала оказалась Бразилия. Статья опубликована на arXiv.org.
+10
Nginx и https. Получаем класс А+
4 min
161KTutorial
Недавно вспомнилось мне, что есть такой сервис — StartSsl, который совершенно бесплатно раздаёт trusted сертификаты владельцам доменов для личного использования. Да и выходные попались свободные. В общем сейчас напишу, как в nginx настроить HTTPS, чтобы при проверке в SSL Labs получить рейтинг А+ и обезопасить себя от последних багов с помощью выпиливания SSL.
Итак, приступим. Будем считать, что у вы уже зарегистрировались на StartSsl, прошли персональную проверку и получили вожделенный сертификат. Для начала опубликую итоговый конфиг, а после этого разберу его.
+43
Information
- Rating
- Does not participate
- Location
- Москва, Москва и Московская обл., Россия
- Date of birth
- Registered
- Activity