среда, 13 февраля 2008 г.

YourKit Java Profiler vs JProfiler

Это первое впечатление по вторичным половым признакам. Никакого глубокого анализа :).

1. Лицензия. И тот и тот продукт необходимо покупать. У обоих есть возможность получить eval лицензию, которая дает полную функциональность, но с ограничением по времени. YJP к томуже имеет community лицению, которая выдается по заявке группе разработчиков известного открытого софта.

2. "Тонкости лицензирования". JProfiler проверяет пригодность лицензии как на клиенте так и на агенте (сервере). Поэтому время на сервере в случае использования eval лицензии должно быть актуальным. YJP только на клиентской части.

3. Юзабилити. YJP позволяет настраивать шрифты. Для меня это важно.

В остальном по функциональности они мне показались похожими. На основе этих трех пунктов я уже сделал выбор в пользу YJP :)

воскресенье, 10 февраля 2008 г.

Java 6 & AMD64

JIT в Java 6 update 4 на amd64 ужасно глючная вещь все время где-то падает (например eclipse падает на компиляции класса). Поэтому если нужно юзать java 6 на amd64, а оно падает, то можно заюзать ключик -Djava.compiler=none - это отключает JIT. Если цели использовать именно Java 6 нет, то можно поставить Java 5 update 14 оно вроде бы работает стабильно.

Current thread (0x00002aab2d10e800): JavaThread "CompilerThread1" daemon [_thread_in_native, id=20462, stack(0x00000000406b2000,0x00000000407b3000)]

siginfo:si_signo=SIGSEGV: si_errno=0, si_code=1 (SEGV_MAPERR), si_addr=0x0000000000000000

Registers:
RAX=0x0000000000000000, RBX=0x00002aab311cc4d8, RCX=0x00002aab3137e9b0, RDX=0x0000000000000046
RSP=0x00000000407aee70, RBP=0x00000000407aeee0, RSI=0x00002aab3137e9b0, RDI=0x00002aab311cc4d8
R8 =0x00002aab3137ea08, R9 =0x00002aab3137e9b0, R10=0x00002aab3137e9b0, R11=0x0000000000000000
R12=0x00002aab311cc4a0, R13=0x0000000000000000, R14=0x00002aab2cd3b870, R15=0x0000000000000001
RIP=0x00002b5f70ae122a, EFL=0x0000000000010246, CSGSFS=0x0000000000000033, ERR=0x0000000000000004
TRAPNO=0x000000000000000e

Top of Stack: (sp=0x00000000407aee70)
0x00000000407aee70: 00002aab30548b88 00000001ffffffff
0x00000000407aee80: 00002aab3137e9b0 0000000270a85331
0x00000000407aee90: 00002aab30548b80 00000007407afaa0
0x00000000407aeea0: 00000000407afb68 01000000000004a7
0x00000000407aeeb0: 00000000407afaa0 00002b5f7112a4f0
0x00000000407aeec0: 00000000407afaa0 00000000407af030
0x00000000407aeed0: 00000000407aeff0 00000000407aefc0
0x00000000407aeee0: 00000000407af100 00002b5f70ae076c
0x00000000407aeef0: 00000000407afb68 00000000407af0b0
0x00000000407aef00: 00002aab330b0fb0 00002aab30000020
0x00000000407aef10: 00000000407aef80 00002b5f711438d0
0x00000000407aef20: 00002aab307d8a20 0000000000000151
0x00000000407aef30: 00000000407afbc0 00002b5f70608bbc
0x00000000407aef40: 00000000407b2950 00000000407aef80
0x00000000407aef50: 00002b5f71146040 00002aab3100b990
0x00000000407aef60: 0000000000000151 00002b5f70f1a9d2
0x00000000407aef70: 0000000040110b90 00002b5f70f1aaa1
0x00000000407aef80: 00000000407b2950 00000000407aefc0
0x00000000407aef90: 00002b5f71146040 0000000000007fe8
0x00000000407aefa0: 00002aab307f5d10 00002b5f70f1a9d2
0x00000000407aefb0: 0000000040110b90 00002b5f70f1aaa1
0x00000000407aefc0: 00002b5f7112a4f0 00002b5f0000000e
0x00000000407aefd0: 00000000407b1450 00000000407afaa0
0x00000000407aefe0: 00000000000008c8 00002aab2d10ec70
0x00000000407aeff0: 000000000000000d 00000000407b1450
0x00000000407af000: 00002aab32c78490 00002b5f70a84d00
0x00000000407af010: 00002aab311bd4b0 00000000000004a8
0x00000000407af020: 00000000407af0b0 00002aab332443e0
0x00000000407af030: 000000000000000c 00000000407b1450
0x00000000407af040: 00002aab3178f090 00002aab31ce1aa0
0x00000000407af050: 00002aab3184eb70 00002aab3184f6b0
0x00000000407af060: 00002aab330c8c60 00000000407afbc0

