Умна шамандура, част 1

a.k.a. “инж.”, part deux

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

Първият draft на това е от втори януари 🙂

Ghetto-ass шамандура
“Шамандурата”, сглобена върху прототипна платка, две планки и няколко шпилки за закрепване на анемометъра, ветропоказателя, LoRa-та и GPS-а.

Ще я опиша тук, за да си припомням какви шарении съм правил преди да стана стар, циничен и (още по-) скучен. Записката излезе малко над 100 страници без задължителния пейстнат код. Освен многото приказки, има и 102 “фигури”, примери и таблици, солидна част от които си играх да рисувам.

Първоначалната идея беше следната – едно Arduino следи всички датчици и предава стойностите им безжично по LoRa радио. От другата страна да стои друг LoRa възел, който е свързан към PSoC 4 и приема данните. PSoC-ът ги предава по сериен порт към компютър, на който работи .NET-ско приложение, което ги обработва и ги тика в MS SQL баз от данни някъде. Визуализацията е с много форми, графики и т.н.

Проблемът с това е, че цялото нещо може да тръгне точно веднъж, защото има много зависимости от библиотеки, dll-и и т.н (това да се чете като “не ми се занимаваше с глупости”).

Тъй катo трябваше да напиша документацията и да направя всичко сравнително бързо, реших да не се затормозявам с излишно сложни неща и разделих работата на три части: “отдалечена станция” (a.k.a шамандура), наземна станция и уеб приложение.

Представено графично изглежда долу-горе така:

Шамандурата използва китайска имитация на Arduino Nano. Микроконтролерът е същият, но и ма малки разлики в пиновете. Когато паметта в един момент се запълни на 99%, контролерът спря да работи и да се разпознава от компютъра. Оказа се, че докато е в “bootloader” режим (или както се нарича, режимът, в който влиза, малко след като му се бутне Reset копчето), може да се програмира. Освен това се оказа, че Serial1.available() връща true, когато на серийния порт няма нищо. Дори когато RX пинът е с pull-down резистор. Благодарение на това се наложи да правя геройства като изчакване на някакви секунди време, когато си говоря с LoRa модула.

Така и не успях да подкарам GPS модула успешно, дори след като го изкарах на терасата и чаках 30 минути да търси сателити с неговия си софтуер. Хардкодването на NMEA данните, които очаквах, ми спести няколко байта и нещото заработи пак.

Тук е моментът да си призная как ме домързя да изградя LoRa мрежа само за едната дипломна работа. Добре, че модулите (RN2483) могат да работят като прости радиа. Цялата безжична комуникация се гради на две команди.
В изпращащата част:
mac pause\r\n
radio tx CAFEBABE\r\n

Където “CAFEBABE” е гениално построеният ми пакет от данни, разделени с точка и запетая, но представен като шестнадесетичните стойности на ASCII кодовете на всеки символ от низа.

Приемащата част прави това постоянно:
mac pause\r\n
radio rx 0\r\n
Втората команда отваря неограничен прозорец за приемане на данни и блокира модула, докато не дойде нещо.

Така изглежда LoRa модулът, след като го запоих с поялник, на който човката е дебела, колкото пин и половина.

Радвам се и, че нямах антени за радиата, защото иначе щеше да ми се наложи да вложа мисъл и да се боря със смущения, ако някой беше решил да предава произволни данни на 868 MHz. Вярно е, че щеше да ми е по-забавно да направя комуникацията с целия LoRa стек, но реших да не се хабя толкова. Някой ден ще си поиграя с истинското нещо, както трябва.

Като се замисля, че миналата година си играх да чертая схема на Proteus за това, ми става смешно.

В един момент мислех да сложа и LDR, за да следя видимостта и коя част от денонощието е в момента. (наблюдателните ще забележат, че някои букви имат фон, защото ме домързя да експортирам наново и трих фона, който слага Proteus, с GIMP)

Приемащата част на това беше изключително лесна – PSoC 4, който само праща команда за чакане към LoRa-та, приема, каквото дойде и го предава към компютъра. В PSoC Creator това изглежда като два UART блока и малко код за комуникация.

