NAS

Откакто научих какво е NAS, искам да сглобя едно такова, за да имам място специално за информацията, която ми е важна. Освен това има много неща, които са ми интересни и искам да си играя с тях, но е неоправдано да не са виртуализирани.

Преди десетина години вкъщи се появиха няколко едва работещи компютъра. От тях си харесах единия за “сървър” и му закачих всичките работещи дискове, които намерих. Беше с някакъв Debian, където бях инсталирал стандартните неща, с които си играех тогава – Apache, lighthttpd, MySQL, WordPress и разни други такива. Тогава още нямах рутер и се налагаше нормалният компютър да споделя връзката към другите в къщата. Заради това ми се наложи да науча много неща за мрежи, ReverseProxy-та, красоти около iptables и как да си говорят няколко машини без да се карат. Веднъж отнякъде се появи и работещ RAID контролер – някакъв Adaptec. Не помня дали поддържаше SATA, но дисковете със сигурност бяха вързани с PATA (IDE) кабели. Нямах идея как се работи с това, но пък бях чувал, че е добре да има RAID, затова директно вързах всички дискове към него и създадох масив. Кой да предположи, че това ще затрие всичко по дисковете…

Оттогава започнах да чета и да чакам момента, в който ще си купя някоe 4U съкровище с поне два Xeon-а и няколкостотин гигабайта RAM, ще му сложа ESXi и ще забравя как изглежда светът през деня. През последните години не съм спирал да уча и да се интересувам от админски неща. В един момент бях стигнал до извода, че 40U rack може и да ми стигне, ако махна това-онова. Гледането на /r/homelab, /r/sysadmin и /r/datahoarder изобщо не помага.

Проблемите ми с enterprise сървърите са основно цената и шума. Донякъде и потреблението на ток за определени модели.

Съвременните неща ми идват неоправдано скъпи за играчка.  Миналата година начатках това от сайта на Supermicro:

Едно такова за Коледа, моля

Близо $50 000 чисто щастие – 44 ядра с hyperthreading (т.е. 88 “логически” ядра), 512 GB RAM, 10Gb мрежа и много storage.

Винаги се намират стари сървъри из ebay или olx, но често идват без поддръжка и незнайно колко оставащ живот в тях. Сред най-известните стари и евтини сървъри, които намирам, е PowerEdge R710 на Dell. Звучи така при излитане. При пълен товар не е особено тих.

Друг вариант са работните станции на Dell и Lenovo.

Преди да сглобя текущия си десктоп за малко бях с един T7400 на Dell. Взех го, защото ми хареса колко модулно е всичко вътре, как има два сокета, тунел за охлаждането на процесорите, ECC и други красоти. Преглътнах, че е с DDR2, но това, че рамта работи на 60 градуса без товар, ми дойде в повече и го върнах.

Последното ми решение да имам много storage и виртуализация вкъщи е да оставя текущия ми desktop с някакъв hypervisor или с FreeNAS и да сглобя нов. Към момента се радвам на i7-4790K с 32GB памет и няколко TB дискове. С пуснати няколко виртуални машини, търкалящи всевъзможни неща, не се впечатлява особено. Затова смятам, че ще му е добре да се преквалифицира като хост на FreeNAS или Proxmox. 

За целта започнах да събирам чаркове за новата машина, която ще страда като desktop. Планът беше да е с i7-8086K, но започнах да се колебая дали да не е нещо с Ryzen. И без това има много време, докато стигна до купуване на части за нов компютър, защото идеята ми е да напълня 6-те SATA порта на дъното на стария и да използвам вградения RAID controller за RAID 5. Тъй като не бързам, купувам частите през месец-два. Вероятно е скоро да не сглобя нищо, но поне се движа натам.

След като реша дали ще е с Proxmox или FreeNAS, мисля да пусна всякакви шаренийки. Първо ще преместя transmission-а, който работи върху едно OLinuXino със закачен диск на него, защото е напът да си отиде. След това идва реда на Plex, Nextcloud, Sickrage или Couchpotato и всякакви такива. Ще му пусна и нещо подобно на pi-hole, за да имам ad block на ниво DNS на всички устройства, които се вържат за мрежата тук. Разбира се, всичко това ще трябва да е достъпно по сигурен начин, ще трябва да си играя с потребители, сертификати и една камара други глупости. 