Instructions: (pc=0x00002b5f70ae122a)
0x00002b5f70ae121a: 48 89 cf 41 ff 95 80 00 00 00 48 89 df 49 89 c5
0x00002b5f70ae122a: 8b 00 41 21 44 24 38 41 8b 45 04 21 43 04 41 8b
Stack: [0x00000000406b2000,0x00000000407b3000], sp=0x00000000407aee70, free space=1011k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x1f122a]
V [libjvm.so+0x1f076c]
V [libjvm.so+0x244525]
V [libjvm.so+0x241035]
V [libjvm.so+0x1e05c7]
V [libjvm.so+0x248ec8]
V [libjvm.so+0x248866]
V [libjvm.so+0x62a3f9]
V [libjvm.so+0x6246a1]
V [libjvm.so+0x505eea]


Current CompileTask:
C2:581 org.eclipse.core.internal.dtree.DataTreeNode.forwardDeltaWith([Lorg/eclipse/core/internal/dtree/AbstractDataTreeNode;[Lorg/eclipse/core/internal/dtree/AbstractDataTreeNode;Lorg/eclipse/core/internal/dtree/IComparator;)[Lorg/eclipse/core/internal/dtree/AbstractDataTreeNode; (469 bytes)

пятница, 8 февраля 2008 г.

VNC

Посвящается тем, кто как я (до того как составил таблицу) мучается со вводом русских букв из виндового vncclient'а при работе на юниксовом vncserver'е.

Самое простое решение, что я нашел, без всяких извратов и прочего - это:
1-х. Нужно составить таблицу соответствия виндовых keysym'ов к keysym'ам linux'a и запускать vnc4 с аргументом -RemapKeys, так у меня получилось вот что:
0xb8->0x6a3,0xe9->0x6ca,0xf6->0x6c3,0xf3->0x6d5,
0xea->0x6cb,0xe5->0x6c5,0xed->0x6ce,0xe3->0x6c7,0xf8->0x6db,
0xf9->0x6dd,0xe7->0x6da,0xf5->0x6c8,0xfa->0x6df,
0xf4->0x6c6,0xfb->0x6d9,0xe2->0x6d7,0xe0->0x6c1,
0xef->0x6d0,0xf0->0x6d2,0xee->0x6cf,0xeb->0x6cc,
0xe4->0x6c4,0xe6->0x6d6,0xfd->0x6dc,0xff->0x6d1,
0xf7->0x6de,0xf1->0x6d3,0xec->0x6cd,0xe8->0x6c9,
0xf2->0x6d4,0xfc->0x6d8,0xe1->0x6c2,0xfe->0x6c0,
0xa8->0x6b3,0xc9->0x6ea,0xd6->0x6e3,0xd3->0x6f5,
0xca->0x6eb,0xc5->0x6e5,0xcd->0x6ee,0xc3->0x6e7,
0xd8->0x6fb,0xd9->0x6fd,0xc7->0x6fa,0xd5->0x6e8,
0xda->0x6ff,0xd4->0x6e6,0xdb->0x6f9,0xc2->0x6f7,
0xc0->0x6e1,0xcf->0x6f0,0xd0->0x6f2,0xce->0x6ef,
0xcb->0x6ec,0xc4->0x6e4,0xc6->0x6f6,0xdd->0x6fc,
0xdf->0x6f1,0xd7->0x6fe,0xd1->0x6f3,0xcc->0x6ed,
0xc8->0x6e9,0xd2->0x6f4,0xdc->0x6f8,0xc1->0x6e2,
0xde->0x6e0


2-х. Нужно сообщить xmodmap'у о том, какие символы он должен знать аутофбокс так сказать. vncserver конечно и сам их добавить может, но он сопровождает это сообщениями да и заглавные литеры при этом себя ведут не очень хорошо. Так что лучше все-таки заранее добавить. Я поместил в ~/.vnc/xstartup вот такие строки:
xmodmap -e "keycode 252 = Cyrillic_shorti Cyrillic_SHORTI"
xmodmap -e "keycode 251 = Cyrillic_tse Cyrillic_TSE"
xmodmap -e "keycode 250 = Cyrillic_u Cyrillic_U"
xmodmap -e "keycode 249 = Cyrillic_ka Cyrillic_KA"
xmodmap -e "keycode 248 = Cyrillic_ie Cyrillic_IE"
xmodmap -e "keycode 247 = Cyrillic_en Cyrillic_EN"
xmodmap -e "keycode 246 = Cyrillic_ghe Cyrillic_GHE"
xmodmap -e "keycode 245 = Cyrillic_sha Cyrillic_SHA"
xmodmap -e "keycode 244 = Cyrillic_shcha Cyrillic_SHCHA"
xmodmap -e "keycode 243 = Cyrillic_ze Cyrillic_ZE"
xmodmap -e "keycode 242 = Cyrillic_ha Cyrillic_HA"
xmodmap -e "keycode 241 = Cyrillic_hardsign Cyrillic_HARDSIGN"
xmodmap -e "keycode 240 = Cyrillic_ef Cyrillic_EF"
xmodmap -e "keycode 239 = Cyrillic_yeru Cyrillic_YERU"
xmodmap -e "keycode 238 = Cyrillic_ve Cyrillic_VE"
xmodmap -e "keycode 237 = Cyrillic_a Cyrillic_A"
xmodmap -e "keycode 236 = Cyrillic_pe Cyrillic_PE"
xmodmap -e "keycode 235 = Cyrillic_er Cyrillic_ER"
xmodmap -e "keycode 234 = Cyrillic_o Cyrillic_O"
xmodmap -e "keycode 233 = Cyrillic_el Cyrillic_EL"
xmodmap -e "keycode 232 = Cyrillic_de Cyrillic_DE"
xmodmap -e "keycode 231 = Cyrillic_zhe Cyrillic_ZHE"
xmodmap -e "keycode 230 = Cyrillic_e Cyrillic_E"
xmodmap -e "keycode 229 = Cyrillic_io Cyrillic_IO"
xmodmap -e "keycode 228 = Cyrillic_ya Cyrillic_YA"
xmodmap -e "keycode 227 = Cyrillic_che Cyrillic_CHE"
xmodmap -e "keycode 226 = Cyrillic_es Cyrillic_ES"
xmodmap -e "keycode 225 = Cyrillic_em Cyrillic_EM"
xmodmap -e "keycode 224 = Cyrillic_i Cyrillic_I"
xmodmap -e "keycode 223 = Cyrillic_te Cyrillic_TE"
xmodmap -e "keycode 222 = Cyrillic_softsign Cyrillic_SOFTSIGN"
xmodmap -e "keycode 221 = Cyrillic_be Cyrillic_BE"
xmodmap -e "keycode 220 = Cyrillic_yu Cyrillic_YU"