Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode

Haskell

Мои эксперементы с Haskell

Сделал тоже самое что описано в посте про C++

Haskell – классный язык программирования. Но писатьна нём что то в одиночку очень тяжело.

Мой первый Arduino проект

Пару лет назад подарили отцу на день рождения лодочный электромотор и литиевый тяговый аккумулятор к нему. Хорошая вещь, сплошные положительные эмоции от использования. Но, как оказалось, мотор не рассчитан на работу с этим аккумулятором. В том смысле, что индикация уровня заряда на корпусе мотора оказалась совершенно неадекватной.

Решил попробовать сделать необходимый девайс на Arduino.

До этого с микроконтроллерами дела не имел. Оказалось, это совсем не сложно и даже интересно.

Исходники выложил на GitHub: https://github.com/valmat/BatterySensor

Read full post gblog_arrow_right

Определение по списку в C++

В PHP есть возможность присвоить переменным значения, используя массив:

list($a, $b) = array('str1', 'str2');

В Python это выглядит так:

a, b = ['str1', 'str2']

А вот в C++ такой языковой конструкции нет. Но это совершенно не проблема, потому что ее можно сделать самому.

Вот что у меня получилось:

См также Optimized string concatenation: strjoin.cpp

Read full post gblog_arrow_right

Микро-бенчмарк RocksDB server

В полноценном смысле то, что я тут хочу написать, конечно, бенчмарком не является. Но вполне способно дать понимание области применения RocksDB.

RocksDB — это довольно крутое хранилище, являющееся (на данный момент) встраиваемым решением. Главной фишкой RocksDB является то, что она рассчитана на использование на flash-накопителях, то есть на SSD-дисках.

Лично я давно ждал появления таких решений. Поскольку память всё ещё дорогая, а жёсткие диски медленные, использование SSD для хранения данных — очень логичный шаг.

Read full post gblog_arrow_right

Clang vs gcc performance

Стало мне интересно, и решил я провести такую глупую проверку: сравнить производительность программ, откомпилированных Clang’ом и gcc.

Для эксперимента взял первую попавшуюся реализацию пузырьковой сортировки с GitHub’а.

Компилировал с опциями -g, -O1, -O2, -O3 и без опций.

Получилось интересно и неожиданно.

Для запуска тестов использовал такой скрипт:

#!/bin/bash

OPT="-O3"
g++ $OPT bubble.cpp -o bubble1
clang++ $OPT bubble.cpp -o bubble2   # -stdlib=libstdc++
clang++ $OPT -stdlib=libc++ bubble.cpp -o bubble3 # -stdlib=libc++

# ls -slh
# exit;

sleep 3
time ./bubble1 > /dev/null
sleep 3
time ./bubble2 > /dev/null
sleep 3
time ./bubble3 > /dev/null

Меняя параметр OPT.

Read full post gblog_arrow_right

Отчетность в налоговую на Linux

Как я готовлю отчетность в налоговую.

Выписки у меня достаются в таком формате:

  • 2014.01.20.rtf
  • 2014.01.20-1.rtf

В первую очередь, нужно упорядочить по дате, поэтому переименовываем:

for i in `find . -type f -name "*.rtf*"`; do
  dst=`echo $i | sed -e :a -e 's/\(.*\)\([0-9]\{2\}\)\.\([0-9]\{2\}\)\.\([0-9]\{4\}\)\(.*\)/\1\4.\3.\2\5/;ta'`
  echo mv $i $dst
done

Потом конвертируем в PDF:

libreoffice --invisible --convert-to pdf *.rtf

И соединяем все в один файл:

gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=toprint.pdf -dBATCH `find . -type f -name "*.pdf" | sort`

Всё.

Документация PHP-CPP

У PHP-CPP появился раздел с документацией.

Вообще разработка библиотеки идет семимильными шагами, и, похоже, недолго осталось ждать первого рабочего релиза. Когда будет готово, напишу подробнее про саму библиотеку и её возможности.


PS: Вместо того чтобы что-то писать здесь про библиотеку, я просто взял и начал переводить документацию на русский язык: http://phpcpp.ru/

Основная цель этого перевода — познакомить русскоязычное сообщество с библиотекой.

Перевод вольный. Поскольку многие вещи в библиотеке так или иначе сделаны с моим участием (да и просто потому что я уже достаточно хорошо в ней разобрался), мой перевод во многих местах дополняет и расширяет оригинальный текст.

Сравнение производительности C++ php-расширения с нативным кодом

Давно меня интересовал вопрос: насколько увеличивается производительность при переписывании нативного кода в php-расширение.

И вот я решил провести сравнение.

В качестве платформы для написания расширения была выбрана библиотека PHP-CPP.

Пару слов о самой библиотеке PHP-CPP.
Довольно неплохая библиотека. Работать с ней приятно и удобно. Честно говоря, никогда еще не было так легко писать расширения для php.
Из минусов могу отметить недостаток документации. Чтобы разобраться с некоторыми вещами, недостаточно даже примеров, которыми автор снабжает код — приходится смотреть исходники. В частности, я так и не разобрался, как перенести статический метод класса из C++ в статический же метод в php.
Основана она на C++11, т.е. на старых дистрибутивах может потребоваться обновить gcc.

Read full post gblog_arrow_right

Сериализация в PHP

Будут сравниваться 4 способа сериализации:

  1. Стандартная сериализация serialize
  2. JSON
  3. msgpack
  4. igbinary

Кратко об установке

JSON раньше шел в стандартной поставке PHP. Сейчас нужно поставить дополнительное расширение php5-json.

Read full post gblog_arrow_right

Разжился SSD диском

Вот и я разжился SSD диском.

Будет на чем тестить NoSQL SSD хранилища.

В планах потестить на нем RocksDB, LevelDB и, возможно, RethinkDB.