10 години

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

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

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

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

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

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

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

Spotify shower

(Това стана дълго. Директно към свалянето)

Преди (вече доста) време в офиса ни отрязаха YouTube и Facebook. И двата сайта редиректват към jobs.bg. Колкото и да е хитро и да ме радва идеята, основният ми източник на музика от 9 до 6 дотогава беше YouTube. Докато съществуваше Grooveshark, се преживяваше, но го убиха и трябваше да търся други решения.

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

Първо на едното OLinuXino пуснах ampache, което stream-ваше от външен диск. Като изключим всичките грозни хакове покрай подкарването му да го виждам на работа, всичко беше идеално. Ако не се бъркам, имах ReverseProxy на едно apache някъде, което водеше до единия рутер, който препращаше към OLinuXino-то. Дори да бъркам за проксито, накрая със сигурност имаше SSH с port tunneling през PuTTY и слушах музика на http://localhost:8008/ampache. Гениално, да, но малко след това ми омръзна да слушам едно и също. Защото дори краденето законното сваляне на нова музика изисква известна липса на мързел.

През цялото време бягах от Spotify, защото рекламите не ми действат добре и не ми се занимаваше да плащам такса всеки месец. След известно време с реклами накрая се прекърших и от няколко месеца използвам Spotify Premium. С малки изключения съм доволен и не мога да измисля много неща, от които да се оплача. Може би случаят, в който някой ми открадна акаунта и го напълни с немска чалга, е причина за оплакване. Намирането на контактите на support-а им се оказа трудна задача, но накрая ми оправиха проблемите приемливо бързо.

Нещо, което започна да ми пречи е, че когато слушам разни колекции с изпълнители, които не знам или пък произволни песни на нови, трябва да вдигам прозореца, за да видя кое как се казва. Linux клиентът няма този проблем (но пък за сметка на това има други в излишък), защото използва notification-ите по подразбиране и изкарва балон при всяка смяна на песен. Разбира се, че има много приложения, които показват какво свири Spotify като notification, но аз исках нещо просто и да го виждам постоянно, а и ми е по-интересно сам да си пиша нещата.

 

rage_preview
Между taskbar-а и desktop-а

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

На скрийншота горе се вижда, че спокойно мога да си виждам песента. Така е, но той е от лаптопа, върху който не ползвам Windows често. Taskbar-ът ми на работа изглежда долу-горе така през по-голямата част от времето, когато нямам осем отворени инстанции на Visual Studio:

20160422desktop
Когато “Close to tray” не се чупи, нямам и Spotify прозорец.

Първо опитах да ползвам API-то, което предлагат от Spotify, но липсата на продължаваща поддръжка и огромния overhead ме спряха. Няма смисъл да включа огромна библиотека, да се занимавам с автентициране, токени и т.н., само за да взема името на текущата песен. С 15 секунди търсене попаднах на SpotifyToaster, който взема името на песента по хитър начин. Програмата се закача за процеса на Spotify и започва да слуша за Name Change събития. При всяко такова се опитва да вземе името на песента и го показва.

settings_screen
Главният прозорец с “настройките”

В момента приложението показва песните по два начина – с “overlay” и “проста форма”. При първия се пуска отделен процес, който рисува директно върху Desktop-а, а при втория излиза недекорирана форма. Отделният процес се наложи, защото се оказа, че само със C# не мога да сляза толкова надолу (въпреки, че викам същите Win32 функции от същите DLL-и) и нещото се рисуваше върху taskbar-а вместо под него. Дори с допълнителното приложение има тъпи проблеми, които не ми се занимава да решавам, защото не ми пречат.
Ефект на рисуването по този начин е, че всяко опресняване на област, върху, която съм рисувал, затрива това, което е имало преди това. Пример:

