Monthly Archives: marec 2009

Na domačem strežniku mi je šel disk. Sicer je res zdržal kar nekaj časa, prejšnji teden pa je podlegel. Tako, da je sedaj moja domača stran off line.

Ker me trenutno ni doma, se ne morem spustit v podrobno diagnozo. Na srečo imam backup projektov/dokumetov. Stran bom pa na hitrco ponovno spisal.

Sedaj načrtujem objektni del predmetov:

Vsak predmet bo sestavljen iz objekta TShape. V primeru je izpostavljen predmet za črto. Ta predmet tudi vsebuje dve točki za urejanje njene dolžine in položaja. Takšna točka se imenuje “handle” in je sestavljena iz objekta ShapeHandle. Razvidno je, da je objekt TShape kot TShapeHandle izpeljana iz glavnega objekta GObject.

Predmet TCanvas pa je glavni gradnik, ki izrisuje ostale predmete in zato ima seznam predmetov, katere naj izriše. Izpeljan pa je iz objekta GtkDrawingArea.

Že dolgo se med GNOME razvijalci šušlja, da je potrebno narediti popolno revizijo namizja in uveljaviti radikalne spremembe. Misli o tem obstajajo že nekaj let, vendar zadnjo leto je bilo tisto, ko se je večina razvijalcev strinjala, da radikalne spremembe bodo.

Bodoče namizje GNOME 3.0 (kodno ime Topaz) naj bi spremenila način upravljanja opravil z računalnikom. Namizje bi tako postalo opravilno-orientirano.  Zadnjih nekaj mesecev programerji intenzivno razvijajo tehnologije, ki bodo v uporabi namizja Topaz. To so predvsem:

  • GObject introspekcija – omogoča vpogled v metapodatke predmetov v programu. Iz programerskega vidika ta tehnologija omogoča pridobivanje informacije o objektih med samim delovanjem programa. Sicer to v modernih programskih jezikih ni kaj posebnega, je pa zato pri jeziku C kar velika novost. Ta tehnologija bo omogočala enostavnejše povezave drugih jezikov z orodjem Gtk+. Kako pomembna je ta tehnologija pa pričajo ideje o povezljivosti med Qt in Gtk+ orodjem.  Tako Alberto Ruiz v svojem blogu poroča o drugem sorodnem projektu QMetaObject, ki opravlja podobno nalogo za orodje Qt. Kar pa bi pomenilo sodelovanje obeh dveh tehnologij. Iz programerskega vidika bi to pomenilo uporaba enakih funkcijskih klicev za obdelavo gradnikov ali Qt ali Gtk+.
  • Vala – je nov programski jezik, posebej izdelan za programiranje GObject objektnim sistemom. Kar je idealno za namizje GNOME in prograiranjem z Gtk+, kjer je GObject močno integriran. Kljub temu, da se gre za objektno-orientiran jezik, ki je od daleč podoben C#, mu uporaba GObject omogoča gradnjo naprednejših razredov, ki že poznajo signale.  Ima tudi lasten urejevalnik pomnilnika, podpora za dedovanje, lastnosti. Posebnost je tudi prevajalnik za jezik Vala, saj ta izvorno kodo ne prevede v bajtno kodo, kot npr. pri C#, ampak se najprej pretvori v jezik C, nato pa prevede v strojni jezik. Kar pomeni da imamo vse dobre lastnosti “managed” jezika plus hitrost zaradi nativnega izvajanja kode brez vmesnega virtualnega stroja
  • podpora za JavaScript – obstajata dva projakta, ki imata namen integrirati orodje Gtk+ z jezikom JavaScript. Prvi uporablja Mozillin GreaseMonkey pogon, drugi pa WebKit V8 pogon. Sposobnost spisati Gtk+ aplikacijo v JavaScript zna biti velika prednost pri nadaljni integraciji namizja z novim “cloud computing” paradigmom,  kjer se spletne in namizje aplikacije združujejo. V prihodnosti bomo torej videli večjo integracij spletnih aplikacij z namizjem
  • 2.5 dimenzionalno namizje – projekt Clutter omogoča pisanje Gtk+ programov, ki se popolnoma izrisujejo s pomočjo OpenGL pospeševanja. V namizju Topaz lahko zato pričakujemo več grafičnih učinkov.

