Избранное сообщение
Фетісов В. С. Комп’ютерні технології в тестуванні. Навчально-методичний посібник. 2-ге видання, перероблене та доповнене / Мои публикации
В 10-х годах я принимал участие в программе Европейского Союза Tempus "Освітні вимірювання, адаптовані до стандартів ЄС". В рамк...
Благодаря Интернету количество писателей и поэтов увеличивается в геометрической прогрессии. Поголовье читателей начинает заметно отставать.
среда, 6 января 2016 г.
Пишем на Java в Arduino / Программирование на Java
В статье расскажу как можно писать на Java для Arduino.
Почему Java? Если кратко — just for fun!
Я Java программист и в свободное время играюсь с Arduino и хотелось перенести свои знания Java в мир микроконтроллеров и embedded устройств.
На данный момент есть несколько возможностей запускать Java на embedded устройствах. В этой статье я рассмотрю их.
Официальная JVM
Первое — это официальная JVM для embedded:
www.oracle.com/technetwork/java/embedded/embedded-se/overview/index.html
habrahabr.ru/post/243549 Запускаем Java Runtime на 256KB оперативной памяти
Тут практически настоящая JVM которая исполняет byte-code. Но есть большие минусы — это работает только для Raspberry Pi и Freescale K64F (может я что то упустил, если так — добавьте, пожалуйста в комментариях). Поддержка Raspberry Pi определённо хорошо, но это по сути компьютер, хоть и одноплатный. На нём можно и простую JVM запустить. Да и стоит он от 3 т.р. K64F — это уже dev board с Cortex M4 на борту. Но стоит тоже от 3 т.р. Что гораздо дороже распространённого Arduino Uno.
Есть несколько VM которые позволяют запускать Java на микроконтроллерах — это LeJOS ( www.lejos.org ) и HaikuVM ( haiku-vm.sourceforge.net )
LeJOS — позволяет запускать Java приложения на Lego MindStorm. HaikuVM — на микрокомпьютерах AVR. Сейчас LeJOS разделён на две части:
— для последнего, EV3, используется настоящая JVM, от Oracle (www.oracle.com/technetwork/java/embedded/downloads/javase/javaseemeddedev3-1982511.html ). О ней я сказать больше ничего не могу — просто JVM.
— для предыдущих версий, NXJ и RCX, используется JVM на основе TinyVM (tinyvm.sourceforge.net ). Вот о ней стоит рассказать подробнее.
Т.к. в микроконтроллерах очень мало памяти (в Arduino Uno 28kB Flash и 2kB SRAM) то настоящую JVM, с которая бы интерпретировала class файлы, там не запустить. Но можно преобразовать byte code программы и скомпилировать его в native код, вырезав при этом всё не нужное, весь не используемый runtime. При компиляции теряется часть функциональных возможностей Java (например, reflection). Но программа будет работать!
HaikuVM работает также — берёт Java код, компилирует его с JRE из LeJOS (альтернативная реализация некоторых стандартных классов — String, StringBuilder, Integer и т.п. — нужна для оптимизации) вместо JRE из оригинальной JVM (rt.jar в HotSpot), получившиеся class файлы преобразует в C++ код, добавляет runtime из HaikuVM (в нём поддержка потоков, GC, exception) и компилирует всё это с помощью avr-gcc. И таким образом удаётся запустить Java программу вплоть до ATMega8 c 8kB flash памяти!

