Blog poświęcony głównie tematyce związanej z informatyką oraz użytkowymi aspektami komputerów i Internetu.
Creative Commons License
Ten utwór jest dostępny na licencji Creative Commons Uznanie autorstwa-Użycie niekomercyjne-Bez utworów zależnych 2.0 Polska

darmowe liczniki
Kategorie: Wszystkie | informatyka | przemyślenia | użytkowe
RSS
środa, 18 lutego 2009
Ciekawa informacja w nietypowym miejscu

W ubiegłym semestrze podczas zajęć z przedmiotu Technika Mikroprocesorowa zajmowałem się programowaniem mikrokontrolera MSP430 firmy Texas Instruments. Jednym z naszych projektów był zegar cyfrowy. Przy pisaniu programu do układu korzystałem z dokumentacji biblioteki zegarowej firmy Texas. Znajduje się tam ciekawa informacja - często zdarzyło mi się zastanawiać kiedy następują zmiany czasu z zimowego na letni i odwrotnie. Okazuje się, że jest to precyzyjnie określone dla całej Unii Europejskiej i oddzielnie dla USA:

  Begins (hour +1) Ends (hour -1)
US First Sunday in April at 2am Last Sunday in October at 2am
EU Last Sunday in March at 1am Last Sunday in October at 1am
Wydobywanie ciekawych informacji z zakładek i historii Firefoksa 3

W przeglądarce Firefox od wersji 3 funkcjonalność zakładek i historii została zaimplementowana jako relacyjna baza danych SQLite. Wiąże się to ze znacznym zwiększeniem możliwości przeszukiwania zgromadzonych w ten sposób informacji, choć niestety z elastyczności tej nie można w pełni korzystać bezpośrednio z przeglądarki. Z Internetu korzystam w dość intensywny sposób, w przeglądarce mam ponad 2000 zakładek i codziennie zdarza się dodawać nowe. Chociaż staram się to jakoś zorganizować według folderów i etykiet, jednak do pełni szczęścia potrzebowałem 2 informacji:

  • Zobaczyć zakładki dodane w ciągu ostatnich x dni
  • Zobaczyć w jakim folderze znajduje się zakładka (prawdopodobnie moje nazewnictwo folderów nie sprawdza się rewelacyjnie ;) )

Ponieważ jest to baza danych, od razu przychodzi na myśl potencjalna możliwość zadawania zapytań w języku SQL. Poniżej opisuję narzędzia którymi można to zrobić, ich sposób użycia oraz kod przykładowych zapytań SQL.

Znaleziony i używany przeze mnie program do otwierania bazy danych SQLite to SQLite Browser. Nie wymaga on instalacji, bezpośredni link spod którego można go pobrać jest tutaj.

Dodatkowe informacje i narzędzia (które jednak nie są konieczne do wykonania tej "sztuczki"), w tym również fizyczny schemat bazy danych użytej w Firefoksie znajduje się na http://www.firefoxforensics.com/.

Pierwszą czynnością jaką należy wykonać jest skopiowanie (dla bezpieczeństwa) pliku bazy danych w inne miejsce  spod, którego będzie on otwierany w SQLite Browser. Może być konieczne włączenie widoku ukrytych plików w opcjach folderów Windows. Plik nazywa się "places.sqlite" i znajduje się

  • W systemie Windows XP:
    C:\Documents and Settings\<nazwa użytkownika>\Application Data\Mozilla\Firefox\Profiles\<ciąg znaków i cyfr>\
  • W systemie Windows Vista:
    C:\Users\<nazwa użytkownika>\AppData\Roaming\Mozilla\Firefox\Profiles\<ciąg znaków i cyfr>\

Po uruchomieniu SQLite Browser otwieramy skopiowany plik "places.sqlite" i przechodzimy do zakładki Execute SQL. W pierwszym okienku wklejamy kod zapytania SQL a w kolejnym okienku baza danych podaje wynik. Poniżej kilka przykładowych zapytań.

1. Folder zawierający daną zakładkę. Nazwę szukanej zakładki wpisujemy pomiędzy znaki %, tutaj jest to "codeflux".

SELECT title FROM moz_bookmarks WHERE id = (SELECT moz_bookmarks.parent
from
moz_bookmarks, moz_places
where moz_places.url like '%codeflux%'
AND
moz_bookmarks.fk = moz_places.id
AND
moz_places.visit_count > 0)

2. Zakładki dodane w ciągu ostatnich x dni. Tutaj sprawa może być trochę bardziej skomplikowana, jeśli wśród naszych zakładek znajdują się kanały RSS. Z punktu widzenia bazy danych są one nieodróżnialne od zwykłych zakładek, a ponieważ kanały RSS aktualizują się bardzo często może się okazać że większość wyniku tego zapytania będą stanowić jakieś pozycje np. aktualności z kanału RSS. Niemniej jednak ten sposób korzystania z RSS jest mało efektywny (polecam Google Reader) i raczej rzadko używany, więc nie powinno to stanowić problemu. W poniższym zapytaniu liczba dni to 4.

