VândPupăză

Icon

Bine o zis cine o zis cand o zis ce o zis

White Screen of Death, reinvierea telefonului

Nu mai am Telefon!

De 6 luni ma chinui cu un telefon slab, inlocuitor pentru vechiul telefon Sony Ericsson W800i care a refuzat sa mai porneasca.

Nu am gasit un service GSM care sa imi inspire incredere dar am fost si un lenes macabru. Asa ca l-am purtat cu mine in rucsact toata perioada asta.

Am incercat sa ii inlocuiesc bateria, dar asta nu mi-a rezolvat problema. In schimb am observat ca atunci cand incerc sa il pornesc cu bateria noua imi afiseaza un ecran alb. Cateva luni mai tarziu lenea s-a disipat, am cautat pe net dupa simptomele astea si am gasit o droaie de dobitoci.

Exista servicii unde poti descrie problema si un bun samaritean priceput iti poate sugera o solutie. Exista si cretini care iti ofera solutia “buy a new phone”. Ceea ce aproape am facut. Din pacate telefoanele nu se mai fac “ca pe vremea mea” si a fost greu sa gasesc unul vrednic – si ala o caruta de bani.

White Screen of Death

Batranul Google si ratiunea m-au impins sa caut solutii chiar la productaor pe site. Si am gasit. White Screen of Death, aparent, este un indicator in device-urile mobile ca ceva in sistemul de operare s-a dus dracului. De regula asta se fixeaza reinstaland sistemul de operare pe telefon.

Sony Ericsson are un soft care te ajuta cu inlocuirea sistemului de operare. Merge doar pe PC deci Mac users sunt trendinezi si isi iau iPhone sau sunt descurcareti si pun o masina virtuala de Windows. Procesul e simplu: scoti bateria, o bagi la loc, pornesti aplicatia utilitara, si in timp ce conectezi telefonul la PC prin cablul USB tii apasata tasta C. Mai departe e un procedeu simplu de tip “next-next-i-agree”. Cateva minute mai tarziu ai lucratura dracului – telefonul – in stare perfecta de utilizare.

In procesul de update / reinstalare iti vei pierde toate datele stocate in memoria telefonului. Support-ul de la Sony Ericsson sugereaza un back-up al datelor. Pupa-le-as mufa USB, cum sa fac asta daca nu imi porneste telefonul?

Am pierdut toate datele din memoria telefonului dar am din nou dracia functionala. Arata ca naiba, e zgariat, murdar, joystick-ul face gat la apasarea in jos dar e superb pentru ca e al meu. Si dupa ani de zile suntem din nou impreuna :) Este prima mea achizitie scumpa din banii mei. Imi aduc aminte ca am lucrat foarte mult pentru el si l-am apreciat pentru ca ii stiu valoarea – nu te gandi financiar.

Am invatat ca:

  • Sony Ericsson nu mai face telefoane cum le facea odata
  • Forumurile neoficiale de support sunt tapetate cu idioti
  • Nu trebuie sa mai fiu un lenes macabru!

De ce tr.im

tr.im este un serviciu cu acelasi scop ca si tinyurl.com – ia un URL lung, il stocheaza in baza sa de date si iti ofera un URL mult mai scurt care redirectioneaza spre cel original. Tinyurl avea la baza ideea ca iti va fi mult mai usor sa tii minte un URL scurt. S-a dovedit ca cea mai buna utilizare a acestor servicii vine impreuna cu Twitter unde ai limita de 140 de caractere / mesaj.

De ce imi place tr.im:

  • economie de caractere suplimentare (13 -http://tr.im/ vs 19 – http://tinyurl.com/)
  • mai usor de tinut minte si de scris in browser (sunt un lenes)
  • integrare cu twitter
  • ceva statistici la URL-urile accesate
  • o interfata web  mai placuta (moftul meu)

Stiu ca mai exista o sumedenie de alte servicii care fac acelasi lucru dar mie imi place tr.im.

Grooveshark e un music-on-demand radio online care ofera un serviciu numit tinysong.com prin care postezi pe contul tau de twitter un link spre piesa pe care o asculti.

PHP echo() pe antena3.ro

O usoara crapaciune in antena3.ro, bug de serveritate si prioritate maxime dupa standardele colegilor QE. L-am vazut pe pagina emisiunii Top Gear de pe site-ul antena3.ro

top-gear-antena3_1240613742876

1 miliard cand vrea muschiul lui Apple

Pe homepage la Apple.com e un counter care iti atrage atentia ca App Store (magazinul de aplicatii pentru produse Apple) va atinge 1 miliard de download-uri.

apple_store_2_billion_downloads

E adorabil pentru ca Apple va atinge acest numar (pe homepage) cand isi doreste, conform lui downloadcounter.js. Scriptul de JS nu face call-uri asincrone la server, nici macar ocazionale, ci ruleaza un algoritm simplu de incrementare. Singurul punct in care scriptul vorbeste cu serverul mama este la incarcarea paginii cand isi ia cea mai mare valoare atinsa dintr-un fisier text sincronizand data serverului cu cea a localelor de unde ruleaza counterul.

Apple ruleaza scriptul de incrementare pe baza unor predictii obtinute din deja aproape 1 miliard de downloads deci nu face mult rau. Totusi mi-ar fi placut sa vad din cand in cand un call de sincronizare cu numarul oficial de download-uri de la server – de dragul corectitudinii si calitatii cu care Apple isi obisnuieste audienta.

Daca lucrezi cu Prototype.js si ai nevoie de o idee pentru un algoritm de incrementare + counter sa te uiti in cel de la Apple. Daca poti citi cod JS obfuscat o sa il gasesti interesant :)

