13 nov. 2012

Aptoide downloader

Post destinat celor cu telefoane bazate pe Android si au auzit de aptoide. Si care folosesc Linux sau stiu de Cygwin. Posibil sa mearga si pe MacOS cu utilitarele specifice instalate.

Povestea incepe acum ceva timp, cam cu 2 luni in urma. Am dat peste un programel care descarca apk-uri din alta parte decat de pe Google Store/Play Store.

Partea naspa e ca nu mi-a placut mie prea mult aplicatia lor. Mi s-a parut dubioasa, la fel cum mi se par toate marketurile in afara de cele oficiale. In fine, nu ne mai lungim, ideea e ca Aptoide e ca un fel de Installous pentru aifonisti.

Partea buna e ca au si un site care descarca de fapt un fisier .myapp, fisier text ce e pe urma parsat de catre aplicatia lor dubioasa si fisier ce contine de fapt link-ul catre *.apk. Am mai avut o tentativa pana acum de a face un script ce descarca direct apk-urile fara sa ai instalata aplicatia pe telefon, dar m-am luat cu altele si nici ca am inceput-o vreodata.

Tentativa a fost de fapt o idee ce mi-a trecut prin cap si am ramas la transformarea agentului Firefox in Android, cat *.myapp, click link, descarcare *.apk. Totul era ok, zic eu, doar ca numele apk-urilor erau exact ca si cum ar fi trecut printr-un bombardament si era greu la un moment dat sa distingi intre apk-uri, mai ales daca aveai destul de multe in folderul de Download.
Asa ca azi l-am facut. L-am scris. L-am facut pe motherfucker.

M-am pus pe scris, m-am chinuit 10 minute si mi-am dat seama ca nu merge treaba asa si ca daca nu urmez un plan se duce totul. Mi-am adus aminte cum trebuie sa incepi orice proiect.





Am luat o foaie de hartie, am scris algoritmul
(stiu, stiu, arata jalnic, nu respecta regulile, ma rog, fiind un one man job si necitind-ul si altcineva e destul de bine) si m-am reapucat de treaba.







Bucata cu bucata am inceput sa scriu scriptul. Iar. 15 minute mai tarziu aveam bucatile cu checkmark + extragerea.
Inca 15 minute mai tarziu ascultam Megadeth si Black Sabbath si dadeam cu bash -x in script sa ma prind ce variabila nu functiona cum trebuie, fix in mijlocul scriptului. Si... De ce! Dupa inca 10 minute mi-am bagat picioarele in el, in algoritm, in foaie, mi-am luat o friptura in fata si m-am uitat la Mythbusters.
Dupa masa am bagat iara Black Sabbath si in alte 15 minute aveam tot scriptul.
Rulat cu bash -x sa vedem cum merge. Totul era ok. 10 minute de infrumusetare, si hai sa-l bagam pe github.
Publicat pe git, testat de o persoana, raportat: "Dom'ne, nu merge!" Baaaa, ce naiba? Testat personal, totul mergea cum trebuie, totul era bine. Si l-am incercat iara cu alt link si bash -x si aici mi-a folosit "curatenia de primavara" din script.

Erorile raportate la sfarsitul scriptului:
+ rm /tmp/Facebook%20Messenger
+ rm /tmp/Facebook%20Messenger.myapp
rm: cannot remove ‘/tmp/Facebook%20Messenger.myapp’: No such file or directory
m-au facut sa ma prind ca nici macar nu se descarca pagina. Si am gasit vinovatul pana la urma. Un rahat de sed. Bineinteles, vinovatul era intre scaun si monitor. Long short story, Aptoide are mai multe store-uri si eu ii facusem modifcarea adresei doar pentru unul. Fixed, released din nou pe git, should work.

Cum functioneaza? Pai... algoritmul e mai sus. Cum se foloseste?
./aptoide adresa_http
Se poate modifica locul de salvare a aplicatiilor si evident, tot scriptul.

Licenta: GPL
Adresa HTTP: https://github.com/StefanescuCristian/Aptoide-Downloader.git
Adresa git: git://github.com/StefanescuCristian/Aptoide-Downloader.git
Cygwin: http://www.cygwin.com/

8 nov. 2012

Linux Prank.

Gluma am auzit-o la LIF si a fost facuta pe Windows.

Chinuindu-ma de vreo doua zile cu un incepator sa-i explic cum se inverseaza click dreapta cu click stanga, mi-a venit azi ideea ca poti face si un mic "rau", nu numai bine.
Fiecare distributie Linux are particularitatile ei, unele dintre ele neavand optiunea de a inversa butoanele mouse-ului. Chestia asta tine in principal de mediul grafic. In Gnome 2 tin minte ca puteai inversa butoanele din setarile mouse-ului. In Gnome 3 nu poti. La fel, stiu ca mai merge treaba in KDE4 si parca (nu dati cu pietre) in Xfce, dar nu sunt sigur.
Evident, singurul lucru care uneste mediile grafice este serverul X. Si cum serverul X e destul de destept, putem face un fisier numit .Xmodmap in home-ul persoanei victimei in care sa scriem pointer = 3 2 1 4 5 6 7 8 9 10 11 12. Pentru efect instantaneu, daca suntem logati cu userul victimei, dam comanda xmodmap ~/.Xmodmap. Daca nu, asteptam ca victima sa se logheze si schimbarea va avea loc automat.

