Смс рассылка на старой nokia

Нам для метро-информера нужно отправлять большое количество смс за короткое время. И причем, не дорого. А то всетаки на 1000 человек по 2 смс сильно жирно. По 2, потому что в 1 текст твита как правило не влезает. С теми ценами, с которыми начинали выходило по 1.5 рубля за смс. Не хитрыми вычислениями получаем 6000 рублей за 1 массовое оповещение. Но к счастью, у нас тогда еще не было 1000 юзеров.

Цветной консольный

У меня SSD на 250 гб и постоянно проверять сколько же у меня свободного места мне лень. А еще мне не нравится простой смерный dmesg, ну и так, по мелочам.

Каждый раз открывая консоль, я хочу видеть, что интересного у меня в системе. А именно: загруженность cpu, использование памяти, свободное место на диске, ошибки из dmesg.

Начнем с правки dmesg. Хочу время в цивильном формате и раскраску. На просторах интернетов нашла скриптик на перле и чуть поправила:


#!/usr/bin/perl -w
use Term::ANSIColor;
use strict;
my @dmesg_new = ();
my $dmesg = "/bin/dmesg";
my @dmesg_old = `$dmesg`;
my $now = time();
my $uptime = `cat /proc/uptime | cut -d"." -f1`;
my $t_now = $now - $uptime;
sub format_time {
my @time = localtime $_[0];
$time[4]+=1;
$time[5]+=1900;
return sprintf colored( sprintf('%4i-%02i-%02i %02i:%02i:%02i', @time[reverse 0..5]), 'white' );
#return sprintf '%4i-%02i-%02i %02i:%02i:%02i', @time[reverse 0..5]; no color
}
foreach my $line ( @dmesg_old )
{
chomp( $line );
if( $line =~ m/\[\s*(\d+)\.(\d+)\](.*)/i )
{
# now - uptime + sekunden
my $t_time = format_time( $t_now + $1 );
push( @dmesg_new , "[$t_time] $3" );
}
}
print join( "\n", @dmesg_new );
print "\n";

Я его положила в /etc/scripts/

Теперь редактировать .bashrc. Вписала строку
alias dmesg="/etc/scripts/dmesg_time.pl"

А теперь информер


cat /etc/profile.d/login.sh

#!/bin/bash
uptime | awk -F, '{print "\033[1;37muptime\033[0m" $1}'
ps aux | awk '{s += $3} END {print "\033[1;37mcpu\033[0m " s "%"}'
ps aux | awk '{s += $4} END {print "\033[1;37mmem \033[0m" s "%"}'
df | grep -E "/$" | awk '{print "\033[1;37muse / \033[0m" $5}'
df | grep -E "/home$" | awk '{print "\033[1;37muse /home \033[0m" $5}'
df | grep -E "/home$" | awk '{print "\033[1;31mfree /home \033[0m" $4}'
df | grep -E "/$" | awk '{print "\033[1;31mfree / \033[0m" $4}'
echo -e "\033[1;37mprocess: \033[0m " `ps aux | wc -l`
echo -e "dmesg error \n `/etc/scripts/dmesg_time.pl | grep -i error | tail -10` "

зы. Когда-нибудь я заведу гитхаб.

Eclipse, Fedora и SIGSEGV

Не так давно я переехала на Fedora 20 x64 и попыталась установить Android SDK.

Распаковала архив, запустила adt-bundle-linux-x86_64-20140702/eclipse/eclipse. На первый взгляд всё ок и можно кодить. Но спустя некоторое время эклипс вылетает вот с такой ошибкой:

Error creating proxy: Соединение закрыто (g-io-error-quark, 18)
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x0000003774a70061, pid=2378, tid=140679359919872
#
# JRE version: OpenJDK Runtime Environment (7.0_71-b14) (build 1.7.0_71-mockbuild_2014_10_15_17_02-b00)
# Java VM: OpenJDK 64-Bit Server VM (24.65-b04 mixed mode linux-amd64 compressed oops)
# Derivative: IcedTea 2.5.3
# Distribution: Built on Fedora release 20 (Heisenbug) (Wed Oct 15 17:02:58 UTC 2014)
# Problematic frame:
# C [libsoup-2.4.so.1+0x70061] soup_session_feature_detach+0x11
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# /tmp/jvm-2378/hs_error.log
#
# If you would like to submit a bug report, please include
# instructions on how to reproduce the bug and visit:
# http://icedtea.classpath.org/bugzilla
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

После поисков в гугле узнала, что это бага в самом эклипсе(v4.2.1) и решение — более новые версии.

Установила с реп новую версию(v4.3.2). Затем по инструкции все с тогоже гугла добавила ADT и прописала путь к SDK.

Если вам повезло так же, как и мне — ставьте руками новый эклипс.

Симулятор роботов Player/Stage

Года полтора назад я работала в вузе лаборантом на кафедре. А на кафедре занимались разработкой роботов. И дали мне задание разобраться с симулятором Player/Stage, а именно перевести ман, сделать тестовую прожку ну и ман по установке.
И работает это только на линуксах.

Собственно про эту хреновину.

Player/Stage — это инструментарий моделирования робота, состоящий из одной программы —
Player, представляющей собой уровень абстрактных аппаратных средств. Это означает, что
он взаимодействует с элементами оборудования робота (такими как щуп или камера) и
позволяет управлять ими с помощью программного кода, то есть вам не нужно беспокоиться
о порядке работы различных элементов робота. Stage представляет собой плагин для Player,
который воспринимает команды и транслирует их в инструкции для выполнения роботом.
Player также моделирует датчики робота и передает их Stage, который делает данные с
датчика доступными в коде.

Все это было сделано, ожидала когда мне дадут проектную группу чтобы коллективно совершить большой запил.. но вуз такой вуз и в итоге проект был отложен на завтра.. через неделю.. потом. Ну и вот года полтора он никому не надо. Удалить жалко и никому не нужен. Может тут кому-то понадобиться 🙂

Рекомендую юзать или Fedora или Gentoo у них эта тулза из коробки. А вот с той же Ubuntu ужасные пляски с бубном.

В мане ссылки с моего бложека не валид. Юзаем эти

Переведенный ман
Ман в подлиннике
Ман по установке

Костыль II

В прошлый раз был зопил ради зарядки телефона. Кто не читал, не помнит смотрим тут.

А теперь об нынешнем зопиле. Дело было так. Задарил мне вуз Ipad mini за олимпиаду, но он не хотел заряжаться от лаптопа с linux. Ну вообще никак не хотел. dmesg ругался, матерился как-то вот так:

[1402816.444635] ipheth 3-1:4.2: Apple iPhone USB Ethernet device attached
[1402818.238639] IPv6: ADDRCONF(NETDEV_UP): eth1: link is not ready

Сначала я пыталась сделать по нормальному. Честно и долго пыталась, но хрен. Оригинальный кабель мне было почему-то жалко. А вот провод за 200 рублей из Ашана мне ничуть не жалко. И я решила его вскрыть и замкнуть data проводки. В прочем все как и в тот раз. Только провод теперь белый и черной изолентой. А вот кстати чем он отличается от оригинального, кроме того, что китайский, так это пожалуй материалом из которого сделан экран. У китайского он из фольги (кто бы сомневался), а вот у оригинального какоето плетение из маленьких жилок. К большой удаче цвет проводов был по стандарту.

А теперь фотачки


DSC_0451


DSC_0453

Видеонаблюдение своими руками часть 4

Обычно под этим заголовком рассказ про новую железку, но в этот раз я расскажу про программную часть своего видеонаблюдения.

Имеем 2 вебки, подключенные в нетбуку. Ось fedora 16 с xfce. ОЗУ мало — всего 1 гб, но этого оказалось более чем достаточно. Лаптоп вещает видео с камер в локалку, а записи с них льются в облако. В итоге просмотр записей возможен из любого места, где есть интернет. Почти в прямом эфире — задержка в пару минут тут не имеет значения.

