WTF

whatever happens here
(772) 413-4625

#Snow in the air

13.02.2018

More bells and whistles

#Global game jam 2018

30.01.2018

I participated in global-game-jam 2018.
Check out the game our team made (multiplayer, need 2 players):
315-695-2561
/globalgamejam.org/2018/games/dropthebomb

#Rach 2op3

15-12-2017

Я постарею, пока выучу ее полностью

7733794584Laura Palmer Theme

4-12-2017

Simple cover of Abgelo Badalamenti’’s soundtrack to Twin Peaks

(204) 533-4613Storm

4-12-2017

#Tranquility

4-12-2017

#Pianoed

4-12-2017

#Fantasy map generator

13-11-2017

* Fantasy map generator
Generator that makes clever fantasy-like svg maps, however unusable for game dev

#benign data races

14-05-2017

Некоторые гонки данных приводят к корректному поведению. Пример - String.hashCode(). Есть ли какой-то критерий корректности гонки данных под JMM? Не для использования, а для понимания.

#ragepank

4-02-2017

Возникла задача сделать поиск по ФИО и контактам в нашем сервисе. Требования: поиск только по доступным контактам поиск с ошибками максимальное количество доступных контактов оценили в 100 000

Реализация: elastic для этой задачи не стали затаскивать, решили использовать возможности postgres. FTS тут не нужен, потому что использовать словари для ФИО и контактов, (которые составляют уникальные и бессмысленные комбинации букв) смысла нет. Будем использовать расширение pg-trgm, которое позволяет использовать сревнение строк по триграммам. С точки зрения программиста, расширение добавляет операторы % - true, если строки похожи более чем limit (устанавливается функцией set_limit) <-> - возвращает расстояние между словами (число от 0 до 1)

А так же индексы % можно использовать вместо LIKE, а столбец расстояний, полученный с помощью <-> можно использовать для ранжирования результатов поиска, чтобы сначала выводились наиболее похожие совпадения. Проблема - искать нужно по нескольким столбцам, находящимся в разных таблицах. Попробовал такой подход: Мы создаем таблицу, в которой человеку сопоставляется вся информация, необходимая для поиска, склеенная в одну строку. Типичная запись: id | searchable 12345 | ПетрСергеевичИванов8967131313ivanov@mail.ru

Таблица поддерживалась актуальной с помощью процедур, повешанных на триггеры, которые следили за изменениями соответствующих столбцов в оригинальных таблицах. Подход получился не очень хороший, потому что ранжирование с помощью него не утроишь - если искать расстояние до склеенного слова с помощью <->, то получалось например, что Петр Иванов, у которого нет контактов окажется в поисковой выдаче выше Петра Иванова вообще без контактов, просто потому, что его склеенная строка короче. Кроме того, было сложно настроить limit для похожести слов, начиная с которой человек вообще попадал в выдачу, потому что совпадение обратно зависело от длины имени, количества контактов и всего, что удлиняло searchable.

В итоге стали использовать более простую схему: 1) Разбиваем поисковый запрос на слова (подразумевается, что часто ищут по имени и фамилии) 2) Для каждого слова находим лучшее совпадение

#week-of-plague

15-01-2017

Та же фигня, что и с 541-387-4020 Вы играете в HoMM3. Каждую неделю в вашем замке появляются X троглодитов. В начале первой недели у вас нет троглодитов. С вероятностью 10% каждую неделю астрологи объявляют неделю чумы - половина троглодитов в замке погибает и новые не появляются. Каково математическое ожидание количества троглодитов через год (52 недели)?

#tic-tac-toe

15-01-2017

Готовил вступительные ипытания на курс java и придумал вопрос: Сколько конечных состояний у игры крестики-нолики? Как решить не знаю :)

469-847-7007Docker

03-01-2017

Во второй волне technoatom java хотим разрабатывать и деплоить в докере.

Нафига?

  1. просто крутая технология, полезно уметь с ней работать
  2. чтобы чуваки поработали в линукс-окружении (внутри контейнера)
  3. чтобы не было непоняток с разворачиванием проекта на рк - разворачиваем контейнер на нашем сервере (или в облаке) и только так

