Pull to refresh
231
1.4
Егор Смирнов @JediPhilosopher

Java-разработчик

Send message

Делаем свою простейшую систему сборки для Java

Level of difficulty Medium
Reading time 9 min
Views 14K

Довелось мне обучать одного знакомого, желающего войти в ИТ (привет, Саша!). Человек он упорный, прошел разные курсы, стажировки, упорно продолжает идти вперед и уже вполне тянет на уровень джуна и решает прикладные задачи. Но иногда внезапно задает такие вопросы, из которых я понимаю, что у него огромные дыры в базовых знаниях и представлениях. На курсах этому, видимо, не учат.

Один из последних вопросов был про устройство сборки, непонимание того как исходный код собирается в исполняемый и запускается. Начинающим обычно говорят в духе «вот создаешь Gradle‑проект, в IDE жмешь кнопочку запуска и все работает». Но как только возникает необходимость что‑то в этом простом процессе усложнить, или понять — начинаются проблемы.

Gradle/Maven при этом представляются таким черным ящиком, в котором есть кнопка сборки и запуска, а внутри — магия, превращающая исходный код в запущенную программу.

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

Читать далее
Total votes 38: ↑37 and ↓1 +36
Comments 17

Цифровой урбанизм в России: где брать данные для своего проекта по анализу городской среды

Reading time 18 min
Views 11K

На Хабре время от времени появляются статьи про различные веб-сервисы и приложения, так или иначе анализирующие городскую среду. Такие сервисы, по задумке авторов, должны помогать жителям принимать какие-то решения - куда пойти, где купить жилье, где комфортнее жить и гулять.

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

В этой статье я постарался сделать обзор тех данных, которые можно использовать в урбанистически-айтишных сервисах в России. Что с их помощью можно сделать, что - нельзя, какие там есть подводные камни и типичные проблемы. Надеюсь, этот текст поможет как будущим авторам таких сервисов (чтобы не тратить время на то, что сделать не получится), так и для их пользователей (чтобы понимать, почему эти сервисы работают именно так, как работают, и не могут работать лучше).

Читать далее
Total votes 22: ↑22 and ↓0 +22
Comments 57

Когда простого пунктира мало: как подружить Java AWT Stroke и 10 приказ Минэкономразвития РФ

Reading time 6 min
Views 2.3K

Мы тут в ИТМО занимаемся созданием всяких ГИС на заказ. И вот пришел к нам заказчик и попросил сделать демку, умеющую генерировать и отображать различные градостроительные планы и схемы и делать по ним кое-какую аналитику.

И все бы ничего - взяли стандартные средства для работы с изображениями, отрендерили в текстуру по шаблону сгенерированный текст, пунктирчиком разметили границы участков и показали пользователю в браузере. Но тут всплыла такая штука как ЗОУИТ - Зоны с особыми условиями использования территории. Это могут быть всякие зоны защиты инженерных сетей, водоохранные зоны и т.п.

И вот тут-то началась засада. У каждого ЗОУИТа есть свой стиль для отображения, описанный в 10 приказе Минэкономразвития (вообще порадовало, что оказывается есть цельный отдельный приказ, где прописано все в деталях, от RGB цветов линий до названий и значений полей с данными). И стили эти все достаточно непростые.

Если простую линию или пунктир нарисовать через стандартные механизмы AWT просто, для этого есть класс BasicStroke, то вот рисовать что-то такое этакое, с галочками, крестиками и прочими закорючками в разрывах или вдоль линии, из коробки в джаве не получится. При этом документация и примеры в сети довольно скудные - везде обычно пишут, как нарисовать пунктир тем же стандартным BasicStroke и на этом успокаиваются. А что делать с более сложными видами линий - нигде не сказано. Пришлось осваивать это самому.

Под катом - описание того, как сделать свой собственный Stroke, позволяющий рисовать произвольные шейпы вдоль контура фигуры.

Читать далее
Total votes 8: ↑8 and ↓0 +8
Comments 7

Экспортируем данные OpenStreetMap с помощью визуального редактора на rete.js

Reading time 8 min
Views 7.6K