Алгоритм работы HaikuVM. Картинка взята с сайта haiku-vm.sourceforge.net
Пример преобразования кода
Java код:
public static void setup() {
Serial.begin(57600);
while (!Serial.isOpen()) {
}
}
Byte code:
public static setup()V
L0
LINENUMBER 140 L0
GETSTATIC processing/hardware/arduino/cores/arduino/Arduino.Serial : Lprocessing/hardware/arduino/cores/arduino/HardwareSerial;
LDC 57600
INVOKEVIRTUAL processing/hardware/arduino/cores/arduino/HardwareSerial.begin (J)V
L1
LINENUMBER 141 L1
FRAME SAME
GETSTATIC processing/hardware/arduino/cores/arduino/Arduino.Serial : Lprocessing/hardware/arduino/cores/arduino/HardwareSerial;
INVOKEVIRTUAL processing/hardware/arduino/cores/arduino/HardwareSerial.isOpen ()Z
IFNE L2
GOTO L1
L2
LINENUMBER 144 L2
FRAME SAME
RETURN
MAXSTACK = 3
MAXLOCALS = 0
Сгенерированный C код:
#undef JMETHOD
#define JMETHOD ru_timreset_IrTest_setup_V
const ru_timreset_IrTest_setup_V_t JMETHOD PROGMEM ={
0+(2)+3, 0, 0,
OP_GETSTATIC_L, SADR(processing_hardware_arduino_cores_arduino_Arduino_Serial),
OP_LDC2_W_L, CADR(Const0003),
OP_INVOKEVIRTUAL, B(2), LB(MSG_begin__J_V),
OP_GETSTATIC_L, SADR(processing_hardware_arduino_cores_arduino_Arduino_Serial),
OP_INVOKEVIRTUAL, B(0), LB(MSG_isOpen___Z),
OP_IFNE, TARGET(21),
OP_GOTO, TARGET(9),
OP_RETURN,
};
Как видно из примера выше — HaikuVM практически один в один переносит byte code в C.
Помимо поддержки Java, HaikuVM позволяет вызывать C функции напрямую — с помощью аннотаций NativeCppFunction/NativeCFunction и содержит методы по работе с памятью и прерываниями.
В целом проект мне понравился — я даже попробовал перевести его на Gradle (github.com/TimReset/HaikuVMGradle ), но так как HaikuVM содержит в себе довольно сложную логику в bat/sh файлах, полностью это сделать это пока не удалось.
Но тут есть минусы — так как в микроконтроллерах памяти и частоты процессора мало, то, пусть даже небольшой, overhead в виде GC (хотя можно GC отключить, но это слабо помогает) и преобразования byte code в C вносит ощутимые задержки. Это выражается, например, в невозможности работать с Serial на больших частотах ( больше 57600 kb/s ) — данные начинают теряться. Поэтому я начал разрабатывать свой (с тестами и поддержкой библиотек) вариант запуска Java в Arduino.
Преобразования Java кода в Wiring
Что бы не было overhead в виде GC и native интерпретатора byte code можно преобразовывать Java код напрямую в Wiring (язык программирования в Arduino, тот же C++). Готовых реализаций я не нашёл, поэтому решил написать свою (github.com/TimReset/arduino-java ), благо синтаксис Java на C очень похож. Для этого использовал анализ AST из Eclipse ( help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.jdt.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fjdt%2Fcore%2Fdom%2FASTNode.html )
Алгоритм преобразования
Есть абстрактный класс с абстрактными методами loop() и setup() и со служебными константами и методами digitalRead(int), analogRead(int) и т.п. Абстрактные методы loop/setup нужны для обязательного переопределения. Служебные методы и константы должны эмулировать поведение Wiring — в скетчах для Arduino можно так обращаться к этим методам/константам.
Скетч наследует этот базовый класс (я его назвал BaseArduino) и имплементирует методы setup и loop.
Далее просто пишем логику. Можно создавать методы, использовать переменные. Для использования сторонних библиотек нужно создать stub классы на Java, которые бы содержали методы из этих библиотек и в коде использовать эти классы. Stub классы должны находится в пакете с названием библиотеки, которую эти классы реализуют. Сами библиотеки должны находиться в папке parser/src/main/c в папке с названием библиотеки. При компиляции уже Wring кода эти библиотеки будут использоваться.
И наконец, преобразование Java класса происходит с помощью Visitor, наследника класса org.eclipse.jdt.internal.core.dom.NaiveASTFlattener (www.cs.utep.edu/cheon/download/jml4c/javadocs/org/eclipse/jdt/internal/core/dom/NaiveASTFlattener.html ), в котором переопределены некоторые методы:
boolean visit(VariableDeclarationStatement), boolean visit(FieldDeclaration), boolean visit(MethodDeclaration) — для отслеживания использования классов из библиотек и удаления всех модификаторов (final, модификаторы видимости и static). Возможно это излишне, но пока работает так.
Так же заменяет создание объекта:
decode_results results = new decode_results(); преобразует в decode_results results();
boolean visit(MethodInvocation) — для отслеживания обращения к классам библиотек и при передаче их в методы передаёт ссылки на них (через &):
irrecv.decode(results) преобразует в irrecv.decode(&results)
Если тут будут знатоки C++, подскажите, так всегда нужно передавать объекты или есть какие-нибудь ещё варианты?
6) Всё это обвёрнуто Gradle скриптом который позволяет запускать верификацию и загрузку скетча.
Пример:

Компиляция скетча