overlay_before_screwup overlay_screwupРешавам, че това не ми пречи, защото винаги рисувам под taskbar-а, а там не бутам кой знае колко често.
Освен това имаше случаи, в които заглавието на предната песен не се зачистваше правилно и се получаваше тъпо застъпване. В момента съм си решил проблема като рефрешвам около правоъгълника, който се рисува. Ако някога реша да си доразвия приложението, ще го направя по-умно, но към момента си върши работата идеално.

Вторият вариант за показване на песните използва проста форма без декорация, която пак навирам под taskbar-а, за да я виждам постоянно. Не мога да избера кой вариант ми харесва повече. Ако стигна до release, най-вероятно ще оставя само формата, защото пускането на отделен файл като дъщерен процес може да направи проблеми при определени тъпи настройки и permission-и (или поне както го пусках в началото). И без това с два изпълними файла ми се струва прекалено претрупано.


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

Последната версия може да се свали от тук (zip, ~178KB).
Трябва инсталиран .NET 4+. Ползвал съм го само на Windows 8.1 и не гарантирам, че ще тръгне навсякъде.

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

Все още има някои проблеми, които трябва да реша, за да съм напълно доволен. Например, от време на време закачането към евента гръмва и приложението крашва или пък заглавия на песни, които имат специални символи в името си, излизат наполовина. Според скромните ми наблюдения останалите подобни приложения имат същите проблеми, така че не смятам да си давам много зор с това. Поне не за момента.

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

Докато пишех това, видях, че в новия WordPress paste-ването на URL при отбелязан текст прави линк автоматично. Ще ме накарат да мисля повече неща за писане.

“инж.”

Завърших. От две седмици съм инженер. Остава само да ми дадат дипломата.

Темата на дипломната ми работа беше “Проектиране на микропроцесорна система за управление на безпилотен летателен апарат”. Исках да е нещо с “летателни машини” и “21-и век”, но само на мен щеше да ми е забавно. Oбикновено това не ми е проблем, но имайки предвид, че трябваше за десетина минути да убедя 5-6 души, че заслужавам да стана инженер, остана това заглавие. Не щеш ли ми се получи и ми писаха две шестици.

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

Основната цел на контролера е според наклона и ускорението на дрона по дадена ос да изчисли скоростта на всеки мотор.
Звучи просто – четеш датчиците, смяташ, казваш на моторчетата да се въртят и толкова. Да, ама не е точно така.
Четенето на жироскопа, акселерометъра и компаса отнема време. След като се прочетат всичките състояния, трябва да се комбинират и да се разбере точното положение на обекта в пространството. Когато най-накрая се разбере колко и накъде се е накривило нещото, трябва да се реализира PID алгоритъма, от който пък ще излязат нужните стойности за контролерите на моторите (или ESC-та). Докато става всичко това, трябва да се следи какво се бута по дистанционното и да се реагира подобаващо.

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

Да не се кара в некомпетентно състояние!
Да не се кара в некомпетентно състояние!
2015-04-26 16.27.32
От друг ъгъл също е прецакано, да

В последствие се оказа, че едното моторче не стартира, както се очаква от него. Едно чакане на доставка по-късно се сдобих с по-големи моторчета, нов дисплей за контролера и по-големи перки.

2015-05-18 15.43.00
Новите са малко по-бавни, но по-големите перки и по-голямата мощност на моторчетата (252W-285W!) компенсират

За да се избегнат евентуални по-лоши падания, трябваше да го сглобя по малко по-добър начин. В първата версия контролерът и платката за разпределяне на захранването (Power Distribution Board, PDB) бяха вързани със свински опашки и тиксо. Професионална работа, да. В текущата версия контролерът и PD платката са закрепени с болтове една върху друга и директно върху рамката.

Кабелаците малко преди да се изприберат
Кабелаците малко преди да се изприберат. В момента приемникът е вързан със свинска опашка, не с тиксо.
Power Distribution Board-а изглежда по-добре закрепен с болтове, отколкото вързан с тиксо.
Power Distribution Board-а изглежда по-добре закрепен с болтове, отколкото вързан с тиксо.
От по-близо. С бонус - косъм.
От по-близо. С бонус – косъм.