Нямам търпение да видя какви проблеми ще ми създаде това начинание 🙂

Share link decrapifier

Приложението добавя елемент в менюто за споделяне на Android, който копира споделяния текст, премахвайки частите от него, които се използват за допълнително следене. Неща като “utm_source”, “fbclid” и др. изчезват.

Така, например, адресът “https://www.instagram.com/p/BppzKrmneqd/?utm_source=ig_share_sheet&igshid=jywYcSpOs8008“, който генерира Instagram от share бутона си, ще стане “https://www.instagram.com/p/BppzKrmneqd/“.

Може да се свали от Google Play от тук:
Get it on Google Play

Предистория

Не обичам постоянното произволно следене отвсякъде с цел таргетирана реклама. Досадно е. Тъй като не искам да използвам интернет, както го прави Сталман, използвам AdBlock, където мога. Освен това използвам и ралични други похвати, докато използвам интернет, за да се чувствам спокойно и да се залъжа, че профилът ми при всеки рекламиращ отпадък не е плашещо подробен. Смятам скоро* да подкарам pi-hole на OLinuXino-то в нас.

Понякога се сещам да напиша някаква простотия, която се гаври с analytics софтуера на някой сайт. Пример за това е глупавият ми chrome extension, който взема “utm_source” в даден адрес и го променя на нещо по-подходящо за тези хора. Далеч от перфектен, но беше забавна играчка.

Преди време започнах да си играя с Instagram. Дълго време не ъпдейтвах, защото няма случай, в който такова приложение е станало по-добро след ъпдейт. След като се подлъгах да ъпдейтна, се оказа, че са променили начина, по който копират линка към дадена снимка. Преди процесът по копирането беше прост – кликваш на менюто с трите точки -> Copy Share Link… и готово. Сега има “Share”, което изкарва подробно Share меню, в което са изброени всички приложения, заедно с конкретни хора от някои. Това означава, че трябва да чакам да хвърчат една камара Intent-и, докато копирам линк.

Когато най-накрая успея да стигна до “Copy to clipboard” менюто или използвам някое от готовите, линкът, който се копира съдържа информация от вида “/?utm_source=ig_share_sheet&igshid=sittagd5tf01”. Тоест всеки, когото наспамя със снимка на мотор или задник, ще получи линк, чрез който лесно се проследява откъде идва. От там е елементарно да се направят много изводи. Щом този човек е отворил снимка, която е изпратена от човек, който харесва мотори и задници, значи и този конкретен нов човек харесва същото! Нека му рекламираме чорапи за каски и селфита на произволна кака с нарцистично разстройство!

Това вероятно е едно от нещата, които дразнят само мен, но все тая. Имах проблем и го реших чрез силата на програмирането!


* Виж Valve time

Локална разработка с отдалечен сървър като хост на контейнери, сървъри, service-и и т.н.

Пак открих топлата вода.

Налага ми се да работя с Macbook. За преживяването ще кажа, че дори след като му сложих Debian, не мога да разбера защо някой може да го ползва доброволно. За 12-те години, в които ползвам Linux, не бях виждал да се ползва swap-а при сериозно натоварване. Тук стигнах 7 GB swap при нормална употреба. Необяснимо за мен е как толкова хвалено нещо работи толкова зле. Говоря чисто като хардуер. Откъм неудобността на интерфейса няма смисъл да коментирам. Толкова с хейта. Най-вероятно има случаи, в които си струва да дадеш близо 6K за лаптоп.

Малко преди екраните да започнат да мигат и да се изключи.

В процеса на работа се налага да пусна няколко docker-ски контейнера с различни услуги. Тъй като не мога да променям конфигурациите без да счупя работата на други хора, услугите на docker-а трябва да работят локално. Това води до повишаване на температурата на процесора от 75 градуса при idle до около 100. 

Първото ми решение беше да пусна Apache с ReverseProxy, но това беше не само неудобно заради излишно много конфигурация, но и не особено добре работещо. След това мислех да пусна squid, който да пренасочва локалните ми портове към портовете на отсрещната машина. Това също ми изглеждаше като много конфигурация.

Решението на проблема ми се оказа доста по-просто – SSH с GatewayPorts=yes и изброени портовете, които да се пренасочат. Цялата работа се свежда до това:

ssh \
	-L 3306:localhost:3306 \ # SQL
	-L 5672:localhost:5672 \ # Rabbit
	-L 6379:localhost:6379 \ # Redis
	-L xxxx:localhost:yyyy \ # Друго
	-N -o GatewayPorts=yes mgc@whatever

Така когато се обърна към localhost:3306, например, заявката се обработва от MySQL сървъра, който работи на отсрещната машина (whatever в примера по-горе).

Засега не съм срещал проблеми при този начин на работа. Използвам го както с GCP, така и с DigitalOcean без забележимо забавяне. 

BMW Testride

Вчера карах два мотора, за които мечтая, откакто ги има – BMW S1000RR и R1200GS. Едното е суперспорт, другото – dual sport/jizzmachine.

От BMW Motorrad Варна за втори път правят тестрайд на нови модели мотори (или поне за втори път стигам до него). Миналия път много исках да пробвам точно RR-а и GS-а, но карах S1000XR и R1200R. Влюбих се и в двата. XR-а е удобен за дълъг път, а R1200R е с убийствен звук и за града и средни разстояния е идеален.

И този път маршрутът им беше хубав. Изглеждаше долу-горе така:

И този път всички от предходната група слизаха от моторите с усмивки от ухо до ухо. Разбирам ги напълно.

Първо карах S1000RR-а. Според сайта на BMW тежи 208 килограма мокър и прави 199 к.с. Има видеа на хора, които правят 0-300 km/h за 16 секунди с този мотор. По една от спецификациите ги правеше за 19.1 s.

BMW S1000RR
Някой е наклонявал до ръба на гумите с това животно :/

Този мотор е много над възможностите ми. Тъй като е чисто нов (на под 1000 километра пробег), все още е в режим на разработване на двигателя и беше ограничен само до 10 000 оборота и 200 km/h. Донякъде се радвам, че беше така, защото на шеста дърпа без да му прави впечатление. При скорост от 205 km/h и напълно легнал не се усеща, че се движа с такава скорост. Това е силно притеснително, защото лесно може да спреш да си даваш сметка какви са последствията от грешни движения.

Пробвах няколко пъти ускоряване от 100 до 200 km/h. Трудно ми беше да се задържа без да съм легнал напред и да стискам резервоара с крака. Ускорението на това нещо е безумно. Спирачките са много добри и на няколко пъти ми се стори, че ще направя предно кълбо.

Този имаше Shift Assist Pro, което е модерния quickshifter/auto blipper на BMW. През цялото време си играех да ритам скоростите нагоре-надолу без съединител. Въпреки стоковия ауспух, звукът беше силно задоволителен и пука приятно.

По едно време спрях ABS-а и го сложих в Race режим. Страшното стана още по-страшно. На няколко пъти вдигах предна гума на всички предавки. С включен ABS и рязко връщане на газта на втора колелото се вдига леко и се усеща как веднага се включва защитата и се отнема от мощността. В Race и без ABS няма такова нещо – даваш газ и си заминаваш.

Направи ми впечатление, че е нужно осезаемо повече усилие, за да се наклони в завой, отколкото при моя мотор. Но пък завои, които с моя са страшни при 100 km/h, тук не се усещат при 180 km/h.

Много съм малък и неопитен за такава машина още. Не мога да си представя как хора карат това до пълните му възможности. Определено е впечатляващ. Всичко в него е за писта и каране без ограничения.

Някъде по средата на маршрута разменихме моторите и имах щастието да покарам R1200GS-а. Този ми е в идеалите за мотор, защото съм скучен моторист и си падам повече по спокойното каране, отколкото Street Rossi изпълненията.  Въпреки че тежи 244 килограма според сайта, изобщо не си личат. Всичко е балансирано и се усеща като много по-малък и лек.

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

Искаш да провериш налягането на гумите без манометър? Няма проблем!

Като потеглих, помислих, че вдигнах гума. Оказа се, че окачването има огромен ход и просто задницата потъва, а предните амортисьори се разгъват. Като лодка е. С моя се уморявам след 500-600 километра за ден. С този виждам как лесно се минават над 1000. Разбирам хората, които правят преходи от единия край на континента до другия с тези мотори.