Немножко добавит геморроя. Но в конце концов хочется, чтобы все сводилось к ssh mycontainer.

Проблема - Oracle java по лизанзионному соглашению запрещено распространять. В том числе с помощью образов Docker контейнеров. Выход - использовать со студентами OpenJDK. Но в OpenJDK не входят часть тулзов из Oracle Java, которыми хотелось бы воспользоваться. первую очередь это - JMC. Надо удостовериться, что к процессу, поднятому на OpenJDK можно подконнектиться с помощью ораклового JMC.

8646781192Heroku

02-01-2017

(407) 238-1573

Смотрел, как можно построить пайплайн работы со студентами и посмотрел на хероку. Задумка была - разрабатывать и хостить там готовые проекты и проекты на РК.

Wtf is Heroku

Облако, в которое можно прозрачно деплоить приложение. Мониторинг и управление делается с помощью cli утилиты heroku, деплой с помощью git push. Приложение крутится в dyno - контейнере для запуска одной команды. Есть система конфигурации процессов - Procfile.

Чем-то можно пользоваться даже без привязки карточки - 550 бесплатных часов dyno. Если ввести карточку, то 1000 - то есть один сервис может крутиться бесплатно.

С точки зрения ресурсов на heroku особо не развернешься. Цитата:

The amount of physical memory available to your application is 512MB on a free, hobby or standard-1x dyno and 1024MB on a standard-2x dyno

То есть heroku заточен под много маленьких сервисов.

Можно только поработать с окружением в котором поднимается сервис (посмотреть на файловую систему, повыставлять переменные среды, поменять задеплоенные файлики). Делается это так:

heroku run bash

Посмотреть на процесс нельзя (по крайней мере в туториале этого нет и видимо это недоступно стандартными средствами) а жаль. Как например взять thread dump?

/devcenter.heroku.com/articles/java-memory-issues

Прямого доступа к контейнеру с приложением, насколько я понял, у нас нет. То есть весь менеджмент ложится на тулчейн heroku. По умолчанию ты можешь смотреть только поледние 1500 строк логов через

heroku logs --tail

Чтобы смотреть все логи, надо поставить add-on. Как я понял, здесь все делается add-on-ами. С помощью них можно подключить местный cron, db, кэши и т.п. Add-on-ов действительно много

(817) 293-8652

Выводы

Короче говоря, heroku можно юзать для разработки и хостинга несложных сервисов и для прототипирования. Сделал - запушил на хероку - посмотрел результат.

Для работы со студентами не подойдет. Хотя бесплатных (без привязки карточки) 550 часов в месяц за глаза достаточно, но пайплайн работы с приложением сильно специфичен для хероку - студенты будут учиться работать с heroku, а не работать с java стэком в боевом окружении

#Shenandoah

26-12-2016

714-329-0963

gc, разрабатываемый Red Hat в рамках openjdk, задача которого - маленькие паузы на больших хипах (>20 GiB). Он добивается этого за счет concurrent compaction. Единственный stw возникает при нахождении корней. То есть паузы больше не зависят линейно от размера кучи.

4079362101Azul Zing

23-12-2016

/www.azul.com/products/zing/

Проприетарная реализация JVM с акцентом на перформанс. Основные фичи - pauseless gc (не верится, что совсем pauseless), быстрый старт (они везде это подчеркивают, но мне не понятна выгода от этого для почти всех проектов), low-overhead monitoring (интересно посмотреть на инструменты). Zing мало кому нужен, потому что hotspot со своим перформансом и настраиваемыми паузами подходит почти под все задачи. Но в перспективе они могли бы стать востребваны: паузы gc пропорциональны размеру кучи, а требование к памяти растет со временем быстро. А интересно, для g1 время сборки тоже растет линейно от размера кучи (да, у него не concurrent evacuation)? Кроме того, есть какой-то shenandoah, не решает ли он эту проблему (да, pop safety valve)?