На компютъра работи .NET (C#, разбира се) приложение, което слуша на някой COM порт, обработва данните и ги хвърля към уеб приложението. Изглежда така:

Token-ът е md5 на “suck my dick”.

Първата версия се казваше “Shamandura Control Center” и използваше DevExpress. Имаше няколко екрана за управление на всичките данни, но не ми хареса колко много работа трябва да се свърши, за да изглежда добре и зарязах.

Най-забавната ми част от това е, че BackgroundWorker-а, който се грижи за серийната комуникация, има методи “worker_Suffer” и “worker_Whine”, съответно за DoWork и ProgressChanged. Голямата хитрост тук е, че използвам ProgressChanged метода, за да си пращам съобщения, които да вършат нещо в UI нишката. Това е, за да избегна всички красоти около делегатите и другите C# неща за достъпване на контрол от не-UI нишка.

Така нареченото уеб приложение е Symfony проект с няколко контролера, генерирани с app/console generate:doctrine:crud и един, който се грижи да приеме и обработи заявката от десктоп приложението. Бидейки почти арт директор, намерих готова bootstrap-ска тема и я орязах, докато заприлича на нещо.

След логин излиза това.

Скоро не си бях играл с Google Maps, затова след логин в системата се показва карта с всички шамандури и по тях може да се цъка. В страницата с “детайли” на шамандура има няколко графики и карта с история на местоположението.

Тук скрих sidebar-а.

Това е.

Смятам, че си заслужих шестиците. Заедно с мен шестиците си заслужиха и проекти, които работят само на хартия и такива, на които дизайнът включваше форми, подредени с <br/> и много &nbsp;, както и черен цвят на тъмнозелен фон. Всички сме инженери 🙂

От въпросите, които ми зададоха, ми беше интересен следния: “Добре, де, виждам, че сте използвали всякакви езици: C, C#, PHP, има сайт… Защо не го написахте цялото на C#?”. Това зададено с леко тъп, снизходителен тон.

Bullshit mode: ON.

Както писах, горе – мързел. Използвайки суперсилата ми за празни приказки, “мързел” се превърна в обяснение как няма смисъл да товаря компютрите на хората със зависимостите, които води със себе си сложния .NOT проект. Всички имат браузър => сайт.

Приключвам с училището след близо 18 години. Ако се пречупя, може да изкарам и PhD, но това е прекалено ниско в приоритетите ми засега.

return; return; и обратно към интересните неща.

Основни алгоритми и структури от данни

Преди известно време попаднах на тази интересна публикация, която води до въпрос в stackexchange и по-точно този отговор.

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

Сещам се как, когато се опитваха да ни преподават част от тези неща в университета, имаше хора, които твърдяха, че “това никой не го ползва”.
Може би, ако на “Добре де, това къде ще ми потрябва?” не отговаряха с “На изпита, колега”, някак повече щяха да се знаят тези неща и нямаше да ни се налага постоянно да гледаме неща достойни за награди от govnokod.ru (не че не съм произвеждал (и продължавам) ляйняни програми. Разликата е желанието за намаляване на лайняността).

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

barcodes

В сесия съм и се оказа, че трябва да уча за изпит, който си мислех, че съм освободил.
Та понеже имам да чета доста, реших да си напиша библиотека за генериране на баркодове. В момента не прави нищо особено – може да генерира само Code 128. Като се има предвид колко време отделих за това, не мисля, че е толкова зле.
Качих нещото в GitHub – цък.
Даже телефонът го разпознава.
Мисля като ми минат изпитите да си поиграя още и като свърша с 1D баркодовете, да мина на матрици и после QR.
След това мисля да го пренапиша на Java и да обуча някоя програма да ги разпознава.
Само да минат изпитите.

2013-04-24

В блок 18 на общежитията на ТУ-то има (имитация на) интернет, за който са нужни име и парола да се ползва. Дотук добре, обаче… Маймуните, които са го настройвали, са решили да ограничат достъпа на хората до някои неща (торенти например) и са сложили някакви правила на MikroTik-а, който пуска интернета. Пак добре, обаче тези правила не работят за хора с windows, т.е. те могат да си теглят и виждат всичко. И като реша аз да се закача, интернета веднага пада (i.e. “разлогва” се), защото умните настройки решават, че Linux-ът ми е нещо, което тегли торенти (или прави каквото там е забранено). Нямам торенти и не правя нищо, което би трябвало да е забранено в нормалния свят.
Long story short, написах си това и вече почти мога да ползвам интернет.
Почти, защото някои сайтове изобщо не се зареждат, а на други мога да видя само html-а. Ако имам късмет и са ми останали кеширани стиловете и скриптовете, почти мога да ползвам дадените сайтове.

Хубаво е, че не живея тук. Нямаше да имат секунда спокойствие, докато не го оправят.

Четене на SMS-ите от джажите за интернет на Vivacom

От известно време на лаптопа имам само мобилен интернет, за който ползвам USB модем от vivacom.
Джаджата е Huawei и под windows идва с шарена програма, от която може да се следи трафика, да се гледат SMS-ите и разни други неща. На картата в модема се праща SMS, когато свършат “бързите мегабайти” и когато излезе сметката.

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

От джаджата към компютъра постоянно летят статистики за изпратени/получени данни, скорост и др., които изглеждат долу-горе така:


^DSFLOWRPT:00000454,00000D36,00000092,00000000001912E8,000000000017E69A,00004000,00004000

^DSFLOWRPT:00000456,0000001A,0000004E,000000000019131C,000000000017E736,00004000,00004000
[...]

Нещото приема AT+C команди и за да върне SMS-ите, трябва да му се каже това:

AT+CMGF=1
АT+CSCS="UTF8"
AT+CMGL="ALL"

Първо го направих на python, но след това видях, че вече е правенo реших да го пренапиша на C++. По-голямата част си е чисто C, но заради работата с низовете се прежалих да ползвам и C++.
Long story short – нещото го има в github – https://github.com/chilyashev/smsread

Пробвано е с Huawei E173 и не е давало дефекти. Само веднъж се случи да хвърли SIGSEGV, малко след като вкарах устройството в USB-то, но това е нормално, все пак не беше инициализирано.
Ако се докопам до други джаджи, ще пробвам и с тях.

Ако в близките дни имам повече свободно време, ще му напиша GUI на pygtk или друго човешко нещо. Ще си чертая графики на статистиките, да ми е удобно. Мда.

Спиране на вградените говорители на лаптопа под Linux

Преди няколко седмици ми отказа единия канал на изхода за външен усилвател на лаптопа и ми се наложи да тествам, преди да го хвърля на хората в сервиза. За това ми се наложи да спра вградените говорители на лаптопа.
Под Windows това става автоматично, но за Linux трябваше малко ровене.
Преобладаващите съвети са да се правят някакви глупости по ALSA-та, да се бута ядрото и т.н.
Случайно обаче попаднах на hda-verb. Компилира се без нищо странично и си върши работата идеално.

Говорителите се спират със следната команда
[code=”bash””]hda-verb /dev/snd/hwC0D1 0x1f 0x701 1[/code]
където /dev/snd/hwC0D1 са говорителите, а единицата накрая е за спирането. Пускат се със същия ред, но с нула накрая.

При мен (Lenovo G560, някаква Conexant аудио карта) устройството в /dev/ е това, за други може да е различно.

hda-verb изглежда яко и сигурно, ако някой може да го използва (щото аз само това мога :)), ще е доста полезно 🙂