В своей работе я часто сталкиваюсь с задачей по экспорту данных из OpenStreetMap. OSM — это восхитительный источник данных, откуда можно вытащить хоть достопримечательности, хоть районы города, хоть улицы для исследований пешеходной доступности, и вообще что угодно.


Вот только процесс работы с ними в какой-то момент начал меня утомлять. Чтобы вытащить данные по какому-то нетривиальному запросу, нужно или изучать язык запросов Overpass, или писать скрипты и ковыряться в OSM XML формате.


Проделывая эти манипуляции в сотый раз, я задумался о создании какого-нибудь более простого и удобного инструмента. И вот он готов — https://yourmaps.io, визуальный редактор описаний экспорта OpenStreetMap. В редакторе можно мышкой натыкать граф, каждый узел которого будет представлять операцию или фильтр над потоком OSM объектов, а затем скачать результат в GeoJSON.


Вот пример графа, который выбирает все школы в границах заданного муниципального округа, и затем строит 300-метровые буферы вокруг них:



В результате работы получим вот такой набор полигонов в GeoJSON формате, которые затем можно импортировать в QGIS или еще какой-либо софт.


Под катом — немного про функционал сервиса, а также мой опыт работы с библиотекой Rete.js, которая позволяет легко вставлять визуальное программирование и редактирование графов в свой веб-проект.

Читать дальше →
Total votes 16: ↑16 and ↓0 +16
Comments 7

Двойная бухгалтерская запись в реляционной БД

Reading time 9 min
Views 19K

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


Разобраться и избежать кучи граблей в этом деле мне помогла данная статья. При этом информации по теме "как сделать свою платежную систему" довольно мало, а в учебниках по бухучету программисту сходу разобраться не так просто (и очень нудно). Надеюсь, этот материал окажется полезным тем, кто только собирается что-то такое делать.


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


Введение


Многие компьютерные системы, использующие реляционные БД, хранят в них какую-то финансовую информацию о балансах и транзакциях. При этом при проектировании и разработке такой БД часто встает вопрос, а как именно хранить эту информацию. Обычно выбор стоит между дешевой "простой записью" и более сложной "двойной записью".



Лука Пачоли, автор самой старой (15 век) дошедшей до нас книги с описанием принципов двойной записи


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


Основные правила таковы:

Читать дальше →
Total votes 26: ↑23 and ↓3 +20
Comments 50

Гуляем по городу с умом — 2: ходим по городу кругами с помощью генетического алгоритма

Reading time 8 min
Views 14K

В прошлой статье я описал алгоритм, позволяющий строить более интересные (в противовес более коротким, как делают всякие яндексы-гуглы) пешеходные маршруты между двумя точками. Алгоритм загружал достопримечательности, парки и прочие приятные и интересные для пешеходов объекты из Open Street Map и прокладывал маршрут через них. В итоге путь мог оказаться на 10-20% длиннее, но гораздо живописнее и интереснее.



Фото города — Alex 'Florstein' Fedorov


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


После некоторого количества экспериментов я сочинил генетический алгоритм, который строит достаточно неплохие (для меня) маршруты в такой ситуации. Под катом описание принципа работы и несколько примеров.

Читать дальше →
Total votes 56: ↑55 and ↓1 +54
Comments 71

Урбанистика в Китае: меньше хипстеров, больше науки и ИТ

Reading time 11 min
Views 15K

У большинства обитателей рунета слово "урбанистика" если с чем и ассоциируется, то наверное только с известным кудрявым блоггером. А еще с ненавистью к автомобилистам и борьбой с многоэтажками. В последнее время эта тема стала набирать популярность, и вот уже появилось множество людей, которые уверены что познали суть урбанистики, почитав пару популярных блогов.


image


Однако на деле урбанистика — это наука, причем наука довольно интересная и междисциплинарная, содержащая внутри себя множество различных направлений. Сейчас очень много сил вкладывается во всякие Smart City и в попытки сделать городское проектирование и управление прозрачнее, проще и технологичнее. Поэтому в последние десятилетия важнейшую роль в урбанистике начали играть информационные технологии, именно благодаря ним стали доступны новые виды исследований, новые технологии сбора данных и новые возможности проектирования.


