Feb 11 2010

Buzz е новият Twitter… че какво му има на стария?!

Category: Web,Нонсенс,СоциалниLucho @ 16:16

Такааа, след близо 4 месеца без да напиша нищо ново най-накрая се реших. Провокира ме новата услуга на Google – Buzz. Може би ако Google не ми натрапваха един глупав сплашскрийн с глупави въпроси по него, докато се мъча да си видя мейла в Gmail, нямаше да се налага да пиша лоши неща за новата им услуга… но сега се налага.

За тези от вас, които все още живеят в пещерите, ще ви кажа че Buzz е просто поредната микроблогинг услуга, която копира идеята на Twitter, но е добавила няколко фенси неща, като например тъмбнейлове на клипчетата и възможност за директен отговор на пост. Добре, ама това напрактика прави микроблогинга да не изглежда микро и да не е съвсем блогинг, по-скоро прилича на грозен претрупан Фейсбук, от който повечето туйтърджии се опитват да се спасят.  Гугъл винаги са имали нюх и са правили страхотни неща, но истината е че немогат да създадат по-гениална социална мрежа от Фейсбук и Туйтър и да се опитват да ги копират е  обречена идея. Хората са свикнали с тези две популярни мрежи и няма да  ги зарежат… за разлика от настолните игри, социалните мрежи не се напускат НИКОГА! Освен това Фейсбук има добре измислена и изградена инфраструктура за интегриране на приложения, 350 милиона… да – милиона, души, Туйтър е постоянно претоварен от нетърпеливи потребители, доста е тренди назапад и печели симпатията на хората предимно с простата си изчистена визия, която набляга на съдържание, а не на безсмислени функции. Buzz е нещо средно между тези две социални мрежи – ФБ и Туйтър,  но за съжаление обединява предимно негативните им качествата – ни риба, ни рак.  Може би Гугъл се надяват да отклонят част от хората към своята мрежа или пък да зарибят потребителите на Gmail да ползват Buzz. Съмняваме да успеят да направят, което и да е от двете, но само времето ще покаже.

Мен лично ме вълнува само един въпрос – дали ще доживеем един ден да играем Farmville в Buzz? 😀


Oct 06 2009

Новите метростанции в София

Category: НонсенсLucho @ 20:33

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

Извинявам се за лошото качество на снимките, но камерата на телефона ми просто неможе повече. Ако все пак качеството много ви дразни, просто се разходете из новите станции и вижте сами 😉


Sep 24 2009

TLA

Category: Dev,НонсенсLucho @ 16:26

Ето някои абривиатури, които може и да знаете или да незнаете, кой знае…

ACID – Atomicity, Consistency, Isolation, Durability

CRUD – Create, Read, Update, Delete

DRY – Don’t Repeat Yourself

GNU – GNU is Not Unix (recursive acronym)

BSD – Berkeley Software Distribution

BashBourne-again shell

GPL – (GNU) General Public License

CRM – Customer Relationship Management

CMS – Content Management System

DTD – Document Type Definition

PHP – PHP: Hypertext Preprocessor (recursive acronym)

ASP – Active Server Pages

TDD – Test-driven development

BDD – Behavior Driven Development

REST – Representational State Transfer

SOAP – Simple Object Access Protocol

COTS – Commercial off-the-shelf

TFT – Thin-film transistor

LCD – Liquid Crystal Display

Естествено има още много, но според мен има голям шанс да незнаете някои от тези, а пък се срещат тук-таме 😛


Aug 22 2009

Share your screen

Category: Dev,Firefox,HTML5,Web,НонсенсLucho @ 03:43

