21 Jun 2009

Subiektywna opinia o Western Digital My Passport (WDME5000TE)

Stało się - znów mi brakło miejsca na moje pliki :(, więc zakupiłem dysk Western Digital My Passport (kolor czarny).

Cechy produktu

Format2,5 cali
Pojemność500 GB
InterfejsUSB
Prędkość obrotowa5400 obrotów na minutę
Pamięć cache2 MB
Średni czas dostępu12 ms
Maksymalny transfer zewnętrzny480 Mb/s
Minimalna głośność2 dB
Technologia przechowywaniaHDD
Wersja interfejsuUSB 2,0
Rodzina produktówMy Passport Essential
Wysokość15 mm
Długość126,15 mm
Szerokość79,5 mm
Waga180 g

Wyposażenie zestawu

  • kabel USB 2.0
  • Jakieś dodatkowe oprogramowanie na dysku - WDSync
  • Krótka instrukcja obsługi
Dysk ten można znaleźć na Ceneo lub poczytać o nim opinie na Komputroniku.

Subiektywna opinia o WDME5000TE

Zalety:
  • Małe, lekkie, czarne pudełeczko
  • Cichy (poprzednio miałem dysk 3.5'' na USB2.0)
  • Relatywnie duża pojemność - 500GB
  • W zestawie są narzędzia dodatkowe do archiwizacji danych, których nie będę używał :)
  • Fajna dioda sygnalizująca podłączenie do USB
  • Niezłej jakości plastik
  • Zasilanie pobierane jest z laptopa - co raczej jest standardem przy dyskach 2.5" :)
Wady
  • Obudowa się strasznie palcuje i pewnie wszystkie rysy będzie widać
  • Zabrakło w komplecie jakiegoś pokrowca (woreczka z materiału) na to urządzenie
  • Bez USB 2.0 raczej tego się nie uda uruchomić - jest tylko jeden kabelek (ale tu się mogę mylić)
Kontrowersyjnie
  • Jak dla mnie krótki, ale wystarczający kabelek do USB - ale jako że jest to USB<->miniUSB to nie ma problemu by taki znaleźć w domu :) A w podróży, krótki kabelek się nie zaczepia o wszystko

Wydajność WDME5000TE

Odczyt jest na poziomie 28MB/s, natomiast zapis na poziomie 23MB/s - dla mnie to są wyniki wystarczające, tym bardziej że ten dysk służy mi do przechowywania rzeczy do których nie potrzebuję ciągłego dostępu - oto wykresy z programu Atto Disk Benchmark

Jak stracić gwarancję - czyli otwieranie dysku WD My Passport Essential - WDME5000TE

Oczywiście nie będę na razie tego robił, bo fajnie wiedzieć że nowa zabawka ma 3 lata gwarancji. Ale jakby komuś się zachciało, to podobno są dwie wersje:
  • WDT-B7B - "z zewnętrznym" kontrolerem USB - taki mam! :)
  • WDT-B8B - "z wbudowanym" w dysk kontrolerem USB - pewnie w jakiś sposób jest przylutowany ;)