Тук също имаше quickshifter и също се забавлявах да ритам нагоре-надолу, докато ауспуха гърми. Интересно беше, че когато форсирам със стиснат съединител, моторът се накланяше наляво заради въртящия момент на двигателя. Ако не бях изтрил всички видеа от камерата, щях и да го покажа[1].

Чудих се срамно много време как се пали, докато не ми показаха, че е без ключ…

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

Когато порасна, ще си купя GS (и SuperDuke, и S1000RR, и Africa Twin, и V-Strom, и HP4 Race, и H2, и Duke 390, и Duke 690, и WR450R, и 500 EXC-F, и Shadow, и V-Star 1300).

Междувременно на паркинга на Metro има някакво автомобилно шоу, където показват и няколко нови модела на Honda – Africa Twin, CB650F, Rebel, някакво NC и разни скутери. На косъм съм между GS и Africa, но там не ми дадоха да карам, защото нямам три години стаж с категорията. Жалко. Разбирам ги, но пък точно за това са застраховките 🙂

 

[1] Реших пак да сложа Linux на основния компютър и да се върна към ученето на нови неща и странични проекти. Пуснах да се прави флашка за новия Mint и вместо флашката избрах камерата без да искам. И така час и нещо видео от RR-а и GS-а си заминаха безвъзвратно и завинаги.

Туп

В четвъртък паднах за първи път с мотора. Отне ми малко по-малко от година и малко над 10 000 километра.

Had to lay ‘er down

Как?

Докато се разкарвахме из града, минахме през едно от многото места с ремонт – тунелът под ФК – Варна. Доскоро беше затворен изцяло, но тази вечер видяхме, че има отворена една лента и един знак за заобикаляне. Докато излизах от тунела, гледах да не се хлъзна в калта и не видях камарата с пръст и камъни, която беше малко по-висока от мен и заемаше моята лента и малко от насрещната. Дали заради разсеяността ми заради разни лични драми или липсата на очила – не знам.  Движех се с не повече от 35-40km/h, защото беше мокро и кално навсякъде. Въпреки това не можах да реагирам адекватно.

Заради очевидно несъобразената скорост и доста хлъзгавия път не посмях да  направя рязкото заобикаляне, което упражнявам постоянно. Изборът ми беше да съборя мотора на лявата му страна или да мина през камарата. Събарянето на мотора крие потенциалното му преобръщане или т.нар. “highside“. Вярно, че скоростта ми беше прекалено ниска, за да ме хвърли чак толкова, но пък щях да спра рязко в камарата и да си смачкам репродуктивните прелести. Реших и, че не искам да се пързалям по пътя, осеян с кофти остри камъни, докато моторът е върху крака ми.

Намалих, колкото можах за краткото време, което имах, опитах да заобиколя плавно, но минах през по-ниската част на камарата. Моторът скочи и за малко да успея да направя приземяването. Не помня как и точно в кой момент паднах. Мисля, че съм заключил предното колело, когато се е докоснало до земята, но не съм сигурен. Преметнах се през кормилото, приземих се по гръб (според болките – на дясната страна) и започнах да се пързалям. Докато се пързалях, усетих предната гума на мотора с ръка и си представих какви неща ме очакват, ако спра преди него. Приземяването го усетих все едно съм се тръснал малко по-силно върху леглото.

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

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

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

Поражения

Както казах, разминах се само с малко болки тук-там. Моторът и екипировката поеха останалото.

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

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

Основна част от щастливата развръзка е екипировката, с която бях, а именно (по слоеве):

  • Ботуши – Spada Curve Evo WP
  • Супер мъжествени моторни гащи, които не са клин – Rev’it Inca
  • Анцуг, за да не ми е студено
  • Моторни дънки с Covec – Bull-it Covec SR6
  • Някаква термо блуза
  • Някакво горнище с полар и нещо против вятър
  • Яке – RST R-16 (без протектора за гръб)
  • Ръкавици – Oxford HotGloves (подгряването беше включено)
  • Каска – Icon Airmada (Rubatone Black)

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

Нататък

Ще опитам да докарам мотора във вид годен за каране възможно най-бързо, защото колкото и леко да беше това падане, доста ми повлия на психиката и едва ли скоро ще се чувствам спокоен върху него. Това се оправя с каране => трябва да го оправя бързо.

В момента моторът е с разглобена предница и му предстои да се преобрази в още по-гол, почти streetfighter. Все още търся подходящия фар. Засега се заглеждам в единичния фар на MT-09 и фабричния на FZ6N.