Загрузка скетча
В качестве примера возьму программу преобразования ИК сигналов для колонок (там долгая история — колонки Microlab Speakers Solo 6C с пультом, пульт через несколько месяцев перестал работать, оригинал не нашёл, пришлось заменить универсальным пультом, но он был большого размера, в итоге сделал преобразователь сигналов на Arduino из маленького пульта chipster.ru/catalog/arduino-and-modules/control-modules/2077.html в сигналы для колонок).
Java код:
public class IrReceiverLib extends BaseArduino {
public static final long REMOTE_CONTROL_POWER = 0xFF906F;
public static final long REMOTE_CONTROL_VOL_UP = 0xFFA857;
public static final long REMOTE_CONTROL_VOL_DOWN = 0xFFE01F;
public static final long REMOTE_CONTROL_REPEAT = 0xFFFFFFFF;
public static final long SPEAKER_IR_POWER = 2155823295L;
public static final long SPEAKER_IR_VOL_DOWN = 2155809015L;
public static final long SPEAKER_IR_VOL_UP = 2155841655L;
public static final long SPEAKER_IR_BASS_UP = 2155843695L;
public static final long SPEAKER_IR_BASS_DOWN = 2155851855L;
public static final long SPEAKER_IR_TONE_UP = 2155827375L;
public static final long SPEAKER_IR_TONE_DOWN = 2155835535L;
public static final long SPEAKER_IR_AUX_PC = 2155815135L;
public static final long SPEAKER_IR_REPEAT = 4294967295L;
public static final int IR_PIN = A0;
public final IRrecv irrecv = new IRrecv(IR_PIN);
public final IRsend irsend = new IRsend();
long last_value = 0;
@Override
public void setup() {
irrecv.enableIRIn();
}
@Override
public void loop() {
decode_results results = new decode_results();
if (irrecv.decode(results) != 0) {
final long value = results.value;
if (value == REMOTE_CONTROL_POWER) {
last_value = SPEAKER_IR_POWER;
irsend.sendNEC(SPEAKER_IR_POWER, 32);
irrecv.enableIRIn();
} else if (value == REMOTE_CONTROL_VOL_DOWN) {
last_value = SPEAKER_IR_VOL_DOWN;
irsend.sendNEC(SPEAKER_IR_VOL_DOWN, 32);
irrecv.enableIRIn();
} else if (value == REMOTE_CONTROL_VOL_UP) {
last_value = SPEAKER_IR_VOL_UP;
irsend.sendNEC(SPEAKER_IR_VOL_UP, 32);
irrecv.enableIRIn();
} else if (value == REMOTE_CONTROL_REPEAT) {
if (last_value != 0) {
irsend.sendNEC(last_value, 32);
irrecv.enableIRIn();
} else {
}
} else {
last_value = 0;
}
}
}
}
Преобразуется в этот код:
#include <IRremote.h>
public static long REMOTE_CONTROL_POWER=0xFF906F;
public static long REMOTE_CONTROL_VOL_UP=0xFFA857;
public static long REMOTE_CONTROL_VOL_DOWN=0xFFE01F;
public static long REMOTE_CONTROL_REPEAT=0xFFFFFFFF;
public static long SPEAKER_IR_POWER=2155823295L;
public static long SPEAKER_IR_VOL_DOWN=2155809015L;
public static long SPEAKER_IR_VOL_UP=2155841655L;
public static long SPEAKER_IR_BASS_UP=2155843695L;
public static long SPEAKER_IR_BASS_DOWN=2155851855L;
public static long SPEAKER_IR_TONE_UP=2155827375L;
public static long SPEAKER_IR_TONE_DOWN=2155835535L;
public static long SPEAKER_IR_AUX_PC=2155815135L;
public static long SPEAKER_IR_REPEAT=4294967295L;
public static int IR_PIN=A0;
IRrecv irrecv(IR_PIN);
IRsend irsend;
long last_value=0;
void setup(){
Serial.begin(256000);
irrecv.enableIRIn();
}
void loop(){
decode_results results;
if (irrecv.decode(&results) != 0) {
long value=results.value;
if (value == REMOTE_CONTROL_POWER) {
last_value=SPEAKER_IR_POWER;
irsend.sendNEC(SPEAKER_IR_POWER,32);
irrecv.enableIRIn();
}
else
if (value == REMOTE_CONTROL_VOL_DOWN) {
last_value=SPEAKER_IR_VOL_DOWN;
irsend.sendNEC(SPEAKER_IR_VOL_DOWN,32);
irrecv.enableIRIn();
}
else
if (value == REMOTE_CONTROL_VOL_UP) {
last_value=SPEAKER_IR_VOL_UP;
irsend.sendNEC(SPEAKER_IR_VOL_UP,32);
irrecv.enableIRIn();
}
else
if (value == REMOTE_CONTROL_REPEAT) {
if (last_value != 0) {
irsend.sendNEC(last_value,32);
irrecv.enableIRIn();
}
else {
}
}
else {
last_value=0;
}
}
}
Код прост — получаем сигнал и если это поддерживаемый сигнал от пульта, то преобразуем его в соответствующий сигнал для колонок.
И тест на преобразование сигналов:
@RunWith(Parameterized.class)
public class IRReceiverTest {
@Parameterized.Parameters(name = "{index}: Type={0}")
public static Iterable<Object[]> data() {
return Arrays.asList(new Object[][]{
{"Power", IrReceiverLib.REMOTE_CONTROL_POWER, IrReceiverLib.SPEAKER_IR_POWER},
{"Vol down", IrReceiverLib.REMOTE_CONTROL_VOL_DOWN, IrReceiverLib.SPEAKER_IR_VOL_DOWN},
{"Vol up", IrReceiverLib.REMOTE_CONTROL_VOL_UP, IrReceiverLib.SPEAKER_IR_VOL_UP}
});
}
private final long remoteSignal;
private final long speakerSignal;
public IRReceiverTest(String type, long remoteSignal, long speakerSignal) {
this.remoteSignal = remoteSignal;
this.speakerSignal = speakerSignal;
}
@Test
public void test() {
IrReceiverLib irReceiverLib = new IrReceiverLib();
irReceiverLib.setup();
Assert.assertTrue(irReceiverLib.irrecv.isEnabled());
irReceiverLib.irrecv.receive(remoteSignal);
irReceiverLib.loop();
Assert.assertEquals(speakerSignal, irReceiverLib.irsend.getLastSignal());
}
}
Для теста я дописал методы в stub классы библиотеки IRremote, что бы можно было эмулировать приём и передачу сигнала. В тесте я инициализирую и передаю сигнал в скетч, далее проверяю, что отправленный из скетча сигнал соответствует ожидаемому.
Преобразование пока очень сырое, но пока нужные для меня функции выполняет. Плюс я там применял TDD и все скромные возможности преобразования покрыты тестами, что позволит в дальнейшем его изменять без потери функциональности (уже опробовано — код уже был один раз переписан когда добавлял поддержку библиотек).
В общем, пока для себя я остановился на своём варианте преобразования Java в C.
Ремарка по поводу преобразования Java кода на другие языки. Java код можно конвертировать в JS. Сейчас есть несколько рабочих вариантов: GWT (www.gwtproject.org ) и TeaVM ( github.com/konsoletyper/teavm ). И они также используют два различных подхода — GWT преобразует исходный код в JS, TeaVM — байт код.
Источник: http://habrahabr.ru/post/274571/
Смотри также:
- Двести пятьдесят русскоязычных обучающих видео докладов и лекций о Java. http://fetisovvs.blogspot.com/2015/12/java-5-java-java.html
- Программируем… выход из лабиринта. http://fetisovvs.blogspot.com/2015/10/java.html
- Игра на чистой Java от новичка, для новичков. http://fetisovvs.blogspot.com/2015/09/java-java.html
вторник, 5 января 2016 г.
Форос. Горы издали / Фото из личного архива
Смотри также Форос:
- Набережная. http://fetisovvs.blogspot.com/2016/01/blog-post_29.html
- Горы с Байдарского перевала. http://fetisovvs.blogspot.com/2016/01/blog-post_25.html
- Воскресенская церковь. http://fetisovvs.blogspot.com/2016/01/blog-post_90.html
- Воскресенская церковь издали. http://fetisovvs.blogspot.com/2016/01/blog-post_4.html
- Горы вблизи. http://fetisovvs.blogspot.com/2016/01/blog-post_10.html
- Вид с санаторного комплекса. http://fetisovvs.blogspot.com/2015/12/blog-post_29.html
Файл слишком велик для конечной файловой системы / Для "чайников"
Не редко при попытке записать большой файл на флешку или внешний жесткий диск пользователи получают примерно такое сообщение: файл слишком велик для конечной файловой системы. При этом на флешке может быть несколько десятков гигабайтов свободного места, а файл, который нужно записать на флешку размером всего в несколько гигабайт. Но, тем не менее, запись такого файла невозможна. В данном материале мы рассмотрим причину возникновения данной ошибки, а также расскажем о том, как решить данную проблему.
Причина возникновения ошибки, с сообщением файл слишком велик для конечной файловой системы, очень проста. Дело в том, что большинство флеш накопителей продаются с файловой системой FAT32. Одной из особенностей данной файловой системы является то, что она не поддерживает файлы размером больше 4 гб. В результате, когда пользователь пытается записать на флешку образ DVD диска размером 4.7 гигабайта или любой другой большой файл, появляется сообщение об ошибке.
Решить эту проблему можно двумя путями:
- форматирование флешки в файловую систему NTFS;
- конвертация флешки в файловую систему NTFS.
Файловая система NTFS более современна и не имеет серьезных ограничений на размер файла, поэтому после того как вы переведете флешку на файловую систему NTFS вы сможете записывать на нее файлы любого размера. Если на флешке нет важных файлов, или вы можете временно перенести файлы с флешки на другой диск, то лучше всего выполнить форматирование флешки в NTFS. Это проще, быстрее и надежней. Если же на флешке много нужных вам файлов и вы не хотите временно переносить их в другое место, то вы можете выполнить конвертацию. В этом случае смена файловой системы с FAT32 на NTFS пройдет без потери данных. Сейчас мы рассмотрим оба этих варианта.
Вариант № 1. Форматирование флешки в NTFS.
Если сообщение «файл слишком велик для конечной файловой системы» вам изрядно надоело, и вы хотите решить проблему быстро и радикально, то форматирование ваш вариант. Но, перед тем как начинать форматирование не забудьте перенести все нужные вам файлы с флешки на другой накопитель.
Откройте «Мой компьютер» и щелкните правой кнопкой мышки по вашей флешке. В открывшемся коне выберите пункт «Форматировать».
После этого откроется окно для форматирования диска. Здесь нужно сменить файловую систему с FAT32 на NTFS.
Остальные настройки можете не трогать. После выбора файловой системы NTFS просто нажмите на кнопку «Начать». Дальше перед вами появится сообщение об удалении всех данных с флешки. Нажмите «OK» для того чтобы запустить процесс форматирования. После форматирования в NTFS вы сможете записывать файлы большого размера и сообщение «файл слишком велик для конечной файловой системы» больше не будет появляться.
Вариант № 2. Конвертация файловой системы в NTFS.
Если вы не хотите удалять все данные с флешки, то можете выполнить конвертацию файловой системы из FAT32 в NTFS. Для этого откройте командную строку и введите команду «convert X: /FS:NTFS». При этом «X» нужно заменить на букву, которая присвоена вашей флешке.
После выполнения команды «convert X: /FS:NTFS» начнется конвертация файловой системы флешки в NTFS. Время конвертации зависит от скорости работы флешки и количества файлов на ней. После завершении процесса конвертации в командной строке появится сообщение «Преобразование завершено» После этого можете закрывать командную строку и приступать к использованию флешки.
Источник: http://osnova-pk.ru/osnovapk/fayl-slishkom-velik-dlya-konechnoy-faylovoy-sistemyi.html
Смотри также:
- 3d-принтер — что это такое и как он работает. http://fetisovvs.blogspot.com/2015/08/3d.html
- Защита флешки от вирусов. http://fetisovvs.blogspot.com/2015/10/blog-post_31.html
- Если не включается компьютер, что делать? http://fetisovvs.blogspot.com/2015/04/blog-post_55.html
- Как скачать видео с любого сайта. http://fetisovvs.blogspot.com/2015/07/blog-post_3.html
- Лицензионное соглашение для программы: зачем оно? http://fetisovvs.blogspot.com/2015/04/blog-post_11.html
- Основные рекомендации по ликвидации неисправностей звука в Windows 7. http://fetisovvs.blogspot.com/2015/04/windows-7.html
- Создаем скрытую папку — невидимку. http://fetisovvs.blogspot.com/2015/06/blog-post_13.html
- Что такое брандмауэр windows? Что такое фаервол? http://fetisovvs.blogspot.com/2015/04/windows_9.html
- Что такое вирус вымогатель и что с ним делать? http://fetisovvs.blogspot.com/2015/04/blog-post_35.html
- Что такое кодеки и зачем они нужны. http://fetisovvs.blogspot.com/2015/07/blog-post_24.html
понедельник, 4 января 2016 г.
Форос. Воскресенская церковь издали / Фото из личного архива
Смотри также Форос:
- Набережная. http://fetisovvs.blogspot.com/2016/01/blog-post_29.html
- Горы с Байдарского перевала. http://fetisovvs.blogspot.com/2016/01/blog-post_25.html
- Воскресенская церковь. http://fetisovvs.blogspot.com/2016/01/blog-post_90.html
- Горы вблизи. http://fetisovvs.blogspot.com/2016/01/blog-post_10.html
- Горы издали. http://fetisovvs.blogspot.com/2016/01/blog-post_39.html
- Вид с санаторного комплекса. http://fetisovvs.blogspot.com/2015/12/blog-post_29.html
суббота, 2 января 2016 г.
Видео лучших докладов Java-конференции JPoint 2015 — Часть 1 / Программирование на Java
Год подходит к концу, впереди длинные каникулы. Для многих каникулы — это отличная возможность посидеть и посмотреть вокруг, что же у нас нового и интересного происходит нынче в профессиональном джавовском мире.
В апреле в Москве мы провели в Москве большую Java-конференцию — JPoint 2015. Конференция собрала более тысячи разработчиков на площадке, еще несколько сотен — смотрели конференцию онлайн. Мы экспериментировали и с открытием (лекция Дмитрия Галкина о современном искусстве и программировании действительно шокировала многих) и с новыми форматами (круглые столы и экспертные дискуссии). Но ключевой темой конференции были и остаются доклады.
Видеозаписи всех докладов конференции лежат на Youtube. Мы, как всегда, собрали статистику из отзывов участников и посчитали рейтинг докладов. В этом посте — традиционный обзор лучших докладов конференции. Я сделаю короткий обзор десяти лучших докладов конференции с тем, чтобы вы немного больше знали о них и посмотрели именно то, что интересно вам.
Итак, поехали.
Сергей Walrus Куксенко, Oracle — Железные счётчики на страже производительности
Средняя оценка: 4.28