select datetime(  (dateAdded/1000000), 'unixepoch'  )  , moz_bookmarks.title, moz_places.url, moz_bookmarks.parent
from
moz_bookmarks, moz_places
where ( strftime('%s', 'now') - strftime('%s', datetime( (dateAdded/1000000),'unixepoch')) < 4*86400) AND
moz_bookmarks.fk = moz_places.id
AND
moz_places.visit_count > 0

3. 20 najczęściej odwiedzanych stron.

SELECT *
FROM moz_places
ORDER by visit_count DESC
LIMIT 20

4. Liczba unikatowych stron internetowych. Z moich obserwacji wynika, że chodzi o liczbę różnych stron w tym sensie, że wszystkie odwiedzane podstrony liczą się raz - tak jak strona główna. Przykładowo - wejście na stronę Onet.pl i przeglądanie działów prognoz pogody, wiadomości, sportu również będzie się liczyło raz - ponieważ wszystko to jest "w obrębie" strony Onet.pl. Liczba jest tylko przybliżona, bo mogą wliczyć się pobierane pliki oraz niektóre długie i nietypowe adresy mogą policzyć się kilka razy chociaż są podstronami. Z resztą widać to na liście tych stron - punkt 4.

SELECT COUNT(*) FROM ( SELECT count(moz_places.rev_host), url
FROM moz_places, moz_historyvisits
WHERE moz_places.id = moz_historyvisits.place_id
GROUP BY moz_places.rev_host
ORDER BY url ASC )

5. Jak wyżej, tylko lista tych stron

SELECT count(moz_places.rev_host), url
FROM moz_places, moz_historyvisits
WHERE moz_places.id = moz_historyvisits.place_id
GROUP BY moz_places.rev_host
ORDER BY url ASC

6. Lista wszystkich adresów internetowych przechowywanych w historii

SELECT url, datetime(  (visit_date/1000000), 'unixepoch'  )
FROM moz_places, moz_historyvisits
WHERE
moz_places.id = moz_historyvisits.place_id
ORDER by visit_date DESC


Kilka nieco innych zapytań znajduje się na wspominanej wyżej stronie Firefoxforensics. Zachęcam do różnych twórczych eksperymentów z formułowaniem zapytań - jeśli uda się napisać coś ciekawego zapraszam do komentarzy. Polecam raczej wzorowanie się na istniejących zapytaniach niż próbę zrozumienia struktury bazy danych - widać, że jest ona zdenormalizowana (zapewne aby zapewnić szybkość działania nowego paska adresu) i przez to dość niejasna. Co prawda pewnie na deweloperskich stronach Mozilli znajduje się dokumentacja, ale osobiście nie miałem ochoty w to wnikać. Bardzo dobrym (na początek) źródłem wiedzy o języku SQL jest dział na stronie W3Schools.

wtorek, 17 lutego 2009
Zabezpieczenie profilu Firefox’a i nie tylko

W różnego rodzaju poradnikach dość często można spotkać różne pomysły na zabezpieczenie dostępu do całego profilu Firefox'a hasłem. Najskuteczniejsze z nich są te, które zalecają utworzenie nowego profilu na zaszyfrowanej partycji TrueCrypt - uruchamiając przeglądarkę z opcją -p wyświetli się menedżer profili w którym można je tworzyć w nowych miejscach i usuwać. Ale tworzenie nowego profilu i próba przeniesienia zawartości starego do tego nowego może być czynnością niekoniecznie wygodną. Stosując proste narzędzie można skutecznie zabezpieczyć istniejący profil, a idąc dalej - można pokusić się o próbę zabezpieczenia dostępu do innych aplikacji np. profilu starego (tzn. starszego niż wersja 8, bo w nowych wersjach zaimplementowano już szyfrowanie profilu) Gadu-Gadu.

Słów kilka o TrueCrypt. Jest to znane i bardzo cenione opensource'owe narzędzie szyfrujące. Sposób użycia jest bardzo prosty - w TrueCrypt tworzymy plik o zadeklarowanym rozmiarze który później montuje się pod wybraną literę napędu dyskowego w Windows. Aby zamontować napęd trzeba oczywiście podać hasło. Fizycznie więc nie jest to prawdziwy dysk, TrueCrypt sprawia, że zawartość tego zaszyfrowanego pliku jest widziana jako dysk do którego dostęp jest chroniony hasłem. Jedynym praktycznym użytkowym mankamentem jest brak możliwości zwiększenia rozmiaru raz utworzonego "pliku-dysku", więc dobrze jest szacować rozmiar z solidnym zapasem.