Гледката е странна без всичката пластмаса и таблото

Има много потенциал да стане интересен

Далеч съм от идеята да го правя шарен. Мисля си, че скоро няма да харесам фар и ще карам с оригиналния, но без пластмасите. Засега идеята е да сменя ръчките, ръкохватките и доста да префасонирам предницата. Това ще стане плавно и малко по малко. Ако изобщо стане.

Засега нещата са в този ред:

  1. Фар + слюда
  2. Мигачи
  3. Тапи на рамката и поне предната ос (след дъжд – качулка)
  4. Ръчки
  5. Ръкохватки
  6. Степенки, защото hero blob-овете на моите са счупени, а искам да ги изтъркам сам

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

2017

Можеше да е по-гадно, но не беше. Този път научих много.

Годината ми започна силно с научаването на това какво е burnout и как може да се преработиш толкова, че да ти е трудно да говориш.

Известно време бях one-man team. За малко над два месеца написах софтуера за POS терминал (без да рисувам дизайна), който после ходи да впечатлява хора по изложения. От нищо. На Android.

Първите два commit-а доста добре описват началото на проекта

Тези малко над два месеца изкарах с 16-часови работни дни и една почивна събота за целия период.
Въпреки работата с не особено добре документирани китайски библиотеки, научих много. Например – наложи ми се за два дни да напиша цялата комуникация между терминала и PayPass/PayWave карти на ниво APDU, защото нямаше работеща такава библиотека.

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

Силно увреждащо преживяване.

***

Overtime-а от големия зор ми помогна най-накрая да си купя мотор. Това го чакам, откакто се помня, а последните няколко години отделям доста време на четене и гледане на моторни неща.

Като за първи мотор ми се падна Yamaha FZ6-S (или Fazer). Двигателят му е от R6. 600cc, 90-100hp.

Доста се колебах дали да не започна с някой 250-кубиков и после да взема по-голям. Понеже безпроблемно карах курса за категорията на малко по-нов FZ6, реших, че ще мога и така.

Така изглеждаше през октомври. Мястото е мидената ферма Дълбока

Остатъка от годината мина в прилично количество каране и към момента имам около 10 хиляди километра с моя мотор. Освен него карах още 10. Да са живи и здрави от Yamaha и BMW, че дават на произволни хора да карат чисто нови мотори! Без такива събития и testride-ове едва ли щях скоро да се кача на последен модел мотор за 50+k . Съжалявам само, че не можах да карам R1200GS и S1000RR. Единият е удобен и красив adventure, а другият е красив и прави 0-300 за 19.1 секунди. И техният ред ще дойде.

Много се надявам да не се затрия някъде заради някой идиот (включвам и себе си в това). Засега смятам, че се справям с чупенето на стереотипа за гадните мотористи.

Сред любимите ми случки е как един тип искаше да ни сгази, докато се движехме с 50 в града, защото бързал. Спряхме да го питаме какво прави.  Част от репликите: “Бързам. Точно вие трябва да давате газ. Как да пазя моториста като ми карате с 50”. След това влезе в кафене.

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

Предположението ми се потвърди – дори да караш спокойно и да следваш закона, мнозинството смятат мотористите за “донори” и правят всевъзможни тъпотии. Това е спор, който ми омръзна да водя. Трябва да си събера мислите по въпроса някога.

Разбира се, не са ми само другите виновни, но за това ще пиша след малко. Засега ето част от видео, докато въртя гума с около 100km/h върху BMW R1200R 🙂

Мигащата светлина е traction control-а, който не може да смогне с тъпотията ми отговорното каране в студеното време.

Тъй като всяко качване на мотора ми дава много материал, ще пиша пак по темата някога.

***

Официално приключих с училището. Защитих си дипломната работа и вече съм още повече инженер.

***

Покрай burnout-а се оказа, че редовният сън е нещо, без което не е много умно да се съществува.

Използвам SleepBot от август 2014-а и за 2017-а имам 363 записа. Средно съм спал 6.68 часа, което е доста добре, имайки предвид преобладаващите ми периоди от по 1-2 часа спане, когато се занимавах с много freelance, full-time работа и университет. Графиката изглежда така, като на 2-3 места има липсващи записи:

Ще се постарая да е малко по-добре занапред.

