[Из песочницы] Закон Деметры

Введение


На данный момент существует множество доказанных временем практик, помогающих разработчикам писать хорошо поддерживаемый, гибкий и удобно читаемый код. Закон Деметры — одна из таких практик.
Читать дальше →
[Из песочницы] Закон Деметры
Source: habrahabr

Анонс конференции Mobius 2017: Больше мобильной разработки, хорошей и разной

Привет Хабр!


Анонс прошлого Mobius мы начали с того, что разобрались с фидбеками и пообещали сделать конференцию лучше. Если верить отзывам участников – с поставленной целью мы справились:


«В целом все очень понравилось. До этого был 2 года назад и скажу, что конференция изменилась просто в разы. Появилось множество интересных докладов, не было нудных пересказов и продвижений своих продуктов.»


Однако мы не останавливаемся на достигнутом и продолжаем серию Mobius. В этот раз конференция состоится 21-22 апреля 2017 года в Санкт-Петербурге. Да, в этот раз конференция пройдет в течение двух дней: в прошлый раз участники часто сетовали на чересчур высокую загрузку к концу для, теперь за счет двухдневного формата и докладов станет больше, и воспринимать их будет проще. В программу войдут не только лучшие спикеры прошлых Mobius, но и новые лица. Кроме того, планируется новый формат докладов и общения со спикерами.


Подробности под катом.

Читать дальше →
Анонс конференции Mobius 2017: Больше мобильной разработки, хорошей и разной
Source: habrahabr

VoIP телефония. Asterisk. Нестандартный подход ко всему. Часть 2

Продолжаем наш рассказ о модификации движка для VoIP оператора связи.

В первой части мы рассказали о начальной структуре базы данных и настройке Asterisk для обслуживания вызовов, с мониторингом состояния вызова. В этой части мы затронем такие вещи как тарификатор, LCR, биллинг и геолокация.

Читать дальше →
VoIP телефония. Asterisk. Нестандартный подход ко всему. Часть 2
Source: habrahabr

VoIP телефония. Asterisk. Нестандартный подход ко всему. Часть 1

Ровно год назад к нам обратились бывшие коллеги, с предложением принять участие в модификации движка VoIP оператора связи. Задача сводилась к полной переделке личного кабинета, обеспечению масштабирования системы, создания системы биллинга, LCR, мониторинга расходов пользователей, контроля длительности разговоров, аналитики по звонкам. История закончилась печально, т.к. заложенный нами расширенный функционал системы якобы не соответствовал ТЗ, никак не формализованному на бумаге и находящемуся только в головах менеджеров оператора. В связи с тем, что за разработанный функционал, который заказчику очень понравился, менеджеры платить не захотели, отношения мы разорвали. NDA и договора у нас не было, поэтому посоветовавшись с коллегами мы решили часть наработок выложить в свободный доступ. Я думаю, что это будет серия статей. И начнём пожалуй с базовых вещей и архитектуры.

Читать дальше →
VoIP телефония. Asterisk. Нестандартный подход ко всему. Часть 1
Source: habrahabr

Слушаем пользовательский ввод с помощью “Raw Input API” для управления фоновым приложением


Пожалуй, почти не осталось людей, не знающих, что такое Ctrl+C и Ctrl+V. Более опытные пользователи знают горячие клавиши часто используемых приложений. Есть те, кто использует более сложные комбинации: например, для управления плеером, находящимся в фоне. Для разработчиков реализация подобного функционала обычно не вызывает больших трудностей, т.к. эта задача широко распространена, а о её решении уже многое написано. Но как быть, если надо в свернутом состоянии слушать пользовательский ввод с джойстика или презентера, да к тому же ещё и разбираться, от какого именно устройства пришло событие? Скажем честно, для нас эта задача оказалась чем-то новым. Под катом мы расскажем, как мы её решили на C# в WPF приложении с помощью «Raw Input API«.
Читать дальше →
Слушаем пользовательский ввод с помощью “Raw Input API” для управления фоновым приложением
Source: habrahabr

Инфраструктура онлайн игры

image

Здравствуйте, меня зовут Александр Зеленин, и я на дуде игрец веб-разработчик. Полтора года назад я рассказывал о разработке онлайн игры. Так вот, она немного разрослась… Суммарный объём исходного кода превысил «Войну и мир» вдвое. Однако в данной статье я хочу рассказать не о коде, а об организации инфраструктуры проекта.

Неужели всё так сложно?
Инфраструктура онлайн игры
Source: habrahabr

Путь, который стоило пройти, чтобы получить бесценный опыт в мобильной разработке