Этот доклад получил специальный приз жюри в номинации «аццкий хардкор». Общая идея доклада сводится к следующему: представьте, что вы уже наоптимизировали в своем приложении все, что можно — посмотрели на сеть, ОС, JVM и т.д. и поняли, что все уперлось в процессор. После этого мы попрофилировали, работать стало быстрее, но все равно процессор загружен на 100%. Что делать?
Оказывается, внутри процессора есть разные счетчики событий. Называется этот механизм Hardware Performance Counters. Архитектура современных процессоров очень сложна, в них может происходить очень много разного. Фокус в том, что мы можем включить некоторые счетчики внутри процессора, которые будут считать количество произошедших событий. То есть, некоторый железный профилировщик внутри процессора.
Какие именно события умеет считать этот процессорный профилировщик? Да практически любые. В современных интеловских процессорах, по утверждению Сергея, их около тысячи. Если вы хотите понять, какие события надо смотреть в первую очередь, куда вообще копать и какие с этим возникают трудности — обязательно посмотрите этот доклад.
В этом году Сергей снова прилетит к нам в Москву — правда уже не из Питера, а из Калифорнии. С темой он определится в январе. Скорее всего это будет снова что-то про оптимизацию производительности.
Барух jbaruch Садогурский, JFrog — Как писать асинхронные многопоточные HTTP-приложения
Средняя оценка: 4.29