Вещает в сеть при помощи motion. (Камеры имеют микрофон, но что-то мне лениво настроить запись звука)
У меня под каждую камеру по папке. Конфиги почти одинаковые, путь к папкам и девайсы, разумеется разные. Конфиг вбрасывать не буду, там ничего необычного. А лишить удовольствия прочтения мана своих читателей я не в силах. По webdav все кино сливается в облако к Яндексу.

Установка motion просто и очевидно.

Рерайтом и пересказом заниматься не буду, читайте с хабра о webdav. Encfs для сий поделия совсем не обязательно, но тут появляется возможность спокойно хранить бекапы или что-то там еще и не параноить.

При необходимости повторить на всех девайсах где это требуется. На телефон ставим Яндекс диск. Так, с трансляцией и доступом к файлам разобрались. Теперь о структуризации.

#!/bin/bash
date=`date +"%d.%m.%y"`
mkdir -p /home/irenica/YaDisk/motion/backup; tar -cjvf /home/irenica/YaDisk/motion/backup/$date.gen.tar.bz2 /home/irenica/YaDisk/motion/gen/*
mkdir -p /home/irenica/YaDisk/motion/backup; tar -cjvf /home/irenica/YaDisk/motion/backup/$date.lift.tar.bz2 /home/irenica/YaDisk/motion/lift/*
rm -f /home/irenica/YaDisk/motion/gen/* /home/irenica/YaDisk/motion/lift/*

Запускаю от рута, ибо motion работает от рута.

Ну и в крон

45 23 * * * /home/irenica/move.sh

Увеличение времени работы linux от батареи

Купила себе новый лаптоп ThinkPad T-430. Обещали 16ч работы от батареи, но держал он только 4 и то, если яркость на минимум. При этом ос была Ubuntu 12.04. Батарейка в нем на 7700 мАч, и она явно должна держать больше чем 4 часа…
Погуглив была обнаружена tlp. Вкратце, это такая штука, которая рулит железом и можно удобно и главное быстро настроить, увеличив время работы от батареи.
После время работы от батарейки стало как минимум 9 часов, на максимальной яркости. В ноль разрядить не успела. После 3 часов работы на максимальной яркости, с запущенной виртуалкой и wifi осталось ~70% и вангамод вещал, что еще 6.5 часов можем жить ни о чем не беспокоясь. На минимальной не тестировала.
Запускать sudo tlp start
Можно еще посмотреть tlp —help и man tlp
Вот мой конфиг

root@irenica-ThinkPad-T430:/home/irenica# cat /etc/default/tlp
# ------------------------------------------------------------------------------
# tlp - Parameters for power save
# Hint: some features are disabled by default, remove the leading # to enable them
# Set to 0 to disable/1 to enable TLP
TLP_ENABLE=1
# Seconds laptop mode has to to wait after the disk goes idle before doing a sync.
# Non-zero value enables, zero disables laptop mode.
DISK_IDLE_SECS_ON_AC=0
DISK_IDLE_SECS_ON_BAT=2
# Dirty page values (timeouts in secs).
MAX_LOST_WORK_SECS_ON_AC=15
MAX_LOST_WORK_SECS_ON_BAT=60
# Select a cpu frequency scaling governor: ondemand/powersave/performance/conservative
# Important:
# - You *must* disable your distribution's governor settings or conflicts will occur
# - ondemand is sufficient for *almost all* workloads, you should know what you're doing!
CPU_SCALING_GOVERNOR_ON_AC=ondemand
CPU_SCALING_GOVERNOR_ON_BAT=powersave
# Set the min/max frequency available for the scaling governor.
# Possible values strongly depend on your cpu. For available frequencies see
# tlp-stat output, Section "+++ Processor".
# Hint: Parameters are disabled by default, remove the leading # to enable them,
# otherwise kernel default values are used.
#CPU_SCALING_MIN_FREQ_ON_AC=0
#CPU_SCALING_MAX_FREQ_ON_AC=0
#CPU_SCALING_MIN_FREQ_ON_BAT=0
#CPU_SCALING_MAX_FREQ_ON_BAT=0
# Set the cpu "turbo boost" feature: 0=disable / 1=allow
# Requires an Intel Core i processor and kernel 3.7 or later.
# Important:
# - This may conflict with your distribution's governor settings
# - A value of 1 does *not* activate boosting, it just allows it
CPU_BOOST_ON_AC=1
CPU_BOOST_ON_BAT=0
# Minimize number of used cpu cores/hyper-threads under light load conditions
SCHED_POWERSAVE_ON_AC=0
SCHED_POWERSAVE_ON_BAT=1
# Kernel NMI Watchdog
# 0=disable (default, saves power) / 1=enable (for kernel debugging only)
NMI_WATCHDOG=0
# Change CPU voltages aka "undervolting" - Kernel with PHC patch required
# Freq:voltage pairs are written to /sys/devices/system/cpu/cpu0/cpufreq/phc_controls
# CAUTION: only use this, if you thoroughly understand what you are doing!
#PHC_CONTROLS="F:V F:V F:V F:V"
# Hard disk devices, separate multiple devices with spaces (default: sda).
# Devices can be specified by disk id too (lookup with: tlp diskid).
DISK_DEVICES="sda sdb"
# Hard disk advanced power management level: 1(max saving)..254(off)
# Levels 1..127 may spin down the disk.
# Separate values for multiple devices with spaces.
DISK_APM_LEVEL_ON_AC="254 254"
DISK_APM_LEVEL_ON_BAT="128 128"
# Hard disk spin down timeout:
# 0: spin down disabled
# 1..240: timeouts from 5s to 20min (in units of 5s)
# 241..251: timeouts from 30min to 5.5 hours (in units of 30min)
# (see 'man hdparm' for details)
#DISK_SPINDOWN_TIMEOUT_ON_AC="0 0"
#DISK_SPINDOWN_TIMEOUT_ON_BAT="0 0"
# Select io scheduler for the disk devices: noop/deadline/cfq (Default: cfq)
# Separate values for multiple devices with spaces.
#DISK_IOSCHED="cfq cfq"
# SATA aggressive link power management (ALPM):
# min_power/medium_power/max_performance
SATA_LINKPWR_ON_AC=max_performance
SATA_LINKPWR_ON_BAT=min_power
# PCI Express Active State Power Management (PCIe ASPM):
# default/performance/powersave
# Hint: needs kernel boot option pcie_aspm=force on some machines
PCIE_ASPM_ON_AC=performance
PCIE_ASPM_ON_BAT=powersave
# Radeon graphics clock speed (profile method): low/mid/high/auto/default
# auto = mid on BAT, high on AC; default = use hardware defaults
# (Kernel >= 2.6.35 only, not with fglrx driver!)
RADEON_POWER_PROFILE_ON_AC=high
RADEON_POWER_PROFILE_ON_BAT=low
# New radeon dynamic power management method (dpm): battery/performance
# (Kernel >= 3.11 only, requires boot option radeon.dpm=1)
RADEON_DPM_STATE_ON_AC=performance
RADEON_DPM_STATE_ON_BAT=battery
# New radeon dpm performance level: auto/low/high (auto is recommended)
RADEON_DPM_PERF_LEVEL_ON_AC=auto
RADEON_DPM_PERF_LEVEL_ON_BAT=auto
# WiFi power saving mode: 1=disable/5=enable
# (Linux 2.6.32 and later, some adapters only!)
WIFI_PWR_ON_AC=1
WIFI_PWR_ON_BAT=5
# Disable wake on lan: Y/N
WOL_DISABLE=Y
# Enable audio power saving for Intel HDA, AC97 devices (timeout in secs).
# A value of 0 disables / >=1 enables power save.
SOUND_POWER_SAVE=1
# Disable controller too (HDA only): Y/N
SOUND_POWER_SAVE_CONTROLLER=Y
# Set to 1 to power off optical drive in UltraBay (ThinkPads only)
# when running on battery. A value of 0 disables this Feature (Default).
# Drive can be powered on again by releasing (and reinserting) the
# eject lever or by pressing the disc eject button on newer models.
# Note: an UltraBay hard disk is never powered off.
BAY_POWEROFF_ON_BAT=1
# Optical drive device to power off (default sr0)
BAY_DEVICE="sr0"
# Runtime Power Management for pci(e) bus devices
# (Kernel >= 2.6.35 only): on=disable/auto=enable
RUNTIME_PM_ON_AC=on
RUNTIME_PM_ON_BAT=auto
# Runtime PM for *all* pci(e) bus devices, expect backlisted ones:
# 0=disable / 1=enable
# Warning: experimental option, could cause system instabilities
RUNTIME_PM_ALL=0
# Exclude pci(e) device adresses the following list from Runtime PM
# (separate with spaces). Use lspci to get the adresses (1st column).
#RUNTIME_PM_BLACKLIST="bb:dd.f 11:22.3 44:55.6"
# Set to 0 to disable/1 to enable usb autosuspend feature
USB_AUTOSUSPEND=1
# Devices from the following list are excluded from usb autosuspend
# (separate with spaces). Use lsusb to get the ids.
# Note: input devices (usbhid) are excluded automatically
#USB_BLACKLIST="1111:2222 3333:4444"
# WWAN devices are excluded from usb autosuspend:
# 0=do not exclude / 1=exclude
# Note: works for ids 05c6:* 0bdb:* 1199:* only
USB_BLACKLIST_WWAN=1
# Set to 1 to disable autosuspend before shutdown/0 to do nothing
# (workaround for usb devices that cause shutdown problems)
#USB_AUTOSUSPEND_DISABLE_ON_SHUTDOWN=1
# Restore radio device state (bluetooth, wifi, wwan) from previous shutdown
# on system startup: 0=disable/1=enable
# Hint: the parameters DEVICES_TO_DISABLE/ENABLE_ON_STARTUP/SHUTDOWN below
# are ignored when this is enabled!
RESTORE_DEVICE_STATE_ON_STARTUP=0
# Radio devices to disable on startup: bluetooth wifi wwan
DEVICES_TO_DISABLE_ON_STARTUP="bluetooth"
# Radio devices to enable on startup: bluetooth wifi wwan
#DEVICES_TO_ENABLE_ON_STARTUP="wifi"
# Radio devices to disable on shutdown: bluetooth wifi wwan
# (workaround for devices that are blocking shutdown)
#DEVICES_TO_DISABLE_ON_SHUTDOWN="bluetooth wifi wwan"
# Radio devices to enable on shutdown: bluetooth wifi wwan
# (to prevent other operating systems from missing radios)
#DEVICES_TO_ENABLE_ON_SHUTDOWN="wwan"
# Radio devices to enable when wireless radio switch is turned on:
# bluetooth wifi wwan (Ubuntu + ThinkPad only)
DEVICES_TO_ENABLE_ON_RADIOSW="wifi wwan"
# Battery charge thresholds (ThinkPad only, tp-smapi or acpi-call kernel module required)
# Charging starts when the remaining capacity falls below the START_CHARGE_TRESH
# value and stops when exceeding the STOP_CHARGE_TRESH value.
# Main battery (values in %)
START_CHARGE_THRESH_BAT0=75
STOP_CHARGE_THRESH_BAT0=80
# Ultrabay or slice battery (values in %)
#START_CHARGE_THRESH_BAT1=75
#STOP_CHARGE_THRESH_BAT1=80
# Set to 1 to disable use of tpacpi-bat on Sandy Bridge or newer Thinkpads
# and force usage of tp-smapi instead
DISABLE_TPACPIBAT=1
# ------------------------------------------------------------------------------
# tlp-rdw - Parameters for the radio device wizard
# Possible devices: bluetooth/wifi/wwan
# Hint: parameters are disabled by default, remove the leading # to enable them
# Radio devices to disable on connect
#DEVICES_TO_DISABLE_ON_LAN_CONNECT="wifi wwan"
#DEVICES_TO_DISABLE_ON_WIFI_CONNECT="wwan"
#DEVICES_TO_DISABLE_ON_WWAN_CONNECT="wifi"
# Radio devices to enable on disconnect
#DEVICES_TO_ENABLE_ON_LAN_DISCONNECT="wifi wwan"
#DEVICES_TO_ENABLE_ON_WIFI_DISCONNECT=""
#DEVICES_TO_ENABLE_ON_WWAN_DISCONNECT=""
# Radio devices to enable/disable when docked
#DEVICES_TO_ENABLE_ON_DOCK=""
#DEVICES_TO_DISABLE_ON_DOCK=""
# Radio devices to enable/disable when undocked
#DEVICES_TO_ENABLE_ON_UNDOCK="wifi"
#DEVICES_TO_DISABLE_ON_UNDOCK=""

Видеонаблюдение своими руками

Цель для видеонаблюдения может быть совершенно разной, кто-то за детьми, кто-то за соседями и т.д.
Я решила запилить камеру над дверью и наблюдать кто пришел — весьма удобно, не надо вставать, чтобы посмотреть.

Для этого мне понадобилось: цать метров витухи, 2 usb разъема, паяльник, короб для проводов, изолента, двойной скотч, клей, шуруповерт, лаптоп, вебка (logitech c510).

Из витухи был сделан удлинитель, такие поделки запрещены всеми стандартами.
Фото разъема, на втором провода должны быть припаяны аналогично.
_DSC0177

Фото удлинителя

_DSC0178

_DSC0182

Далее при помощи шуроповерта было просверлено отверстие для обьектива в коробе для проводов. Затем при помощи двойного скотча и изоленты камера была приклеена внутрь короба, еще ее пришлось залить клеем и перемотать изолентой.

_DSC0342

_DSC0343

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

На лаптопе стоит XUbuntu 12.04 и motion.
Motion нам нужно для записи и просмотра видео онлайн. Редактировать конфиг /etc/motion/motion.conf
Запускать от рута motion -c /etc/motion/motion.conf
В итоге, кроме записи видео, можно смотреть через браузер 127.0.0.1:8081 это по дефолту. Можно в сеть вещать.

Пример записи.

Эта поделка еще будет совершенствоваться.

утилитки и не только

objdump — дизассемблер
dig — dns
irb — ruby
fping — пингануть все хосты в сети
svn add from; ./ac commit -m «comment» to
file file_name узнать тип файла
strip срезать дебаг инфу из бинарника

ruby
File.open(‘file.txt’, ‘a’){ |file| file.puts string } запись в файл

make flash

будет пополняться

cmake параметры

В этот раз я займусь пересказом мана, ибо мне так удобнее.

-DCMAKE_TOOLCHAIN_FILE=../CMAKE/CMSIS.cmake

файл с правилами для компиляции

-DMCU=модель чипа

-DBSP_BRD_DEF=имя платы

-DLINKAGE=FLASH / RAM /ONE_SECT

это совсем кэп. но пусть будет
-DCMAKE_BUILD_TYPE=Debug
-DCMAKE_BUILD_TYPE=Release

-DCOMMON_FLAGS=-Os
оптимизация

Указатель стека устанавливается на конец памяти чипа.

Переменная STARTAP_INIT_STACK_FILE_H – указывает на файл с настройками размеров стеков, по умолчанию используется startup_lpc_stack_generic.h.in
-DAVOID_LINKER_SECTIONS=1

будет дополняться