chabapok: (Default)
Dec. 25th, 2016
11:14 pm
Что меня раздражает в dw - так это то, что по умолчанию в окне reply мой firefox думает, что стоит английский язык - и спеллчекер подчеркивает русский текст. Как это поменять, я не знаю.
Это можно поменять через greasemonkey специальным плагином (достаточно плагином поставить аттрибут lang="ru-UA") - но то уже тяжелая артиллерия. Мне кажется, это можно как-то проще сделать, но как это делается - я пока не нашел.

DW предоставляет слои, которые выводят странички, и мне даже примерно ясно, как оно работает. Но недостаточно, чтобы это сделать. Документация по слоям крайне скудная.
chabapok: (Default)
Jun. 24th, 2016
09:54 pm
В любом учебнике написано, что в рантайме тип, которым параметризован генерик, не сохраняется. Однако:
ArrayList s = new ArrayList(){};
Type t = s.getClass().getGenericSuperclass();
Type param =((ParameterizedType) t).getActualTypeArguments()[0];
System.out.println(param);
System.out.println(param==String.class);


Дает результат:
class java.lang.String
true

нашел в коде netty.

То есть, если у нас есть class Foo extends Bar<Baz>{}, то Baz все таки сохраняется в рантайме.
chabapok: (Default)
Feb. 27th, 2016
03:40 pm
list.toArray(new T[0]) быстрее чем list.toArray(new T[list.size()])

За счет того, что ненулевой массив jvm обязана сначала заполнить нулями, в то время как при создании нулевого массива его размер известен на момент jitCompilte-time. Поэтому, все оптимайзится, предварительное зануление элеминэйтится.

пруф http://shipilev.net/blog/2016/arrays-wisdom-ancients/

Тесты я запускал с немножко другими настройками, чем предлагаются Шипилевым, но результаты такие же:

Benchmark (size) (type) Mode Cnt Score Error Units
MyBenchmark.simple 0 arraylist thrpt 5 64459,357 ± 718,432 ops/ms
MyBenchmark.sized 0 arraylist thrpt 5 65016,678 ± 522,242 ops/ms
MyBenchmark.zero 0 arraylist thrpt 5 108532,622 ± 396,881 ops/ms

MyBenchmark.simple 1 arraylist thrpt 5 63775,468 ± 324,498 ops/ms
MyBenchmark.sized 1 arraylist thrpt 5 42622,676 ± 310,861 ops/ms
MyBenchmark.zero 1 arraylist thrpt 5 46106,613 ± 3963,317 ops/ms

MyBenchmark.simple 10 arraylist thrpt 5 52268,105 ± 623,953 ops/ms
MyBenchmark.sized 10 arraylist thrpt 5 25022,019 ± 376,163 ops/ms
MyBenchmark.zero 10 arraylist thrpt 5 24973,696 ± 131,005 ops/ms

MyBenchmark.simple 100 arraylist thrpt 5 10826,845 ± 148,878 ops/ms
MyBenchmark.sized 100 arraylist thrpt 5 4272,223 ± 17,979 ops/ms
MyBenchmark.zero 100 arraylist thrpt 5 4838,959 ± 29,761 ops/ms

MyBenchmark.simple 1000 arraylist thrpt 5 1177,184 ± 15,338 ops/ms
MyBenchmark.sized 1000 arraylist thrpt 5 386,003 ± 6,818 ops/ms
MyBenchmark.zero 1000 arraylist thrpt 5 554,154 ± 4,089 ops/ms
----------------------------------
MyBenchmark.simple 0 hashset thrpt 5 55909,493 ± 666,175 ops/ms
MyBenchmark.sized 0 hashset thrpt 5 55745,047 ± 359,206 ops/ms
MyBenchmark.zero 0 hashset thrpt 5 78504,197 ± 561,517 ops/ms

MyBenchmark.simple 1 hashset thrpt 5 27450,713 ± 76,717 ops/ms
MyBenchmark.sized 1 hashset thrpt 5 27011,843 ± 145,992 ops/ms
MyBenchmark.zero 1 hashset thrpt 5 27458,936 ± 115,336 ops/ms

MyBenchmark.simple 10 hashset thrpt 5 10827,750 ± 161,695 ops/ms
MyBenchmark.sized 10 hashset thrpt 5 9359,019 ± 59,018 ops/ms
MyBenchmark.zero 10 hashset thrpt 5 9925,172 ± 55,773 ops/ms

MyBenchmark.simple 100 hashset thrpt 5 1458,237 ± 19,589 ops/ms
MyBenchmark.sized 100 hashset thrpt 5 1166,421 ± 7,313 ops/ms
MyBenchmark.zero 100 hashset thrpt 5 1331,893 ± 23,562 ops/ms

MyBenchmark.simple 1000 hashset thrpt 5 97,926 ± 0,601 ops/ms
MyBenchmark.sized 1000 hashset thrpt 5 90,390 ± 0,851 ops/ms
MyBenchmark.zero 1000 hashset thrpt 5 88,353 ± 0,621 ops/ms

Местами немножко быстрей, местами быстрей в 3 раза.