A instrukcja otwierania nie jest zbyt skomplikowana, jednak na pewno będzie widać ślady :( na samym urządzeniu. W sieci jest parę wskazówek jak to zrobić:

Posumowanie

Dysk jest bardzo fajny, dopiero go mam 4 dni ale już przeniosłem na niego większość rzeczy jakie mam na komputerze, myślę, że mogę go polecić każdemu kto chce otrzymać dużą pojemność w małej obudowie. Na koniec jeszcze link do oprogramowania które było na stronie WD Support dla WDME5000TE. Może w przyszłości uda mi się kupić coś innego.

20 Jun 2009

Dlaczego warto zainteresować się OpenSolarisem?

W tym tekście jest naprawdę sporo odnośników!
  1. Społeczność, czyli grupy techniczne OpenSolarisa tworzą wiele nowych elementów systemu, od oprogramowania storage i ZFS do kompletnych narzędzi analizy systemu (DTRACE). W OpenSolarisie zostaną zaimplementowane Domeny Logiczne (Logical Domains), wirtualizacja Xen oraz mechanizm stref i kontenerów. Istnieją specjalne grupy które tworzą pakiety i narzędzia instalacyjne (twórca Debiana - Ian Murdock - pracuje w Sunie), a także narzędzia sieciowe i technologie bezpieczeństwa.
  2. Kompatybilność - Firma Sun gwarantuje, że interfejs systemowy głównych bibliotek dostępnych w OpenSolarisie się nie zmieni z wydania na wydanie - jest to duża zaleta dla programistów systemowych - mogą oni uruchomić stary kod na nowszych wersjach systemów bez zmian w jego strukturze.
  3. Przenośność - prawie jak Linux, OpenSolaris pracuje na rodzinach procesorów SPARC i x86: UltraSPARC, SPARC64, AMD64, Pentium, Core i Xeon EM64T, a ostatnio także ARM.
  4. Czołowe firmy produkujące sprzęt przystąpiły do prac nad systemem OpenSolaris poprzez naprawianie błędów w systemie (Sponsor Program). Z ciekawszych instytucji pracujących nad OpenSolarisem można wymienić:
    • AMD
    • Intel
    • Ohio State University
    ale to nie jedyny ich udział w rozwoju tego oprogramowania, mają one też otwarte projekty Więcej informacji o obsługiwanych urządzeniach i firmach produkujących sterowniki do OpenSolarisa można znaleźć w projekcie Open Development Infrastructure project.
  5. ZFS - Jeden z najnowocześniejszych systemów plików - pozwalający na tworzenie systemów plików o wielkości peta bajtów.
  6. DTrace - Narzędzie pozwalające obserwować aktualnie uruchomione procesy w systemie na poziomie wywołań systemowych niewiele zmniejszając przy tym wydajność samej aplikacji
  7. Zones/Branded Zones - jako sposób lekkiej wirtualizacji - znacznie rozwinięcie koncepcji Jail znanej z BSD
  8. IPS - Image Packing System - System paczek podobny do tego z Debiana (zamiast apt-get jest narzędzie pkg)
  9. SMF - Service Management Facility dba o to, by aplikacje serwerowe typu Apache czy MySQL były monitorowane i w razie konieczności automatycznie restartowane.

Dostępne dystrybucje - projekt Indiana

Projekt Indiana został stworzony po to by powstały binarne dystrybucje systemu operacyjnego zbudowanego z kodów źródłowych OpenSolarisa. Podobnie jak w systemie Linux, każda dystrybucja systemu OpenSolaris jest próbą integracji wielu projektów wchodzących w skład systemu OpenSolaris (instalator, środowisko graficzne, system paczek, itp.). Dzięki temu powstało parę dystrybucji systemu, każda z dystrybucji dostarcza obraz płyty LiveCD, pozwalającej na instalację OpenSolarisa.

Solaris Express Community Edition
Solaris Express Developer Edition
BeleniX - http://www.belenix.org/
Belenix jest dystrybucją dostarczaną w formie płyty LiveCD, jest oparta o środowisko graficzne KDE (obecnie 3.5.x chyba). Do standardowego systemu OpenSolaris dystrybucja BeleniX dołącza sporo paczek OpenSolaris. System ten jest darmowy, może być modyfikowany i dystrybuowany (np. jest możliwość łatwego utworzenia bootowalnego PenDrive).
Jaris (Japanese Solaris) - http://jaris.jp/
Japońska wersja OpenSolarisa (nie oznacza to że jest tylko w tym języku, ale na pewno dobrze znać chociaż troszkę japoński) dystrybucja ta pozwala na uruchomienie z płyty LiveDVD lub poprzez LiveUSB. Dystrybucję tą charakteryzuje to, że wiele aplikacji znanych z Microsoft Windows może być uruchomionych pod tym systemem (korzystając z Madoris - projektu bazującego na Wine).
StormOS - http://www.stormos.org/
Jest to Nexenta z obsługą paczek z Ubuntu (jak również ze wszystkimi narzędziami GNU) - jądro pochodzi tylko z OpenSolarisa.
Nexenta - http://www.nexenta.org/
Jedna z najpopularniejszych dystrybucji OpenSolaris - w ramach akcji promocyjnej został stworzony komiks. Dystrybucja ta po odpowiednich modyfikacjach jest dostarczana wraz z komercyjnymi urządzeniami do przechowywania danych. Można powiedzieć, że jest to dystrybucja systemu GNU/Solaris – korzysta z oprogramowania GNU, lecz używa jądra OpenSolarisa. Co ciekawe, Nexenta ma zmniejszone wymagania pamięciowe w stosunku do OpenSolarisa i wymaga ok. 256MB pamięci RAM. Dostarcza prawie pełnego portu pakietów z repozytorium Ubuntu. Posiada możliwość instalacji na zewnętrznych nośnikach USB. Na podstawie tej dystrubucji powstał system StormOS. Osoby chcące używać systemu w roli środowiska graficznego mają do wyboru pulpit GNOME oraz lekki desktop Xfce – autorzy projektu zalecają jednak StormOS do zastosowań desktopowych, ponieważ Nexenta została zaprojektowana z myślą o pracy serwerowej.
MilaX - The OpenSolaris Small Live CD - http://www.milax.org/
MilaX jest niewielką dystrybucją OpenSolarisa, która działa całkowicie z PenDrive lub płyty CD. Dystrybucja bazowana jest na Solarisie Nevada i zawiera jego podstawowe cechy. Projekt ten powstał jako eksperyment pozwalający sprawdzić jak dużo oprogramowania zmieści się na MiniCD. Dystrybucja MilaX może być używana jako "Rescue CD" dla Solarisa. MilaX w wersji serwerowej (bez GUI) zawiera oprogramowanie Apache, PHP, Samba, NFS, GCC, GMake, mc, itp. MilaX jest rozprowadzane na licencji CDDL w wersji 1. Do poprawnego działania wymaga 256MB RAM oraz procesora klasy Pentium by uruchomić wersję ze środowiskiem graficznym JWM. Do uruchomienia wersji bez środowiska graficznego wystarczy 128MB RAMu. Istotną zaletą tej dystrybucji jest czas uruchomienia - ok. 20sekund wprost z Grub. (Login i hasło dla usera: alex, przejście na roota poprzez su (hasło: root). Dostępna jest również wersja na architekturę SPARC. MilaX jest inny niż większość dystrybucji OpenSolaris ponieważ nie ładuje obrazu całej płyty (700MB) do pamięci RAM - tak więc nadaje się idealnie dla maszyn z mniejszą ilością RAMu.
SchilliX - http://schillix.org/
SchilliX jest rozprowadzany jako obraz płyty rozruchowej typu LiveCD. W odróżnieniu od oficjalnej dystrybucji Suna SchilliX zawiera wyłącznie oprogramowanie FLOSS. Była to pierwsza dystrybucja OpenSolarisa - została opublikowana 3 dni po wydaniu systemu OpenSolaris (działa na architekturach x86 i AMD64).
marTux - http://www.martux.org/
Uwaga: Najprawdopodobniej projekt przestał być rozwijany.
Jest to pierwsza dystrybucja "non-Solaris Express/Solaris Express Community Release OpenSolaris", która została wydana również dla platformy SPARC (sun4u and sun4v). marTux jest dostępna jako LiveCD lub DVD od dłuższego czasu (może być manualnie zainstalowana na dysku twardym - jednak nie posiada instalatora - [format->newfs->cpio-{SPARC:_installboot&&eeprom/nvalias || x86:_installgrub&&BIOS}]). Całość bazuje na OpenSolaris/OSNet (jądro, usługi sieciowe, biblioteki systemowe, komendy UNIX) w połączeniu z XOrg 6.9.0 i X11. marTux do zarządzania pakietami używa systemu paczek opartych o format RPM (RedHat) co nie jest raczej korzystne.

Fajne rzeczy jakie są w OpenSolarisie

Jak można przetestować

Odnośniki które warto przejrzeć

Podsumowując - czyli co ja o tym sądzę?

Na pewno OpenSolaris jest dystrybucją wartą przetestowania, niemniej jednak bez posiadania sporej ilości RAMu (ok. 2GB) bym nie próbował jej uruchomić (chyba, że z jakimś lekkim środowiskiem graficznym np. XFCE). System ten dostarcza wielu bardzo ciekawych rozwiązań ZFS/DTrace opakowanych w nowoczesne (aczkolwiek pamięciożerne w wydaniu OS) środowisko Gnome.
Na moim laptopie OpenSolaris wykrył wszystkie(!!!) komponenty poprawnie, pozwalając mi się cieszyć od razu z możliwości ich używania (Linux miał problem z czytnikiem kart SD i kamerką Microsoftu), ale może to wynika z tego że mój laptop to Toshiba - a Toshiba na niektórych laptopach preinstaluje OpenSolarisa?. By nie było tak różowo system ma też wady, o których pisze miedzy innymi Zal. Na pewno warto zainteresować się OpenSolarisem - jeżeli nie oficjalną wersją to jedną z dystrybucji - np. Nexenta/StormOS lub MilaX

Serwis do organizowania spotkań

Gdy zachodzi potrzeba organizacji seminarium, zebrania lub narady. Trzeba wszystkich uczestników o tym powiadomić, a później śledzić ich odpowiedzi - czy aby przyjdą czy nie.

Wymagania funkcjonalne

Pomysł jest prosty - stworzony serwis powinien pozwalać na:
  • Definiowanie zebrań/seminariów
  • Możliwość wysłania zaproszeń na spotkanie mailem
  • Śledzenie odpowiedzi i potwierdzeń przybycia
  • Każde wydarzenie powinno być widoczne na mapce wraz z dokładnym adresem i terminem oraz krótkim opisem
  • Łatwe definiowane listy osób (automatyczne rozpoznawanie emaila, imienia, itp.) tak, żeby wejście "Alicja Paderewska ala@emptyhost.pl" było poprawnie rozpoznane
  • Możliwość importu danych osób z plików VCF (VCard) i CSV (np. z Gmaila) lub innych kont pocztowych
  • Jeżeli podczas spotkania planowany jest poczęstunek, to poszczególne osoby powinny mieć możliwość zapisywania się na określone grupy dań np. pizze wegetariańską.
  • System powinien mieć możliwość definiowania eventów cyklicznych
  • System powinien mieć możliwość definiowania grup do których będą później rozsyłane spersonalizowane wiadomości o jakimś wydarzeniu - inaczej się zaprasza na to samo spotkanie kolegów z liceum, a inaczej nauczycieli z tejże szkoły
  • Powinien zostać stworzony zestaw znaczników np $(FIRST_NAME) - zamienianych na odpowiednie wartości pozwalając spersonalizować wiadomości
    Cześć Tomek!
     
    Chciałbym Cię zaprosić na ... całe wydarzenie odbędzie się 4 lipca w ...
    Na miejscu przewidywany jest poczęstunek, jeśli jesteś chętny na udział w tym spotkaniu
    proszę kliknij poniższy link
    
    http://imprezowywhatever.pl/invite/confirm/rdq2e1
    
    pozdrawiam,
    Tomek.
  • Odpowiedź na takie zaproszenie powinna być następująca:
    • Tak - będę,
    • Nie będzie mnie,
    • Przypomnij mi później o tym na X dni przed wydarzeniem (domyślnie 3 dni)
  • Jeśli zaproszenie było zaakceptowane na więcej niż 5 dni przed jego terminem, powinien być wysyłany mailing przypominający o wydarzeniu np 2 dni przed
  • Możliwość ściągnięcia wydarzenia w formacie iCal + eksport do Remember The Milk + eksport do Kalendarza Google
  • Możliwość brandingu serwisu
  • Każdy z listów powinien mieć stopkę 'Nie chce być więcej powiadamiany o wydarzeniach organizowanych przez tego użytkownika', przy czym taki user dostaje info, że osoba już nie jest zainteresowana tego typu eventami.

Wymagania niefunkcjonalne

  • Serwis powinien być napisany możliwie jak najprościej
  • Całością powinien mieć możliwość zarządzania pojedynczy administrator - brak innych użytkowników w systemie
  • Dobrze by było gdyby aplikacja nie miała potrzeby korzystania z bazy danych SQL - jeżeli już jest to wymagane niech to będzie baza plikowa np SQLite
  • Jeżeli serwis nie wymaga bazy wszystkie informacje powinny być przechowywane w plikach XML
  • Możliwość definiowania zewnętrznych kont pocztowych do wysyłania informacji o wydarzeniach (buzz words: SSL, LOGIN, POP before SMTP)
  • Wysyłanie mailingu powinno być realizowane asynchronicznie - bo to jednak trochę może potrwać ...
  • Prosta instalacja, patrz Wordpress - wrzucenie plików po ftp oraz edycja jednego pliku konfiguracyjnego - brak kreatorów! Koniecznie powinien być dołączony przykładowy plik konfiguracyjny, albo dwa.

Narzędzia i technologie jakich ja bym użył

  • PHP
  • XHTML
  • CSS
  • XML
  • Ewentualnie mod_rewrite - ale lepiej nie ;)
  • Jeżeli baza danych to SQLite3 oraz PDO w PHP

Swoją drogą tak patrząc na te wymagania, uważam że przy odpowiednim zacięciu i chęciach możliwe było by napisanie tego projektu w 4 dni (możliwie, że zbyt optymistycznie jestem nastawiony). Niby coś takiego jest napisane, ale Maciej Swoboda twierdzi, że całość jest niedopracowana i trochę jest to niezgodne z moimi pomysłami ;). Niemniej jednak, na pewno przy tworzeniu takiego systemu warto zainteresować się meeterem.

