← All posts tagged Java

SannySanoff

У меня IDEA с двумя проектами (один там даже с петоном) стартует 1м30сек пока цпу не утихнет, и это я к ней не прикасаюсь покуда не утихнет. Когда начинаю прикасаться, понятно, снова бурлит покуда не утихнет, потом уже потихоньку.

Время ли обновлять ноут? А сколько грузяццо ваши проекты?

(основной проект у меня нонче в Jupyter на удаленном компе, и мне вообще идея почти по сараю).

SannySanoff

Сколько я времени потратил на неправильно написанные JNI названия функций на C стороне! Мама! Просто дофига. Программа на андроеде крешится в рантайме оттого что не находит ф-ю.

А петонисты и пхп-шники, а еще жабоскриптеры живут в этом и для них норм. Кошмар.



SannySanoff

Я свичнулся с Жабы на Котлин в основной разработке.
Основная причина проста: просто приятна обновка.
Всякие фичи Котлина прекрасны. К Жабе претензий тоже нет — изумительный язык. Я не страдаю от ее многословия.
Можно назвать множество причин переключения — фич ради, конечно.
Но основная — это просто что-то новое, просто новизна, которая будит уснулую часть мозга, которая уже сделала свое дело, доведя до автоматизма свою часть работы — выражение себя на жабе — и спала уже давно.
Это могла быть и Скала, — Скала просто прекрасна, — но Скала более неудобная в работе: из-за ее гениальной разноликости она чересчур тормозит в инструментарии (компилятор, IDE), что начинает напрягать через некоторое время. Это чувствует и Одерский, который пишет другую, несовместимую версию Скалы, более шуструю.
Больше пока вариантов нет. Остальные либо тормозят в рантайме, либо без статической типизации, либо без tools.

SannySanoff

Открыл для себя Vert.x, плюс Kotlin = полностью асинхронное всё: http сервер, https (!!) клиент, кафка, постгрес, вебсокеты уже то понятно. В котлине 1.1.1 все на корутинах.. прямо скала. Адопшн кажется будет побольше чем у скалы, поэтому ожидаем вскорости бум. С небольшим набором корутинных врапперов пишем буквально следующее:

    suspend fun graphAPI(request: String, access: String) : JsonObject {
        val resp = VX.getJson("https://graph.facebook.com/v2.3/$request&access_token=$access")
        when(resp.statusCode) {
            200 -> return JsonObject(resp.response)
            else -> throw IOException("Facebook invalid response: "+resp.toString());
        }
    }

        when (req.path()) {
            "/register_server" -> {
                exec("delete from other_servers where ip_address=${v(param("ip"))}")
                exec("insert into other_servers(ip_address, hostname) values(${v(param("ip"))},${v(param("host"))}) ")
                commit()
                output(JsonObject(Pair("result","OK")))
            }

(во втором куске кода sql bindings безопасные если шо)
(может можно кое что еще проще, пока не знаю как)
(обработка ошибок, выделение коннекшнов, транзакциы всякие итп - все снаружи)
(ексепшны в котлине отлично дружат в асинхронном коде)
(а и не скажешь, что асинхронный, верно?)

21 век настал.

SannySanoff

Пишут, что Эклипс (www.eclipse.org) загнулся, в том смысле, что его пользуют уже меньше людей чем IDEA.

Для меня вообще удивительно, что оно так долго тянулось. Уже 10 лет назад как должно было рухнуть. Не было ни единого момента со времени выхода IDEA 1.0 до сегодняшнего дня, чтобы Эклипс был хоть в чем-то лучше ИДЕИ для программирования на жабке.

via proggit — reddit.com

SannySanoff

Сегодня узнал, что нелюбители SQL дошли в Spring Boot / JPA до такого, что теперь вот есть метод

interface {
long countByTimeBetweenAndSomeLengthGreaterThan(Date date, Date date1, int i);
}

И оно во время стартапа автоматически парсит имя метода (!!!) и догадывается, какое where надо написать, и генерит код, который генерит SQL

select count(*) from SomeTable where time between :date and :date1 and some_length > :i

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

Cпонсор этого пста — производительность application серверов на стартапе (когда это все генерится) и в рантайме, когда вместо одного большого оттюненного селекта вызываются тысячи этих мелких методов, и когда "здравствуй рефакторинг" говорят рефакторщики и сразу по результатам "до свиданья, показатели производительности" говорят чуваки с БД.

SannySanoff

UBER (таксисты), ихний CTO плачет и кается, плачет и кается.

Начали "как положено" хипстерам, на Node.js + Json, но говорят, что внезано "unexpected cost of untyped json interfaces" когда дофига сервисов, короче, очень тяжело им. Ни в село, ни в красную армию.

Карочи, таперича у них движняк в сторону go/java, typed interfaces (свой RPC протокол), короче sanity постепенно comes back.

(По материалам infoq.com )

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

Дао изреченное — не есть дао. Иллюстрация номер один.

SannySanoff

v8project.blogspot.com

А вот когда в жабоскрипт введут опциональную типизацию и напишут (только благодаря этому! потому что смогут!) на нем наконец-то серверный Spring (springframework.org), он будет медленнее запускаться (startup) чем жабовый или быстрее? Вангую что к тому времени процессоры подтянутся и будут все те же 30-40 секунд.

SannySanoff

Продолжение драмы про то как MS закопал RoboVM и в продолжение к моему посту #2828904

Да, как я и предсказывал, вся команда осталась работать на MS/.NET, источник — twitter.com

Да, как я и предсказывал, афтар строит из себя дерево и отмазывается тем, что их прикрыли "because they didn't sell enough licenses to make it profitable for Xamarin" — reddit.com

Да, пользователи на форуме жалуются: "чувак, мы писали 2 года нашу игру, завтра релиз, ты и твои приятели получили бабла от продажи лавки Xamarin-у, и нас кинули, как же так чувак? <8-o ". Чувак рекомендует переводить все на дотнет, не медля и дня.

pbs.twimg.com а это сам афтар, "OOPS!" говорит нам его фотография.

Таковы судьбы людские в жерновах капитализма.

SannySanoff

Когда RoboVM (компилятор жабы для iOS) был куплен Xamarin-ом, все удивленно подняли брови и заподозрили неладное, потому что Xamarin это .NET, и жаба там ну вообще никуда. Ребята из RoboVM говорили, что это всё для общей пользы, для концентрации на дальнейшем развитии итп.

Когда MS некоторое время спустя купил Xamarin, все огорченно вздохнули и стали ждать неизбежного, а кто был с верой в доброту, тот спрашивал "как-то они там будут? надеемся на лучшее". Ребята из RoboVM говорили что-то там такое, но их никто не слушал.

Когда сегодня объявили о том, что MS убил RoboVM, как-то появилась определенность. Товарищи из LibGDX вон даже расписали план badlogicgames.com , а товарищам из Интела надо готовиться нести тяжкое бремя ответственности. Ребята из RoboVM не знаю, что там щас говорят.

Я с верой в доброту, и мне интересна судьба форка RoboVM, который полнофункциональный, но без некоторых важных фишек. Чо там коммьюнити? Что там главный афтор? Как-то он теперь людям в глаза смотреть будет? Может у них там какой рейдерский захват случился, афтор будет плакаться прилюдно что его кинули? А может МС ему бабла отсыпал для работы над iKVM или над Mono/iOS, и начальником поставил, и он теперь навостряет лыжи в новом направлении?

Интересны людские судьбы в жерновах капитализма. Ну и новые технологии, конечно.

SannySanoff

Дооптимизился компилятором CN1 (микро-оптимизациями) до усрачки, но дальше уже нужно оптимизировать алгоритмы сверху, и поэтому перестал 8)

