Haskell
Мои эксперементы с Haskell
Сделал тоже самое что описано в посте про C++
Haskell – классный язык программирования. Но писатьна нём что то в одиночку очень тяжело.
Мои эксперементы с Haskell
Сделал тоже самое что описано в посте про C++
Haskell – классный язык программирования. Но писатьна нём что то в одиночку очень тяжело.
Пару лет назад подарили отцу на день рождения лодочный электромотор и литиевый тяговый аккумулятор к нему. Хорошая вещь, сплошные положительные эмоции от использования. Но, как оказалось, мотор не рассчитан на работу с этим аккумулятором. В том смысле, что индикация уровня заряда на корпусе мотора оказалась совершенно неадекватной.
Решил попробовать сделать необходимый девайс на Arduino.
До этого с микроконтроллерами дела не имел. Оказалось, это совсем не сложно и даже интересно.
Исходники выложил на GitHub: https://github.com/valmat/BatterySensor
В PHP есть возможность присвоить переменным значения, используя массив:
list($a, $b) = array('str1', 'str2');
В Python это выглядит так:
a, b = ['str1', 'str2']
А вот в C++ такой языковой конструкции нет. Но это совершенно не проблема, потому что ее можно сделать самому.
Вот что у меня получилось:
В полноценном смысле то, что я тут хочу написать, конечно, бенчмарком не является. Но вполне способно дать понимание области применения RocksDB.
RocksDB — это довольно крутое хранилище, являющееся (на данный момент) встраиваемым решением. Главной фишкой RocksDB является то, что она рассчитана на использование на flash-накопителях, то есть на SSD-дисках.
Лично я давно ждал появления таких решений. Поскольку память всё ещё дорогая, а жёсткие диски медленные, использование SSD для хранения данных — очень логичный шаг.
Стало мне интересно, и решил я провести такую глупую проверку: сравнить производительность программ, откомпилированных 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.
Как я готовлю отчетность в налоговую.
Выписки у меня достаются в таком формате:
2014.01.20.rtf2014.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 появился раздел с документацией.
Вообще разработка библиотеки идет семимильными шагами, и, похоже, недолго осталось ждать первого рабочего релиза. Когда будет готово, напишу подробнее про саму библиотеку и её возможности.
PS: Вместо того чтобы что-то писать здесь про библиотеку, я просто взял и начал переводить документацию на русский язык: http://phpcpp.ru/
Основная цель этого перевода — познакомить русскоязычное сообщество с библиотекой.
Перевод вольный. Поскольку многие вещи в библиотеке так или иначе сделаны с моим участием (да и просто потому что я уже достаточно хорошо в ней разобрался), мой перевод во многих местах дополняет и расширяет оригинальный текст.
Давно меня интересовал вопрос: насколько увеличивается производительность при переписывании нативного кода в php-расширение.
И вот я решил провести сравнение.
В качестве платформы для написания расширения была выбрана библиотека PHP-CPP.
Пару слов о самой библиотеке PHP-CPP.
Довольно неплохая библиотека. Работать с ней приятно и удобно. Честно говоря, никогда еще не было так легко писать расширения для php.
Из минусов могу отметить недостаток документации. Чтобы разобраться с некоторыми вещами, недостаточно даже примеров, которыми автор снабжает код — приходится смотреть исходники. В частности, я так и не разобрался, как перенести статический метод класса из C++ в статический же метод в php.
Основана она на C++11, т.е. на старых дистрибутивах может потребоваться обновить gcc.
Будут сравниваться 4 способа сериализации:
serializeJSON раньше шел в стандартной поставке PHP. Сейчас нужно поставить дополнительное расширение php5-json.
Вот и я разжился SSD диском.
Будет на чем тестить NoSQL SSD хранилища.
В планах потестить на нем RocksDB, LevelDB и, возможно, RethinkDB.