Напоследък съм изгубил творческата си искра, в работата се занимавам с .NET 2 (нестига, че е .NET ами и е от 2004г 🙁 ) не съм почивал цяло лято и ми се ще да пиша на Ruby и Rails или Objective C за iPhone. Та сред всички тези несгоди и поради факта, че съм програмист все пак (а добрите програмисти решават проблеми ежедневно и би трябвало и своите да могат да решат!!!) предприех някои стъпки за измъкване от блатото, като една от тях беше да си пиша малко проектче за мое лично удовлетворение. Първоначалната идея изникна в главата ми по напълно случаен начин, с времето идеята се развиваше и променяше, пишех по малко код и очаквах вдъхновението ми да се върне и да ми каже какво да правя… е този момент дойде днес – тази вечер.

Първоначалната ми идея, с която няма да ви занимавам сега, включваше използване на HTML 5 Canvas – платно на което може да се рисува и дава пълен достъп до битмапа – красота! Естествено този стандарт е все още слабо разпространен сред браузърите, защото е нов (Microsoft-ския Trident още не го подържа изобщо, бахти изостаналата нация :-P). Идеята включваше и Рейлс, но прагматичното в мен победи и пожела да запълня 99% свободен bandwith на хостинга ми (да, блога ми е толкова популярен, че ползвам <1% от линията 🙁 ). Това води след себе си сравнително неприятното задължение да пиша на PHP… но няма да се лъжем, на PHP се пише много бързо, ама много, много бързо и грозно и… абе селска работа! Предните седмици, докато чаках вдъхновението, реших да проуча въпроса, как мога да взема изображение от клипборда и да го плесна на кенвъса, оказа се нетолкова лесна история, но възможна все пак. Цената не е прекалено висока – ползвам Java Applet-че, което върши цялата работа всъщност. Алтернативата е Flash, но доколкото разбрах Flash 10 налагал по-строги ограничения за боравене с клипборда, а и не обичам Flash и ActionScript (винаги ме е боляло много след интервенция с тях). Големият проблем е, че някъде при прехвърлянето на битмапа от клипборда през аплета към javascript-ския код нещата стават много бавно и това може да отнеме до няколко секунди, за по-големи изображения, но като се абстрахираме от това – ТО РАБОТИИИИ!!!! Следващото нещо, което направих е функционалност за селектиране на фрагмент от кенвъса, почти като в Paint или друг редактор… и в общи линии до тази вечер бях стигнал до тук, когато ме осени идеята – selection tool-а става на crop tool и целия проект се превръща в 3-click-screen-share. Гениално наистина, print screen, paste, [optional: crop], save и получаваш линк… а и подобно нещо не съм виждал да има досега… е друг е въпросът колко често на човек му трябва подобно нещо, но като се замисля, че иначе трябва да отваряш image editor, пък после да save-ваш, пък после да го публикуваш някъде, и накрая да пратиш линк – it is retarded!

Първоначалната версия на услугата е тук: http://dailyffs.com/shotme/

За сега всички енджини без този на Microsoft подържат в някаква степен Canvas, като за FireFox 3.5 приложението върви на 100%. Естествено за view на изображението впоследствие не е необходимо нищо специално и всеки браузър би свършил работа, така че всички ще могат да видят скрийншота ви – спокойно 😉

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

Хубаво е когато човек дава свобода на въображението и творчеството си, кара те да се чувстваш щастлив и да си изпълнен с идеи и енергия… даже и цената, която трябва да платиш да е малко писане на PHP 😛


Jul 06 2009

Дългият път на съзиданието

Category: Dev,НонсенсLucho @ 18:24

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

Ето, сега ще се поправя и ще опиша стъпките, идеите, мислите, абе всичко през което минавам докато дивелъпвам проекта си по Python. В този смисъл постът, който четете в момента ще се допълва ежедневно с новости, за това стей тюнд.

Проекта представлява конзолен mp3 плейър за Линукс (уж Python е портабъл… но аз не го вярвам това, за сега 😛 ), като интерфейсът ще е тип “стара дос програма” – графичен интерфейс с ascii символи. Надявам се, освен стандартните за всеки mp3 плейър нещица, да успея и да го накарам да работи с онлайн радиа (streaming). Естествено в момента си поставям цели, за които не съм напълно убеден дали ще са реализуеми… но какво пък – ще опитам! Друг фичър, който много искам да направя е да минава в бекграунд режим, за което имам някакви идеи, но пак неизвестните са доста.