Заценил оптимизатор LLVM/CLANG (кстати уперся в его глюк и забил — он дожонглировался регистрами: пишет через один offset register, читает через другой через некоторое время, а смещение-то не сходится!).

На картинке сгенерированный код по симуляции стека и результат его компиляции для ARM. Так эта скотина все SP++ и SP-- вычисляет, и даже не изменяет сам регистр, а только индекс при регистре, когда выполняет последовательность операций. Получается тупа куча mov без inc/dec. Очень было приятно видеть такой уровень оптимизации, я доволен прогрессом в этой сфере. Микро-оптимизировать сишечку в таких условиях становится сложновато.



SannySanoff

Шланг полтора часа уже компилит:

ID COMMAND %CPU TIME #TH #WQ #PORT MEM
10504 clang 97.4 95:07.42 1/1 0 12 137M

Я немного пригрузил егойный регистровый аллокатор. Там есть один метод....

BC_DUP(); / DUP /
PUSH_INT(73);
PUSH_INT(7);
CHECK_ARRAY_ACCESS(3, SP[-2].data.i); / IASTORE / ((JAVA_ARRAY_INT*) ((JAVA_ARRAY)SP[-3].data.o).data)[SP[-2].data.i] = SP[-1].data.i; SP -= 3; BC_DUP(); / DUP */
PUSH_INT(74);
PUSH_INT(17);
CHECK_ARRAY_ACCESS(3, SP[-2].data.i); / IASTORE / ((JAVA_ARRAY_INT*) (*(JAVA_ARRAY)SP[-3].data.o).data)[SP[-2].data.i] = SP[-1].data.i; SP -= 3;
BC_DUP(); / DUP /
PUSH_INT(75);
PUSH_INT(0); / ICONST_0 /
CHECK_ARRAY_ACCESS(3, SP[-2].data.i); / IASTORE /
((JAVA_ARRAY_INT*) (*(JAVA_ARRAY)SP[-3].data.o).data)[SP[-2].data.i] = SP[-1].data.i; SP -= 3;
BC_DUP(); / DUP /

Вот такого добра среднее количество, штук 800, и шланг собирается SP сделать регистровой переменной (я его убедил наконец-то).

Не, ну я, конечно, в таких методах не буду больше на этом настаивать, мне как-то долговато ждать билда.

SannySanoff

Мавен (maven) не умеет в локальную директорию с jar файлами. Из всего что нашел, нужно каждый jar описывать отдельными 10 строчками.

А некоторые ДОБРЫЕ люди советуют сложные заклинания (команду с ДОСТАТОЧНО длинными аргументами) как проинсталлировать любой jar в project-local maven repo и потом, вуаля, просто сослаться на него из .pom файла. Предлагают затем этот maven repo коммитить в GIT. Нет, у меня всё еще не настолько плохи дела.. К тому же эти jars приходят из legacy project в соседней директории.