В этом докладе Барух изложил некоторый опыт, который они с парнями из JFrog накопили в процессе написания своих систем. Если говорить техническими терминами — они пишут сервера, одна из главных задач которых — быстро раздавать бинарники. То есть, многопоточные HTTP-приложения, на Java, асинхронные.
Доклад разбился на две части. В первой Барух рассказывал о том, как они у себя выбирали библиотеки для асинхронной работы с HTTP. Какими принципами имеет смысл руководствоваться при выборе? Как сравнивать производительность таких библиотек и имеет ли это смысл? Какую библиотеку выбрать, в конце концов?! Во второй части доклада Барух рассказал о том, что не так с HTTP 1.1 и чем хорош грядущий HTTP/2 и как он поможет всем нам.
В апреле Барух снова приедет к нам на JPoint. И тоже из Калифорнии. Но главное не это, а то, что Барух сейчас определяется с темой доклада и проводит соответствующее голосование. Кто собирается на JPoint — кликните по этой ссылке и помогите нам с выбором докладов.
Никита Сальников-Тарновский, Plumbr — Где моя память, чувак?!
Средняя оценка: 4.38

Не очень сложный и хорошо структурированный доклад о том, как себя вести в случае, если ваш продакшен начитает вываливаться с OutOfMemoryError. В первой части доклада Никита довольно много рассказывает про то, какие регионы памяти есть в Java, зачем они нужны и как с ними работают сборщики мусора. Далее речь пошла про симптомы утечки памяти, а так же о том, что является, а что не является утечкой. В последней части доклада Никита делает демки на MAT (Memory Analyzer Tool) и показывает, как этот инструмент помогает в реальной жизни. Ничего особо сложного, зато очень эффективно в повседневной жизни.
Никита пока не уверен, сможет ли он приехать на JPoint в этот раз — на конец апреля у него уже запланирован отпуск. Но мы еще, как говорится, поборемся. Шантаж, угрозы, пытки — и вот он уже выступает на конференции! Как вы поняли, этот вопрос практически решен.
Владимир vladimirsitnikov Ситников, NetCracker — Выражаемся регулярно
Средняя оценка: 4.40