Естествено вече съм попрегледал какви благинки предлага Python и какви външни компоненти (ех, колко SE  звучи това) бих могъл да ползвам. За нещастие, част от нещата изглежда са за Python 2.5, но докато неразцъкам и това твърдение е в сферата на unknown-ото.

Day 0:

И така “дей 0” е по-скоро “вечер 0”, бутнах се под Убунтуто си и си сложих Eric (IDE за Python). Доста бутони, доста функции, дано да се работи приятно с това нещо. Тръгнах да създавам нов проект и се сетих – нямам име за него. Е… след 15 секундно размишление се спрях на “Pyp3” (“пай-пи-три”). И така вече съм готов да започвам най-нелепата част… подкарване на някой от основните модули които ще ползвам. За съжаление не намерих нищо,  което да пуска звук и да е за Python 3, така че ще се пише на Python 2.5. Това всъщност не е толкова зле, защото:

А) Рано или късно ще портнат библиотеките до 3

Б) Python 2.5 е стандартна версия за всяко Убунту и други дистрибуции

Та инсталирах audiere и numpy (дипенденси) от репобраузъра и успешно пуснах една mp3-ка (чак да не повярва човек 😀 ). Следваща стъпка е да разцъкам curses – нещото, което осигурява ascii интерфейса.

След един час четене не умопомрачително дългия менюъл на curse и малко конзолно тестче стигнах до следните два важни извода:

1. Curse няма готови диалогчета (за open file например) – селско (все пак има надежда, че някъде някой е написал нещо по въпроса)

2. Терминалите не са това което бяха. На 22 инчов монитор в текстов режим имам 48 реда по 136 колони, в графичен много повече… къде изчезнаха добрите стари 80×25. Може би са изчезнали заедно с DOS, кой знае :D. На малкия ми латоп (резолюция 1024х600), в текстов режим конзолата е баш 80х25 реда. Т.е. нищо не изглежда както трябва – неприятно.

Друг проблем е че трябва да поддържам доста диалогови прозорци и мишка. Решението може би е тази надстройка на curses – Urwid, която ще спести излишното копане за диалози.

Интерфейса, който за сега ми се върти в главата включва тикер за текуща песен, скролче за звука, бутони add, rem, jmp, que, ext, bkg (добавяне/махане на песен, jump по име – включва диалог, que – включва диалог, exit и преминаване в background режим), текуща плейлиста (в общи линии списък със заглавия).

Day 1:

Продължих да разцъквам Urwid и като цяло съм доста доволен. Направих прототип на плейлиста, но изникна нов проблем. В плейлистата човек може да има хиляди песни и е нормално да има скролбар, само че скролбара е фиксиран от броя редове в терминала (това значи, че е ограничен по брой позиции, на които да се мести), което неминуемо води до проблем че при преместване на скролбара с една позиция, в листата може да бъдат скипнати повече записи отколкото може да покаже. Ще се получи “прескачане”, което ще е по-скоро дразнещо от колкото полезно. Поради този факт (и това че скролбар не е имплментиран в Urwid официално :-P) обмислям вариант да мина без скролбар, а по-скоро с филтър, който да филтрира песните по част от име и да сложа поле, което да показва на кой номер песен (страница) е плейлистата в момента. Това би помогнало и за реализацията на Jump функционалността, като просто се филтрира по ключова дума и се натисне някаква клавишна кобмбинация… нийййт. Вечерта завърши с Пранка 🙂

Day 2 & 3:

За тези два дни горе-долу направих плейлистата и филтрирането и леко се отчайвам от скоростта с която напредвам, а ми предстой да свържа кода за directory browsing с плейлистата. Все пак все повече ми се избистрят идеите в главата, така че може да се каже че положението не е толкова критично. Дано дедлайна не ме притисне много…