Привет, Хабр! Пришло время подвести итоги 2016 года. Мы вместе с братом, в свободное время, разрабатываем мобильные приложения. Самым успешным проектом у нас стала образовательная игра “Quick Brain”, которой уже пошел 3-ий год (о ней мы писали ранее), только последнее время приложение стало приносить достойный результат… Об этом я расскажу позже.


Здесь же пойдет речь о второй попытке повторить успех с образовательным приложением “Русский язык — грамотей”.


Читать дальше →
Путь, который стоило пройти, чтобы получить бесценный опыт в мобильной разработке
Source: habrahabr

[Из песочницы] Типичные ошибки начинающих работать с изображениями

Цифровая обработка изображений — весьма интересная область, но она таит в себе множество подводных камней, на которые постоянно натыкаются новички. Мы активно привлекаем студентов к участию в грантах и проектах, но когда мы пытались давать студентам реальные задания, которые требуют реализации новых алгоритмов обработки изображений, мы были в ужасе от совершаемых ими детских ошибок.

Поэтому перед постановкой полноценных задач мы стали давать студентам ряд практических заданий по реализации стандартных алгоритмов обработки изображений: базовые операции над изображениями (поворот, размытие), свёртка, интерполяция с помощью простых фильтров (билинейная, бикубическая), направленная интерполяция, выделение границ с помощью алгоритма Канни, детектирование ключевых точек и т.д. Язык программирования мог быть любым, однако при выполнении заданий не допускается использование сторонних библиотек, за исключением чтения и записи изображений. Это связано с тем, что задания носят обучающий характер, самостоятельная реализация алгоритмов является хорошей практикой в программировании и позволяет понять, как работают методы изнутри.

Данная статья описывает наиболее частые ошибки, совершаемые студентами при выполнении практических заданий по обработке изображений. Изображения обычные, никакой экзотики типа 16-битной глубины цвета, панхроматичности и 3D-изображений нет.

Читать дальше →
[Из песочницы] Типичные ошибки начинающих работать с изображениями
Source: habrahabr

[Из песочницы] Сериализация данных: тест производительности и описание применения

Сериализация

Сериализация (Serialize, в последующем «сохранение») – это процесс сохранения данных объекта во внешнем хранилище. Эта операция работает в паре с обратной – восстановлением данных, называемой десереализацией (Deserealize, в последующем «восстановление»).

Операции сохранения и восстановления данных применяются очень часто. В классических языках программирования готовых механизмов для сохранения и восстановления данных объектов нет и, при возникновении такой необходимости, приходится создавать их самостоятельно. В Java такие готовые механизмы существуют и, даже, в количестве более одного. Давайте разберемся, какие механизмы есть и какие возможности они предоставляют для программ на Kotlin.

Само понятие сериализации никак не привязано к формату данных, в который будут сохранены данные, поэтому вне зависимости от того, какой результат будет получен – бинарный файл с собственной структурой, формат XML, JSON или даже текстовый файл – все это будет сериализацией.

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

Но, помимо работы с элементарными типами, в Java существует несколько разных типов готовых механизмов для сохранения данных классов и множество библиотек, реализующих работу с одними и теми же форматами, отличающихся друг от друга производительностью, объемом и предоставляемыми возможностями.

Ниже будут рассмотрены типовые способы сохранения данных: встроенные в стандартную библиотеку Java, а так же сохранение в формате XML и JSON.

Читать дальше →
[Из песочницы] Сериализация данных: тест производительности и описание применения
Source: habrahabr

Обработка препроцессорных директив в Objective-C

Язык программирования с препроцессорными директивами сложен для обработки, поскольку в этом случае необходимо вычислять значения директив, вырезать ненужные фрагменты некомпилируемого кода, а затем производить парсинг очищенного кода. Обработка директив может осуществляться также во время парсинга обычного кода. Данная статья подробно описывает оба подхода применительно к языку Objective-C, а также раскрывает их достоинства и недостатки. Эти подходы существуют не только в теории, но уже реализованы и используются на практике в таких веб-сервисах, как Swiftify и Codebeat.


Swiftify — веб-сервис для преобразования исходников на Objective-C в Swift. На данный момент сервис поддерживает обработку как одиночных файлов, так и целых проектов. Таким образом, он может сэкономить время разработчикам, желающим освоить новый язык от Apple.


Codebeat — автоматизированная система для подсчета метрик кода и проведения анализа для различных языков программирования, в том числе и Objective-C.

Читать дальше →
Обработка препроцессорных директив в Objective-C
Source: habrahabr