В этом году исполнилось 30 лет международной конференции CUPUM — Computers in Urban Planning and Urban Management. Конференция эта проходит раз в два года, является A-rank по классификации Core, и в этом году она собрала исследователей городского проектирования в Китае, в городе Ухань. Туда я и поехал представлять свой родной университет ИТМО и входящий в его состав Институт дизайна и урбанистики. Рассказывал я там про развитие своих исследований пешеходного моделирования, которые когда-то начались с этой статьи на Хабре.


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

Читать дальше →
Total votes 29: ↑28 and ↓1 +27
Comments 111

Говорим мэру, куда ему пойти (с помощью Open Street Map)

Reading time 9 min
Views 23K

Не кажется ли вам, что наши чиновники несколько оторваны от реальности? Что недостаточно смотреть на подконтрольную территорию исключительно из окна кабинета в центре города? Что городскому главе неплохо бы время от времени гулять по городу лично, общаться с людьми и отвечать на вопросы в режиме живого общения?


Вот и известному блоггеру Илье Варламову тоже так показалось, поэтому он запустил крутейший проект c вызывающим названием БДСМ, а имеенно "Большая Дорога С Мэром" (ссылка на анонс):


Хватит гулять по российским городам в одиночестве – пора приглашать мэров, губернаторов, сити-менеджеров.

Правила просты.

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

В процессе прогулки мы вместе с главой города изучаем инфраструктуру, общаемся с жителями. У чиновника будет уникальная возможность рассказать на всю Россию про свой город, объяснить тонкости городского управления, стать ближе к народу!


Кадр из первого видео проекта, с участием моего сервиса для выбора случайных точек


При чем тут Хабр, спросите вы? А все дело во фразе про случайный выбор адреса начала и конца маршрута. Не такая это простая задача, если вы не хотите в итоге очутиться в дебрях какой-нибудь промзоны или заблудиться среди бесконечных заборов частного сектора. Простое тыканье в карту с завязанными глазами тут не сработает!


О том, как я эту задачу решал и какие открытия преподнесли мне такие города как Иваново или Киров — под катом.

Total votes 49: ↑43 and ↓6 +37
Comments 32

Как защитить своего ребенка от мусора на YouTube и сделать кастомный плеер с белым списком каналов

Reading time 9 min
Views 121K

Можно долго спорить на тему, стоит ли давать маленьким детям доступ к планшетам и смартфонам. Кто-то говорит что это вредно для глаз или для психики, кто-то — что родителям надо бы самим играть и читать с детьми, а не пытаться отгородится от них гаджетами. Что характерно, чаще всего такое говорят люди, у которых своих детей нет. И которые не знают, какое это блаженство — когда чадо замолкает хотя бы на полчаса, перестает крушить все вокруг, спокойненько лежит на диване и смотрит мультики. Есть и еще один аргумент — дети чутко все повторяют за родителями, если родители непрерывно сидят уткнувшись в телефон, то очень сложно объяснить детям, почему родителям можно, а им — нет.



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


К сожалению, я очень быстро уяснил, что детский ютуб — это просто АДОВЫЙ ТРЕШ. Про это даже на Хабре уже был перевод статьи. Детские каналы — это какие-то бездонные клоаки, наполненные вырвиглазными видео типа "разворачиваем сто киндер-сюрпризов", "дурацкие стишки с убогой 3д графикой под крикливую музыку" и "гоняем машинки в Beam NG под дурацкие комментарии". По какой-то причине все это является очень привлекательным для маленьких детей, которые бросаются кликать на такие видео как только увидят их в рекомендованных. А YouTube не позволяет управлять рекомендациями. Даже дав своему сыну планшет с включенными "нормальными" мультиками, я уже через пару минут наблюдаю, как он за два клика по рекомендациям опять находит эти чертовы шоколадные яйца и снова начинает в них залипать.


Все, с меня хватит, решил я. И начал пилить свое приложение для просмотра ютуба, позволяющее выбрать список каналов и показывающее только видео с этих каналов. Как я это делал — под катом.

Читать дальше →
Total votes 91: ↑87 and ↓4 +83
Comments 364

Гуляем по городу с умом: как я делал сервис для построения интересных пешеходных маршрутов

