Живи сме :)

July 20th, 2016

Вероятно стигахте до тук през С раница без граница и очаквахте да намерите гробище със стари постове. Изненада 🙂 Void and Null ще продължава да живее, докато е жива и моята простотия. Вероятно ще се ъпдейтва далече по-рядко от травъл блога и няма да си има лъскава Facebook страница с притурки. Няма да има и прилежащ спам, и за това тези секции тук ще останат само за ценителите 🙂

Беше добра година

January 3rd, 2015

Голяма година беше, наситена с приятни емоции и покорени върхове във всяка област на живота. Толкова много вълнения имаше, че чак ме е срам да направя списък. Един списък предполага че мога да ги степенувам по по-по-най, а действителността е че всичките спомени и постижения са ми скъпи.

Все пак самохвалството трябва да почне от някъде, та ето – пробягах 2 километра! Преди години в средното училище покривахме нормативи по физическо и бягането на 600 метра го завършвах пълзейки и повръщайки. А ето, тази година си поставих за цел да излизам поне 2 пъти седмично и малко по малко всеки днешен абсолютен лимит се превръщаше в утрешния норматив.

Започнах да си готвя супички. До скоро за мен кухнята беше *тера инкогнита*, а вече кълцам зеленчуци и слагам тенджерата на котлона. Не се получава нещо кой знае какво, но удовлетворението от това да хвърлиш малко труд в храната си е голямо.

Позавъртях се покрай климатика в квартирата и му направих онлайн дистанционно с жив видео поток и дистанционно за андроид с Bluetooth. Видео с демонстрация и глупости – тук.

През цялата година направихме няколко пътувания с приятели, всяко от които лесно може да се опише с “беше уникално – закриваме годината!” 🙂

Оженихме половината фирма – Диди и Митко, Гери и Павел. След това Невена я напънаха пророчески сънища и за моята сватба, но за целта първо трябва да се появят кандидатки 🙂

Юни месец с Димо направихме 5-дневна екскурзия до Рим. За първи път летях и останах очарован. Много впечатления ми останаха и сега като гледам дори съм изписал 6 поста в блога 🙂

Най-после си взех нормална раница. Онзи ден скъсах и първите си нормални обувки, но съм им навъртял над 200 км, така че – доволен съм. Взех си също и още доста благи неща, но няма да правя инвентарен списък сега 🙂

Август и септември се направиха доста къмпинги, къде с нощни разходки, къде с други интересни благини. Дръпнахме една разходка до Мальовица и една покъртителна 30-километрова обиколка на Балкана.

След това се бях приготвил да закривам годината, но съвсем скоро се откриха планове за разходка около Широка Поляна. Имаше фото-оргазми, а разходката с уазка до Орлово Око си беше приключение!

Последните седмици от годината бяха мъгливи и дъждовни и това ми развали плановете за наблюдение на големите метеорни потоци есента. За сметка на това Геминидите ме изненадаха с идеални условия за наблюдение и снимки и резултатите надминаха очакванията ми.

Измежду 10-те хиляди изщракани кадъра ми е трудно да избера десетина снимки които са били голяма емоция за мен, но да пробвам.

IMG_4466

Това не са катакомбите в Рим или някой музей на Холокоста. Това е част от българската история и близко минало. Никой не трябва да забравя клането в Батак.

IMG_4855_6_7_tonemapped

Трявна и къщите-музеи

IMG_5093

Балканът смръщва вежди над Аневското кале

IMG_5655_6_7_tonemapped

Тук имаше няколко дни надхитряне с дъжда и игра на гоненица, която завърши с красиви гледки към Пловдив

IMG_6384_5_6_tonemapped

Толкова търсех макове, а те всичките се били скрили до Червената църква в Перущица

IMG_7419

Тази година доста пъти ходихме до Сливодолското падало, всеки път имаше нови емоции.

IMG_7735

Памучни облачета над язовир Пясъчник

IMG_8616

Селфи на Колизеума, където ни чука гръмотевична буря със светкавици, сипещи се на броени метри от нас

IMG_9340

Още селфита на Копринка, докато гръмотевиците се изсипват зад гърба ни

IMG_0527

Част от двудневния пешеходен мазохизъм в Балкана

IMG_0725

Първия допир с Рила, който ме очарова с много неща: циркусните долини, лазенето по морените, напомпаните от налягането кроасани 🙂

IMG_1152

Безценното чувство да се събудиш с тази гледка! Язовир Широка Поляна.

IMG_2220

Първия сняг за сезона се случи отново до Мальовица, където го комбинирахме с отровно-горещи минерални извори 🙂

IMG_2928_29_30_tonemapped

Леко инцидентна разходка над язовир Въча ме хвана с перфектното време на Бековите скали.

cropped-1

Една лятна буря напълни с електричество Стара Загора

Записване на онлайн радио

April 3rd, 2014