След многото падания и счупен крак на рамката май успях да докарам настройките на PID-а до приемливи за летене нива. Далеч е от перфектно, но вече поне се задържа повече във въздуха.

За контролера за дипломната работа първо мислех да използвам Arduino, но ми се стори скучно, затова скочих на PSoC 4. Цялата работа се оказа прекалено лесна. Използвах готови модули за комуникацията с акселерометъра и жироскопа (MPU-6050). Общо взето ми се наложи да сглобя елементарна комуникация и да си напиша супер прост PID контролер. PSoC 4 Pioneer Kit-а, който използвах, поддържа Arduino shield-ове, затова си начертах платка, върху която да сложа IMU-то и хедърите за ESC-тата и радиото. Добре че имаше кой да ми каже колко е тъпа платката и да я оправи преди да я ецне.
Накрая нещото не литна както исках. IMU-то се оказа с прецакан чип – отчетите от жироскопа подскачат от единия край на скалата до другия. Мислех си, че е заради инициализацията, но като го вързах за Arduino-тата, пак го имаше. Без значение от настройките и библиотеката. Ефектът е, че моторчетата не поддържат постоянни обороти, а имат пикове. Ако не ме домързи, ще пренапиша изцяло контролера, защото в момента не става. Докато ме мързи, ще си играя с готовия и може би ще сглобя gimbal-а.

Българска клавиатура за FirefoxOS като приложение.

Преди време писах за клавиатурните подредби, които трябваше да влязат във
FirefoxOS 1.3. Тъй като последните месеци са ми пълна каша, нямах никакво време да се занимавам с тези неща и се оказа, че във FirefoxOS 2.0 българските подредби ги няма по подразбиране.

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

Днес одобриха приложението и може да се свали от Firefox Marketplace-а.

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

Засега е тествано само на Firefox OS 2.0. По-късно ще видя как се държи и при другите версии.

CyanogenMod experience

Преди около две седмици ми писна от stock-овия Android на телефона и реших да го разкарам.
От доста време търся добър custom ROM и основният ми източник беше един spreadsheet със сравнения между различните. Първо си харесах Pac-man ROM, но реших да пробвам CyanogenMod. Основното нещо, което ме спираше да пробвам CM по-рано, беше че камерата е много зле. Това се оказа и една от основните причини да го разкарам.

Флашването мина много добре. CyanogenMod са си направили инсталатор, с който целият процес е около пет минути. Учудващо лесно.

Въпреки че телефонът ми вървеше в пъти по-бързо, се наложи да махна CM. Едната причина е, че след цяла нощ на зарядно и цял ден без бутане (с изключение на един-два кратки разговора), вечерта имам останали 30-40% батерия.
Другата причина – в петък се опитах да снимам нещо и попаднах на тъп бъг в камерата – фокусът се размества точно преди да снима.
Резултатът е това:
2014-02-28 22.56.24

Не знам дали се обърква заради светкавицата (въпреки че тя свети, докато фокусира преди снимане) и не ми пука достатъчно, за да търся решение на проблема или алтернативи на камерата. Вярно е, че телефонът не е камера, но щом хората от TouchWiz могат, open source хората могат и по-добре от тях.

След ровене из разни форуми, се оказа, че най-лесно stock ROM-а се възстановява с Kies. Добре, че имам и windows на лаптопа.
Всичкото хубаво, но Kies реши да ми сложи версия La Fleur.
След два неуспешни опита телефонът ми изглеждаше така:
2014-02-28 22.55.35

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

Въпреки лагването и ненужните глупости батерията не мърда. За цял ден небутане вчера беше паднала на 93%. Днес играх и в момента е на 71%. Определено ще потърпя този ROM известно време. След това може да пробвам да разкарам ненужните глупости и ако не стане, да пробвам Pac-man или нещо друго. Стига да си намеря време.

Най-гадно ми е, че си затрих сейфовете на The Minish Cap от последния месец и половина.

6 години

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

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