Reading time 13 min
Views 56K
UPD: так как тема хорошо зашла и показала наличие спроса на такой сервис, буду развивать его дальше. Завел паблик вконтакте для сбора фидбека и публикации информации об обновлениях https://vk.com/sightsafari

Незнакомый район города, небольшое количество свободного времени и необходимость (или желание) пешком добраться до метро/отеля/вокзала – наверное, каждый хоть раз попадал в такую ситуацию. При этом с одной стороны хочется посмотреть какие-нибудь красивые и интересные места, однако с другой стороны ограниченное время не позволяет слишком сильно уклоняться от прямого маршрута.

Ситуация еще больше осложняется, если рядом нет никаких крупных достопримечательностей, о которых все знают и которые можно было бы включить в свой маршрут после короткого поиска в интернете. Что делать если вы застряли в каком-нибудь Купчино, про которое вы только и слышали, что там лучше не застревать? Приходится идти по навигатору, надеясь, что на пути встретится что-то интересное. Однако популярные навигаторы учитывают лишь расстояние и время в пути, но не принимают во внимание интересность маршрута. Мне попадались еще проекты, пытающиеся учитывать удобство пешего маршрута (ведущие в обход шумных магистралей), но хочется же пройти не только комфортно, но и увидеть какие-нибудь красоты.



Подумав немного, я решил взяться за эту задачу сам. Как всегда, общая идея алгоритма довольно проста, но дьявол кроется в мелочах. А в случае навигации, мелочи могут быть довольно существенны и с риском для здоровья, ведь вряд ли какой-нибудь турист обрадуется, когда навигатор в поисках достопримечательностей заведет его в дебри полузаброшенной промзоны ради маленькой мемориальной таблички (тру стори, один раз так и случилось).

Описание алгоритма и примеры работы под катом, ссылка в конце.
Читать дальше →
Total votes 114: ↑113 and ↓1 +112
Comments 215

Нигерийские истории российского разработчика

Reading time 11 min
Views 48K
Недавно на Хабре появилась статья о буднях нигерийского разработчика. В комментариях там проявилось довольно много стереотипов об этой стране, по какой-то причине «Нигерия» у хабражителей твердо ассоциируется с «банановой республикой в вакууме», при этом многим оказалось трудно поверить в указанные в статье контрасты (развитие ИТ и при этом поголовная нищета населения, такая что даже компьютер достать — проблема).



Так уж случилось, что последние несколько лет я удаленно работаю на одну небольшую нигерийскую ИТ компанию, занимающуюся разработкой всяких платежных систем на заказ. В этой статье я опишу то, что успел узнать об этой стране, сидя дома в России, и с какими нюансами местного африканского бизнеса столкнулся. Истории о высокой преступности, коррупции и нищете населения на фоне прущего вверх ИТ сектора и развития мобильных технологий — под катом.
Читать дальше →
Total votes 178: ↑174 and ↓4 +170
Comments 79

Импортируем DXF чертеж в программе на Java, наступая на все грабли этого «простого» формата

Reading time 7 min
Views 18K
AutoCAD и подобные ему САПР давно уже стали стандартом в области проектирования, и неудивительно что таким же стандартом стали широко используемые в них форматы файлов DWG/DXF. Так что если вы разрабатываете какое-то решение для архитекторов и проектировщиков, то умение работать с этими форматами (ну или хотя бы с одним из них) — must have фича вашего продукта.



В рамках своего вебсервиса для симуляции движения пешеходов пришлось и мне озаботиться импортом генпланов в этих форматах. Раньше с САПР я дела не имел, поэтому наивно думал «да что там, подумаешь — еще один формат чертежей, линии и многоугольники, что там может быть сложного?». Но в процессе работы выяснилось что сложного там может быть достаточно, некоторые нюансы вполне похожи на древние костыли, тянущиеся из глубин веков, при этом многие вещи толком не документированы в спецификациях самого формата (например работа с блоками или с кривыми). Видимо они считаются очевидными для любого чертежника, но что делать если вы родом из другой области, и таких знаний не имеете?

В общем под катом — перечисление граблей и решений, которые не удалось нагуглить и пришлось добывать полуночными бдениями над чертежами.
Читать дальше →
Total votes 19: ↑19 and ↓0 +19
Comments 4

Вебсервис для симуляции движения пешеходов и выявления проблем благоустройства