ps: Jakby tu wpadła ekipa meetera - to dajcie znać jak wypuścicie projekt jako OpenSource (fajna by była licencja BSD) ;).

16 Jun 2009

FUSE - Filesystem in USErspace

FUSE jest kompletnym frameworkiem pozwalającym na implementację logiki systemu plików w przestrzeni użytkownika. Projekt ten powstawał przy okazji implementacji systemu plików AVFS w jądrze Linux, ale w końcu stał się oddzielnym projektem. Do niedawna do jądra Linux istniały odpowiednie patche pozwalające dodać obsługę FUSE (zarówno w kernelach w wersji 2.4 i 2.6) niemniej jednak dzięki wysokiej jakości i stabilności projekt ten został włączony na stałe do jądra w wersji 2.6.14 i znajduje się tam do dzisiaj. W chwili obecnej FUSE zostało przeniesione także na inne systemy operacyjne np. FreeBSD, Mac OSX, Solaris, Windows. Biblioteka FUSE pozwala stworzyć reprezentację plikową niemalże dowolnego zagadnienia przykładem takiej reprezentacji może być system plików FlicrFS pozwalający na wysyłanie zdjęć do serwisu Flickr poprzez najprostsze przeniesienie plików z "jednego dysku na drugi".

Zalety FUSE

  • Proste w użyciu API dzięki callbackom
  • Łatwa instalacja (wbudowane w jądro Linuxa i Solarisa)
  • Bezpieczna implementacja – uruchamianie w userspace (błąd systemu plików nie jest krytyczny dla jądra i co najwyżej proces zostanie zakończony)
  • Szybkość i prostota tworzenia nowych systemów plików jest znacznie większa niż przy pisaniu modułów do jądra
  • Istnieje możliwość korzystania z nośników wymiennych przez użytkowników nie posiadających praw administratora – system plików działa z prawami użytkownika który go zamontował (istnieje osobne narzędzie do montowania)
  • Stworzona implementacja systemu plików nie jest w żaden sposób przypisana do konkretnego systemu operacyjnego czy wersji jądra
  • Dodanie obsługi nowego systemu plików nie wymaga rekompilacji jądra ani dodawania nowych modułów

