воскресенье, 16 августа 2015 г.

Прекрасные моменты любимого языка (C++) ...

http://habrahabr.ru/company/nixsolutions/blog/264559/#comment_8533279
Но этот восторг умирает на корню после первого же чужого проекта или библиотеки на C++, которые вы пытаетесь скачать и собрать. Главный плюс Pascal и сред на его основе — отсутствие проблем со сборкой.
Сборка C++ это ад. Нет, это хуже любого ада. Оно настолько негуманоидно, что можно потратить недели, разбираясь, почему же проект отказывается собираться. Вы переберёте все возможные ключи линкера и компилятора, а заодно по 5-6 версий каждого. Вы будете сутками напролёт изучать include-файлы, выясняя, где там что конфликтует или отсутствует. Вы заодно освоите Perl, Python, bash и синтаксис makefile, т.к. половина проектов при сборке умудряется юзать их все одновременно.
И, конечно, каждая неудачная итерация сборки будет отнимать несколько часов (в лучшем случае) времени. Такое ощущение, что всё это специально придумывали, чтоб проект не мог собрать никто кроме создателя.
А в Delphi красота: F9, и всё тут же работает. Даже очень крупные проекты больше 10 сек. не собираются, а простенькие программки до 20к строк вообще стартуют мгновенно.

суббота, 15 августа 2015 г.

Удаление лишнего в Raspbian

Удаление лишних пакетов

apt-get remove --purge wolfram-engine anacron logrotate minecraft-pi python-minecraftpi idle python3-pygame python-pygame python-tk idle3 python3-tk python3-rpi.gpio python-serial python3-serial python-picamera python3-picamera debian-reference-en pistore sonic-pi python3-numpy python3-pifacecommon python3-pifacedigitalio python3-pifacedigital-scratch-handler python-pifacecommon python-pifacedigitalio oracle-java8-jdk omxplayer scratch nuscratch timidity smartsim penguinspuzzle dillo x2x

среда, 12 августа 2015 г.

Проверка температуры процессора Raspberry Pi 2B

У меня периодически подвисал RPi, поэтому был найден скрипт вывода в консоль температуры CPU и GPU.
#!/bin/bash
cpuTemp0=$(cat /sys/class/thermal/thermal_zone0/temp) cpuTemp1=$(($cpuTemp0/1000)) cpuTemp2=$(($cpuTemp0/100)) cpuTempM=$(($cpuTemp2 % $cpuTemp1)) echo CPU temp"="$cpuTemp1"."$cpuTempM"'C" echo GPU $(/opt/vc/bin/vcgencmd measure_temp)
Сохраняю скрипт как temperature.sh и запускаю на вывод в консоль раз в секунду:
watch -n 1 ./temperature.sh

воскресенье, 9 августа 2015 г.

Компиляция Qt5 на Raspberry Pi 2

Размещение SWAP файла на внешнем носителе (USB HDD)

Делаю по инструкции https://wiki.qt.io/Native_Build_of_Qt_5.4.1_on_a_Raspberry_Pi

# disable and remove swap file 
sudo dphys-swapfile swapoff 
sudo dphys-swapfile uninstall 
# edit /etc/dphys-swapfile to read 
# #CONF_SWAPSIZE=100 
# CONF_SWAPFILE=/media/usb/swap 
# create and enable new swap file 
sudo dphys-swapfile setup 
sudo dphys-swapfile swapon 
# if you get:
# swapon: /media/usb/swap: read swap header failed: Invalid argument 
# reboot and rerun: 
# sudo mount /dev/sdXX /media/usb 
# sudo mount --bind /media/usb/build/qt-everywhere-opensource-src-5.4.1 /home/pi/opt/qt-everywhere-opensource-src-5.4.1 
# cd ~/opt/qt-everywhere-opensource-src-5.4.1 
# check that a ~2GB swap file is active now 
cat /proc/swaps
Но не выходит. Постоянно /media/usb/swap: read swap header failed: Invalid argument

Решение https://www.raspberrypi.org/forums/viewtopic.php?f=50&t=28384
sudo dd if=/dev/zero of=/media/usb/swap count=2048 bs=1MiB
sudo mkswap /media/usb/swap
sudo dphys-swapfile swapon

Исходники Qt5

Обязательно: скачивать и распаковывать надо не .zip-архив с исходниками Qt, а .tgz.
В зипе все файлы лежат с виндовыми концами строк (что характерно, даже юниксовые скрипты сконвертированы почему-то), в таргазипе — все файлы лежат с юниксовыми концами строк.

Устанавливаю компилятор GCC 4.9

sudo apt-get update
sudo apt-get upgrade
Next, open /etc/apt/sources.list in your favorite text editor and replace wheezy with jessie:
sudo nano /etc/apt/sources.list
Update your package list:
sudo apt-get update
and, finally, install GCC 4.9
sudo apt-get install gcc-4.9 g++-4.9
Last step is to revert back from Jessie to Wheezy, open /etc/apt/sources.list and replace jessie withwheezy, after that do an update of your package list:
sudo vim /etc/apt/sources.list
sudo apt-get update
Меняю версию GCC на версию 4.9
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 10
Убеждаюсь, что GCC версии 4.9
gcc --verbose --version

Настраиваю

Собираю qmake
./configure -v -opengl es2 -tslib -force-pkg-config -device linux-rasp-pi-g++ -device-option CROSS_COMPILE=/usr/bin/ -opensource -confirm-license -optimized-qmake -reduce-exports -release -qt-pcre -make libs -make tools -nomake examples -prefix /media/usb/qt5 2>&1 | tee config.out
-reduce-exports можно убрать, если ругается на него.

Дальше по инструкции.

суббота, 8 августа 2015 г.

Продление жизни SD карты на Raspberry Pi

1. Взять карту большего размера, чем нужно системе - 8 или 16 GB 3. Форматировать SD карту в Ext2 файловую систему
5. Разбираемся с логгированием 5.1 Вариант с заменой rsyslog на busybox-syslogd
apt-get install busybox-syslogd 
dpkg --purge rsyslog
This will put log into circular memory buffer, you will able to see log using logread command. 5.2 Вариант с переносом /var/log (куда пишутся логи) на раздел, смонтированный в ОЗУ. 6. Разбираемся с SWAP 6.1 Отключаем SWAP Модифицируем файл /boot/cmdline.txt - в конец строки добавляем noswap.dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait noswap



6.2 Не отключаем SWAP, а устанавливаем модуль zram (сжатие файла подкачки и размещение его в RAM).

четверг, 6 августа 2015 г.

Простые задачи на собеседование


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

    count(str, char1, char2);