Доклад о регулярных выражениях и о нескольких ходах, которые могут хорошо улучшить производительность вашей программы, если вы поняли, что она тормозит именно в момент использования регэкспах. И о куче граблей, которые разложены в этом поле.
Парсинг текстов регулярками, парсинг XML, наиболее распространенные ошибки, анализ того, что и где может тормозить. Не обошлось и без тестов производительности разных регэспов на боевых примерах.
На JPoint 2016 Владимир расскажет о том, какие типичные проблемы возникают с производительностью разных опенсорсных решений, которые очень любят использовать в современных Java-проектах — Spring, Postgres JDBC Driver, Wildfly и др. С практической точки зрения, полагаю, будет очень интересно.
Антон antonkeks Кекс, Codeborne — Архитектура интернет-банка без Enterprise
Средняя оценка: 4.43

Антон Кекс, прежде всего, известен в России своей знаменитой критикой «кровавого Enterpise» (часть 1, часть 2). А точнее, критикой того, что большинство разработчиков тащат себе в новые проекты разные тяжелые технологии, практически не задумываясь о том, что практически всегда можно обойтись чем-то существенно более легковесным и простым в использовании.
В этом докладе Антон рассказал о том, какие легковесные технологии они у себя в Codeborne используют при разработке интернет-банков и почему эти технологии им нравятся больше, чем общепринятые в индустрии стеки на базе Java EE, Spring и прочих замечательных решений.
Чем нас порадует Антон на JPoint 2016 в апреле — пока неизвестно. Но мы работаем над этим. В январе будет понятно.
Ну и минутка рекламы в конце поста. Билет на JPoint 2016 — хороший подарок на новый год вам, вашим друзьям и коллегам. В каждую нашу конференцию мы вкладываем множество усилий, и поэтому я гарантирую вам, что вы не разочаруетесь.
Льготная регистрация на JPoint заканчивается уже завтра. Поэтому не тяните с покупкой.
В апреле в Москве мы провели в Москве большую Java-конференцию — JPoint 2015. Конференция собрала более тысячи разработчиков на площадке, еще несколько сотен — смотрели конференцию онлайн. Мы экспериментировали и с открытием (лекция Дмитрия Галкина о современном искусстве и программировании действительно шокировала многих) и с новыми форматами (круглые столы и экспертные дискуссии). Но ключевой темой конференции были и остаются доклады.
Видеозаписи всех докладов конференции лежат на Youtube. Мы, как всегда, собрали статистику из отзывов участников и посчитали рейтинг докладов. В этом посте — традиционный обзор лучших докладов конференции. Я сделаю короткий обзор десяти лучших докладов конференции с тем, чтобы вы немного больше знали о них и посмотрели именно то, что интересно вам.
Итак, поехали.
10 место
Сергей Walrus Куксенко, Oracle — Железные счётчики на страже производительности
Средняя оценка: 4.28