Wady FUSE

  • zmniejszona wydajność w stosunku systemów plików pisanych jako moduły jądra (spadek wydajności jest spowodowany redundantnym kopiowaniem danych oraz ciągłym przełączaniem się z trybu jądra do trybu użytkownika)

Budowa FUSE

System plików FUSE (jako całość) składa się z dwóch części:
  • Modułu jądra który przekierowuje wywołania komend operujących na systemie plików do biblioteki FUSE – która już działa w tzw. userspace.
  • Biblioteki (dynamicznie łączonej) która jest używana przez twórców nowych systemów plików
FUSE jako framework pozwala na łatwe zaimplementowanie funkcji systemu plików poprzez mechanizm callbacków. Funkcje tak zaimplementowane są wywoływane z trybu użytkownika przez bibliotekę FUSE i służą do wykonania działań na bardzo niskim poziomie, pozwala to na zachowanie dużej kontroli nad sposobem zapisu danych na urządeniu zewnętrznym. Biblioteka FUSE dostarcza API dla języków wysokiego poziomu takich jak C, Python, Perl, Java oraz innych Co jest warte podkreślenia biblioteka FUSE jest identyczna dla wszystkich implementacji co pozwala to na łatwe przenoszenie obsługi systemów plików do innych systemów operacyjnych bez konieczności zmiany kodu samej aplikacji.

