linux virtualization

Запуск дистрибутива linux как приложения

Запуск виртуальной машины с последовательным портом в качесте консоли и перенаправлением его в stdio процесса qemu:

Для примера работы эмулятора будем использовать дистрибутив tinycore linux:

Пересборка initrd образа:

Пример вывода(перенаправление консоли ядра отключено для наглядности):

programming xml

Безумие XQuery

Довольно часто мне бывает нужно выделить часть данных по некоторым критериям из файлов формата XML. И каждый раз я писал небольшие скрипты или даже целые Java приложения, которые разбирали XML и анализируя файл выдавали необходимые данные. Сегодня я решил так не делать и попытался воспользоваться стандартом XQuery, предназначенным для выборок данных из XML.

Задача была простая — выбрать из файла Gnucash список счетов (Id, описание) и все транзакции (Описание, с какого счета, на какой счёт, сколько).

Первое на что стоит обратить внимание — очень много реализаций стандарта XQuery и целая куча редакторов. Редакторы есть как онлайн так и для настольных систем с ОС Windows / Linux.

Начал я изучение XQuery со статьи на Wiki, в которой не написано ну совсем ничего полезного. Потом продолжил поиск на w3c и stackoverflow. Кривая поиска вывела меня на довольно годный проприетарный редактор oXygen, его триальную версию я и поставил.

oXygen XQuey editor Читать далее »

lowlevel performance

glibc’s memory allocator

malloc_never_fails_tshirt-r8bdfeac6456e4703803a0d7bb91679da_va6lr_512
Когда приложение интенсивно создаёт и удаляет различные объекты при этом не производя над ними каких-либо ресурсоёмких вычислений, производительность приложения ограничивается в основном подсистемой управления памятью. И для более аккуратной разработки приложения необходимо воспринимать эту подсистему уже не как «чёрный ящик», а уже учитывать некоторые его особенности. Рассмотрим аллокатор из библиотеки glibc на платформе linux x86_64.

Какое же API предоставляет аллокатор из glibc? Как он работает? Какие неожиданности в себе таит? Читать далее »

android groovy java network programming video web Wi-Fi

Диванная автоматизация видеоплеера VLC

vlc_cat

Давным давно сделал себе пульт управления проигрыванием видео в виде приложения для мобильного телефона. Ведь это так приятно — лёжа на диване, прибавлять звук на компьютере или ставить фильм на паузу. Приложение было написано в режиме классического ночного безумия одним набегом.

Я пользуюсь дома замечательным видеоплеером VLC, чего и вам советую. Он отлично подходит для удалённого управления, поскольку имеет встроенный веб-интерфейс.

Приложение на GitHub diy-remote

Релизы брать тут: https://github.com/jreznot/diy-remote/releases

Для работы вам потребуется:

  • Wi-Fi сеть
  • Запущенный сервер на вашем компьютере
  • Настроенный веб-интерфейс в VLC
  • Android приложение на телефоне

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

electronic

Записки о NES / APU. Cчетчик кадров

Внезапно я осознал, что держать все в голове невозможно. Поэтому буду делать небольшие заметки об устройстве NES, которые я смог выяснить, изучая различные версии документаций и играясь с Visual 2A03. Некоторая информация, которую я здесь привожу, нигде не упоминается, но учитывается в современных эмуляторах.
Здесь я постарался описать работу счетчика кадров, который отвечает за генерацию сигналов для остальных частей APU в определенное время на кадре.
Читать далее »

java programming

Тезисы Effective Java — Создание и уничтожение объектов

Создание и уничтожение объектов

1 Отдайте предпочтение статическим методам, а не конструкторам

  • Статические методы имеют имена
  • Статические методы не требуют создавать объекты на каждый вызов
  • Статические методы могут возвращать объекты подтипа
  • Статические методы сокращают параметризованные объявления
  • Помните, что классы только лишь со статическими методами создания,  без публичных или защищенных конструкторов не могут быть унаследованы
  • Статические методы для получения экземпляров объектов не отличимы от других статических методов, что может ухудшить читаемость кода

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

javascript programming web

Используем Leaflet JS для географических данных

Итак, задача на сегодня:

  1. Отобразить некий уголок земного шара на карте
  2. Выделить интересную область карты
  3. Пометить ключевые объекты
  4. Добавить описания
  5. Реагировать на зум карты, отображая только нужную информацию

Для всего этого воспользуемся открытыми картами — Open Street Map и библиотекой JavaScript — Leaflet JS.

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

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»

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

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