Category Archives: Linux in odprta koda

Zadnje čase redkeje blogam. Razlog za to tudi morda tiči ob intenzivnejšem twittanju. Morda pa je tudi kriva šola in služba, ki poskrbita, da mi ni dolgčas.

Funkcijsko programiranje

Mogoče je le samo krajša faza, vendar ta trenutek me zelo zanima funkcijsko programiranje.  Name so močno vplivale diskusije na ##c@freenode.net, nedavno predavanje o lispu v kiberpipi in učenje jezika prolog v šoli.

Torej funkcijsko programiranje spada pod deklarativno paradigmo programiranja, kar je obratno od imperativnega, ki je trenutno v industriji zelo razširjen. Deklerativno programiranje pa je predvsem razširjeno v akademskih sferah. Zanjo pa je predvsem značilno sledeče:

  • funkcije so prvorazredni predmeti,
  • rekurzija namesto iteracije,

Posamezni jeziki, ki spadajo pod deklerativne jezike, imajo nato še svoje lastnosti. Mogoče bi izpostavil dva jezila. To sta lisp in haskell. Lisp je zanimiv splošnonamenski jezik, ki ima precej skupnega z XML jezikom.  Obstaja celo XKCD strip, ki prikazuje novopečenega lisperja. Lepši uvod v lisp pa najdete tukaj.

Karmični Ubuntu

Izšel je Ubuntu 9.10, ki pa, sodeč po prvih odzivih, razočara. Moje mnenje je, da je 6-mesečni cikel za izdaje prekmalu in bi ga morali razširiti na vsaj 9 mesecev oz. eno leto. Težava je sedaj v tem, da so uporabniki postali razvajeni in vedno želijo “the latest and greatest” programje, četudi pomeni to na račun stabilnosti. Zato distributerji, kot so Fedora in Ubuntu, velikokrat poberejo iz repozitorijev kar neizdano kodo za programje (npr. NetworkManager, Xorg). Posledica tega je so nepopolni programi, velike razlike med upstream in downstream (to kar se je zgodilo z Intel grafičnimi gonilniki v 9.04). Morda bi moral Ubuntu za svoje LTS izdaje imeti neodvisen urnik, ki bi lahko šel preko teh 6 mesecev.

Sam sicer že od marca uporabljam ArchLinux, ki je rolling-release distribucija. To pomeni, da so novi programi v uradnih repozitorijih na voljo kar kmalu po izdaji (običajno dan/dva po izdaji). Če redno posodabljam sistem, imam tako vedno najnovejše programje. Vendar ima takšen način posodabljanja sistema svoje temne plati. Včasih se zgodi kakšna nadgradnja, ki lahko sistem zlomi. Zato je dobro, da smo malce bolj pozorni pri nadgradnjah.

GNOME 3.0 bližje

Naslednja izdaja namizja GNOME bo prišla z obilico novosti tako za končne uporabnike kot razvijalce. Prevzem JavaScript kot glavni jezik za razvoj lupine, bo nekatere razveselil, druge pa razočaral. Vendar jezik kot jezik, ima svoje dobre in slabe plati. Zagotovo je varnejši od npr. jezika C, ki še vedno ostaja de facto jezik razvoj jedra namizja.

Nova lupina namizja bo povsem osredotočena na razporejanje opravil in brskanje po zgodovini. Bolj podrobne novosti pa sem že omenil v preteklosti. Vprašanje je sedaj koliko obstoječih GNOME uporabnikov bo uspela 3.0 obdržati in koliko novih bo privlačila. Sam sem bil dolgo zvest uporabnik GNOME od različice 1.4 dalje, ko je namizje dobilo brskalnik Nautilus. Vendar sem pred nekaj meseci zamenjal okolje in prešaltal na wmii, ki je pametni upravitelj oken. Nekaj več o wmii sem tudi že povedal.

 