Этот доклад получил специальный приз жюри в номинации «аццкий хардкор». Общая идея доклада сводится к следующему: представьте, что вы уже наоптимизировали в своем приложении все, что можно — посмотрели на сеть, ОС, JVM и т.д. и поняли, что все уперлось в процессор. После этого мы попрофилировали, работать стало быстрее, но все равно процессор загружен на 100%. Что делать?
Оказывается, внутри процессора есть разные счетчики событий. Называется этот механизм Hardware Performance Counters. Архитектура современных процессоров очень сложна, в них может происходить очень много разного. Фокус в том, что мы можем включить некоторые счетчики внутри процессора, которые будут считать количество произошедших событий. То есть, некоторый железный профилировщик внутри процессора.
Какие именно события умеет считать этот процессорный профилировщик? Да практически любые. В современных интеловских процессорах, по утверждению Сергея, их около тысячи. Если вы хотите понять, какие события надо смотреть в первую очередь, куда вообще копать и какие с этим возникают трудности — обязательно посмотрите этот доклад.
В этом году Сергей снова прилетит к нам в Москву — правда уже не из Питера, а из Калифорнии. С темой он определится в январе. Скорее всего это будет снова что-то про оптимизацию производительности.
9 место
Барух jbaruch Садогурский, JFrog — Как писать асинхронные многопоточные HTTP-приложения
Средняя оценка: 4.29