Mozilla Summit 2013

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

В началото на месеца се проведе Mozilla Summit 2013.
Summit-а е събитие, на което всички мозилианци се събират да се видят и да си поговорят интересни неща.
Тази година беше много по-голямо от последното и се състоя (почти) едновременно на три места – в Брюксел, Санта Клара и Торонто. В Брюксел бяхме повече от 600 човека (някой спомена 625). Общо около 1800 души на трите места.
Организацията започна още от април. Досега не съм виждал по-организирано събитие.

Набързо и разбъркано. Каквото е останало.

Стигането до летището беше зор. Сутринта трябваше да стана в 6, за да отида до университета, после трябваше да карам до Търново. От там с автобус до София и към 3 сутринта стигнах. Прескачам частта, в която таксиджията ме излъга (долни боклуци са някои), щото ми омръзна да я разправям.
На летището се запознах с Павел. Оказа се, че българската общност на Mozilla е по-голяма, отколкото си мислех.
Хвърченето мина добре. На летището в Брюксел ни чакаха с автобуси и ни разкараха по хотелите.
Този ден беше предназначен за свободни разхождания из града и запознаване синтересни хора. Прекарах го в спане.

Всички събития бяха в The Square, който беше декориран така през цялото време:
2013-10-03 17.56.50
Вечерта имаше вечеря (no shit), където се запознах с един тон хора, от които не помня почти никого. Видях и доста познати от Balkans Meet Up-а.
Запознах се с Любо и най-накрая наживо с Оги.
След вечерята имаше бири.

Общо взето следващите дни протичаха по един и същи начин – закуска, интересни лекции, обяд, интересни session-и, интересни хора, вечеря и още интересности.

От някои session-и доста сериозно се запалих по FirefoxOS. Благодарение на Любо в момента имам възможност да си играя с един device, ама за това – после.
Друго нещо, по което се запалих, е Rust. Mozilla правят доста интересни неща с това.
Бях на един session за WebRTC. И там се заформят доста интересни неща за близкото бъдеще. Смятам да го използвам като започна да си играя по-сериозно с платката.

Пих Пелинковац. Доста интересно нещо – алкохол с една камара билки. Едната вечер тъкмо излизахме от Square-а и един ни спря с “Hey, you guys want some cheese?”. Бяха хърватските мозилианци. Имаха най-якото сирене и Pelinkovac. Забавни хора.

На едната вечеря нямаше алкохол. Резултатът е това:

Извън мозилските неща:
Брюксел ми хареса. Има интересна архитектура и тесни улици. Доста неща са запазени.
На третия ден (неделя) исках да се прибера до хотела в обедната почивка, но хванах някакъв маратон. Бяха заградили всички улици, чрез които можех да стигна до хотела. Срещнах едни приятни хора от Mozilla Taiwan, които също искаха да се приберат. Полицаите казаха, че щели да отворят “след около 2 часа”. Имаше гнусни гледки, но стегнатите девойчета компенсираха. Изчакахме да се поразредят и пресякохме. Едната от каките ни напсува или поне така звучеше.

Видях пикаещото момченце. И пикаещото момиченце. Големи атракции.

На връщане на брюкселското летище се случи това:
2013-10-07 07.36.24

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

A13-OLinuXino-MICRO

A13-microМиналия месец спечелих Free Board Giveaway играта (цели два пъти!) на Olimex и наградата ми беше тяхното A13-OLinuXino-MICRO, което освен че е супер яко, е и open source hardware.