Debian 6.0

Сутринта видях, че е излязла новата версия на Debian – Squeeze. Веднага свалих DVD-то и го изпекох (нямах cd).
Има тонове нови неща. Сменили са splash-а, инсталацията е с приятно синьо и в пъти по-бърза, има нови опции, поддръжка на нови файлови системи. Много неща!
Инсталацията мина много бързо. За сравнение – когато инсталирах Lenny, избирах по около 800 пакета и му трябваха 10-15 минути да ги изкара от диска. При squeeze за 10-15 минути избира и инсталира 1100 пакета:)
По време на инсталацията изпищя, че не може да се свърже с repository-то. Излиза, че, докато се е настройвал apt, инсталаторът е натикал “deb ://volatile.debian…” вместо “deb http://volatile…”
Все още не мога да оправя драйверите на видеото. Дано поне на лаптопа да тръгнат както трябва.
Нямам време да се занимавам сега.

P.S. Линк към статията в debian.org: цък.

Общинско по мрежи

Преди малко се върнах от общинския кръг на състезанието по информационни и мрежови технологии.
Бяхме около 70 човека. По списък 64 бяха от ПМГ. И все пак първото място не го взе човек от там:)
Състезанието се състоя от един тест с 20 елементарни въпроса и практическа задача. Въпросите в теста бяха от рода на “колко е в десетична бройна система числото 1100011”, “кое от тези е хардуерно устройство”, протоколи и други такива лесни неща. Обърках три, което означава -15 точки. Не ги помня българските имена на нещата и това е. До преди няколко години не знаех, че маршрутизатор = рутер…
Практическата задача беше прекалено лесна.
Трябваше да обърнем B.8.C.D в десетична и да го напишем като ip. Основното състезание беше кой ще си напише името по-бързо.
Въпреки, че беше лесно, съм на десето място. Стига ми, минавам във втори кръг. Не знам, обаче, дали ще мога да отида, защото съвпада с националното по информационни в Благоевград. Ще измислим нещо.