***

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

След като се разминаха драмите, започнах да се връщам към нормалното. Започнах пак да свиря малко по-редовно и да уча нови компютърни неща постоянно.

Толкоз.

10 години

Преди малко повече от 10 години инсталирах WordPress за първи път, защото случайно го мернах като алтернатива на glog (бях забравил как се казва даже), защото нещо не можах да се справя с подкарването му върху apache2triad.

Първата версия на текущото място тръгна през лятото на 2006 и вървеше върху XP. В момента има малко под 100 скрити поста заради cringeworthy съдържание и около 60 драфта, стоящи такива заради мързел.

За тези години от келеш, който няма идея какво прави, минах през всевъзможни компютърни приключения и станах 25-годишен тип, който няма идея какво прави. Успях да програмирам смислени и безсмислени неща на всякакви езици за програмиране и платформи – от различни асемблери до неща, които те разтреперват със синтактичната си захар. Минах през уеб, хардуер, бази, администрация и още интересни неща. По някое време станах и инженер (спорът колко компютърните инженери са инженери е за друг път :)).

Известно време мислех, че ще мога да напиша операционна система. В крайна сметка стигнах до “микроядро“, което се boot-ва и слуша прекъсванията, с които работи DOS. Напълно безполезно, но пък мога да кажа, че съм писал драйвер за екран и клавиатура. Едното беше framebuffer заигравка, а другото – масиви със символи, които се използват според това дали има Shift или Caps Lock. Тъпо, но “драйвери” 🙂

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

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

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

Умна шамандура, част 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; и обратно към интересните неща.

Програмата за геодезически задачи и за Android

Тъй като виждам, че доста често се тегли desktop версията на програмата за геодезически задачи, реших да я напиша набързо и за Android. Все пак, след като имаше версия за MIDP 2.0 телефони, защо не и за нещо по-модерно 🙂

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

Като за начало, смятам при първа възможност да добавя останалите засечки и разни други шаренийки. Мисля си, че ще е удобно да могат да се избират директно точки от карта или от каталог. Само да не ме домързи.

Може да се свали от Google Play от тук:
Get it on Google Play

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

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

Тъй като предната ми струваше около 1100лв. и в момента събира прах, защото така и не се научих да хвърча, реших тази да е нещо по-просто. Предложиха ми да правя “система за наблюдение на морската среда” и се съгласих. Кодовото име е “умна шамандура”, защото реално ще правя почти същото нещо, което се намира в буйовете, които се използват в момента. Почти същото, защото няма смисъл да имплементирам всичките комуникации, протоколи и красоти, които са в истинските шамандури. Не ми трябва да следя корабите, не ми трябва и да е вечно.

Планът в момента е да има това:

  • Метеорологична станция (частта за “наблюдение на морската среда”), която ще мери следните неща:
    • посока и скорост на вятъра,
    • температура на водата,
    • температура и влажност на въздуха,
    • атмосферно налягане,
    • видимост (т.е. дали има мъгла)
  • GPS, който да следи дали шамандурата не се е откачила от котвата
  • Радиовръзка до “наземна станция”. Това ще са две LoRa радиа (RN2483 на Microchip), които ще си говорят (засега еднопосочно). Най-вероятно “шамандурата” ще праща към приемащото радио, което ще е закачено по сериен порт към компютър
  • Светлинна и (може би) звукова сигнализация, което е силно вероятно да са мощен светодиод и “сирена”

За реализацията смятам да използвам един PSoC 4 и малко Arduino. Още не съм решил какво ще представлява “наземната станция”, но най-вероятно ще е PSoC-а, който взема данните от радиото и ги предава по UART към компютър с някакъв софтуер. Този някакъв софтуер най-вероятно само ще рисува карта и шамандурите върху нея с проста база от данни отзад за добавяне, редакция и т.н. на шамандури.

Към момента имам почти всичко за шамандурата готово – едно Arduino Micro Pro събира данни от всичките датчици, пакетира ги и ги праща по серийния си порт към компютъра, където си представям, че са дошли по радио.
Остава ми да направя GPS-а, да започна да чета данните за посока и скорост на вятъра и комуникацията с компютъра.

Ако не бях изгорил GPS модула, можеше и да съм готов вече. Кой да предположи, че като размениш VCC и GND платката ще замирише…