Jak działa FUSE?

** Obrazek pochodzi ze strony: http://fuse.sourceforge.net/ i pokazuje on przebieg wywołania systemowego "stat" w bibliotece FUSE. By zrozumieć schemat działania FUSE wypadało by poświęcić na jego zrozumienie chwilkę.

Opis działania

  • Moduł jądra FUSE rejestruje się w systemie VFS (Virtual FileSystem)
  • Aby aplikacja "udająca system plików" mogła komunikować się z modułem jądra dostarczanym przez FUSE, muszą być spełnione następujące warunki:
    • Musi istnieć punkt do montowania w obecnym drzewie katalogów dla nowego systemu plików
    • Aplikacja powinna udostępniać metody pozwalające na wykonanie podstawowych operacji na plikach i katalogach (tworzenie katalogu, odczyt zawartości katalogu, odczyt pliku, zapis pliku, itp.)
  • Biblioteka FUSE dostarcza abstrakcji dla systemu operacyjnego pozwalając zamontować nasz system plików, wykonywane jest to przez uruchomienie procedury systemowej montowania (system operacyjny "wie", że będzie montował system plików typu "fuse")
  • Każde wywołanie systemowe uruchomione w drzewie katalogów jest przekazywane do VFS, a następnie do modułu jądra FUSE - jeżeli zachodzi taka potrzeba
  • Moduł jądra FUSE wywołuje funkcje biblioteczną z biblioteki FUSE, która jest odpowiedzialna za uruchomienie odpowiedniej procedury w aplikacji implementującej konkretny system plików