Če koga zanima elektronski papir, smo pri Visionect izdali development kit za eInk elektronski papir, ki je sposoben krmiti zaslone do resolucije 825×1200. Fotografije zaslonov si lahko pogledate tukaj. Tako se trg elektronskega papirja odpira tudi v Sloveniji.

Torej christooss se je potrudil in izdelal DEB paketek za trenutno kodo, ki je v git repozitoriju. Peketek lahko dobite tukaj. Kjub temu, da je gsfm že dovolj stabilen za vsakodnevno uporabo,  je še vedno nedokončan in ga zato uporabljajte na lastno odgovornost.

Torej moj home-brewed brskalnik datotek, podoben programu Norton Commander, se počasi bliža prvi izdaji. Kar pomeni da bo program kmalu pripravljen za vsakdanjo uporabo. Trenutno podprte funkcije so tako:

  • ustvarjanje imenikov, preimenovanje datotek/imenikov, brisanje datotek, kopiranje datotek,
  • pomik med pogledoma preko tipke Tab
  • izpis vseh postavljenih zunanjih naprav (USB diski, …) preko tipke CTRL+Tab,
  • opazovanje trenutnega imenika za spremembe, sortiranje po imenih, velikosti, lastniku
  • nastavljanje izgleda (trenutno samo preko izvorne kode)

Za prvo izdajo pa manjkajo še sledeče funkcije:

  • rekurzivno kopiranje, brisanje,
  • odprava manjših napak

Izdaja bo verjetno kar kmalu, zato iščem prostovoljce, ki so pripravljeni izdelati kakšne RPM in DEB paketke.

Stay tuned.

Ker sem nedavno migriral z namizja GNOME na wmii, sem iskal neko spodobno orodje za brskanje po imenikih. Iskal sem čim manj bloated programe. Tukaj se je gnome-commander kar dobro odrezal. Vendar pa je njegova izvorna koda zaradi preskoka iz C v C++ grozovita mešanica obeh dveh jezikov. Poleg omenjenega gnome-commander ne upošteva MIME pravil za programe in zato odpira napačne programe.

Zato sem se odločil na hitrco zmazat en osnoven brskalnik z dvema pogledoma. Podpira Gtk+ teme za ikone, pravilno upošteva MIME vrste, je zelo lahek, vendar še v razvoju. Zaradi tega še tudi ne podpira nobenih operacij npr. kopiranje, premikanje, ipd.

Shrani.si

Izvorno kodo lahko potegnete iz git repozitorija. Domača stran brskalnika je zaenkrat kar na github.

V prihodnosti nameravam podpreti vse osnovne operacije nad datotekami/imeniki ter bližnjice na tipkovnici.

Končno so tudi prišli prvi 64-bitni buildi za Linux. Kar pomeni da lahko odstranim 32-bitne knjižnice, ki jih je chromium do tega trenutka potreboval za zagon.

ArchLinux uporabiki lahko 64-build dobite iz AUR repozitorija chromium-browser-dev.

Za flash podporo si prekopirajte 64-bitni flash plugin in ga skopirajte v imenik /opt/chromium-browser/plugins. Nato poženete chromium s parametrom –enable-plugins. In flash sedaj mora delovati.

Ker je brskalnik 64-bitni, lahko uporablja vse 64-bitne knjižnice na sistemu. Če sedaj videz preklopim na Gtk+, se tudi upošteva Gtk+ tema.

Neizbežno se bliža mesec september, ki bo poleg novega šolskega leta prinesel Gnome 2.28. Zato razvijalci namizja že zdaj pridno razvijajo namizje Gnome tretje generacije, ki poleg popolne vizualne preobrazbe prinaša številne novosti:

  • integracija jezika JavaScript,
  • nov način za organizacijo naših opravil,
  • uporaba preteklih dejavnosti za hitrejše delo,
  • hitrejše iskanje dokumentov.

Integracija jezika JavaScript bo omogočila zelo prilagodljivo okolje, saj lahko do posameznih komponent na namizju (npr. pult) dostopamo kar s pomočjo JavaScript jezika. Za to poskrbi knjižnica gjs, ki uporablja Mozilla pogon Spidermonkey in GObject introspekcijo (za podrobnejši opis prebrskajte po zgodovini bloga).