Mozilla Balkans Meetup, Ljubljana, 2010

От петък до неделя с Бого бяхме на среща на балканските общности на Mozilla или иначе казано Mozilla Balkans Community Meet-up, Ljubljana. Беше много яко!
Мисля да напиша всичко, че да не взема да го забравя.
Първо.
След като стигнахме до София отидохме до Кривото. Щях да се пречукам по стъпалата.
Видях нощната София и наистина беше интересна.
От летището хванахме самолета за Прага (с Boeing 737). Летенето било много яко нещо!
*Имам някакви снимки от въздуха, но не съм сигурен коя от кога е, защото датата на телефона ми беше объркана.


На летището в Прага пихме бира Козел 🙂

Видяхме и хората от гръцката общност – единият е голям образ. От там литнахме за Любляна (с ATR 42).
Седях точно до двигателя:)

Бяхме в (бивш) затвор!

Въпреки частта със затвора, стаите бяха интересни, като изключим тази, в която бяхме – гола стая с две легла на високо. Не се оплаквам де.


Видяхме се с други хора от Mozilla, пихме, ядохме, и т.н.
Вечерта излязохме на вечеря. Ресторантът се казваше Стара Мачка:D

Там се заговорихме с единия от гърците – Костас. Оказа се, че се занимава с много интересни неща – връзка човек-компютър, програмиране на разни неща с Arduino и куп други яки работи. Изобщо цялата вечер беше интересна.
В сутринта на събота започна главното събитие – лекции от 9 до 19 в Kiberpipa. В Kiberpipa имаше компютърен музей. Имаха много стари компютри, Commodore 64, някакво Atari , лампи по 15см, punchcard компютри, мейнфреймове и още тонове интересни работи. Цялата им зала беше яка, а над вратата за тоалетната имаше скролващ дисплей, на който вървеше /dev/null

Първо трябваше да има поздрав от William Quiviger, който не можа да дойде и го направи по Skype.
След това всяка общност се представи и каза долу-горе кой какво е направил и ще прави.
Говори се и за новите работи във Firefox 4. Има страшно много подобрения – и хардуерно ускорение и нов HTML5 parser и други по-интересни неща.
Казаха и за новостите по SUMO. Честно казано, не се занимавам много със SUMO, но частта с помощта на живо и това с туитовете беше много яка!
Pierros говори за Drumbeat фестивала. Изглежда много яка идея.
След него Milos обясни за сайтовете на общностите, логото, шаблона и други работи около тях.
След това имаше превод на някои статии в SUMO с новия инструмент. Много е лесно и удобно.
После писахме добавка с Jetpack. Това нещо не го бях пипал от 0.1. Станало е доста по-различно. Писането на добавки вече е още по-лесно.
Имаше част, в която показаха mozmill – command line инструмент за тестване на преводите на Firefox – програма, която пуска firefox, цъка на менютата и намира конфликти, които после оцветява в червено и ги запазва в картинка.
Последва QA sprint. Общо взето нарочно крашване на лисицата, за да се види дали има проблеми.
Може да съм изпуснал нещо, но едвам стоях буден. Не защото лекциите бяха скучни (не, не бяха), а защото почти не бях спал

