to post messages and comments.

Думал, в 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. Ждём новых открытий.

Прекрасный пример разбора полётов по оптимизацыи кода под процэссоры: cr.openjdk.java.net

Это разбор скорости перебора по массиву указателей и по спискам.

Там в комментариях написаны результаты автора ( это Aleksey Shipilev ) и выводы, к которым он пришёл. Кстати, несмотря на то, что это java, видно что с её JIT отличия от сишэчки минимальны (буквально в паре вычислений адреса по индэксным регистрам добавлено по регистру), а от плюсов вообще почитай никаких. И как джависты с таким прекрасным JITом умудряются такой тормозной отстой делать, что перл с питоном плачут в сторонке?

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

На Jpont есть , хм, своебразный человек yegor256.com , говорящий за то как вы вот все неправильно мыслите и неправильно програмируете.
По сути 2 доклада , это Объектно-ориентированное вранье youtube.com и ORM — это обидно youtube.com об одном и том же. Где то в начале он предлагает купить свою книжку на Амазоне, где он описал советы. А дальше он говорит о том какой у нас неправильный ООП который и не ООП а что ни на есть процедурное программирование. Много говорит за single responsibility который сформулировал не он.
Что тут не так. Довольно мало примеров "как правильно". По сути их нет, есть одни только теоретические рассуждения. Нет указаний на других авторов, занимающихся подобной практикой. Взять того же Мартина Фаулера. Он много говорит о том же что и Мартин писал лет этак 10 назад. Причём у Мартина в книгах куда богаче и понятнее.
Принцип тут — я тут вам немного расскажу, а всё остальное прочитаете в моей книге.
Примеры, не рассуждения, примеры. Этим берёт Файлер, вот вам код, вот это конкретно в нём неправильно и вот почему. Берём неправильно и делаем правильно. А так в общем то зёрна есть, в архитектуре java действительно хватает недостатков.
Геттеры и сеттеры, например, действительно зло, пришедшее со старого стандарта javaBeans, и т.к. заявлена поддержка всего ранее написанного то имеем то что имеем.

Понравился доклад по JMS youtube.com
Хотя и прошлогодний. Интересно коснулся раз тем — и о архитектуре LinkedIn, про NoSQL и про катастрофу 11 сентября.
Действительно, oc4j и ряд Oracle-вых приблуд — говно и ни нужно. С oc4j в своё время хорошо натрахались.