Reading time 6 min
Views 24K
Некоторое время назад я опубликовал тут свою статью, посвященную проблеме благоустройства дворов: habrahabr.ru/post/257563
В статье рассматривался алгоритм, позволяющий по плану местности предсказать, где пешеходы будут сходить с дорожек и топать по газонам, разнося грязь и портя всю красоту. Алгоритм представлял собой симуляцию движения пешеходов на заданной местности с помощью доработанного A* и модифицируемого во время движения навигационного графа.

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

Продемонстрирую процесс применения сервиса на примере вот этого участка проспекта Стачек в Санкт-Петербурге:



Сам этот участок — замечательный пример того как не надо проектировать жилые районы. Вполне возможно что неудачная планировка обусловлена фактом что когда-то кроме шоссе рядом ничего и не было, а теперь там крупный жилой массив. Не знаю. Но факт таков, что вдоль него все очень плохо с наличием тротуаров, переходов и пешеходных дорожек. И даже на спутниковом снимке видны широкие народные тропы через газоны. Посмотрим, выдаст ли алгоритм что-то похожее на ситуацию в действительности.

Читать дальше →
Total votes 38: ↑37 and ↓1 +36
Comments 52

Уличная грязь и симуляция движения пешеходов

Reading time 7 min
Views 61K
С приходом весны и дождей на улице в глаза все чаще бросается одна проблема. Вот эта:



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

Очевидно что люди тут в целом не виноваты, такова уж наша природа — всегда искать кратчайший путь. И неплохо было бы чтобы планировка общественных территорий отвечала этому стремлению. Но это, увы, не так, и архитекторы и планировщики с упорством продолжают чертить дорожки и тротуары по линейке и с пересечениями под прямыми углами, а пешеходы — эти углы срезать где только можно, топча траву и разнося грязь.

Шел я как-то по дорожке и вяло размышлял на тему того, что опять придется или тащиться в обход, или пачкать обувь. С возмущения типа «вот же дураки это проектируют» мысль плавно перетекла на слышанную когда-то байку про некий наукоград, где дорожки во дворах сперва не сделали вовсе, а потом просто заасфальтировали протоптанные людьми тропинки, получив сеть удобных жителям маршрутов. А оттуда мысль перекочевала к идее «а почему бы не сделать то же самое, но на компьютере?». Разработать программу, которая по заданной карте предскажет, где люди будут топтать газоны и где неплохо бы сделать асфальтовое покрытие?

Под катом — описание алгоритма и пара примеров его работы для реальных питерских дворов.
Читать дальше →
Total votes 113: ↑113 and ↓0 +113
Comments 144

Как компьютер сам свой код улучшал, или программируем процесс программирования

Reading time 9 min
Views 34K
На носу было придумывание темы для диплома, на кафедре популярностью пользовались различные варианты идей связанных с генетическими алгоритмами, а мне самому хотелось сделать что-нибудь этакое. Так и родилась идея, давшая начало данному проекту, а именно генетическому оптимизатору программного кода.



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

Например вот такая забавная оптимизация набора арифметических инструкций (взятых из какой-то подвернувшейся под руку математической библиотеки), соответствующих формулам: , которая на 6 джаве с выключенным JIT у меня давала около 10% ускорения, при этом на первый взгляд даже не очевидно что эти формулы эквивалентны (ОТКУДА ТУТ OR? ЭТО ВООБЩЕ ЗАКОННО?!), хотя это так. Под катом я расскажу, как именно получались такие результаты и каким образом компьютер придумывал лучший код чем тот, который мог написать я сам.
Читать дальше →
Total votes 45: ↑43 and ↓2 +41
Comments 39

Старкон 2015 глазами инди-разработчика

Reading time 6 min
Views 13K
На прошедших выходных в Питере отгремел Старкон — крупный фестиваль фантастики, комиксов, игр и прочих развлечений.



Несмотря на то что ассоциируется у многих он в первую очередь с косплеерами и комиксами, для игрового разработчика там тоже оказалось кое-что полезное, о чем я и хочу рассказать.
Читать дальше →
Total votes 13: ↑11 and ↓2 +9
Comments 11

Information

Rating
1,143-rd
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Registered
Activity