Pauza de server la CFR

Anunt Pauza Server la CFR

Anunt in gara CFR din Piatra Neamt.

Avand in vedere tehnologia pe care o foloseste CFR parerea mea e ca au o maimutica angajata care scoate serverul din priza pentru o ora si 5 minute. Sa vorbesti de scalabilitate si redundanta cu departamentul IT de la CFR.

Posteaza pe JobJob prin Twitter

Poti posta anunturi de angajare pe jobjob.ro folosind Twitter si o sintaxa speciala a mesajului. Jobjob are un utilizator special pe twitter caruia ii poti transmite mesajele de angajare.

In articolul despre microjobs.ro scriam ca mi se pare mai utila existenta sa drept un serviciu conex unui site de joburi de sine statator. Ma bucur ca cei de la jobjob.ro au vazut aceasta oportunitate si ca era intr-adevar un concept rezonabil.

Background:

microjobs.ro listeaza mesaje cu anunturi de angajare de pe twitter .
jobjob.ro este un agregator automat de anunturi de joburi de pe majoritatea site-urilor de profil din Romania.

Navigare mai rapida cu preload inteligent

Poti fura niste milisecunde dintr-o actiune cu mouse-ul daca te folosesti de evenimentul onMouseDown() din DOM.
Anticipezi logic actiunea de click odata ce butonul mouse-ului este apasat asa ca poti declansa un fir de executie in JS imediat ce ai inregistrat inceputul.

Acest truc iti permite sa “furi” cateva milisecunde pretioase din timpul unui download.

Un truc poate fi aplicat cu success este sa te folosesti de onMouseOver pe controalele dintr-o galerie foto intr-un sistem de livrare prin AJAX.

Mi se pare o actiune logica sa incepi preload-ul in background a pozei determinate de un thumbnail cand ai o constructie de navigatie similara cu cea de la Flickr. Din punct de vedere al interfetei ai putine motive sa faci hover peste acele imagini daca nu doresti sa navighezi prin galerie.

Photo Gallery Controls on Flickr

Desigur, e o jonglerie de performanta. Daca lansezi prea multe download-uri bazate pe actiuni incomplete ale userului poti deteriora experienta, dar cred ca daca iti gandesti bine planul de preload iti poti face galeria sa para mai rapida (as in responsive) pentru ca te folosesti de milisecundele dintre onMouseDown() si onClick()-ul complet pentru a incarca in browser o parte din continut.

Foloseste onMouseDown cu responsabilitate!
Uneori imi dau seama ca fac un click din greseala si imi mut cursorul de pe link, apoi dau drumu butonului. Asta impiedica actiunea de click.

Review microjobs.ro

Microjobs.ro

Microjobs.ro este un serviciu web care permite urmarirea de anunturi de job-uri postate pe Twitter.

Comparativ cu jobjob.ro care interogheaza automat site-uri de joburi, face sortari semantice si permite cautari globale, microjobs.ro este un efort tehnic nesemnificativ. Totusi, conceptul nu este deloc naiv.

Un job intra in microjobs.ro prin contribuita unui utilizator de Twitter care foloseste o sintaxa specifica. Deci serviciul cere implicare umana directa si nu actioneaza ca un agregator automat.

Avantaje

Tehnic vorbind microjobs.ro este o capusa – se bazeaza pe o sursa de continut administrata de alte sisteme. Acest lucru este benefic dezvoltatorilor pentru ca a permis lansarea rapida a serviciului fara efort semnificativ:

  • inregistrarea userilor se face prin Twitter, deci problemele de securitate a datelor sunt administrate de serviciul gazda
  • postarea de anunturi si culegerea de anunturi se face prin Twitter care filtreaza continutul cu caracter malefic (XSS, cracking, etc.)
  • serviciul nu stocheaza date decat, probabil, la nivel de cache pentru a-si implementa sistemul de cautare pe calupul de mesaje deja colectat. Aceasta face posibila lansarea pe o masina cu performante modeste, deci un cost de scazut de operare.
  • continutul pe larg al anunutului de angajare este stocat de alt serviciu pe alt site.
  • scalabilitatea este o problema care va fi rezolvata de Twitter. Cache-ul pe care presupun ca il foloseste microjobs il fereste de inactivitatea periodica a serviciului Twitter.

