Браузер на основе Idea/Eclipse

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

Чтобы написать нормальный браузер (не как попало, а по-хорошему, надолго), необходимо в Java засунуть нормальный движок типа Servo.

Серво написан на Rust, но это херня. Полистал вторую редакцию Rust Book, там вроде все понятно. Кроме того, нашел единомышленника в мозилле, который возможно сможет прояснить детали интеграции.

Настоящая проблема в том, что для интеграции с Серво, нужен сырой указатель на контекст OpenGL прямо в свинге.

Первое движение было – нагуглить как работать нативно с OpenGL в жабе. Погуглил, и понял, что никак. По внешним признаком вообще непонятно, есть ли в Оракле или Редхате какая-то грауппа, которая занимается десктопной графикой.

С другой стороны, есть JavaFX. Но OpenGLNode там нету, хотя в 2015 году в рассылочке обсуждали. Ну то есть, может оно и есть, но не гуглится, а знакомых из openjfx у мну нет.

С третьей стороны, есть готовые движки. Часто упоминают JOGL, и я даже находил где-то 1 (!) протухшую ссылку с намеком (!) как выковырить из него raw pointer на opengl context. Но судя по всему, он умер, у него даже сайт не открывается, последний релиз в 2014.

Есть еще LWJGL, он как-то поживее. И лицензия – BSD!!!
Написал им на гитхаб, может даже ответят.

В целом, сейчас план такой:

1) Берем IntelliJ IDEA Community Edition
2) Делаем новый editor плагин, пихаем на весь editor одну большую JPane.
3) На JPane цепляем канвас.
4) Имплементим MouseAdapter или как там оно называется (последний раз видел свинг многие годы назад), готовимся посылать события
5) в LWJGL Display.setParent(java.awt.Canvas) чтобы объединить LWJGL-евский дисплей с канвасом
6) Каким-то чудесным образом получаем raw pointer на opengl context
7) Делаем C++-обертку вокруг Rust API
8) Делаем JNI-обертку вокруг C++
9) Прокидываем сырой указатель на контекст в наш новоиспеченный JNI API
10) Туда же пробрасываем действия мышью
11) Маниакально соединяем ивенты Идеи с внутренними механизмами Серво (н-р как делать табы?)
11) profit

План очень опасный.
Например, в свинге начнутся артефакты, это же то еще говнецо. Или из LWJGL нельзя будет выковырить raw pointer на контекст. Или LWJGL загнется завтра. Или в Идее окажется невозможно без форка написать такой плагин (а форкать бы не хотелось очень – уже был плачевный опыт). И так далее.

Но наверное, оно того стоит. Ведь стоит?)

Кажется, я знаю, куда уйдет все свободное время. Жаль, на Overwatch останется не так много времени, придется им пожертвовать.

В связи с загруженностью, недоступен как минимум 1 неделю по любым обычным каналам.
Если реально что-то нужно, можно писать в телеграм (или смски) на номер +79137734714.

Технопром-2017

По телику показывают Технопром-2017. На сцене собрался круглый стол великих мыслителей русской промышленной революции.

Ведущий разражается речью про мощь сибирской школы алгебраистов, и объявляется слово ученику академика Ершова (на самом деле Герасимова, но что не сделаешь для понта), который якобы смог использовать алгебру на практике (sic!)

Названный сэр открывает рот и начинает говорить что-то внезапно разумное про отличие Искусственного Интеллекта и человека. [я готовлюсь выслать Себрант-like спич и сыто улыбаюсь] Речь внезапно прерывается невнятными всхлипами о психологических комплексах на тему “друзья свалили за бугор, а я нет, но почему?” и вопросами патриотического воспитания. Докладчик завершает мысль следующим: Человек отличается от ИИ тем, что в нём воспитана любовь к России и Новосибирской Области в частности.

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

Дальше Технопром-2017 продолжается вручением призов на два конкурса, наиважнейших для смены российского технологического уклада:
– Менеджер года
– 3D-технологии (команды из студентов? Что такое 3D-технологии не объяснили, но скорей всего это про 3D принтеры).

Дальше я не смог смотреть, они должны мне новую пару глаз

WAT
Што это было

clang 5 + Visual Studio 2017

Лайфхак. Релизный Шланг только четвертой версии, и не работает на свежей вижуалке.
Можно последовать инструкции и собирать руками из SVN.
Но оказывается, у них уже есть ночные сборки, которые таки работают на свежей вижуалке.

http://llvm.org/builds/

Стадии знакомства с любым опенсорцным проектом

1 стадия – Отрицание (ну не может такого быть, наверное я что-то не понимаю и для Настоящих Профессионалов в этом коде всё отлично. Ух сейчас заберусь в пещеру на три месяца и разберусь!);

2 стадия – Гнев (бля, и здесь тоже понаписано говна, никакой документации, комментариев, какие-то куски залочки на проприетарщину приклеены, бэк зависит от фронта а фронт от бэка, чтобы понять как устроено здесь надо перечитать документацию от всех других проектов этой компании, явно всё посреди Большого Рефакторинга, всё выбросят через месяц и вот нахуй я это ковырял, блядь блядь блядь!);

3 стадия – Торг (ну допустим, понимание этих принципов поможет мне в будущем при создании своего проекта. Да и на этом можно вполне жить, если придумать – как. И в резюме строчка, опять же. И вообще я исследователь, это инженеру важно чтобы работало, а мне – чтобы было в чем копаться.);

4 стадия – Депрессия (на данном этапе человек может круглые сутки находится в депрессивном состоянии. Суть такова, что жизнь проходит зря, а ты ковыряешься в говне мамонта технологий 60-х годов прошглого века, и даже с этим не можешь разобраться. В то время как вокруг искусственный интеллект и не нужно больше программистов и компиляторов, блокчейн, диджитализация, аджайл);

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

Начал разбираться в Котлине.

Проект состоит из двух частей – Kotlin и Kotlin/Native.

По идее мне нужно в Native, но с ним всё печально (хотя казалось бы, куда еще хуже), т.к. я не разбираюсь в LLVM, да и C++ для меня глубоко чужое пока. В очередь на изучение добавляется LLVM, т.к. уже очевидно, что без него жить нельзя.

Чтобы познакомиться, взял для начала джавовую часть. Процедура установки простейшая – пойти на гитхаб, форкнуть и выполнить несколько команд на Apache Ant и Maven. Вначале несколько покоробило использование Анта, но в конце концов, наверное, на это есть причины (начиная с нехватки времени на мимимишные плагины).

Добавим еще печальных известий: комментариев в исходнике практически нет. Код написан довольно ясно, но его объем поражает воображение. Поражает вот в каком смысле: когда ты пишешь очередное веб-приложение, у тебя есть скорей всего стандартная структура типа MVC фреймворка с контроллерами и сервисами, ты сразу идешь в сервисы и читаешь, что происходит. Дальше нужно прошарить, как устроена БД, и начать писать свои сервисы и методы в контроллерах, выставляя их наружу для фронтендщиков. В целом, код неважен, важна бытовая логика, лежащая за манипуляциями с глобальным состоянием. Здесь же код важен. (Наверное, потом его можно будет легко разделить на важное и мусор, но не сейчас).

На всякий случай я связался с Димой и Андреем и получил ту инфу, что никакой дельной документации о дизайне компилятора не существует. Всё что тут остается делать – это читать весь исходник подряд и комментировать. Дельные комментарии можно пул-риквестить.

По-моему, правильным подходом было бы аккуратно документировать всё что видишь, чтобы в результате через несколько месяцев как раз получилось бы что-то типа architecture reference guide