Komunikacja jądra z przestrzenią użytkownika

Mechanizm FUSE opiera swoje działanie na przesyłaniu wywołań systemowych z modułu jądra do biblioteki FUSE, oraz danych z biblioteki z powrotem do modułu jądra. Do komunikacji pomiędzy elementami systemu wykorzystywany jest deskryptor (plik: /dev/fuse), który jest otwierany podczas montowania każdego systemu plików. Plik taki może być otwarty wielokrotnie, a uzyskany w ten sposób deskryptor jest przesyłany do wywołania systemowego "mount". Po pomyślnym ustawieniu deskryptora moduł jądra FUSE – rejestruje się jako urządzenie znakowe.
Biblioteka FUSE działająca w przestrzeni użytkownika wykonuje funkcję odczytu blokującego w module jądra FUSE Dla każdego przychodzącego wywołania systemowego z VFS\index{VFS}, moduł jądra wysyła dane do modułu FUSE tym samym odblokowując wątek odczytujący w ten sposób "przesyłając" wywołanie VFS dalej Biblioteka FUSE zwraca dane dostarczone przez implementację systemu plików użytkownika. Odbywa się to przez wykonanie zapisu w module jądra (na deskryptorze). Moduł jądra zwraca otrzymane dane do VFS Dane są dostarczane aplikacji.
Rozwiązanie takie jest nieefektywne, ponieważ dane są wielokrotnie kopiowane – ale do chwili obecnej nie udało się wyeliminować tego problemu.