Подкарването се оказа голям зор, защото, както обикновено, при мен нищо не тръгва от първия път.
Първо си купих минималните неща, нужни за подкарването – карта с image, захранване и USB LAN карта. Поръчах си нещата в сряда, в петък вече бяха при мен. Дотук добре. Днес отидох да си купя останалите неща за подкарването – VGA кабел, клавиатура и USB хъб, защото платката има само един USB порт (ако не броим OTG-то), а искам да ѝ вкарам доста неща 🙂
Та, прибирам се щастлив, че няма да спя заради нещата, които ще причиня на платката, връзвам всичко (като параноично гледам да не съм статично зареден) и… нищо!  Проблемът е, че не очаквах да boot-ва толкова време. Стори ми се “толкова време”, защото не се виждаха съобщенията, докато се пускаше ядрото. Важното е, че се пусна и видях login екрана. От тук започна забавата – бях вързал клавиатурата и LAN картата през хъба, но не светваха. Пробвах и през нормалното USB, но пак нищо. На login prompt-а не можех да пиша нищо. Long story short – след ровене по форуми и обикаляне по разни магазини клавиатурата тръгна през USB-OTG порта. Оттам нататък всичко беше лесно – build-essential, automake, ssh, nginx, python, etc, etc.

В момента се намира на http://sexy.chilyashev.com (screenshot, да не забравя как изглежда, ако я счупя утре), а от тук може да се види дали е пусната. Не знам дали ще продължа да си пиша TODO-то там или ще напиша/инсталирам по-яко нещо да следя какво мисля да правя. Засега остава това. Досега не бях цитирал себе си.

Днес подкарах само най-елементарния пример за GPIO, но мисля да си купя 40-пинов кабел и да започна да си играя по-сериозно с GPIO-то. Като за начало ще видя дали могат да се четат аналогови данни и ако не може, ще сложа АЦП на входа. След това – серво моторчета, интелекти, механика и завладяване на света щракащи релета. Като се наиграя с мигащите диоди и щракащи релета, ще разгледам UEXT нещата. Някъде по средата на това ще си поиграя с UART-а.

Ако всичките периферни играчки тръгнат както искам, ще взема някой от touch screen дисплеите, ще нарисувам някакъв интерфейс и цялото нещо отива в колата, откъдето идват още по-яките периферии – датчици за обороти, температура, скорост, връзка с телефоните, камери отпред и отзад и всякакви яки неща 🙂
С това изникват други интересни проблеми:

  • как ще предпазя устройствата от рязкия спад на напрежението, когато паля, ще бъде ли включено изобщо нещото преди да съм запалил?
  • Колко умен ще е датчикът, който проверява дали съм запалил – “от генератора идва ток => колата е запалена” или нещо по-хитро?
  • Къде ще навра нещото – ще изрежа цялата централна част или ще мисля грозна стойка? Или пък ще разкарам таблото?
  • Колко ще е голям дисплея? 10″, 7″, 4.3″? Portrait/Landscape?
  • Ще вържа ли 1KW усилвател за него?
  • Ако сложа камери, върху какво ще записват?
  • Ще може ли тази малка платка да понесе всичките неща?

Ако не бях предозирал с ко̀лата, нямаше да се занимавам с глупости по това време.

Отивам да спя.

Наваксване

През 2011 зарязах 90% от интересните неща, с които се занимавах, за да мога да си взема матурите с приемливи оценки и да вляза да уча някъде. Е, успях, но още не мога да вляза в ритъм с всичките странични глупости, които се навъдиха около университета.
Вече почти три месеца след края на семестъра и имам достатъчно свободно време след работа да наваксвам с нещата, които зарязах заради училището.

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

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

Извън якостите на Java-та се занимавам с две-три неща на PHP – пренаписвам един сайт, около който се заформя подобие на framework. Поиграх си и с API-то на Last.fm, навъдиха се интересни идеи за следене на някои статистики.

Отново се обърнах към Ruby с Ruby on Rails. Оказа се по-лесно и интересно, отколкото го помня. Освен с Ruby около Rails се забавлявам и с CoffeeScript и Sass, скоро и Haml.

Остава ми да започна пак да свиря и всичко ще ми е наред 🙂

Около редовното ми писане тук ми дойде идея за WordPress plug-in – колкото повече време минава от последнатото постнато нещо, толкова по “прашасала” става темата на блога. Или ще се случва нещо друго. Не знам.

Хубаво е като не те занимават с глупости.

barcodes

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