DSL java perl programming

Не нравится язык? Напиши его себе сам.

Во время поиска документации по незнакомым функциям стандартной библиотеки, наткнулся на удивительную фичу Perl’а — source filters. Она позволяет выполнять препроцессинг исходного кода перед выполнением. Обработка может производится как кодом на C, так и кодом на самом Perl’е, что является наиболее переносимым вариантом.
Так чего же он нам позволяет добиться?
Многого! Например можно добавить возможность использовать прототипы функций с именованными аргументами, которые появятся только в Perl6.

Или изменить синтаксис чуть сильнее:

Читать далее »

bash linux NAT network pipes security

Заблуждения о файлах

Если удалить файл, свободное место увеличится на размер файла.

Ну, во-первых, файл очень часто занимает отличное от своего размера место

Если удалить файл, свободное место увеличится.

В большинстве файловых систем Linux место не освободится пока файл не закроют все процессы, работающие с ним.

Если удалить файл, свободное место увеличится, когда файл все закроют.

Вот в hfsplus в Linux 2.6.32-2.6.36 не так. В 2.6.37 это таки пофиксили.

Ну оно хотя бы не уменьшится при удалении?!

Много чудных файловых систем можно встретить. Вот например nilfs

Если дописать информацию в файл, занятое им место на диске увеличится.

Файловые системы со сжатием могут сжать новый файл лучше.

Одному имени файла всегда соответствует один и тот же файл.

Файлы кто-то может переименовать (c)ваш К.О. Даже в самый неожиданный момент (c)всё тот же К.О. Читать далее »

java programming web

Встраиваем Jetty

Про встраивание веб-сервера Jetty написано много руководств, где чаще всего приводят такой код:

И тут нас ждёт разочарование — мы должны запускать Jetty с ресурсами из файловой системы:

  • «/WEB-INF/web.xml»
  • «../src/main/webapp»

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

Читать далее »

perl programming

Лексер для Perl

Меня всегда интересовал вопрос: «В чём основная сложность разработки плагинов для IDE для динамических языков?». Посмотрев код плагина поддержки Perl для Eclipse и почитав форумы, я обнаружил что порой программа может быть правильно разобрана на лексемы только самим интерпретатором, например в случае, когда порядок разбора зависит от уже произведённых действий при разборе. Наглядный пример:

В котором последняя строка может содержать как регэксп так и деление в зависимости от прототипа загруженной функции. Читать далее »

latex

Удобный инструментарий для TeX в Windows

TeX божественен.

В свое время решил отказаться от набора документов в офисных пакетах и нисколько об этом не жалею, так как все необходимое все равно набирается в TeX, да еще и с такими-то формулами. Шрифты и оформление PDF даже при стиле по умолчанию крайне сильно радуют глаз, а после печати документы выглядят так что даже не стыдно показать. Но правда если возникает необходимость пользоваться нестандартным стилем, то приходится залезать в гугл, stackexchange и в викикнигу. Но это не так важно.

Важно, что набирать в TeX под Windows просто невозможно. А эта заметка призвана рассказать о том, как настроить Sublime на работу с TeX/BibTeX чтобы можно было хотя бы спокойно печатать.
Читать далее »

javascript parallel computing programming

Жуткий матан на javascript

Не отпускает меня эта[1][2] вычислительная задачка. Нафигачил её теперь на js. С блэкджеком и шлюхами Web workers. В итоге получилось около 40 секунд(в Chrome) — быстрее чем нативный код (сгенерированный gcc-4.4 с -O3) в один поток! Выложена на GitHub Pages. Файл с исходными данными.
Screenshot-nazarov-yuriy.github.io-Poincare-web- - Google Chrome Читать далее »

AVR CPLD/FPGA electronic

Релизация CPU на плис. Ядро SomeAVR

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

Здесь правые 8 светодиодов показывают значение регистра R20, а левые 8 — значение IP(PC). Немного описания далее. Читать далее »

security

Мысли вслух

Идея относительно анонимной публикации данных.
Окружение: наличие каких-нибудь сервисов вроде голосовалок, большое количество слабо контролируемых машин для массовки и на пару порядков меньшее число полностью контрорлируемых машин.
Заранее определяется список голосовалок и передаётся всем машинам, после чего все голосуют в одной(хотя можно и в нескольких) случайной голосовалке. Массовка голосует за случайный пункт, а полностью контролируемая за нужный. В итоге результаты сваливаются в нужную сторону, а для определения источника данных необходимо подробно рассмотреть десятки-сотни машин.
Доступность данных низкая, но если обеспечить контроль целостности, они или будут валидные или их не будет.

performance programming

Погрешность вычислений с числами с плавающей запятой

В ходе всех этих развлечений с оптимизациями обнаружился интересный, но очень неприятный эффект. Результат вычислений для разных компиляторов и разных флагов оптимизации порой значительно менялся.
Для более удобного наблюдения этого эффекта был выбран простой пример(полный код на github):

В этом маленьком тесте изменение результата от изменения флагов обнаружить не удалось, но всё равно обилие результатов удивляет — 5 различных, с 13 совпадающими знаками из 15-17 возможных для double.

Исходник и компилятор Результат Время выполнения, с
Assembler 1.53436944477410652787 3.81
gcc long 1.53436944477462278158 4.4
gcc double 1.53436944477389380914 4.4
icc long 1.53436944477397574360 6.88
icc double 1.53436944477334602510 1.50

*результаты по одному измерению, по этому совсем серьёзно воспринимать их не стоит. Время указано для процессора FX-8120
p.s. ну и обнаружилось, что написание кода на ассемблере пока ещё не абсолютно потеряло смысл — получился до 15% быстрее, чем на C.

performance programming

CUDA мы катимся?

Сразу извиняюсь за название — взято с потолка.
Неудержался и нафигачил вычислительную задачу, которую уже упоминал в прошлых топиках на CUDA. Ничего хитрого не делал — просто расставил директивы __device__.
В итоге получилось даже медленнее чем на CPU раз в 5 :’-(
Сей ужас можно увидеть здесь.