Подкаст про OSGi

http://razbor-poletov.com/2015/01/episode-76.html

Нам все еще актуально, сервер http://tankionline.com в основе своей построен на OSGi.
Пару лет назад написали свой велосипед по запуску OSGi на основе maven проектов.

Долгожители среди кода

Разбираю проекты сервера tankionline.com, некоторые классы были созданы в 2009 году и до сих пор работают и не требуют изменения. 5 лет обычно для кода это срок. И есть большая вероятность использования их в новых проектах.

Отличный блог про devops и администрирование

http://gitinsky.com/blog/
Лично был на докладе про LeoFS. Харизма докладчика напомнила мне одного препода из ПГТУ.

Первый скрипт на LUA для Redis

Атомарный инкремент поля.

eval "local a=redis.call('get',KEYS[1]);local b=tonumber(a) + 1;redis.call('set',KEYS[1],b);return redis.call('get',KEYS[1]);" 1 1

Разреженный массив

Есть Map – известно что ключи последовательные и работают по принципу плавающего окна, чисто в теории эту структуру можно заменить на набор из N массивов, что приведет к ускорению работы. Ниже прототип, идея думаю понятная. Но дописывать вам.
Читать далее Разреженный массив

Разгоняем ThreadLocal

Всем серьезным и не очень программистам из мира Java известен данные класс. Он привязывать объект к конкретному потоку. Достаточно часто используется в многопоточных приложениях, наш сервер также не стал исключением. А раз у нас самый многопоточный из многопоточных серверов – то используется данный класс достаточно часто – на одну входящую команду с клиента раз 20 точно. Сегодня я провел тестирование скорости работы данного класса, оказалось всего лишь 7 000 операций get() за одну миллисекунду. Пришлось ускорять и вот каким методом – у каждого Thread есть метод long getId() который возвращает уникальный идентификатор потока, но также не следует забывать, что если поток умирает – то данный идентификатор может реиспользоваться.
Читать далее Разгоняем ThreadLocal

NoSQL Redis – первые шаги

Решение отказаться от PostgreSQL и перейти на Redis было принято еще полтора месяца назад. Но только сегодня практически полностью завершена интеграция базы в платформу. Изначально для доступа к базе данных я использовал JRedis. Чуток позже выяснилось, что он поддерживается не все команды, в том числе он не поддерживал работу с hash. А это для нас критично. Пришлось править код и добавлять поддержку данных команд, поддержку то я сделал, но разбираясь в чужом коде понял, что это совершенно не Realtime решение. А сборке мусора автор даже не подумал, куча объектов, структур и классов. Сам проект – 200 классов самого разнообразного назначения. И поэтому пришлось самому писать API для доступа. В итоге – 5 классов и 10 JUNIT тестов, поддержка всех существующий команд. Работа с сокетами на уровне ByteBuffer и NIO. Пул коннектов, шардинг и многое другое. И все это работает в OSGi. Исходный код дать не могу, но кому интересно – пишите, по крайней мере на вопросы отвечу. По скорости процентов на 30% быстрее чем JRedis, по памяти раза в три и главное не создает объектов в процессе работы.

Redis меня в последнее время радует, недавно сделали поддержку виртуальной памяти, в итоге можно хранить достаточно большое количество данных, нам вполне хватит. А поддержка сортированный SET вообще сказка, именно на нем мы будем делать TOP рейтинг игроков (пример можно посмотреть на http://tankionline.com).

ActiveMQ – шпаргалка

Нашел в черновиках 🙂

http://activemq.apache.org
Быстродействие (Intel Celeron M380):
20 000 сообщений в секунду для Topic
5 000 сообщений в секунду для Queues
Читать далее ActiveMQ – шпаргалка

Тестирование

Можно ли доверять интуиции при тестировании ПО? И да, и нет:

Нет – потому что любую догадку необходимо подтвердить. Особенно из разряда “уже сто раз проверяли, все чисто”. Мы люди, нам свойственно ошибаться. На наше мышление влияет множество факторов, и в том числе эмоции. Гонцы из подсознания могут оказаться троянскими конями, а интуиция – сыграть в угоду слабоволию, страхам и надеждам.

Да – потому что наше подсознание обладает гораздо большей мощью чем сознание. Оно способно дать ответ тогда, когда логические рассуждения ни к чему не приводят. Например, в случае, когда не удается воспроизвести баг, который проявляется у заказчика. Вот тут-то и может произойти “щелчок”, вспышка, и коллекция энтомолога пополнится еще одним достойным экземпляром.

http://blog.openquality.ru/intuition-in-software-testing/

Мастер класс по платформе

Сегодня провел мастер класс по созданию многопользовательских игр на нашей платформе (http://alternativaplatform.com). В качестве примера сделали игру – пятнашки. На чистый кодинг ушло менее часа. Планирую сделать видео – и выложить для всеобщего ознакомления. Теперь думаю куда бы пристроить пятнашки, вам случайно не нужны ? 🙂