Dezavantaje

Este un concept interesant pe care nu l-am mai vazut incercat pana acum, dar vad cateva dezavataje ale serviciului microjobs.ro:

  • Necesita interventie umana
    Desi administrarea continutului se face de catre sistemul gazda, microjobs.ro este predispus troll-ilor. Un troll intr-un social network este orice de la un spamer care vrea sa isi aduca anuntul la suprafata prin postari frecvente pana la un om plictisit care va abuza de sistem postand mesaje care nu au nici o legatura cu scopul site-ului.Acest tip de useri aduce dezavantaje fiindca forteaza developerii sa intarzie dezvoltarea unor feature-uri creative pentru a construi mecanisme de inlaturare a continutului nepotrivit.

    Filtrarea mesajelor se face fie manual, prin interventia unui editor, fie automatizat. Este complicat sa iti faci machine learning pana la un nivel la care poate sa excluda automat mare parte din amenintarile la adresa calitatii serviciului, deci raman la presupunerea ca administrarea se va face de catre oameni.

    Atat timp cat serviciul nu se poate intretine singur eu il numesc monkey-driven.

  • Predispuns la mult zgomot
    Desi joaca un rolul unui semi-agregator de job-uri, microjobs nu permite nici un fel de sortare semantica. Mesajele vin calup la fel ca pe Twitter. Zgomotul este mare atunci cand esti cu adevarat interesat sa urmaresti o clasa de job-uri definita de anumiti parametri – companie, nume job, oras, etc.
  • Nu foloseste la ceva concret
    Dincolo de o intrupare similara lui zvonit.ro - serviciu care aduce la suprafata mesaje pe twitter care includ constructia #zvon, microjobs nu aduce beneficii directe. Nu ma pot abona la liste de joburi dupa filtre si primesc mult zgomot daca aleg sa il urmaresc din contul de Twitter.

Nu cred ca scalabilitatea serviciului va fi o problema pentru ca nu il vad ajungand departe. Nu aduce beneficii dincolo de propagarea unor anunturi de angajare.

Concluzie

Microjobs a fost cu siguranta o joaca tehnica interesanta dar avand in vedere ca nu aduce beneficii palpabile utilizatorilor sai ramane doar un experiment cu API-ul de Twitter. Vad mai multa utilitate in existenta sa drept serviciu conex unor site-uri solide de joburi precum jobjob.ro, jobber.ro, sau bestjobs.ro.

Fiindca nu rezolva nici o problema nu vad cum aceasta aplicatie ar putea fi monetizata astfel incat sa se merite intretinerea sa. Probabil va ramane doar la nivel de experiment.

Mi-ar placea sa vad cum parerea mi-e contrazisa de catre developerii din spatele microjobs.ro care ii vor aduce un plus de valoare printr-un feature cu adevarat inovator si util.

Numarul de feed-uri din Netvibes cu jQuery

Daca folosesti Netvibes drept feed reader si vrei sa stii cate feed-uri se ascund in tab-urile tale poti exporta feed-urile intr-un fisier opml si poti folosi urmatorul snippet de JS impreuna cu jQuery:

$.get("feeds.opml", function(data){
	var count = $(data).find('outline[type="rss"]').length;
	console.log(count);
});

In exemplu feeds.opml reprezinta fisierul tau cu feed-uri.
Poti exporta un opml cu feed-urile tale din Netbvibes din meniul “Your profile” > “Feeds”.

Naming reutilizabil in CSS

Denumirea claselor sau id-urilor in CSS dupa proprietatile elementului este improprie. Exemple de denumire gresita sunt:

#rounded-menu sau .blueLink

Argumentul cel mai comun adus impotriva acestor denumiri este ca face dificila mentenanta codului in sensul ca proprietatile elementelor se vor schimba in timp ce numele de clasa / id raman aceleasi. Pe termen lung denumirile de acest gen isi pierd relevanta si fac debugging-ul dificil.

Un aspect care mi se pare des pierdut din vedere este ca aceste denumiri impiedica reutilizarea usoara a codului.
De multe ori te vezi construind componente similare in structura: meniuri liniare, box-uri de search, butoane proeminente.

Daca meniul tau se cheama #rounded-menu sau #top-menu implementarea sa intr-un alt site necesita niste renaming pentru a-i da ceva relevanta daca proprietatile nu raman similare.

OOCSS este un concept foarte bun in care iti construiesti componente generice pe care le poti extinde apoi in site-urile in care le implmenetezi.

.pipe-menu sau .tab-menu mi se par mai usor de reutilizat.

.box, .box-header, .box-footer, si .box-content pot fi niste componente foarte utile pe termen lung.