След лекциите отидохме в хотела за малко почивка преди вечерята с гост-изненада. От началото ни говореха, че ще е известна балканска певица. Очаквахме някоя чалга звезда от България. По едно време споменаха нещо за Лейди ГарГа. За щастие не беше нито едно от двете, а CEO-то на Mozilla – Gary Kovacs, Mary Colvig и Tristan Nitot. Много забавни хора!
Бях на една маса с Gary Kovacs и говорихме за много неща. Каза, че нямаме акцент и се учуди как така сме научили английски. Малко не можах да му обясня какво е това геодезия, ама нищо. Важното е, че успях да се снимам с него! Няколко пъти.

Умрялата физиономия се дължи на много вино и малко спане, а тениската е заради концерта, на който щяхме да ходим.
Трябваше да отидем на Led Zeppelin tribute група, ама ги изтървахме.


Разбира се, това не ни спря да пием по бира преди да се върнем в затвора. Барът се намираше на улица “Българска”:)

В неделя сутрин имаше малко говорене в Киберпипа. “Отчитане” на свършените неща през последните 6 месеца и задаване на нови цели за следващите 6. Видяхме се за последно, подариха ни по една Balkans тениска и тръгнахме към летището. Имаше някакви странни самолети, които не бях видял преди.

Някаква нахална рускиня ми седна на мястото в лявата редица и трябваше да съм вдясно и не успях да видя по-яката част от Алпите.

Като кацнахме в Прага имахме почти 4 часа да обикаляме. Прага е як град, като съдя по малкото, което успях да видя. Имаше нещо, защото навсякъде имаше маскирани като папата хора, дяволи, деца със светещи рогати шапки и все такива странни работи. Срещнахме един българин. От Прага хвръкнахме с близо час закъснение, защото крилата бяха замръзнали. Кацнахме в София, хванахме си автобуса и към 04:30 вчера си бях у дома. Спах до 16:40.

Като цяло всичко ми беше интересно и ме нарадва максимално. Не съм от хората, които излизат навън и после само говорят колко е смотано тук и как Там са  години напред, но ще кажа, че не ни спряха само на една пешеходна пътека и при наличието на много сняг и -2-3 градуса пътищата им бяха достатъчно чисти, за да може “совалката” спокойно да си кара със 140km/h.

Ето албумът с някои от снимките: цък

Ако някой го е изчел докрай – браво!

*Доста неща ми се губят, затова ще допълвам каквото се сетя с течение на времето.

Една година със space.bg

Това трябваше да се появи преди два дена, но заради мазане по кода на блога scheduler-а нещо се е прецакал и този и още един post заминаха в небитието. Не помня точно какво бях писал, за това каквото си спомня – накратко:

Онзи ден се навърши точно година откакто се хоствам при СПЕЙС.БГ.
Не мога да измисля от какво да се оплача. Няма нещо, което дори малко да ме дразни в услигите, които предлагат и начина, по който го правят.
За тази една година ми се наложи да ползвам support-а точно веднъж. Отговориха ми веднага, кратко, точно и ясно, без овъртане или излишни приказки.
За това време имаха няколко профилактики и местене на data center, за които предупредиха както си трябва. Downtime-ът им беше все в часове, вкоито се ползва минимално и не можах да ги усетя.
За всичко, което може да се счете за проблем съм си бил виновен аз:)

Много съм доволен, keep up the good work 🙂
Толкова мога да изцедя за сега, а за по-нататък ще знам да тествам локално преди да мажа тук 😀