Archive for April, 2013

Hello, Android!

Tuesday, April 23rd, 2013

От едно време насам като се прибера вкъщи и си пускам да слушам онлайн радиа. А от както открих Digitally Imported и си лягам с пуснато радио.

Понеже аз съм доста мързелив тип (признавам си), по едно време ми стана тежко както си седя на дивана с крака върху масата да ставам да ходя до десктопа и да сменям радиото или да го спирам. Слава богу – има SSH и mplayer, така че тези неща мога да ги правя от лаптопа който се намира на фундаменталното разстояние на 3 метра от бюрото. Другия проблем е че искам радиото да се спира половин час след като си легна. Има много приспиващи станцийки, но не искам да бучат през цялата вечер.

Първия ми порив беше да сложа rc0.d скрипт на лаптопа, който преди shutdown да се вързва към десктопа и да прави някаква магия с `at` и `killall mplayer` която да гаси радиото след 30 минути. Но това щеше да бъде много лесно, а пък ми се занимаваше с нещо ново.

И нали сега са модерни мобилните приложения, реших да пробвам да си напиша апп за телефона. Свалих официалния ADT-bundle с инструментите за разработка и почнах. Тук да спомена че с Java имам един-единствен опит от университета и нищо повече. Какви са ми впечатленията:

Eclipse
+ той бил много читав редактор с всичките нужни code completion-и, javadoc popup-и, syntax highlights и т.н.
+ превъзходна интеграция с дебъгера на андроида – разработчиците от Google са си свършили работата
+ интеграция с емулатора, който е идеален за тестване на бутони, поведение… доста е тежък обаче и този апп през повечето време съм го тествал директно на телефона
+ logcat – инструмент, който вади директно дебъг съобщенията от емулатора или телефона в еклипса. Първия път като го свързах към телефона и се шашнах. МАЛЕ, всички нишки и процеси продуцират огромно количество дебъг съобщения и exceptions 😀 Хората не си ли махат дебъга в продукшън версиите на приложенията?
+ понякога logcat решава че няма да работи повече, което се оправя с рестарт на IDE-то
+ еклипса много ограничава писането на кода в добрия смисъл – не те оставя да пишеш глупости, за всеки проблем (примерно assign type mismatch) излизат възможните решения и кода често се пише с цък от мишката
+ кода наистина се пише с цък от мишката – ако ви трябва да имплементирате метод от parent class, 3 клика и шаблона ви се налива във вашия код
+ няма вградена интеграция с SVN
+ от много ум понякога изтрещява и започва да дава несъществуващи грешки, което се оправя с рестарт на IDE-то
Java
+ струва ми се много странен език като идвам от web програмирането
+ по-ниска степен на абстракция от web езиците и следователно:
+ нещата стават с адски много писане. Примерно един file_get_contents(“http://domain.com”) от PHP в Java става с 30 реда плътно изписан код, в който се ползват 15 различни типа обекти
+ няма асоциативни масиви, което сериозно ми бърка в здравето. Има разни workaround-и като да се ползват обекти, ама не е същото.
+ много грозни stack trace-ове, на които още не мога да свикна 🙂

Android
+ доста подреден lifecycle на приложенията
+ подробна документация на официалното място, но ми се струва доста суха. В Stackoverflow обаче има хиляди материали с примерен код
+ във връзка с горното, 90% от писането на кода е да намериш вече решения проблем и да го copy-paste-неш правилно 🙂
+ нишки и кой код в коя нишка се изпълнява… редовно се опитвам да достъпвам елементи от UI-нишката от друга нишка и естествено не се получава 🙂 Другия проблем е програмно да си извадите бавните операции в задна нишка, защото иначе се получава лагване на апп-а.
+ layouts, където си седи презентационната логика и activities, където си седи бизнес логиката
+ broadcast receivers, или слушатели за глобални събития
+ запазване на settings между различните изпълнения на апп-а, обаче settings трябва да са от много примитивен тип
+ куриозно е да се опиташ да натъпчеш UI в такива малки разделителни способности – буквално след третото текстово поле и мястото свършва 🙂
Първата идея беше на десктопа да направя няколко PHP скрипта, които общо взето да правят system(‘mplayer нещоси’) и от телефона да ги изпълнявам с HTTP GET заявки. Но се оказа че, да направиш HTTP GET в Android е грозно, голямо и ужасно, поне за текущите ми умения, така че тази идея беше отхвърлена още на първата вечер. Втората идея беше да се ползва SSH като от телефона директно се пращат командите към десктопа. Това се оказа доста по-лесно, че и целия апп стана много универсален.

И ето го апп-а My Multimedia Controller, който вече взе да придобива малко търговски вид. Качвам и кода, някой ако иска да ми се подиграва 🙂 Сериозно, не бих се подписал под него и мисля че трябва да бъде принтиран на хартия и ритуално изгорен. Обаче пък приложението работи.
Features:
+ управлява нивото на звука на десктопа
+ превключва измежду няколко радио станции
+ запомняне на “домашна WiFi мрежа”. Ако се конектнете към нея, ще получите нотификация, от която да се пусне апп-а
+ sleep mode – таймер за спиране на радиото, точно като sleep timer-а на телевизорите 🙂

Prerequestes:
+ Linux desktop, `amixer` за контрол на нивото на звука (`amixer` вече не е задължително изискване от r17 натам), `mplayer` за свирене на радио станциите
+ Android 2.2+ device

Required permissions:
+ INTERNET – за да работи SSH
+ ACCESS_NETWORK_STATE и ACCESS_WIFI_STATE – за нотификацията при конект към домашната мрежа. В една по-ранна версия на приложението при такъв конект се пускаше самото приложение, но с практиката се оказа че това е доста intrusive behavior и оставих само нотификация 🙂

 

TODO:
+ профили за SSH – да запазва данните за конект за повече от 1 PC добавено в r13
+ повече контрол върху различни миксер канали и възможност за софтуерно volume добавено в r17
+ динамично въвеждане на радио станции, че в момента URL-тата са хардкоднати
+ иконката да се смени с по-добра
+ обратна връзка за текущо свирената песен (ICY info тага, ако го има)

 

 

Download:

Project r20 – 1.7MB

APK r20 – 337KB

Не е финална версия 🙂

Музикаутор – или как крадецът вика „Дръжте крадеца“

Thursday, April 18th, 2013

Преди две години Григор Гачев и Свилен Мицов бяха написали по един материал за дружеството за защита на авторски права на текстописци, композитори и аранжори – „Музикаутор“, и как от 3000лв. постъпили от концерт на група „Сигнал“ в дружеството, авторите на текстовете, музиката и аранжимента, които са отново музикантите от „Сигнал“ са получили едва 23лв.! Излиза, че организацията, която би трябвало да помага на музикантите да събират печалбите от своето творчество, гълта 99% от тях и дава на реалните автори на музиката едва 1% и по-малко.

Видимо от двете публикации, още преди две години от Музикаутор са твърдели, че са закупили скъп софтуер, с който отчитат и разпределят честно и точно постъпленията за авторите. Митко Щерев обаче, който напусна управителния съвет на дружеството в края на миналата година каза, че такъв изобщо не е бил закупен. Реално към момента авторите на музиката нямат никаква представа:
1.Колко пъти и къде са били излъчени техни произведения
2.Какъв е принципът на отчитане на печалбите и какъв процент от тях трябва да получат те.
По този начин, когато накрая „на сляпо“ получат някакви пари (разбирай жълти стотинки), те няма как да докажат, че са били ощетени. Измамата на Музикаутор лъсва само когато автори като Сигнал си заплатят правата за концерт и накрая от тях получат по-малко от 1%.

През последния месец Музикаутор отново редовно се появява в медиите – наскоро пусна черен списък с некоректни платци, на всичкото отгоре води и медиен спор с бТВ. Защо само медиен, а не съдебен? От телевизията обявиха, че са изплатили всички дължими суми на Музикаутор и това, което от дружеството се опитват да правят е, да интерпретират подписания преди десетилетие договор по по-различен начин, така че да увеличат сумите, които от телевизията им дължат.

Излиза, че в Музикаутор не само нямат ясен механизъм за отчитане печалбите на авторите на музика, и не само не работят в полза на музиканти, аранжори и текстописци, ами и се стараят да „изсмучат“ възможно най-много от ползвателите на музиката, въпреки предварително уредените отношения с тях с договори. Правилно Свилен Мицов написа в блога си, че в сравнение с Музикаутор „Дон Корлеоне е бил пълен тъпак“.