От известно време слушам Eurodance канала на Digitally Imported. Отвреме навреме пускат уникални миксове, които не могат да бъдат намерени никъде из нета. За това се захванах и написах едно кратко скриптче за да ги рипна.

Радиото излъчва ICY таг, който съдържа името на песента. По този таг може да се разделят песните в общия стрийм, като единствения кусур е че идва с няколко секунди закъснение или предварение.

Използвах -dumpstream опцията на mplayer за записване на потока. Паралелно с това върви още един mplayer процес, който наблюдава за пристигането на ICY таг и пуска ново записване в нов файл. Скрипта създава нова директория за всеки ден, като песните които запазва са с префикс на времето в което са излъчени.

  1. #!/bin/bash
  2.  
  3. # задаваме някой директории и файлове
  4. FIFO=/tmp/mplayer_recording
  5. OUT_DIR=/home/ivanatora/di.fm
  6.  
  7. LAST_PID=0
  8. LAST_SONG=""
  9.  
  10. if [ ! -e "$FIFO" ]
  11. then
  12.     mkfifo $FIFO
  13. fi
  14.  
  15. # това е процесът, който следи таговете с имената на песните и ги изпраща в едно FIFO
  16. nohup mplayer -ao null http://pub3.di.fm:80/di_eurodance | stdbuf -o L grep ICY > /tmp/mplayer_recording &
  17.  
  18. # тук четем от FIFO-то и пускаме нов записващ процес при получаване на ICY таг
  19.  
  20. while read LINE < $FIFO; do
  21.     DATE=`date +%F`
  22.     if [ ! -d "$OUT_DIR/$DATE" ]
  23.     then
  24.         mkdir "$OUT_DIR/$DATE"
  25.     fi
  26.  
  27.     echo "—–"
  28.     echo $LINE
  29.     # името на песента е заградена в единични кавички
  30.     # @TODO: понякога в самото име има единични кавички – да се обмисли този случай
  31.     SONG=`echo $LINE | cut -d\‘ -f2 | sed -e ‘s/ /_/g‘`
  32.    echo "Last: $LAST_SONG"
  33.    echo "Current: $SONG"
  34.    # тук имам един бъг някъде – получавам таговете по два пъти. Това е workaround, който дава да се продължи само ако тагът който идва е различен от предния.
  35.    if [ "$SONG" != "$LAST_SONG" ]
  36.    then
  37.        TIME=`date +%T`
  38.        echo "##### $TIME"
  39.  
  40.        # ако вече имаме записващ процес – време е да го спрем и да пуснем нов
  41.  
  42.        if [ $LAST_PID -ne 0 ]
  43.        then
  44.            kill $LAST_PID
  45.        fi
  46.  
  47.        nohup mplayer http://pub3.di.fm:80/di_eurodance -dumpstream -dumpfile "$OUT_DIR/$DATE/$TIME"_"$SONG".mp3 &
  48.        LAST_PID=$!
  49.        LAST_SONG="$SONG"
  50.    fi
  51. done

Тук имам следние проблеми:
1) Таговете ми идват по два пъти.
2) Закъснението на таговете, което не е константа, която може да бъде уловена и компенсирана. На практика няколко секунди от началото на песента се записват в предния файл.
3) Предполагам че може да бъде оптимизирано и направено само с 1 mplayer процес.
4) Ако ми умре нета за секунда, mplayer-ите се прекратяват, което минава през фифото и цикъла `while read` заминава.

Някой bash-майстор може да се произнесе с идеи 🙂

Alpine mass delete messages

March 7th, 2014

You have new mail.

Почти не използвам локалната пощенска кутия. Всъщност единственото за което я ползвам е да следя за грешки по кроновете които работят на системата. Принципно целия STDOUT+STDERR бива изпращан по мейл на текущия потребител. STDOUT не ми трябва, понеже често си оставям някакви дебъгващи принтове тук-таме по скриптовете. За това си описвам задачите с >/dev/null. По този начин STDOUT се филтрира, и остава само STDERR. Ако искам да махна абсолютно целия изход от изпълнението правя >/dev/null 2>&1.

Ако нещо по кроновете видимо не работи, отварям пощата и чета. Обикновено я преглеждам през няколко седмици за да изтрия старите логове от крона. За това използвам alpine, понеже не ми се занимава с никакви тежки и сериозни GUI изпълнения като Thunderbird. Удобно е да се логна в ssh от където и да е и да изтараша пощенската кутия.

Днес alpine се стартира малко по-бавно и какво да гледам в пощенската кутия – 12 136 писма. Оказа се че съм написал доста тъпо един от кроновете:


*/5 * * * * cd /home/ivanatora/rilski_ezera; wget "http://www.rilskiezera.bg/meteo/rilskiezerahut.jpg" -O img_`date +\%Y-\%m-\%d_\%R`.jpg >/dev/null

