QtADB

Ten wpis rozpoczyna cykl notek o aplikacjach ułatwiających zarządzanie zawartością telefonu opartego na Androidzie (bazuję na posiadanym LG GT540) poprzez komputer z systemem Windows. Jako pierwszy na tapetę idzie QtADB – bardzo ciekawy menedżer stworzony przez Polaków.

QtADB to aplikacja z kilkoma zastosowaniami, z czego jako główne wymieniłbym menedżer plików oraz aplikacji. Program posiada stosunkowo prosty, lecz przejrzysty interfejs oparty na bibliotece Qt. Nie wymaga instalacji, bo dostarczany jest jako paczka typu portable – wystarczy rozpakować i uruchomić plik QtADB.exe.

Z naszym telefonem może się połączyć na dwa sposoby: poprzez USB (wymaga włączonego debugowania USB: Ustawienia » Aplikacje » Dla programistów) lub przez wi-fi (wymaga zainstalowania w telefonie adbWireless). Połączenie bezprzewodowe na pewno jest wygodniejsze, ale po pierwsze wymaga telefonu z dostępem root (a konkretniej wymaga tego adbWireless), po drugie demonem prędkości w tym trybie program raczej nie jest… W przypadku połączenia przez USB wszystko działa szybciej, co w sumie jest nieco zaskakujące. Przeczytaj resztę tego wpisu »

Digitizer LG GT540

W pewnym momencie telefon zaczął mi świrować. Naciskałem ekran, a on reagował jakbym palec miał 3 centymetry dalej – wymazałem więc dane użytkownika, wgrałem oryginalny rom operatora i chciałem odnieść do serwisu… okazało się jednak, że okres gwarancji już minął. Pogooglowałem więc i odnalazłem problem – uszkodzony digitizer. Postanowiłem więc kupić go i wymienić własnoręcznie, a co!

Na wstępie zaznaczę – operacja udana, pacjent przeżył ;) To w razie gdyby ktoś miał wątpliwości lub posiadał wewnętrznego leniuszka, który nie pozwalałby mu na doczytanie do końca. Ale do rzeczy, jak wymienić ekran w LG GT540 Swift?

Odpowiedź nie może być jednoznaczna, bo również zdecydowanie różne są umiejętności każdego z nas. Powiem więc tak: jest z tym sporo dłubaniny, bo żeby wymienić ekran trzeba w zasadzie całkowicie rozłożyć telefon, ale jednocześnie stosunkowo proste – poza jednym krokiem, o którym za chwilę – i wykonalne dla każdego, kto nie boi się śrubokręta i majsterkowania.

Uwaga, nie odpowiadam za szkody wyrządzone w Waszych telefonach – jeśli nie jesteście pewni, że potraficie wykonać opisane tu czynności, zostawcie to fachowcom.

Przeczytaj resztę tego wpisu »

Symfony2

Jako, że jakiś czas temu w pracy na warsztat trafiła do mnie aplikacja oparta o Symfony (1.2), z którym nie miałem wcześniej do czynienia, musiałem trochę zgłębić temat i zaowocowało to tym, że spodobał mi się ten framework. Z kolei chyba stosunkowo niedawno ukazała się nowa wersja, więc chcąc zgłębić temat jeszcze bardziej, postanowiłem przygotować sobie środowisko spełniające wymagania Symfony2. I tu natrafiłem na problemy….

Już na starcie okazało się, że mam za niską wersję PHP (wymagana jest 5.3.2), więc trzeba było sięgnąć po bardziej aktualną. O ile instalacja nowej wersji WampServer 2.2 przebiegła bezproblemowo, jak również przeniesienie istniejących deklaracji wirtualnych hostów o dziwo poszło jak z płatka (no poza jednym błędem szybko wyłapanym dzięki C:\wamp_server\logs\apache_error.log), o tyle dołączony do Symfony2 skrypt sprawdzający kompatybilność z wymaganiami (symfony2/app/check.php) pokazał dodatkowo dwa ostrzeżenia. Jedno udało się wyeliminować błyskawicznie, wystarczyło włączyć rozszerzenie intl w PHP. Z drugim nie było tak łatwo.

Wprawdzie bez tego Symfony2 również by działało, ale taki komunikat:

[[WARNING]] Checking that a PHP accelerator is installed: FAILED
*** Install a PHP accelerator like APC (highly recommended) ***

a zwłaszcza „highly recommended” robi swoje ;) Podrażniło to moją ambicję i zabrzmiała nutka pedantyzmu ;) Ale do rzeczy. Przeczytaj resztę tego wpisu »

GIT

Wszelakie pliki tymczasowe, przeważnie także obrazy i inne media, dodaje się do pliku .gitignore po to by w ogóle nie były indeksowane. A co jeśli plik jest wymagany, by aplikacja działała poprawnie, ale jego zawartość może ulegać zmianie, np. w zależności od instancji lub chwilowych zmian w konfiguracji?