Day 4:

Интегрирах кода за браузване из файловата система с плейлистата и добавих код за плейване на аудио файлове – даже пуснах няколко (big success)! Вече съм една идея по-спокоен, защото имам нещо работещо. И все пак ми остава queue функционалността на плейлистата, което няма да е толкова прозрчано и просто. Чудя се дали да не напиша малко тестове и паралелно с това да не рефакторна кода на няколко места, може би е добра идея (Както се вижда съм скептик относно предварителното писане на тестове… а по принцип съм скептик и относно писането на тестове ИЗОБЩО, но се старая да променя това!!!). Намерих още една библиотека, която би била полезна в проекта – Mutagen, служи за четене на тагове от разнообразни аудио формати и ще ми помогне с title/author в плейлистата.

Day 5 & 6:

Уж беше събота и неделя, а свърших доста малко неща. Все пак позавърших изгледа на плейъра и четенето/показването на ID3 таговете. Реших да отложа правенето на опашка, защото е мега досадно и не е толкова фън, колкото плейването на стрийминг и рънването в бекграунд. Плейването на стрийминг се оказа доста нетривиална задача, която ми отвори един куп проблеми, та и там нещатата не са розови. Трябва да почна да пиша тестове… ех тези ш****и тестове…

Day 7 & 8:

Оказа се, че Audiere е тотално скаран с всичките ми идеи да го подкарам с http стрийм… то не бяха наименовани пайпове, сокети, даже се мъчих да му вкарам numpy-ски масив от float32, но след дълги среднощни борби реших да се преориентирам към GStreamer, който е бая тежко, по-точно обемно нещо, и много исках да не опирам до него. За това пък плейва без грижи само като му се даде URI. Отначало исках да ползвам Audiere за плейване на локални файлове и Gstreamer за уеб стрийминг, но освен че е доста грозно решение, срещнах трудности в освобождаването на заетия аудио ресурс когато искам да подменя on-the-fly библиотеката. По-точно Audiere освобождаваше веднага всичко, но на GStreamer му отнемаше поне 5-6 секунди и switch-ването помежду им не ставаше гладко. В резултат на това се наложи да си напиша адаптор към GStreamer от стария код за плейване на фиайлове, който ползваше Audiere. Беше кървава баня, но се справих, даже промените по интерфейса бяха почти незначителни. За съжаление GStreamer е слабо документиран също, макар че има туториали, но референса (вкл. и този, който е в интерпретатора) е много постен. Голяма мъка беше, но сега поне мога да плейвам радио 🙂

Day 9:

Гледах Ледена Епоха 3 (3D), но не беше нещо особено. Поради този факт не свърших много – оправих цветовата схема на плейъра, проведох задълбочен рисърч за пускане на application в background, който не доведе до никакви реални резултати. Впоследствие открих workaround – просто трябва да се пусне плейъра във втори терминал (ctrl+alt+f[1..6]) и да се switch-ва в него като трябва да се контролира pyp3. Останаха ми още два малки таска и после тестове.

Day 10:

Добавих възможност за конфигуриране на outlook-а на плейъра, като се опишат цветовете на отделните части от ascii интерфейса в конфигурационен файл. Готино е когато нещата са максимално customisable. Сложих и event handler, който да следи по кутлурен начин дали дадена песен е свършила. Това ми отне сумати време, защото няма кой знае колко полезно инфо в нета… или трябва да падне голямо четене, докато се разбере по-точно. Много мразя, когато се занимавам с непопулярни неща, защото са слабо документирани и само ми късат нервите! Освен това в крайна сметка при четене от online stream не пристига event за край на stream-а ако се прекъсне връзката, което е хипер малумно, защото на това се надявах най-вече :(. Оправих разни бъгове и с това приключвам официално работа по Pyp3 (е имам да пиша тестове, но за тях няма да блогвам).

Final Conclusion:

Използвани компоненти: GStreamer, Urwid, Mutagen, Audiere (GStreamer-а го замени впоследствие)

Функционалност:

– плейване на файлове и стрийминг

– филтриране, jump, add/del, select, directory browsing dialog (само интегриране)

– auto save/load на плейлистата и цветовата гама на плейъра

– play/pause/stop/next/prev, fastforward/slowbackward ( 😀 ), ID3 tags, текущо време на плейване, state на плейъра, volume

– autoplay next track, autoreconnect to stream on lost connection

След една камара време и безсъние резултата не е чак толкова грандиозен, но това се дължи основно на факта, че падна голяма борба заради слабите документации и защото трябваше да switch-на от Audiere към GStreamer. Съответно голяма част от времето отиде за направата на, иначе, не особено сложни неща.

Неща за които не ми стигна времето:

– Queue – малко ме е яд за това, защото има полза от опашка

– Rating – не ползвам такива неща… но може да има смисал

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

pyp3


Jun 08 2009

Несправедливостите по Програмисткия свят

Category: Нонсенс,СоциалниLucho @ 23:51

Всеки от вас ще каже, че живота е несправедлив, че понякога на добрите хора им се случват лоши неща и че това колкото и да е гадно е факт и няма как да се преодолее.
Това винаги ми се е искало да не е така и винаги съм се борил, физически, умствено или емоционално, за да го променя. Защото вярвам, че какъвто код посееш такава програма ще пожънеш (ако въобще се компилира), какъвто колбек извикаш, такъв ще се обади и сговорна програмистка дружина ражда само слепи програми (последното не е по темата, де).
Та, в какво се изявява моята болка и защо пиша тази статия.
От известно време насам се мъча да живея спазвайки един цитат (не ме питайте как го намерих):

Don’t waste your time on jealousy. Sometimes you’re ahead, sometimes you’re behind. The race is long, and in the end it’s only with yourself.

С всяка клетка от съществото си (днес е денят на клишираните изрази) вярвам, че това твърдение, този цитат е абсолютно верен. Напълно го осъзнавам, но продължавам вътрешно да завиждам – завист породена, не от това че някой има повече от мен или знае повече от мен, а от това че някой който знае по-малко от мен или с нищо не ме превъзхожда получава повече. Тъй като тази завист май май повече ми вреди от колкото ми е помогнала (освен да ме амбицира от време на време, което не е малко, де), всячески се опитвам да я потисна и всячески не успявам, а и как да успея?! Вярвам в равенството, в справедливостта, но понякога всички тези убеждения биват брутално опровергавани и това ме вбесява.

Деф. 1 (дефиниция на Стефан за добрия програмист)
Всяко съществуване, което се изявява в спане, ядене (казва се “хранене”) и кодене се нарича Програмистка форма на живот.

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

Аз лично съм разширил тази дефиниция по следния начин:

Деф. 2 (дефиниция на Лъчо)
Всяко съществуване, което се изявява в спане, хранене, занимаване с разни други неща от време на време и кодене се нарича Програмистка форма на живот.

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

Деф. 3 (дефиницаия на нисша форма на Програмистки живот)

Всяка форма на живот, която не се покрива от дефиниця 1 или дефиниция 2, но се числи към IT бранша се нарича нисша форма на Програмистки живот.

Например тестъри или некадърни дивелъпъри…

Та представете си следната картинка – двама души, единият сте вие – човек, който води своето битие по дефиниция 1 или 2 и друг, който не го прави – дефиниция 3. Сега си представете, че вторият взима по-висока заплата от вас или пък че получава по-добри отзиви за работата си (противоречиво, но възможно), макар и да я е свършил супер зле, но това няма как да се види от шефовете естествено. Представете си, че втория получава повишение, а вие – не, или даже че ви става шеф. Незнам кой би се примирил с подобна несправедливост или би се направил на скромен и би го преглътнал… аз немога. Лошото, е че немога да преглътна и по-леки несправедливости.

Немога да преглътна, когато съм се готвил една камара време за даден изпит и някой отиде и препише и накрая аз имам 4, а той 6.
Немога да преглътна, когато някой който неможе да напише името си без 3 правописни грешки, получи по-добра оценка от мен.
Немога да преглътна, когато някой представи проект, който очевидно не е писан от него, но е 10-12 пъти по-дълъг от на всички останали и получи потупване по рамото и овации.
Немога да преглътна, когато по-нисшестоящи форми на Програмистки живот, като например тестери или лелки които седят по-цял ден на бюро и нищо неправят (HR) и други получават заплата близка до моята (опазил ме бог да е по-висока).
Немога да преглътна, когато някой “мениджър” или “шеф” (това трябва да са много големи кавички), реши че на всеки програмист, трябва да се падат по 1.8 тестера, 1.3 HR-а, 2.4 аналисти и още една камара баластни нисши форми на Програмистки живот.
Немога да преглътна, когато по-нисшестоящи форми на Програмистки живот, ги пращат в командировка по няколко пъти годишно без видима причина, а аз се боря с бъгове или технически проблеми.

Всичко това за мен е несправедливо. Несправедливо е спрямо мен, спрямо усилията които съм положил и това ме изкарва от релси!

Не ме разбирайте погрешно, тестъри (наричани още QA), HR и останалото ИТ излишество са нужни – да, няма спор, но в други количествени пропорции и би трябвало да им се обръща доста по-малко внимание, имайки предвид, че програмистите създаваме нещото, от което фирмата печели. Програмистите и архитектите са тези, които реално правят баницата. Другите я опитват, за да проверят дали сиренето е достатъчно или я продават/договарят с някой клиент. Някой даже и това неправят, бтв.

Нехайството към тези, които правят баницата рано или късно ще бъде наказано, разбира се, може само да се надяваме, че ще е рано. Също и тези, които са се забили на дадено ниво и нямат желание да просперират рано или късно ще ядат калая, защото бранша и технологиите не са статични като тях, просто. Точно за това малките фирми са “good”, а големите “evil”. Малка фирма с 10-20 програмиста означава, че се внимава, кой се наема. Също така в нея не си малко зъбно колелце, без което машината ще продължи да работи – там ти си някой и съществуването ти е важно за абсолютно всеки в нея. В големите компании ти си никой, никой не знае за теб, има една камара административни глупости, с които те занимават. Освен това 80% от хората са некадърни, защото по някое време се е наемало на килограм, повечето са без мотивация или са “скатавки”, което е несправедливо спрямо останалите 20%. Процента на нисша форма на Програмистки живот е по-голям от колкото трябва и още един куп неща, които обричат всички процеси в компанията на неефективност. За съжаление това работи, работи защото се ползва масово и с успех, но както в природата, така и в IT индустрията има еволюционни модели и това означава, че след време всичко неефективно ще е умряло… след доста време за съжаление, така че ни остава само да чакаме и да наблюдаваме.

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

До тогава гледайте “Мойто име е Ърл” и не се примирявайте с нищо, което не е справедливо!


Apr 16 2009

Мъка, мъкаааа….

Category: НонсенсLucho @ 00:38

Предупредиха мe колко скапан може да е wordpress-a и май почнах да се убеждавам… Оказа се че не е чак толкова простичко да преведеш темата, която ползваш. След като преведох дифолта и нищо не стана потърсих в гугъл. Ок, разбрах как да си прекръстя файла, който държи превода, НО изненада – трябва да си изтегля някакъв ГНУ туул, с който да компилирам превода до някакъв машинен обект..WTF!?!?!

Още по-изненадващо е че тоя туул има порт за Windows, и като всичко GNU идва под формата на сорс без билд. Инструкцийте за компилиране са 200+ реда. В резултат на това ще се бутна под Убунту и ще си изгубя още сумати време.

Трябва да компилирам туула, който да компилира превода ми за да имам тема на български… гнусен парадокс 😐


« Previous PageNext Page »