Ciekawsze systemy plików w FUSE

FUSE dzięki swoim unikalnym możliwością implementacji systemów plików w przestrzeni użytkownika pozwala na tworzenie bardzo zaawansowanych rozwiązań przechowywania danych, jednym z nich jest wykorzystanie serwisów internetowych jako "urządzeń" do przechowywania danych (FlickrFS, GmailFS, PicasaFS).
Wartymi odnotowania są też systemy plików SSHFS i FTPFS, a także RepoFS. System plików RepoFS jest o tyle ciekawy, że pozwala na integrację dowolnego systemu wersjonowania (SVN, CVS, GIT) – udostępniając tym samym prosty w użyciu interfejs. System działa w ten sposób, że mapuje zasoby umieszczone w repozytorium do systemu plików pozwalając tym samym na użycie dowolnych narzędzi do modyfikacji/przeglądania zawartości plików, które nadal znajdują się tylko na zdalnym systemie. Wszystkie wywołania systemowe są odpowiednio tłumaczone na odpowiadające im funkcje w systemach kontroli wersji.

Bootowanie systemu za pomocą HTTP-FUSE

HTTP-FUSE jest internetowym systemem bootowania systemu wykorzystywanym przez dystrybucje Linuxa na konsolach Sony Playstation 3. Całość jest oparta o inteligentny system bootowania Kboot oraz dysk wirtualny "HTTP-FUSE Loop" który pozwala na pobranie jądra systemu operacyjnego oraz minimalnego środowiska (tzw. miniroot) wprost z serwera HTTP. Taka konfiguracja może być wykorzystana na dowolnym systemie komputerowym - wystarczy by była karta sieciowa obsługiwana przez Kboot. Dzięki temu do rozpoczęcia odzyskiwania danych użytkownik nie potrzebuje żadnego nośnika danych, a minimalny system ratunkowy może być uruchomiony "wprost z internetu" oraz może zostać rozpoczęte odtwarzanie danych. Jest to o tyle ciekawe rozwiązanie, że można przygotować wiele obrazów dysków (z różnymi narzędziami) z których można odtwarzać system.

Implementacja własnego systemu plików

Implementacja systemu plików z wykorzystaniem biblioteki FUSE sprowadza się do wykonania następujących czynności:
  • Najpierw należy stworzyć implementację dla każdej wymaganej przez system plików metody
  • Interfejs tych metod jest zdefiniowany w bibliotece FUSE (sygnatury metod)
  • Następnie należy "dołączyć" się ze swoją implementacją do biblioteki FUSE poprzez wywołanie funkcji głównej stanowiącej punkt rozpoczęcia, a także należy przypisać wskaźniki do zaimplementowanych funkcji/metod odpowiedzialnych za podstawowe funkcje systemu plików (ale czy tego nie zrobi sama funkcja?).

Dodatkowe informacje

15 Jun 2009

Odczytywanie plików w języku C

Notatka

