попытался сделать небольшую библиотеку, чтобы можно было бы импортировать ФИАС (fias.nalog.ru). В итоге всё работает (просмотр и импорт), но упирается в субд, что ожидаемо, всё это надо куда-нибудь скидывать в какой-нибудь hadoop и уже оттуда с ним работать.

Допилил CheerpJ и JGNAT друг под друга

Посмотреть можно здесь

Пока что вижу: насчёт многозадачности — правда. Я думал, это фишка простого Cheerp, а раз в простом Cheerp нету асинхронизатора, то это всё может работать только на SharedArrayBuffer и не везде. Но нет. Планировщик находится в loader.js от CheerpJ и, насколько я могу судить, работает. В том числе можно динамически подгружать классы, и они грузятся (с поддержкой AOT) по сети, и исполнение зелёного потока продолжается с момента остановки. EmScripten так не умеет, там только синхронным XHR можно с файловой системой работать, и только в Web Workers, в общем, без асинхронизатора это ни о чём.

Вместе со Swing там, похоже, даже движок текста свой подгружается. Антиалиасинг явно получше, чем в браузере. Но время запуска будь здоров. Хотя большая часть сейчас зависит от производителя. Если они там у себя что-нибудь подкрутят, васм внедрят, например, ведь Cheerp умеет, то есть, куда ужаться. Просто начинать с тем, что есть, а оно само будет улучшаться.

А в javax.xml.datatype.XMLGregorianCalendar есть и getTimezone, и getTimeZone. Это не где-то в частной поделке такой бардак, это основной программный интерфейс.

Нет, нельзя давать программистам регистрозависимость. Если неприятность может случиться, она случится.

Bad class file: version 52.0 not supported
Да что ж вам неймётся-то по версиям скакать. Ну что не сидится на одной. Вот чем хорош COM и чем плоха Java, в COM совместимость десятилетиями держится, а тут каких-то несчастных четыре года отделяет, и уже инструментарий начинает отваливаться. В книге «Putting Metaclasses to Work» симуляция была специально реализована на Java, чтобы, как пишет автор, как можно надольше сохранить. В итоге компилятор DirectToSOM C++, библиотека SOM и прочее PE/COFF'ное запускается на современной Windows 10, а симуляция PMtW на современной JVM — нет. И на не очень современной 1.5 — тоже. Вообще надо какую-то древнюю находить, чтоб подошло тютелька в тютельку. Знал бы автор, как жестоко будут насмехаться над его потугами производители. Начиналось за здравие, столько надежд было.

И в Delphi CORBA IDL парсится утилитой не на Delphi, транслируемой в, как показывает практика, долгоживущий PE/COFF, а на Java, и тоже там совместимую версию надо постараться подобрать, собственно, почему эту фичу кроме особенно заинтересованных никто не смог увидеть в действии.

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

Тут чел очень хочет на java програмить. Но он в алгоритмы ещё не очень умеет.
Что бы ему насоветовать? Так чтобы от основ: поиск, сортировка пузырьком, ...
Но так чтобы было понятно — берём эту ide, сюда пишем, так запускаем.

Я как-то бегло нагуглил какие-то книжонки по java. Ни одна мне не понравилась.
Думал ему линк на Кнута дать, чтоб по алгоритмам подтянуть, но там такая скука.

В общем рекоменд, если есть чо.

CheerpJ как я заметил, уже вышел из закрытых альфа-тестов и находится в бете.

Те же разработчики, что делают Cheerp, транслятор C++ в JavaScript/Asm.js/WASM, делают CheerpJ для Java. Позиционируется он как нормально портированная Java. Никаких ограничений, как в GWT. Поддерживается байт-код. Поддерживаются Swing и Java-апплеты как с оффлайн конвертацией, так и в виде шима. Есть плагин для Хрома.

Думал, в Swift будут утилиты на Swift, а оказалось, что нет (см. #2891656). Ладно, посмотрим, какие есть ещё варианты. У нас же мостов для Java есть целых три штуки. А как там парсинг сделан?

Первым в голову приходит Rococoa. И там парсинг не сделан никак. Согласно документации, надо писать привязки вручную.

Про Apple Cocoa-Java известно мало, потому что он с закрытым кодом, но оттуда можно взять ручные коррекции, написанные прямо в Apple. Похоже, полновесного парсера типа GCC там нет. clang в те времена не было.

Порадовал GNUStep JIGS. Там есть и парсер, и ручные коррекции.

Есть здесь гуру Tomcat? Deploy занимает секунд 20, в это время хотелось бы отдавать страницу "подождите, обновляем" с кодом 503. В настоящее время отдается 404 и не могу найти где это исправить. Сервлет ROOT, mapping в корень.

Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000007b3b80000, 64487424, 0) failed; error='Невозможно выделить память' (errno=12)
Ubuntu 16.04
Java 1.8. На 1.7 та же фигня
Памяти 16гиг. Свопа нет.