Това сваля снимка от х. Рилски Езера на всеки 5 минути и по-късно си правя таймлапс със свалените изображения. Въпросът е защо така злобно ми е нафлудил пощата, при условие че STDOUT е филтриран?

Защото съм забравил че `wget` не принти съобщенията си в STDOUT, а вместо това в STDERR (факт)…

Както и да е – оправих крона, но сега проблема беше как да изчистя пощенската кутия с alpine. Обикновено трия пощата по следния начин – отивам върху първото писмо и задържам D. Това го маркира за изтриване (което ще се случи след затваряне на клиента) и преминава към следващото. Това минава през съобщенията едно след друго и нормално за няколко секунди изчиствам цялата кутия. Само че в случая с 12 хиляди писма това би ми отнело към 20 минути набиране върху D-то.

Поблъсках се малко и намерих процедурата за изтриване на всички съобщения:

1. В INBOX се натиска `;` за Select messages
2. Натиска се A за Select all.
3. Натиска се A за Apply command
4. Натиска се D за Delete

След това се излиза нормално от клиента с ^X и писмата се изтриват.

Джобна печка

January 16th, 2014

Взех си джобна печка. Гори бензин за запалки, развива доста голяма температура, но няма открит пламък и не е по-огнеопасна от GSM-а ви, примерно.

Реакцията на повечето ми приятели като им я показвам обикновено е “WTF е това”, а когато им я дам да се потоплят и изцъклят очите 🙂 И аз не знаех че съществуват такива неща, докато не прочетох в някакъв форум обява за продаване. Оказва се че тези грейки са доста популярни сред ловци и туристи и въобще хора, които прекарват време навън по студовете. По-възрастните, които са били войници преди години я познават под името “каталитична грейка” и е била стандартен артикул по руско време. Топлината не е достатъчно за да те стопли целия, но определено е две идеи повече от това да ти тракат зъбите. Печката има и други приложения. Слагаш си я на врата преди лягане и по тялото ти се разлива една приятна топлина като от горещ душ. Сецнах си кръста и топлината от печката на болното място беше голямо облекчение докато се оправи.

Само един бъг съм забелязал до сега. По документация (и по думите на десетки хора, които ползват такива неща), с едно зареждане трябва да гори поне 24 часа. Моята не караше и 3 часа. Вариантите бяха три – кофти печка (има имитации, които не са много успешни), повредена каталитична дюза или кофти бензин. Първия вариант го отписах, понеже си взех точно от този модел, който се препоръчваше по всички места. Втория вариант също бих го отписал – вярно че дюзата трябва да се гледа внимателно, но моята си беше практически нова и съм я ползвал само по инструкции. Взех си друг бензин, малко по скъп, за да тествам и третия вариант. И о, чудо – температурата се вдигна с много и времетраенето на горенето се увеличи над 12 часа. Не можах да повярвам че печицата е способна на такива неща и рекох да направя малко по-обективно сравнение между двете горива. Сложих ги при еднакви условия, свалих температурната крива във времето и статистиката потвърди това което усетих.

Тествах три вида гориво:
* бензин ZIPPO купуван от магазин “Всичко за левче” – цена 2 лв
* бензин ZIPPO купуван от магазин за цигари “Premium” от старозагорския мол – цена 6 лв
* бензин STAR купуван от магазин “Метал мания” в старозагорския универмаг – цена 4 лв

Поглед отпред

Поглед отзад

Всяко измерване извърших по един и същ начин – грейката се напълва с един дозатор (до второто деление), запалва се и се оставя легнала на масата. За нея се прикрепя температурния сензор, пъха се във фабричното калъфче и повече не се пипа. Температурния сензор е DS18B20 – цифров, фабрично калибриран, с грешка от 0.5 C. Чете го Arduino Uno, свързано към компютъра, който записва показанията на всеки 15 секунди. Температурата на околната среда е 23 C. Замерванията са от момента на запалване на грейката, до момента в който температурата и се връща обратно до 23 С след изгасването ѝ.

Общ вид на опитната постановка

Близък изглед на грейката

Грейката във финална конфигурация с калъфче

Суров Excel с резултатите: readings_benzini_v2

Обобщена графика

На графиката се набива че синята линия почва малко по-горе от червената. Това се получи така, понеже изпуснах първите няколко измервания от евтиния бензин. Иначе и трите опита се извършиха при еднаква стайна температура.
* Евтиния гори малко, с ниска температура, достига пика рязко. Имам чувството че съотношението пари-въздух не му е както трябва. Вижда се че накрая когато парите намаляват температурата рязко се покачва.
* Скъпия определено гори най-много време, най-стабилно и с по-висока температура. Плавно достига максимума.
* STAR бензина гори с най-висока температура – рекордьор е със 70 градуса. Изгасва около 2 часа преди скъпия и като че ли не гори толкова равномерно.