В этом докладе Барух изложил некоторый опыт, который они с парнями из JFrog накопили в процессе написания своих систем. Если говорить техническими терминами — они пишут сервера, одна из главных задач которых — быстро раздавать бинарники. То есть, многопоточные HTTP-приложения, на Java, асинхронные.
Доклад разбился на две части. В первой Барух рассказывал о том, как они у себя выбирали библиотеки для асинхронной работы с HTTP. Какими принципами имеет смысл руководствоваться при выборе? Как сравнивать производительность таких библиотек и имеет ли это смысл? Какую библиотеку выбрать, в конце концов?! Во второй части доклада Барух рассказал о том, что не так с HTTP 1.1 и чем хорош грядущий HTTP/2 и как он поможет всем нам.
В апреле Барух снова приедет к нам на JPoint. И тоже из Калифорнии. Но главное не это, а то, что Барух сейчас определяется с темой доклада и проводит соответствующее голосование. Кто собирается на JPoint — кликните по этой ссылке и помогите нам с выбором докладов.
8 место
Никита Сальников-Тарновский, Plumbr — Где моя память, чувак?!
Средняя оценка: 4.38

Не очень сложный и хорошо структурированный доклад о том, как себя вести в случае, если ваш продакшен начитает вываливаться с OutOfMemoryError. В первой части доклада Никита довольно много рассказывает про то, какие регионы памяти есть в Java, зачем они нужны и как с ними работают сборщики мусора. Далее речь пошла про симптомы утечки памяти, а так же о том, что является, а что не является утечкой. В последней части доклада Никита делает демки на MAT (Memory Analyzer Tool) и показывает, как этот инструмент помогает в реальной жизни. Ничего особо сложного, зато очень эффективно в повседневной жизни.
Никита пока не уверен, сможет ли он приехать на JPoint в этот раз — на конец апреля у него уже запланирован отпуск. Но мы еще, как говорится, поборемся. Шантаж, угрозы, пытки — и вот он уже выступает на конференции! Как вы поняли, этот вопрос практически решен.
7 место
Владимир vladimirsitnikov Ситников, NetCracker — Выражаемся регулярно
Средняя оценка: 4.40

Доклад о регулярных выражениях и о нескольких ходах, которые могут хорошо улучшить производительность вашей программы, если вы поняли, что она тормозит именно в момент использования регэкспах. И о куче граблей, которые разложены в этом поле.
Парсинг текстов регулярками, парсинг XML, наиболее распространенные ошибки, анализ того, что и где может тормозить. Не обошлось и без тестов производительности разных регэспов на боевых примерах.
На JPoint 2016 Владимир расскажет о том, какие типичные проблемы возникают с производительностью разных опенсорсных решений, которые очень любят использовать в современных Java-проектах — Spring, Postgres JDBC Driver, Wildfly и др. С практической точки зрения, полагаю, будет очень интересно.
6 место
Антон antonkeks Кекс, Codeborne — Архитектура интернет-банка без Enterprise
Средняя оценка: 4.43

Антон Кекс, прежде всего, известен в России своей знаменитой критикой «кровавого Enterpise» (часть 1, часть 2). А точнее, критикой того, что большинство разработчиков тащат себе в новые проекты разные тяжелые технологии, практически не задумываясь о том, что практически всегда можно обойтись чем-то существенно более легковесным и простым в использовании.
В этом докладе Антон рассказал о том, какие легковесные технологии они у себя в Codeborne используют при разработке интернет-банков и почему эти технологии им нравятся больше, чем общепринятые в индустрии стеки на базе Java EE, Spring и прочих замечательных решений.
Чем нас порадует Антон на JPoint 2016 в апреле — пока неизвестно. Но мы работаем над этим. В январе будет понятно.
Ну и минутка рекламы в конце поста. Билет на JPoint 2016 — хороший подарок на новый год вам, вашим друзьям и коллегам. В каждую нашу конференцию мы вкладываем множество усилий, и поэтому я гарантирую вам, что вы не разочаруетесь.
Нашел под Елкой билет на #jpoint. Вот теперь в сомнениях толи письмо до Деда дошло, то ли девушка подслушала? На Деда мало надежды. :-(
— Ilya Kuchmin (@ikuchmin) 28 декабря 2015
Льготная регистрация на JPoint заканчивается уже завтра. Поэтому не тяните с покупкой.
Источник: http://habrahabr.ru/company/jugru/blog/274307/
Смотри также:
- Двести пятьдесят русскоязычных обучающих видео докладов и лекций о Java. http://fetisovvs.blogspot.com/2015/12/java-5-java-java.html
- Программируем… выход из лабиринта. http://fetisovvs.blogspot.com/2015/10/java.html
- Игра на чистой Java от новичка, для новичков. http://fetisovvs.blogspot.com/2015/09/java-java.html