Реально памяти не хватает?

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

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



По результатам #2884193 выкидываю Thymeleaf.
Может необъяснимо падать на ровном месте, не говоря про тормоза.
Так что идёт это поделие в пень!
Благо что пока только пробовали по сути.
Меняю на freemarker

github.com
Comparing Template engines for Spring MVC

Ну и чтобы 2 раза не вставать
jTwig 4.709 seconds
Thymeleaf 4.147 seconds
Scalate — Scaml 3.479 seconds
Handlebars 2.936 seconds
Jade4j 2.735 seconds
Freemarker 2.637 seconds
HTTL 2.531 seconds
Pebble 2.512 seconds
Velocity 2.491 seconds
Mustache (JMustache) 2.326 seconds
JSP 2.227 seconds
Проверил результаты взяв версии чуть новее — картина примерно такая же +-

// Как жить без приватных методов в интерфейсах?
// Например, пишем такое в DefaultsInterface.java:
public interface DefaultsInterface {

	default void test1() {
		DefaultsInterfaceCompanion.INSTANCE.test("S1");
	}

	default void test2() {
		DefaultsInterfaceCompanion.INSTANCE.test("S2");
	}
}

enum DefaultsInterfaceCompanion {
	INSTANCE();

	void test(String suffix) {
		System.out.println("test" + suffix);
	}
}

// Да, замена не равноценная, но проблему дублирования кода 
// в дефолтных методах решает, не загрязняя интерфейс. 

В Spring-е , якобы защищённым spring security совершенно случайно обнаружили огромную дырень.
Якобы защищённые ресурсы можно легко попасть просто немного изменив url
Уязвимость находится в antRequestmatcher и работает только при использовании оного.
Уязвимы все версии spring 3 и ветки 4.0, 4.1 и 4.2
Протестил сочетия со всем ветками spring security 3.x и 4.x — дело не в нём, дело именно в spring.
Подробностей пока не будет.
Очень интересно во многие ли вещи можно будет элементарно заглянуть чуть изменив url :-)

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

Приехал из китая фитнес браслет TTLIFE DF30.. Фирмваре апдейт лился с телефона в браслет час. Ну я, как положено джедаю, решил отдизассеммблить апликуху, ибо как-то не ку, что оно облачно-завязана на китаез... В общем нашел ответ почему апдейт шел так долго: govnokod.ru

Эта ужасная поделка только и может шуметь вентилятором процессора (а я его даже раньше и не слышал никогда) и писать в консоль это:
(Jaspersoft Studio:2651): Gtk-WARNING **: Allocating size to SwtFixed 0x7f8329029550 without calling gtk_widget_get_preferred_width/height(). How does the code know the size to allocate?Я надеюсь им воздастся по делам их.

Открыл для себя 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 век настал.

opennet.ru
В случае, если заголовок Content-Type содержит некорректное значение, срабатывает исключение для отображения сообщения об ошибке, которое, если в тексте присутствует маска "multipart/form-data", также приводит к вызову обработчика Multipart parser и выполнению произвольного кода, передаваемого через выражение OGNL <commons.apache.org>.

Господа java-программисты, по этому бэктрейсу можно сказать чего не хватает этому куску говна скомпилированному в 2014ом году?

ERROR: Uncaught Exception: java.lang.ExceptionInInitializerError
        at com.bric.swing.QDialog.createOKButton(Unknown Source)
        at com.bric.swing.QDialog.createDialogFooter(Unknown Source)
        at com.bric.swing.QDialog.showDialog(Unknown Source)
        at com.bric.swing.QDialog.showDialog(Unknown Source)
        at com.treestar.lib.dialogs.SDialogs.notify(Unknown Source)
        at com.treestar.lib.dialogs.SDialogs.notify(Unknown Source)
        at com.treestar.lib.dialogs.SDialogs.notify(Unknown Source)
        at com.treestar.flowjo.main.Main.javaCheck(Unknown Source)
        at com.treestar.flowjo.main.Main.initMain(Unknown Source)
        at com.treestar.flowjo.main.Main.main(Unknown Source)
Caused by: java.lang.NullPointerException
        at com.treestar.lib.FJCommand.<clinit>(Unknown Source)
        ... 10 more

Нет, исходников у меня нет.

LinkedHashMap для LRU-кэша на коленке. Наткнулся здесь, а потом и в JavaDoc это нашел. Идея не новая, но всегда полезно вспомнить базовые вещи.
На практике я использовал CacheBuilder из Guava, а еще советуют Caffeine (но там, как я понял, другой алгоритм вытеснения элементов из кэша).

Прочитала первые три главы спецификации Java. Что узнала нового? В Preface упомянули Андрея Бреслава, шеф-повара Котлина. В третьей главе неожиданно для себя открыла, что можно писать 0b1________1. Ждём новых открытий.