Nov način za organizacijo naših opravil velja za temeljno novost namizja 3.0, ki ga bodo uporabniki najprej opazili pri ustvarjanju navideznih namizij, poganjanje novih programov in odpiranju dokumentov. Razvijalci so se tukaj odločili za koncept opravilno-orientiranega namizja. Ker običajno uporabnik uporablja računalnik za več opravil, je za njega pomembno, da si enostavno organizira delo in kasneje tudi hitro preklaplja med enim in drugim opravilom.

Preko projekta, ki nosi naslov “gnome-zeitgeist”, bo možno brskati po zgodovini naših opravil na namizju. Tukaj so mišljeni nedavno odprti dokumenti, pognani programi, predvajani filmi/glasba. Dostop do pretekle dejavnosti bo možen preko novega “Aktivnosti” pulta ali pa preko gnome-zeitgesit grafičnega vmesnika.

Načrtovana je tudi integracija projekta tracker, ki je zmožen indeksirati datoteke na disku in tako omogočiti zelo hitro iskanje ne samo po imenih datotek, temveč tudi po sami vsebini ali pa preko oznak. Preko posebnih gumbov, vidnih v pultu Aktivnosti bo mogoče vsakemu predmetu na namizju dodeliti oznako, ki jo lahko kasneje uporabimo za hitro iskanje.

Tudi ogrodje, iz katerega je zgrajeno namizje GNOME, knjižnica Gtk+, bo dobila nekaj zanimivih novosti. Različica Gtk+ 3.0 bo morda podpirala uporabo CSS stilov za določitev vizualnih tem. Razvijalci okenskega upravitelja Metacity pa se tudi potijo in poskušajo dodati CSS podporo za teme.

Shrani.si
Novi pult Aktivnosti in pogled na trenutne delovne površine.

Shrani.si
Seznam programov, ki so prikazani v pultu Aktivnosti.

Ko sem danes posodobil chromium, sem opazil precej novosti. Najbolj vidna je podpora za teme. Uporabniki pa bodo tudi veseli html5 video podpore, ki sedaj predvaja filme. Edino težavo, ki se mi pojavlja pri html5 video je prekinjajoči zvok.

Še vedno pa mi ni uspelo usposobit flash vstavek. Vendar sem prepričan, da je za to kriv moj 64-bitni sistem. Imel sem upanje, da bodo chromium kmalu prevedli tudi v 64-bitno kodo, vendar sem se motil. Argumenti, ki jih stran navaja, se mi zdijo precej neumni. Sedaj moram svoj 64-bitni sistem umazati z vrsto 32-bitnih knjižnic.

Ko bom pa imel malo več časa, pa bom po vsej verjetnosti objavil kratek prispevek za vse tiste, ki jih zanima WebKit razvoj. Članek pa bo govoril o postopkih, ki jih WebKit izvede, da naloži HTML stran. Za vse tiste, ki vam je WebKit tuja reč: to je spletni pogon,  s katerim lahko prikazujemo HTML vsebine. Taisti pogon tudi uporablja brskalnik Chrome (chromium), vendar malenkost spremenjen. Tako da, stay tuned!

  1. cscope – to kar je za kirurga skalpel, je za programerja cscope. Na orodje lahko gledamo kot naprednejši ctags. Naloga orodja je ta, da iz drevesa izvorne kode prebere funkcije in simbole in jih shrani v bazo.  Z vim vstavkom se ta baza lahko bere preko kombinacijo tipk, kadar brskamo po že obdelani kodi. Iščemo pa lahko po definicijah funkcij, izpis klicev na funkcijo, vse simbole z istim imenom v različnih datotekah. Kombinacija tipk pa hkrati omogoča, da se vim razcepi ali vodoravno ali pa navpično, kjer je v novem delu prikazan rezultat povpraševanja po cscope bazi. Sama baza se tudi hitro generira.
    Shrani.si
  2. NERDTree – skripta, ki vim okno razdeli navpično in prikaže vsebino imenika. Torej skripta nam prikaže datotečni brskalnik.
    Shrani.si
  3. FuzzyFinder – še en način za brskanje po imeniku znotraj vim, ki se pojavi v nekakšni “popup meni” obliki. Vendar seznam datotek se samodejno krči glede na naš vpis.
  4. ObviousMode – zelo praktična skripta za vstavljanje zaznamkov preko kombinacije “mm” in pomik po njih s tipko F2. Vse vrstice, ki vsebujejo zaznamko so ob robu tudi označene.