Sztuczka polega na zastosowaniu dowiązania twardego do profilu znajdującego się na zaszyfrowanej partycji w miejsce aktualnego katalogu profilu. Taka "konstrukcja" będzie przezroczysta dla samego programu, nie następuje żadna ingerencja z pliki profilu - jedynie przeniesienie ich w nowe bezpieczne miejsce, a w poprzednim miejscu postawienie "odnośnika" który automatycznie kieruje dostęp w nowe miejsce.

Dowiązanie twarde zwane częściej po prostu hard-linkiem jest "wskaźnikiem" na inny plik albo katalog. Z użytkowego punktu widzenia plik fizycznie znajduje się w jednym miejscu na dysku ale widziany jest pod swoją oryginalną nazwą oraz pod nazwami "wskaźników" - wyglądają one identycznie jak pliki - użytkowo są mu równoważne. Aby odróżnić hard-link od oryginału trzeba użyć dodatkowych narzędzi.

W systemie Windows do tworzenia hard-linków (i zarazem odróżniania ich od właściwych plików) polecam konsolowe narzędzie Junction firmy Sysinternals. W systemach Vista i nowszych można również użyć wbudowanego polecenia mklink.

Podsumowując - aby zabezpieczyć swój profil dowolnej aplikacji np. Firefoxa należy:

  1. Utworzyć zaszyfrowany "plik-partycję" w TrueCrypt. Dobrym rozmiarem powinno być 100MB chociaż to zależy jaki rozmiar pamięci podręcznej został ustawiony z przeglądarce. Przykładowo mój profil zajmuje ok 60MB przy pamięci zadeklarowanej na 32MB. W każdym razie tutaj lepiej jest wybrać za duży rozmiar niż zbyt mały.
  2. Zlokalizować swój profil - np. w przypadku Firefox'a znajduje się on w katalogu
    c:\Documents and Settings\<nazwa użytkownika>\Application Data\Mozilla\Firefox\Profiles\<ciąg losowych liter i cyfr>
  3. W systemie Vista zamiast "Documents and Settings" jest to katalog "Users".
  4. Skopiować profil na zaszyfrowany dysk TrueCrypt.
  5. Dla bezpieczeństwa, aby mieć pewność, że poprzedni profil nie zostanie odzyskany  skasować go przy użyciu narzędzia do bezpiecznego kasowania np. Sdelete, albo O&O SafeErase.
  6. W miejscu katalogu z profilem utworzyć hard-link o nazwie profilu (ciąg liter i cyfr) prowadzący do kopii profilu na partycji zaszyfrowanej.

Zastosowanie takiej sztuczki uniemożliwia dostęp do wszelkich informacji związanych z naszą działalnością internetową - historii przeglądania, haseł, zakładek etc. osobie niepowołanej. Nie znam się dokładnie na szyfrowaniu, ale z tego co wiem, algorytmy szyfrujące stosowane w TrueCrypt uznaje się obecnie za niemożliwe do złamania, więc myślę, że jest to skuteczny sposób na zabezpieczanie swoich danych. Warto zauważyć, że w ten sposób możemy zabezpieczać programy, które same w sobie nie posiadają możliwości ochrony dostępu hasłem.

PS. Nie wiem czy podany sposób funkcjonuje w systemach uniksopodobnych. O ile wiem w niektórych systemach plików hard-linki można tworzyć tylko w obrębie tej samej partycji, więc nie ma możliwości utworzenia dowiązania prowadzącego do zaszyfrowanej partycji TrueCrypt.

 

poniedziałek, 16 lutego 2009
Ręczne wspomaganie planisty

Wpis dotyczy sztuczki, która może przydać się użytkownikom wieloprocesorowych komputerów pracujących pod kontrolą systemu Windows (oczywiście jest to możliwe również w systemach uniksowych, ale nie zajmowałem się tym).

Planista jest częścią jądra systemu operacyjnego, która odpowiada za rozplanowanie w czasie przydziału wykonujących się programów do procesora. Nie zagłębiając się w szczegóły techniczne, warto wiedzieć że we współczesnych komputerach w ciągu jednej sekundy takie przełączenia pomiędzy jednym wykonywanym programem a kolejnym liczy się w setkach albo nawet tysiącach. W tej tematyce szczególnie polecam dwie bardzo dobre książki: Uresh Vahalia "Jądro systemu Unix" oraz Abraham Silberschatz "Podstawy Systemów Operacyjnych"