chabapok: (Default)
Apr. 24th, 2014
01:23 pm
В oracle database все как-то не славабогу. Такое впечатление, что базу придумывали жопой. Конечно я понимаю, что эта бодяга тянется с 1979 года, но такое впечатление, что стиль " усложним чтоб враг не догадался" любили практиковать не только в ссср. Возможно, в ней богатые возможности по администрированию, но язык запросов местами весьма беден и многословен.

Например, в ней есть функция BITAND, которая делает побитовое И, но нету BITOR и BITXOR. Хочешь делать побитовое ИЛИ - пиши пользовательскую функцию.
В одном из прошлых постов я показал, что инсерты в ней гораздо длинее, чем в MySQL, так вот, длиней не только инсерты, но и любые запросы

Неудивительно, что mysql в итоге купили оракловцы. В MySQL все гораздо логичней и красивее, хотя видно, что продукт ненастолько взрослый как оракл - некоторых полезностей не хватает и мускулу.
chabapok: (Default)
Mar. 28th, 2014
09:51 pm
Я тут в рамках изучения java watch service api сделал утилитку, которая следит за изменениями в директориях и автоматом делает ее снапшуты, копируя содержимое в другую директорию (имя дается равное дате-времени), если в исходной что-то поменялось.

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

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

скачать исходники можно тут https://github.com/chabapok/bvc/tree/master
скачать бинарники можно тут https://github.com/chabapok/bvc/tree/binaries
в комплекте конфиг, который можно изменять под себя.
chabapok: (Default)
Mar. 22nd, 2014
07:26 pm
Пробую netbeans 8.0 и недавно вышедшую java 1.8. Из багов - сразу отказался svn апдейтиться. Выдает ошибку - unrecongized name. Лечится это просто. добавляем в {netbeans-install}/etc/netbeans.conf ключик:

-J-Djsse.enableSNIExtension=false

Пускай этот хинт пока висит у меня в жж, а то решение довольно трудно нагуглить.
chabapok: (Default)
Nov. 19th, 2013
12:04 am
Две разные технологии, первая (swing) используется в java, вторая - собственно adobe flash. Но обе связаны с графикой. Так вот, буквально вчера выяснил, что flash гораздо более продвинут в части графики. На флеше я когда-то делал приложения для вконтакта, со swing познакомился вплотную на днях - понадобилось сгенерить картинку.

На флеше каждый спрайт может иметь начальную точку, относительно которой его позиционируешь в любом удобном месте. На swing эта точка - это всегда левый верх спрайта. Вот казалось бы, у swing есть метод getBounds() который возвращает прямоугольник, но ВНЕЗАПНО оказывается, что x и y прямоугольника - это координаты x, y всего JComponent относительно родительского контейнера. Вроде и проще, возможно даже для окошек лучше подходит, но если начинаешь работать с графикой - этого не хватает. Хочется нарисовать цветочек в центром всередине - а нельзя. Нормальной либы что-то так сходу не нагугливаются, поэтому приходится наследоваться от JComponent и реализовать систему по типу флеша, чтобы x, y задавали смещение холста отностительно родительского, и была функция типа getBounds, которая задает область спрайта на этом холсте. Теперь меня не покидает чувство, что мне пришлось изобрести велосипед. Но если этого не сделать, то нарисовать что-то путевое через api предлагаемое swing-ом вообще малореально.
chabapok: (Default)
Oct. 25th, 2013
11:57 pm
Для mysql мы делаем так:

INSERT INTO mytable (col1, col2, col3) VALUES (1,2,3), (4,5,6), (7,8,9);

Но ведь это не true база данных. Настоящие программисты используют только oracle, только хардкор! Давайте посмотрим как это же будет выглядеть на ней.

Для oracle database этот запрос будет выглядеть так:

INSERT ALL INTO mytable (col1, col2, col3) VALUES (1,2,3) INTO mytable (col1, col2, col3) VALUES (4,5,6) INTO mytable (col1, col2, col3) VALUES (7,8,9) SELECT * FROM DUAL;

Западло каждый раз перечислять поля? на стак_оверфлов предлагается такой костыль:

INSERT INTO mytable (col1, col2, col3) select 1,2,3 from dual union all select 4,5,6 from dual union all select 7,8,9 from dual;

Или хранимая процедура+ее многократный вызов.

Да, я понимаю, руками подобное никто не пишет, для сгенеренного скрипта не особо важно, да и аналоги load data infile наверняка в оракле есть. Но все равно, помоему, ужас.
chabapok: (Default)
Jun. 22nd, 2013
09:49 pm
Просто внезапно подумалось - если взять фотографию человека, поставить точно посередине глаза точку и "развернуть" это фото относительно этой точки, то окружность станет прямоугольником, значит зрачек станет тоже черным прямоугольником. Это в идеале. На практике, конечно будет блик, скорей всего круглый. Поэтому, этот блик тоже можно "развернуть" и идентифицировать таким же образом. На этом приницпе, теоретически, можно сделать идентификацию круглых частей на фото. А пара таких частей - это глаза, значит и идентификацию лиц сделать можно.

Естественно, все это делать я не собирался, но мне стало интересно проверить эту гипотезу, поэтому я набросал шейдер для pixel bender-а.

1

Как видно из этой картинки... )

July 2017

S M T W T F S
      1
23 456 7 8
9 10 1112 1314 15
16 171819202122
23242526272829
3031     

Syndicate

RSS Atom

Style Credit

Expand Cut Tags

No cut tags