Mai ramane o singura "problema": permisiile din Linux. Cum treceti de ele? Va las pe voi sa descoperiti ce si cum.

Rookie mode: desfaci mouse-ul si inversezi firele (Global la nivel hardware, risc sa deteriorati mouse-ul)
Easy mode: su(do) + un editor text + chmod/chown
Expert mode: su(do) + usermod. N-aveti voie sa umblati cu chown/chmod.
Hard mode: setarea sa fie facuta dintr-un singur fisier, pentru toti userii. (Global, la nivel software)
God mode/Hardcore mode: ??? Sa faceti reclamatie la firma producatoare a mouse-ului iar aceasta sa schimbe butoanele intre ele pentru toti mousii. Eventual sa faca si rechemari in "service" si sa ofere inlocuirea automata a mousilor defecti.

Gnome 3.6(.1)

Si hai sa va spun povestea cu Gnome 3.6 din Archlinux. Sau povestea cu Archlinux din spatele Gnome 3.6? Va zic una care sa le combine, pentru ca nici azi nu stiu cum am reusit. Ce-am reusit? Sa pornesc in sfarsit dupa ore de chin Gnome 3.6.

Ieri am primit SMS de la twitter ca am o gramada (peste 100) de update-uri pentru Arch. De obicei fac update cand am ~20-30 de pachete noi sau cand apare un nou kernel in repo-ul lui graysky. Ma uit cu pacman -Qu, vad ca majoritatea pachetelor sunt de la Gnome. Trebuia sa plec de acasa si am zis ca-i fac upgrade cand ma intorc. Si bine am facut, pentru ca s-a lasat cu probleme.

Am upgradat, am dat restart, evident Gnome nu pornea. Nici nu ma asteptam sa o faca, asa ca am sters gconf-ul si dconf-ul manual. Restart la X, si tot nimic. Am reusit la un moment dat sa-l fac sa porneasca in mod fallback, dar arata jalnic si nu functiona mai deloc. Si pune-te cu strace din init3 sa pornesti gdm, gnome-session si mai tot ce era legat de gnome. Problema care aparea spre sfarsitul segfault-ului era imposibilitatea de conectare la X. Ma gandesc la un bug in momentul ala. Fallback-ul imi pornea dar cu erori de afisare, Shell-ul canci. Greu de crezut sa fie un bug, avand in vedere ca Gnome 3.6 a stat in testing cam o luna de zile, timp in care s-au rezolvat bugurile upstream si trimis inapoi in repo-uri 3.6.1, care si asta a stat in testing ceva timp. Deci erau sanse de 1 la 1000000 sa fie un bug. Si primul lucru la care m-am gandit a fost ca sunt destul de ghinionist incat sa ma afecteze pe mine.

Intru pe forumul arch, citesc pe acolo, HA, nu sunt singurul! Dar nu e nici bug. Problema era intre scaun si monitor. Se pare ca Gnome 3.6.1 din Arch e compilat cu systemd-login, renuntandu-se la consolekit (finally!). Solutia? Stergerea consolekit sau oprirea lui la pornire. Sters, scos din daemoni, restart. Nada, canci, zero, keine, nimic, nothing. Same shit. Aceeasi problema cu strace-ul, aceeasi problema cu GDM-ul, gnome-shell nu pornea, gnome-session la fel, se pare ca eram ala dintr-un milion. Trandafirul dintre flori, cum se zice.

Citesc mai multe de consolekit si polkit, de altii cu problema mea care cica au rezolvat-o facand upgrade. Upgarde la ce? Deja eram sincronizat cu serverele oficiale. Si ma gandesc sa mai instalez polkit pentru ca tin eu minte ca am avut probleme cu el cand am trecut pe systemd. Intr-adevar, era o problema cu polkit. Bun, restart la X, gdm merge, voila! Bag parola, shell-ul canci. Nu voia in draci sa porneasca si ma dadea inapoi in Gdm. Ba sa dea dracu'-n el de shell si de Gnome. A dracu' cacanarie proasta, sa-ti bati nemilosu' in ea...

Si stateam si ma gandeam ce as mai putea sa-i fac lui Căcălăcă asta de Gnome3.6. Xfce? KDE? Ar fi mers un KDE. Dar parca n-as renunta la Gnome inca. Si nu stiu cum imi aduc aminte ca am avut la un moment dat Unity instalat pe langa Gnome. Am listat frumos pachetele instalate din repo-ul de Unity (repo neoficial) si am vazut ca multe din componentele din Gnome erau cu -ubuntu dupa nume. Adica upgrade-ul meu failase de fapt. Ma rog, pe jumatate. Nah, chestia e ca G3.6 era inaintea pachetelor din repo-ul de Unity si evident apareau probleme. Plus ca tot ce era cu -ubuntu in coada, era compilat cu patch-uri Ubuntu. Patch-uri ce mergeau pe Gnome 3.4, dar nu si pe 3.6. Inainte sa ma apuc sa sterg un repo intreg, am vrut sa ma conving ca de la Unity/Ubuntu e problema. Totusi aveam unele pachete care imi foloseau in G3.4, de asta si aveam instalat o parte din repo.

Am bagat iara un strace, de data asta gnome-shell segfaulta din cauza lui "liboverlayscrollbar.so", fisier ce tinea de liboverlayscrollbar din Unity. Mdap. Sters pachete din repo-ul Unity, restart la GDM, voila. Totul bine si frumos, ca din cur scos. Nu, pe bune, de data asta chiar a mers.