Artykuł ten pochodzi ze starej wersji tego bloga (rok 2006) i ma na celu pokazanie, jak poprawnie odczytywać pliki dowolnego typu w języku C/C++. Co ciekawe testowałem jego działanie całkiem niedawno i w obu przypadkach działa to poprawnie - jednakże pamiętam, że miałem pewien problem przy czytaniu danych - pewnie były to dane binarne.
Różnice w działaniu są widoczne przy odczytywaniu pliku który ma wielkość 0 bajtów.

Wstęp

Gdy przychodzi do odczytywania plików programista myśli najczęściej coś w stylu "dopóki nie koniec pliku, czytaj i przetwarzaj dane", co kończy się w taki sposób.

Przykład niepoprawny!!!

#include <stdio.h>
#include <stdlib.h>

#define MYFILE "test.txt"

int main(int argc, char **argv) {
  FILE *fp;
  char buf[BUFSIZ];
  int i;
  
  if ((fp = fopen(MYFILE, "r")) == NULL) {
    perror (MYFILE);
    return (EXIT_FAILURE);
  }
  
  i = 0;
  while (!feof(fp)){
    fgets(buf, BUFSIZ, fp);
    printf ("Line %4d: %s", i, buf);
    i++;
  }
  printf("\n");
  fclose(fp);
  return(EXIT_SUCCESS);
}
Z tego co się orientuje taka konstrukcja jest zupełnie poprawna w językach takich jak
  • Pascal
  • PHP
Jednakże w języku C ten kawałek kodu zawiera poważny błąd, ponieważ funkcja feof() służy do sprawdzenia czy koniec koniec pliku został już osiągnięty, powoduje to "przeczytanie" podwójnie ostatniej linii z pliku wejściowego. Jak można przeczytać w manualu:
The feof function

Synopsis

1 #include <stdio.h>
int feof(FILE *stream);

Description
2 The feof function tests the end-of-file indicator for the stream pointed to by stream.

Returns
3 The feof function returns nonzero if and only if the end-of-file indicator is set for stream.
Funkcja feof() testuje strumień ma ustawiony znacznik oznaczający koniec pliku, a nie czy nastąpił sam koniec pliku. Oznacza to że taki identyfikator jest ustawiany przez inną funkcję - funkcję która odczytuje dane. Można przyjąć, że tra funkcja czyta wszystkie dane, ale w momencie napotkania końca pliku ustawia znacznik EOF na strumieniu.

Wersja poprawna

#include <stdio.h>
#include <stdlib.h>

#define MYFILE "test.txt"

int main(int argc, char **argv) {
  FILE *fp;
  char buf[BUFSIZ];
  int i;
  
  if ((fp = fopen(MYFILE, "r")) == NULL) {
    perror (MYFILE);
    return (EXIT_FAILURE);
  }
  
  i = 0;

  while (fgets(buf, BUFSIZ, fp) != NULL) {
    printf ("Line %4d: %s", i, buf);
    i++;
  }
  printf("\n");
  if (feof(fp)) {
    printf("EOF Reached\n");
  }
  
  fclose(fp);
  return(EXIT_SUCCESS);
}
By uniknąć tej przykrej przypadłości należy czytać pliki tak jak wyżej. Dzięki temu, zawsze jest sprawdzany wynik działania funkcji read - pozwala to ustawić znaczink EOF na strumieniu.

Inne przykłady poprawego czytania wejścia

int total = 0;
while (fscanf(fp, "%d", &num) == 1) {
  total += num;
}
printf ("Total is %d\n", total);
int c; 
while ((c = fgetc(fp)) != EOF) {
  putchar (c);
}
To na tyle ;).

1 Jun 2009

Pomysł na koszulkę

... a właściwie parę pomysłów, na koszulkę dla geeka: Jeśli szukasz więcej inspiracji zerknij na: http://www.spreadshirt.com/ , a to bonus - takie koszulki mieli pracownicy Google na zeszłorocznym I/O - fajne prawda?. ps: wszystkiego najlepszego z okazji Dnia Dziecka!