Gdy plik zostanie już raz zaindeksowany, można przestać śledzić jego stan usuwając wszystkie informacje z repozytorium dotyczące tego pliku, wykonując komendę git rm --cached nazwa_pliku i dodając odpowiedni wpis do pliku .gitignore. Nie jest to jednak to, co chcielibyśmy osiągnąć w przypadku plików, bez których aplikacja przestaje działać – bo co w przypadku, gdy zrobimy git clone? Nasza nowa instancja nie będzie zawierała tego pliku i grozi nam fatal error. Samo dodanie do .gitignore również nie rozwiązuje problemu, bo Git tak czy siak podpowiada zmiany w pliku i z łatwością można nieświadomie zatwierdzić zmiany w tym pliku używając git commit -a. Przeczytaj resztę tego wpisu »

GIT

Rozwlekły tytuł notki niejako obrazuje skalę mojego problemu – dłuuuugi czas męczyłem się z dziwnym zachowaniem Gita, który zamiast aktualizować aplikacje nad którymi pracowałem, aktualizował jedynie historię wersji, a katalog roboczy musiałem poprawiać ręcznie. Bardzo upierdliwa robota, gdy problem dotyczy wielu aplikacji, z których każda może mieć więcej niż jedną zdalną instancję…

To, co dla mnie było błędem Gita, okazało się przemyślaną strategią. Tak właśnie zachowuje się Git podczas wpychania zmian do aktywnej gałęzi – dla pewności zostawia nienaruszony katalog roboczy, a jego aktualizację należy wymusić ręcznie za pomocą komendy git checkout -f. Zupełnie nie skojarzyłem tej zależności i za każdym razem zastanawiałem się czemu raz katalog roboczy aktualizuje się wraz ze zmianą w repozytorium, a raz wymaga ode mnie bym logował się przez ssh i dokańczał robotę własnoręcznie. Dziś postanowiłem zwalczyć problem i proszę, sukces!

Przeczytaj resztę tego wpisu »

Firefox - about memory

Gdy Chrome był jeszcze w powijakach jednym z koronnych argumentów za tą przeglądarką była niska zasobożerność. W porównaniu do innych przeglądarek, zwłaszcza do Firefoxa, wydawał się lekki jak piórko. A jak jest teraz?

Prawdopodobnie najlepszym benchmarkiem dla przeglądarek jest…. moja żona ;) Sposób, w jaki przegląda Internet, stawia komputery i przeglądarki pod ścianą – dziesiątki, czy też setki, otwartych zakładek w kilku przeglądarkach jednocześnie. Całkiem niezły komputer potrafi tak zamulić, że na jego reakcję po naszej aktywności trzeba chwilę poczekać.

Nie jest to jednak Jej wina; trendy webowe, bazujące na ciągłym aktualizowaniu zawartości w tle (zawołania ajax), wodotryskach (przesuwane tła, zmieniane rozmiary elementów) – wszystko to realizowane jest przez setki linii kodu JavaScript. Jak łatwo można się domyślić, sporo witryn tworzonych przez domorosłych webmasterów zawiera duże partie nieoptymalnego kodu, któremu nawet najlepszy garbage collection nie pomoże. Nawet najlepsi i najwięksi gracze Internetu czasem muszą znaleźć kompromis między wydajnością, zużyciem zasobów, a tym co chcą osiągnąć. Jak bardzo JavaScript obciąża pamięć? Szybki rzut oka na about:memory i co:

Firefox - about memory

Połowa zużywanej pamięci to JavaScript! Przeczytaj resztę tego wpisu »

Website access log visualization

Wyobrażaliście sobie kiedyś log serwera jako walkę zawołań z obsługującą je maszyną, walkę realizowaną w stylu legendarnej gry Pong? Zapewne nie, ja zresztą też nie :)

Jak się jednak okazało, ktoś wpadł na tak szalony pomysł i w dodatku fantastycznie go zrealizował. Zawsze zdumiewa mnie, gdy ludzie potrafią spędzać wiele godzin nad czymś, co w praktyce nie ma wielkiego zastosowania, ale po prostu ładnie wygląda, oferuje swojemu autorowi dobrą zabawę i rozwój osobisty. Taka sztuka dla sztuki poniekąd, ale jaka ładna:

I jeszcze jak „romantycznie” się nazywa: Logstalgia ;) Bliźniaczym projektem, do którego trafiłem najpierw przeklikując się przez repozytorium w GitExtensions jest Gource. On z kolei przedstawia historię zmian aplikacji jako rozwój drzewka, z centralnie umieszczonym folderem głównym, gdzie na każdej gałęzi rosną pliki:

Genialne jest to, że autorzy commitów latają wokół drzewa jak pracowite owady. Naprawdę, w kategorii „zrobienie sztuki z czegoś trywialnego”, oba wspomniane narzędzia dostają Złote Globy i Oskary jednocześnie ;)

Szymek

Wprawdzie istnieje realna obawa, że nikogo to nie interesuje, to jednak odczuwam potrzebę by wyjaśnić czemu przez pół roku nie napisałem tu ani słowa.