No toliko o prihajajočih tehnologijah. Sedaj pa si poglejmo en projekt, ki namerava zamenjati trenutno GNOME lupino. Gre se za Gnome Shell, ki uporablja vse zgoraj omenjene tehnologije. Uspelo mi ga je prevesti in pognati. Takole pa zgleda:

Shrani.si

Tukaj je odprt terminal in dve X aplikaciji. Kar takoj izstopa je možnost Activities levo zgoraj.
Shrani.si

Klik na to možnost sproži pomanjšanje trenutnega delovnega namizja. Na levem robu pa se pojavijo nove možnosti, kjer lahko poganjam programe. Na ostali del zaslona se izrišejo vse delovne površine. Če kliknem na tisti + znak desno spodaj, se mi pojavi nova delovna površina. Klik na katerega izmed naštetih programov levo, ga požene na trenutno izbrani površini. Dvakratni klik na eno izmed površin jo spet poveča in levi meni izgine.
Shrani.si

Tukaj pa je prikazan brskalnik, ki uporablja pogon WebKit za izris strani. Na zgornjem terminalu je označen ukaz, s katerim sem pognal brskalnik. Ukaz, ki sem ga izvedel je gjs, ki je JavaScript pogon, ki izvaja skripte in uporablja Mozillin pogon. Iz spodnjega terminala pa je razvidno, da je brskalnik dejansko napisan v JavaScript skripti, ki uporablja Gtk+.

Celotna lupina ima zanimive učinke, kadar preidemo v vpogled aktivnosti, kadar zapiramo/odpiramo programe.

Ponovno sem začel s Teuthido. Tokrat bo dizajn zelo objektno naravnan za čimbolšo obdelavo predmetov. Ustvaril sem si git repozitorij na github. Repozitorij najdete tukaj. In še slika najnovejšega builda:

Shrani.si

Približno tri tedne uporabljam ArchLinux. Priznam, da sem navdušen nad rolling distribucije, saj neprestano dobivam najnovejše stabilne izdaje programov:

Shrani.si

Takšen je trenuten izgled mojega namizja. Presenečen sem tudi nad obsežnostjo Arch wiki-ja, saj se zagotovo vedno najde kakšna zanimiva reč. Tako sem preko omenjenega wiki-ja zvedel za program unison, ki lahko preko ssh sinhronizira imenike. Ravno to, kar sem že kar nekaj časa iskal! Potem so še razni nasveti, kako pobarvati grep izhod, barvanje man stran, ipd.

Pred kakšno urco sem še uspel nastaviti sistem tako, da se moj šifriran home postavi ob prijavi v namizje, namesto nepotrebnega vnašanja gesla ob zagonu.

Sedaj še čakam, da se bo na repozitorijih pojavil GNOME 2.26, skupaj z novim xorg (ki pa je že v testing repozitoriju). Vendar pričakujem da bo to vse prišlo čez kakšen mesec (malo prej preden izide Ubuntu 9.04).

Včeraj sem bil bolj pustolovsko razpoložen in sem se odločil na prenosnika, kjer mu je kraljeval Jaunty alpha, namestiti ArchLinux.

ArchLinux je rolling distribucija, kar pomeni da ni pravih izdaj, kot jih pozna Ubuntu, ampak se kot “izdaja” naredi trenutna slika vseh paketov v repozitoriju. Ko je sistem enkrat nameščen, ni potrebno čakati na novo izdajo za novejše programe. Najnovejše izdaje le-teh dobimo iz repozitorijev preko paketnega upravljalca pacman, ki prenese pakete, pregleda spore in odvisnosti, nato pa vse skupaj namesti na sistem.

Druga večja razlika je v konfiguraciji sistema. Velika večina programov je potreba naknadno namestiti, saj privzeta namestitev vsebuje nekaj osnovnih programov za zagon sistema. To vključuje od X strežnika, namizja, do NetworkManager in ACPI upravljalca.

Vendar ima ArchLinux na srečo zelo dobro spisan wiki, ki odgovori na marsikatero vprašanje.

