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 при отбелязан текст прави линк автоматично. Ще ме накарат да мисля повече неща за писане.

Posted in Daily, short | Tagged , | Leave a comment

Privacy fuckup

Днес към 11 ме посрещна следният имейл: “Your Mojang password has been changed”. Не бях бутвал Minecraft или каквото и да е свързано с Mojang от няколко месеца, затова очевидно няма как аз да съм сменил паролата.

В имейла имаше линк за директна смяна на паролата, затова нещастникът е имал по-малко от час да се радва на акаунта ми. За това време е сменил всичко, което може да се сменя, с изключение на имейла. След като се логнах, смених всичко без името ми в играта, което може да се сменя веднъж на 30 дни. Писах на Mojang, но благодарение на Коледната им почивка все още отговарят на ticket-и от 24-и януари. Най-вероятно боклукът ще играе с моя акаунт и тъпото име, което е сложил, поне седмица, докато не се изясни всичко.

Реших да сменя всичките си пароли и попаднах на интересни неща, докато ровех из опциите за сигурност на facebook. Оказа се, че всякакви малоумни сайтове успяват да ми източат данните. Въпреки пуснатия adblock с добавени филтри за това. Не точат нищо, което да не е публично, но пак са утрепки, защото го правят неявно.

Решението е лесно – в настройките за приложения -> Apps, Websites and Plugins -> Edit -> Disable Platform.

Tough choice...

Tough choice…

Любимата ми част е “Your friends won’t be able to interact and share with you using apps and websites”. Звучи добре. Не знам защо не съм се сещал по-рано, че може да има такова нещо.

Стигнах и до частта за рекламите, но там нацелих еднорог:

Това не се случва често.

След като се наиграх с всичките тъпотии покрай настройките, дойде време на паролата. Там беше тъжно и срамно.

securityexpert

Остава само да подкарам нещо подобно на pi-hole върху някое от OLinuXino-тата.

Posted in short | Tagged , , | Leave a comment

“инж.”

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

Темата на дипломната ми работа беше “Проектиране на микропроцесорна система за управление на безпилотен летателен апарат”. Исках да е нещо с “летателни машини” и “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-а.

Posted in Daily, short | Tagged , , , | Leave a comment

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

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

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

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

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

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

Posted in Daily, short | Tagged , , , | Leave a comment

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 от последния месец и половина.

Posted in Daily, short | Tagged , , | 1 Comment

Firefox Monument, San Francisco

На Summit-а миналата година споменаха, че ще правят нещо пред офиса на Mozilla в monumentedСан Франциско. Нещото е супер як монумент, на който са изписани имената на всички мозилианци (които са се се съгласили на това).

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

Пожелавам си да отида да го видя на живо:)

 

Posted in short | Tagged , | Leave a comment

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

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

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

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

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

Posted in IT | Leave a comment

Българска клавиатура за FirefoxOS

От следващата версия на FirefoxOS вече ще има българска клавиатура. Даже 3 🙂
Screenshot from 2013-11-30 21:56:34
Ще са налични БДС, нормална фонетична и другата фонетична (която на места пишат като БАН)

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

Posted in OS, short | Tagged , , | 1 Comment

Ден на Роботиката в ТУ-Варна

946049_10202657880275003_120161569_nИ тази година готините хора от клуб “Роботика и мехатроника” организират ден на роботиката в университета.
Ще се състои на 6-ти декември като част от седмицата на роботиката.

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

Още пише на страницата на клуба.
Има и facebook event.

Posted in short | Leave a comment

6 години

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

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

Posted in Daily, short | Leave a comment