A byłoby co pisać. W pracy każdego dnia trafiały się drobne nowinki, sztuczki, kruczki i haki. Wzbogaciłem wiedzę na temat Gita, Basha, PHP, JS (również jQuery), MySQL, aż ciężko wszystko wymienić. Pogłębiłem wiedzę użytkową i administracyjną w aplikacjach Atlassian (JIRA, Fisheye, Confluence). I o wielu z tych rzeczy bardzo chciałem coś napisać, podzielić się wiedzą i ułatwić innym to, czego sam się naszukałem.

Jednak życie zaoferowało mi udział w najwspanialszym projekcie – ojcostwie :) Po dniu pracy, pomijając potrzeby domowe i zmęczenie Żony, patrząc czysto po ojcowsku, ja po prostu wolałem spędzać czas z synem niż kolejne godziny gapić się w ekran. Pewnie mógłbym gdzieś upchnąć redagowanie, jednak mam być może trudne podejście w tej kwestii, bo lubię pisać za jednym zamachem bez wielodniowego trzymania szkiców, a jednocześnie lubię opisać dobrze i z pomysłem. A to się przeważnie wyklucza z pisaniem z doskoku :)

Dzisiaj Szymek spędza dzień z Babcią, a ja powoli w głowie układam sobie życie codzienne by jednak wrócić do aktywniejszego realizowania swoich hobby. W powietrzu wisi wiele moich projektów, zarówno programistycznych, jak i muzycznych, graficznych. Byłoby świetnie, gdyby udało się chociażby drobnymi kroczkami iść z nimi do przodu. Aby tak się jednak stało muszę ułożyć sobie dni, nauczyć się bycia dobrym mężem i tatą jednocześnie mając czas na swoje sprawy. Tak by na moich pasjach nie traciła rodzina. Są nawet projekty, których realizacja jest wspólnym dobrem moim i Żony, więc myślę, że przy dobrych chęciach z obu stron uda się to ogarnąć ;)

W Nowy Rok weszliśmy z własnym samochodem, ułożonymi sprawami finansowymi, z Najpiękniejszym Szkrabem u boku, więc najlepsze co mogę zrobić to podtrzymywać tę dobrą passę. I czemu miałoby się nie udać :)?

Facebook

Facebook ma to do siebie, że ciągle się zmienia, ciągle rozwija, ciągle dodaje nowe opcje. I ma to do siebie, że o sporej części z nich nie informuje, a ludzie nie mają o nich pojęcia.

Zupełnie przypadkowo dziś natknąłem się na ciekawą opcję: pobieranie informacji ze swojego profilu w postaci archiwum. Jeśli więc ktoś chciałby poczytać sobie wszystko co do tej pory wypocił na swojej (i nie tylko) tablicy, ma taką możliwość. W dodatku nasze informacje profilowe zrzucane są w postaci plików html, można je więc przeglądać lokalnie w swojej przeglądarce, nie mając dostępu do internetu.

Mamy więc Profil, czyli wszystkie informacje o naszej pracy, wykształceniu, zainteresowaniach – generalnie o wszystkim, co można znaleźć w naszym profilu online. Jest to przygotowane bardzo schludnie i po lekkim sprzątaniu (np. wyrzuceniu kilku stron, które się lubi, a którymi nie ma się co chwalić) wyszło by z tego całkiem zręczne CV ;) Mamy Tablicę, czyli zrzut całego naszego słownego udzielania się na Fejsie – można więc stanąć oko w oko z zalewem pierdół, o których pisałem niedawno. Jest też pełny zestaw naszych zdjęć, które wrzucaliśmy na przestrzeni dni, tygodni, miesięcy czy też lat egzystencji na FB. Całość uzupełnia lista znajomych (alfabetycznie imię i nazwisko) oraz archiwum konwersacji w systemie prywatnych wiadomości. Przeczytaj resztę tego wpisu »

Facebook

Facebook. Przedstawiać chyba nie trzeba? Zjawisko o skali epidemicznej, stworzone by ludzi łączyć, w praktyce raczej będące największym, bezcelowym pochłaniaczem czasu.

Znam ludzi, którzy zamiast robić coś konstruktywnego mogli siedzieć przed komputerem i co 10 sekund klikać „Odśwież pulpit”. Znam też takich, którzy godzinami oglądają telewizję, takich, którzy wolą przespać każdą wolną chwilę, takich co to wolą ubijać krwiożercze stonogi swoim elfickim alter ego. Nie twierdzę, że sam nie wpadam w takie pułapki – wręcz przeciwnie, sam zmarnotrawiłem kupę czasu na bieganie wojem-magiem w Runes of Magic, które to chciałem jedynie przetestować, a ostatecznie wpadłem w syndrom „jeszcze jednego levelu” (dopiero z perspektywy czasu widzę jakie to głupie, więc odradzam wszystkim, którzy też myślą o „tylko spróbowaniu”).

Jednak pracując przy komputerze, zarówno w pracy jak i hobbystycznie, chcąc nie chcąc mogę zaobserwować bodajże największego zjadacza czasu i szarych komórek: Facebooka. Przeczytaj resztę tego wpisu »