Również bez zagłębiania się w szczegóły techniczne, w miarę intuicyjne i oczywiste jest to, że jeżeli posiadamy komputer z wielordzeniowym procesorem to różne programy mogą wykonywać się równolegle. Jeżeli program obsługuje wielordzeniowy procesor (program jest wielowątkowy) to na takiej maszynie będzie wykonywał się tyle razy szybciej ile procesor ma rdzeni. Obserwując użycie procesora w komputerze z procesorem wielordzeniowym widać, że ten sam program może być wykonywany na wielu rdzeniach nawet jeśli nie jest wielowątkowy. Obciążenie rozkłada się wtedy równomiernie i sumaryczne obciążenie wszystkich rdzeni jest odwrotnie proporcjonalne do liczby rdzeni.

Pomysł z równomiernym rozkładaniem obciążenia z całą pewnością jest sensowny i nie mam zamiaru wnikać w techniczne powody dlaczego tak to zostało zrobione. Niemniej jednak zauważyłem, że zdarzają się sytuacje, gdy ta równomierność może być uciążliwa. W sytuacji, gdy wykonujemy jakąś intensywnie obliczeniowo aplikację typu kodowanie filmu, muzyki, zdjęć przez dłuższy czas i jednocześnie chcemy np. korzystać z przeglądarki internetowej to widać, że działa ona znacznie wolniej ponieważ "dzieli" procesor z "żarłoczną" aplikacją do kodowania. W takiej sytuacji warto zmusić system operacyjny, aby konkretna aplikacja wykonywała się tylko na konkretnym jednym rdzeniu procesora. Dzięki temu chociaż nasze kodowanie potrwa dłużej (ale zazwyczaj nie ma dla nas znaczenia czy jest to 10 czy 15 minut), ale znacznie polepszy się responsywność tej drugiej aplikacji na której chcemy działać cały czas - np. przeglądarki internetowej. Z obserwacji widzę, że działa ona mniej więcej tak sprawnie jakby w tle nie wykonywała się żadna intensywna operacja typu kodowanie. W systemie Windows takiego przydziału programu do rdzenia procesora dokonuje się np. przy użyciu darmowego narzędzia firmy Sysinternals (która jest obecnie częścią Microsoftu) - Proces Explorer'a. Klikamy prawym przyciskiem myszki na proces (proces - to wykonujący się program) i wybieramy opcję 'Set affinity'. Moim zdaniem warto poeksperymentować z przydzielaniem procesów tylko do pojedynczych rdzeni - można uzyskać ciekawe zwiększenie responsywności systemu podczas wykonywania wielu różnych nietypowych programów.

PS1. Warto wiedzieć, że Sysinternals udostępnia wszystkie swoje narzędzia w postaci współdzielonego folderu przez protokół SMB pod adresem \\live.sysinternals.com\tools - należy wpisać ten adres w polu 'adres' dowolnego okna eksploratora Windows lub w poleceniu Start/Uruchom.

PS2. Chcąc zautomatyzować uruchamianie programu tylko na konkretnym rdzeniu można użyć darmowego konsolowego narzędzia RunFirst, które uruchamia wskazany program zawsze na pierwszym rdzeniu procesora.

niedziela, 15 lutego 2009
Hello World :)

Witam na moim blogu technicznym poświęconym głównie tematyce związanej z informatyką oraz użytkowymi aspektami komputerów i Internetu. Jako „użytkowe aspekty” rozumiem takie, które są sprytne i prowadzą do tego, że różne czynności możemy wykonać szybciej i prościej czyli po prostu ułatwić sobie życie – bo właśnie do tego moim zdaniem powinny służyć komputery. Ponieważ zdaję sobie sprawę, że blogów o tematyce IT jest już sporo, przy tworzeniu wpisów będę starał się uwzględniać:

  • Aby treść wpisu nie była powieleniem żadnego newsa znalezionego na innym blogu (sam nie lubię gdy w kilku serwisach czytam dokładnie o tym samym) – nie mam zamiaru zajmować się śledzeniem newsów – od tego są inne blogi i serwisy (np. osnews.pl) którym całkiem nieźle to wychodzi.
  • Aby treść wpisu była oryginalna – w ten sposób że na opisywany pomysł wpadłem sam i pochodzi on ode mnie, a jeżeli nawet podobne rozwiązania już istnieją to moje w znaczący sposób się od nich różni
  • Aby wpisy nie były trywialne – nie będę opisywać faktu, że pojawiła się kolejna wersja systemu Windows, albo że dodano nową funkcję GMail’a z Google Labs.
  • Nie wykluczam również od czasu do czasu jakichś własnych komentarzy czy przemyśleń :)

Blog kieruję do średniozaawansowanych użytkowników, choć zawsze będę starał się opisywać różne rzeczy tak, aby Ci mniej zaawansowani ale ambitni i kreatywni również skorzystali z moich pomysłów.

16:25, przemsen
Link Komentarze (2) »