Večkrat sem že naletel na težavo, da bi moral v gdb-ju izpisat stanje neke podatkovne strukture. Vendar to na koncu nisem. Pred kratkim pa sem ugotovil, da tudi gdb podpira skriptiranje. Kar pomeni da lahko sedaj iteriram skozi seznam kar preko zanke. Ko sem še malo raziskoval gdb sem tudi izvedel, da naj bi prihajajoča verzija 7.0 (ki že zamuja) podpirala Python skriptiranje.

Na sistem mi je uspelo naložit Chromium in kot se izkaže v najnovejših gradnjah, se brskalnik zelo hitro izpopolnjuje. Podpira prevzem Gtk+ tem, kar omogoča brskalniku, da se bolje zlije z namizjem in poskrbi za celovitost. Žal pa so gradnje samo 32-bitne kar pomeni za 64-bitne uporabnike namestitev 32-bitnih knjižnic in uporaba le-teh. Preizkusno naj bi tudi že deloval Flash vstavek vendar ga meni ni uspelo nastaviti.

Prejšnji teden sem migriral na Arch. Vmes sem imel Fedoro, ki se je izkazala za sistem z ogromno novosti (posebej všečen je nov boot proces).Vendar sem imel velike težave z zvokom (beri PulseAudio). Po neuspelih poskusih popravljanja, sem se odločil da ArchLinuxu dam še eno priložnost po tem, ko sem zvedel zakaj mi je prenosnik zmrzoval (krivi so bili intel gma gonilniki).

Celoten sistem mi je uspelo nastaviti v pičlih 2h urah, kar je bolje kot prvič (približno dva dneva da je vse delovalo). Zelo sem zadovoljen, saj mi je tudi uspelo nastavit modesetting novost za intel grafične, ki prepričuje utrip zaslona med skokom iz TTY terminala v X okolje. Tako celoten boot proces zgleda veliko gledkjši. In ko že govorimo o zagonu, se mi celoten sistem od menija GRUB pa do GDM pozivnika zaganja 23 sekund, kar je presenetljivo hitro. Vendar je še maneverski prostor za hitrejši zagon, saj init skripta, ki se poganja med zagonom, omogoča paralelni zagon procesov, tako kot usplash pri Ubuntu vendar je veliko bolj primitiven (npr. ne pozna odvisnosti).

Ker ima Arch že jedro 2.6.30, se mi tudi ne sesuva več. Uspelo mi je tudi namestiti obvestila programov v balončku, kot ga pozna Ubuntu Jaunty.

Mogoče bi še omenil Linux, ki sem ga na hitro poskusil preden sem naložil Arch. Ta je Foresight Linux. Gre se za rolling-release kot je Arch ali Gentoo, vendar za upravitelja paketov uporablja conary. V grafičnem načinu pa uporablja PackageKit za obdelavo paketov. Je pa namizna distribucija, ki prihaja z namizjem Gnome in ima privzeto nameščene pisarniške in namizne programe, kar jo uvršča v skupino distribucij, kot sta Fedora in Ubuntu. Ima pa še relativno majhno skupnost, tako da boste morali tudi sami malo več prebrati, če boste naleteli na težavo. Glavni vzrok, zakaj Foresight ni dolgo ostal na disku pa je ta, da nisem uspel nastaviti samodejno postavitev zašifriranega /home imenika ob prijavi v namizje.