Namestitev se izvaja v tekstovnem načinu, vendar se nikakor nesmemo pustiti prestrašit. Potek je enostaven in hiter. Po ponovnem zagonu se v sistem prijavimo in vletimo v bash konzolo.

Tukaj sem naletel na prvo težavo. Kako dostopati do moje brezžične povezave. Ker nikoli nisem ročno nastavljal pozezave sem se odločil za hitro odločitev: priklop preko žice. Tako se je problem rešil z zagonom ukaza dhcpcd, ki od routerja dobi IP in ga nastavi. Sedaj sem imel povezavo, čas je za namestitve.

Tukaj sledijo koraki, ki so priporočeni iz strani Arch wiki-jev:

  • osvežitev paketne baze in posodobitev sistema:
    pacman -Syu
  • namestitev X strežnika in gonilika za grafično:
    pacman -S xorg x11-video-intel hwd
  • nastavitev X strežnika:
    hwd -xa
  • namestitev namizja gnome:
    pacman -S gnome gnome-extra

Po tem je na sistemu nameščeno namizje GNOME. Po tem koraku lahko pričnemo z nameščenjem naših programov. Prvi program, ki sem ga namestil po teh korakih, je bil networkmanager, da sem se lahko priklopil na brezžično točko.

Največ časa sem zapravil pri nastavitvi zvočne kartice. Nastavil sem si PulseAudio. Posebej je treba bit pazljiv, da ne pozabimo pognati alse pred pulseaudio, nastavit pravice uporabnika za poslušanje audio naprav.

Sedaj mi dela compiz, imam šifriran home. Edina reč, ki mi ne deluje, so Fn tipke na prenosniku in OpenGL, kadar je vklopljen compiz.

Datotečni sistem btrfs, ki je še v razvoji, namerava postati vodilni, bleeding-edge FS za sistem Linux. Konkururati želi zelo odmevnemu konkurentu ZFS, ki je datotečni sistem za Solaris, z njim pa lahko delata tudi Mac OS X in FreeBSD. Avtor svežega ext4 datotečnega sistema je sam dejal, da ja ext4 nenkakšna vmesna stopnja pred btrfs in da ext4 ne tekmuje z njim.

Dve glavni novosti btrfs sta podpora izdelave snapshotov in podpora za extents. Pri snapshotih se gre za hitri zajem trenutnega stanja nekega imenika ali datoteke. Preko hitrega zajema se kasneje lahko imenik oz. datoteko vrnemo v prejšnje stanje, ko je bil zajem narejen. Gre se torej za neke vrste backupa. Praktičen primer hitrega zajema bi bil imenik /etc, ki je v particiji, formatirani v btrfs. Pred sprememb neke nastavitve naredimo hitri zajem. Če se sprememba ne odnese, se lahko hitro vrnemo v prejšnje stanje preko zajema. Dodatek extents pa omogoča, da se neka velika datoteka zapisuje nemoteno, tudi če so vmes kakšne druge operacije. Prepreči tudi razprševane delov datoteke po datotečnem sistemu iz posledično zmanjšuje fragmentacijo datotečnega sistema.

Druge novosti so defragmentacija, širjenje/krčenje datotečnega sistema, preverjanje datotečnega sistema med tem, ko je datotečni sistem priklopljen (zmountan).

Če želite sami testirati btrfs na (dokaj) varen način, morate narediti sledeče:

  1. prenesite izvorno kodo jedra iz Linusovega git repozitorija in jedro prevedite z btrfs podporo. Jedro namestite in ponovno zaženite sistem z novim jedrom,
  2. prenesite, prevedite in namestite btrfs orodja iz git repozitorija git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-progs-unstable.git
  3. ustvarite datoteko poljubne velikosti, ki bo predstavljala datotečni sistem (primer za 500 MB):

    dd if=/dev/zero of=~/btrfs_fs.img count=500 bs=1M

  4. formatirajte datoteko kot btrfs:

    mkfs.btrfs ~/btrfs_fs.img

  5. postavite datotako kot datotečni sistem:

    sudo mount ~/btrfs_fs.img -o loop,rw /mnt/btrfs_test

  6. z ukazom mount preverite, če je sistem resnično postavljen z btrfs datotečnim sistemom:

Malo sem potestiral. Večina stvari dela, le snapshote mi ni uspelo narediti.