Po ponad roku spokojnego i stabilnego korzystania z Debiana, postanowiłem zrobić generalne porządki. Przenoszenie systemu pomiędzy więcej niż jednym komputerem, częste eksperymenty i instalowanie - dezinstalowanie pakietów i inne tego typu operacje sprawiły, że moja instalacja zaczęła się zachowywać jak zdrowo dojechany samochód - jeszcze jeździ, ale coś mu stuka, lata, gdzieś rzęzi, a po drodze odpadł błotnik.
Hej, nie umarłem, żyję nadal, prace nad Joggerem 3 chwilowo wstrzymane (przepraszam, praca + matura :( wrócę do niego jak mi się ustatkuje sytuacja materialna), ale ja dziś nie o tym.
Przez długi-długi okres czasu odtwarzając filmy we Flashu, można było równocześnie skorzystać z dobrodziejstw ich wygodnego cache'owania. Gdy odpalaliśmy coś w YouTube, Vimeo czy Pornhubie (już ja wiem co ludzie robią z szerokopasmowym internetem ;)), plik flv z filmem był zapisywany jako /tmp/Flash[id] gdzie [id] to były znaki z serii A-Z, a-z i 0-9.
Od jakiegoś czasu jednak, Flash zapisuje takie dane w nieco inny sposób, częściowo niejawnie. Wejście do katalogu /tmp udowodni nam, że plików tam nie ma, a jednak jakimś sposobem na dysku zapisywane są. Jak?
Otóż jakiś cwany developer postanowił wykorzystać linuksowe uchwyty do pliku. Polega to na tym, że Flash tworzy jakiś plik, a następnie go kasuje nie usuwając uchwytu. Miejsce jest dalej zaalokowane jak trzeba, dane nadal można tam zapisać i czytać, ale plik nie istnieje w formie pliku, a po zamknięciu uchwytu staje się po prostu wolną przestrzenią dyskową.
Ale zaraz, to w takim razie w jaki sposób można dobrać się do tych danych? Otóż bardzo prosto. Sposób wykorzystany przez sprytnego developera jest mieczem obosiecznym - uchwyty do plików muszą istnieć, więc są gdzieś zapisywane ;) Co ciekawe, żeby się do nich dobrać nie trzeba używać skomplikowanych procedur, strace czy zewnętrznych programów - lista uchwytów do plików danego procesu jest tworzona w /proc/ID/fd/ .
Czyli mamy prostą metodę. Zakładając, że korzystamy z Google Chrome, robimy:
$ ps -eo pid,command | grep flashplayer
I szukamy naszego flashplugina, który w Chrome jest - jak wszystko co tylko się dało - osobnym procesem. U mnie wyglądało to następująco:
12449 /opt/google/chrome/chrome --type=plugin --plugin-path=/opt/google/chrome/libgcflashplayer.so --lang=pl --plugin-data-dir=/home/d4rky/.config/google-chrome/Default --channel=5017.0x11a036c0.344273884
W przypadku przeglądarek nie rozbijających wszystko na części pierwsze, interesuje nas proces samej przeglądarki, czyli np:
$ ps -eo pid,command | grep firefox 26698 /usr/lib/iceweasel/firefox-bin
Mając już do dyspozycji ID procesu, wchodzimy do - w moim przypadku - /proc/12449/fd i zobaczmy co mamy tam za cuda:
$ ls -ltr | grep Flash lrwx------ 1 d4rky d4rky 64 02-26 18:32 23 -> /tmp/FlashXXQyI8lK (deleted)
A tuś mi bratku! Okazuje się, że pliki są nazywane po staremu, tylko stosowana jest sztuczka z uchwytami ;)
Co teraz zrobić, skoro mamy już uchwyt? Proste, wystarczy traktować go jak każdy inny plik. Wskazuje nadal na poprawne dane, więc nic nie stoi na przeszkodzie, żeby zrobić tak:
cp /proc/12449/fd/23 "/home/d4rky/Elvis Prestley - Love me tender.flv"
albo
mplayer /proc/12449/fd/23
I voila! Magicznie odzyskujemy zdolność warezo... tzn "tworzenia kopii zapasowych" filmików z sieci. Prawda, że łatwe? ;)
Sposób odnaleziony na jakimś klonie StackOverflow.
Wreszcie się doczekaliśmy! Wyszedł nowy Firefox oznaczony numerkiem 3.5! Zgodnie z jego stroną, jest 10x szybszy niż Firefox 2.0, a także ma garść nowych featuresów:
Notka mocno 'na szybko', więcej napiszę gdy już mi się pobierze ;) BTM twierdzi, że jeszcze nikt na głównej, więc... :
(20:05:33) BTM: Napisz, będziesz pierwszy +lansrank ! :>
Przez cały czas pracy na najwyższej (1280x1024) rozdzielczości co jakieś 2-3 minuty nagle ekran freezuje i się 'paskuje', tzn niektóre paski przestają się odświeżać, a inne działają (przenoszenie okna tworzy ciekawe efekty).
Ciekawe... Karta czy Xy?
Nie mam pojęcia, które pomogło, więc przeklejam całość (sekcja Device):
Option "AccelMethod" "EXA"
Option "MigrationHeuristic" "greedy"
Option "ExaNoComposite" "true"
Option "FramebufferCompression" "Off"

Nareszcie, po wielu trudnych i długich chwilach i oczekiwaniu, udało mi się zdobyć to na czym mi zależało - mobilne urządzenie z możliwością korzystania z internetu i programowania/skrypcenia/łebdizajnerowania w dowolnym miejscu.