lukov blog

januar 10, 2010

go – c meets python

Shranjeno pod: Linux in odprta koda — napsy @ 6:47 popoldan

Danes sem prenovil izgled moje domače strani in ji tudi dopolnil vsebino. Stran sedaj tudi gostuje na strežniškem prostoru, ki ga je Visionect ponudil po tem, ko mi je domači strežnik po dolgih letih odpovedal.

Moram priznat, da sem po začetnem razočaranju nad Ubuntu 9.10 sedaj precej zadovoljen s sistemom. Vse deluje kot mora. Gonilniki za ATI Radeon delujejo brezhibno, prav tako “suspend to disk” in “sleep”. Še vedno pa je poraba energije na bateriji prevelika. Namesto 3:30h baterija zdrži ~ 2:30. Kljub temu sistem deluje stabilno in odzivno.

Naslednja različica Ubuntu, ki pride aprila letos in bo LTS izdaja, pa bo med drugimi vsebovala namizje GNOME 2.30, boljšo podporo za transparentne programe in z jedrom 2.6.32. Treba je opozorit, da se je zaradi načrtov GNOME spremenil datum izdaje namizja 3.0. Tako je izdaja 2.30 še vedno pod 2.x platformo. Namizje 3.0 pa pride septemba/oktobra letos, ki bo tudi vključeno v Ubuntu 10.10.

Kot ste lahko na internetu zasledili, je Google pod vodstvom Roberta Pikea izdal jezik Go, ki velja za strukturiran sistemski jezik z dobro paralelno podporo in z zelo hitrim prevajalnikom. Jezik ima namen se neposredno potegovati za naslednika uspešnega jezika C. Ker je jezik visoko nivojski, tako prinaša precej novosti, kot so samodejno upravljanjem s pomnilnikom, vgrajena podpora za nitenje preko “lightweight” niti, vmesnike (interfaces), kanale in veliko več. Jezik Go je najlažje opisati z “c meets python”. Pripravljam tudi kratko predstavitev jezika.

november 7, 2009

Status update

Shranjeno pod: Linux in odprta koda, Uncategorized — napsy @ 11:15 am

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.

 

oktober 11, 2009

gdb 7 scripting

Shranjeno pod: Uncategorized — napsy @ 1:21 popoldan

With the release of gdb version 7.0, the debugger gained support for python scripts. This means that we can extend gdb with out own commands or create functions to operate with data structures (lists, BLOBs, …)

There are several ways to write python scripts in gdb 7. The quickest is to type the ‘python’ command in gdb prompt, write our script and quit the prompt by typing ‘end’. The other method uses object filenames where you have an object ‘test1′ and the python script for the object is ‘test1-gdb.py’. If gdb finds such a file in the current path, it will automatically open it.

Let’s say we have a structure in our program:

struct _node {
int weight;
char tag[20];
};

We use the _node struct in out program:

int main () {
struct _node *mynode = malloc(sizeof(*mynode));
mynode->weight = 210;
strcpy(mynode->tag, “dummy node”);
free(mynode);
return 0;
}

When compiling the program and running it under gdb, we have to address the structure members by ourselves and sometime even convert them to an appropriate format. This might be acceptable if we operate with a single structure but what if we have a linked list or even a more complicated data structure? For a list we want to print out all the items in it. Doing that by hand would take unreasonable amount of time. Now gdb had scripting support before 7.0 but now we can do in in Python. This is pure awesomeness.

Back to the example. Out script looks like this:

import gdb
def print_node(value):
frame = gdb.selected_frame()
try:
val = gdb.Frame.read_var(frame, value)
except:
print “No such variable”
return
if str(val.type) == “struct _node *”:
print “Weight: ” + str(val["weight"])
print “Tag: ” + str(val["tag"])
else:
print “Is not a node (” + str(val.type) + “)”

We make some type checks so we don’t operate on the wrong variable. As you can see, all we do is get the current frame, get the value from the frame by it’s string representation and because the value is a structure, we lookup the members by looking up the member name in the value object.

Now we compile the program with debug support (-ggdb -O0) and start gdb.

luka@luka-laptop:~>

(gdb) b main
Breakpoint 1 at 0×40056c: file test1.c, line 12.
(gdb) r
Starting program: /home/luka/test1

Breakpoint 1, main () at test1.c:12
12 struct _node *mynode = malloc(sizeof(*mynode));
(gdb) n
14 mynode->weight = 210;
(gdb)
15 strcpy(mynode->tag, “dummy node”);
(gdb)
16 free(mynode);
(gdb) python print_node(“mynode”)
Weight: 210
Tag: “dummy node000000000000000000″
(gdb)

In this gdb session we first create a breakpoint at main(), then run the program. When we get to the breakpoint we create our struct and fill it with data. Then we invoke the function print_node() that is in our python script. Invocation begins with the keyword ‘python’, followed by the function call. As a parameter we give the name of our struct variable. We then see an output from the print_node() function that correctly prints the structure values.
This is a trivial example but it’s a start. If we would like to traverse a list, we’d probably iterate through some ‘next’ member until the value is ”0×0″ which means NULL.

september 26, 2009

gsfm launchpad stran

Shranjeno pod: Projekti — napsy @ 6:03 popoldan

Naredil sem launchpad stran za gsfm file-manager. Glavni razvoj še vedno poteka na github straneh, vendar je na launchpad mirror za git repozitorij, tako da lahko najnovejšo kodo dobite tudi preko ukaza:

bzr branch lp:gsfm

Snapshot master repozitorija v obliki DEB paketa sedaj dobite na tej strani.

V master pa je tudi že koda, ki doda dodaten “EXT” stolpec, ki prikazuje končnice datotek. To je predvsem praktično kadar imamo v imeniku RAR arhiv, ki je porazdeljen po različnih datotekah. Da lahko gsfm odpre arhiv s pravilnim programom, pa moramo izbrati datoteko s pravilno končnico, kar pa do sedaj ni bila vedno vidna zaradi krajšanja imen.

UPDEJT: v repozitoriju je sedaj tudi commit, ki omogoča branje izgleda iz config datoteke.

september 25, 2009

Elektronski papir v Sloveniji, DEB paket za gsfm

Shranjeno pod: Linux in odprta koda, Projekti — napsy @ 5:43 popoldan

Č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.

september 18, 2009

bliža se prva izdaja brskalnika

Shranjeno pod: Linux in odprta koda, Projekti — napsy @ 7:59 am

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.

september 15, 2009

Preprost brskalnik datotek

Shranjeno pod: Linux in odprta koda, Projekti — napsy @ 9:53 popoldan

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.

avgust 29, 2009

Nov dan, nova vera

Shranjeno pod: Politika in družboslovje, skodelica filozofije — napsy @ 11:12 am

Odkril sem vero Baha’i. Citat iz strani o načelih :

1.Opustitev vseh vrst predsodkov

2. Enakopravnost ženske in moškega

3. Prepoznanje relativnosti verske resnice

4. Odpravitev skrajne revščine in bogastva

5. Uresničitev vzgoje in izobrazbe za vse

6. Odgovornost vsakega, da samostojno išče resnico

7. Ustanovitev svetovne zveze držav

8. Ravnovesje med znanostjo in religijo

Potem sem se pa vprašal, zakaj bi kdo rabil vero, da bi uresničeval ideje 1, 2, 3, 4, 5. Po Bahai je torej potrebno verovat za dosežek teh temeljnih moralnih vrednot? Ni to mogoče doseči s preprostim pravilom “ravnaj z drugim tako, kot želiš da drugi ravnajo s tabo”? Bahai-jevci so torej za njihova načela našteli nekaj, kar je danes samoumevnega. Vendar nekatere točke pa so mi močneje padle v oči. Govorim o točkah 4, 6, 7, 8.

“4. Odpravitev skrajne revščine in bogastva” – to načelo nebi bilo narobe, če me nebi zmotila beseda skrajne. A res, samo skrajno revščino bi odpravili?

“6. Odgovornost vsakega, da samostojno išče resnico” – a tako, da bere izbrano literaturo (npr. iz vaše vere)?

“7. Ustanovitev svetovne zvezne države” – so morda imeli v mislih globalno politično velesilo (beri new world order). A ni ravno OZN bil ustanovljen, da bi imela vsaka država svoj “glas” v svetu. Sicer praksa dokazuje nasprotno, pa vendar “been there, done that”. Takšna zveza bi pomenila še večjo birokracijo pa razvrednotenje lokalnih parlamentov, kar že sedaj EU povzroča. Posledično to pomeni, da ima običajen državljan manjši vpliv na politiko, saj je do vrha politične piramide preveliko stopničk, da bi jih lahko smrtnik prehodil.

“8. Ravnovesje med znanostjo in religijo” – ah ja, prepričanje da lahko jablana prinese tako jabolko kot hruško. Znanost in religija se že po jedru razlikujeta, njune vrednote so popolnoma drugačne. Prva časti resnico, druga pa, hm, vero. Ravnovesje teh dveh bi pomenilo da lahko samo zaradi lastnega prepričanja nekaj postane resnica. Kar pa enostavno ne drži, nikoli ne bo in nikoli ni.

avgust 23, 2009

Chromium 64-bit za Linux

Shranjeno pod: Linux in odprta koda — napsy @ 4:16 popoldan

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.

avgust 16, 2009

Dizajn X strežnika

Shranjeno pod: Uncategorized — napsy @ 11:31 am

Članek na OSNews, kjer se avtor (neupravičeno) izživlja na X.org, mi je dal nekaj za mislit. Načeloma ne se strinjam z avtorjem, ker za nestabilnost njegovega namizja krivi X.org namesto gonilnikov.

Vendar pa ima prav, da v primeru če se X sesuje, barka nebi smela potopiti še vse ostale odprte programe. Razlog, da se to dogaja je predvsem v dizajnu, kjer je X strežnik, vsi grafični programi pa se na njega povezani.  Ustvari se socket komunikacija. In če se strežnik sesuje, se zgubijo vse povezave nanj oz. se bodo grafični programi zaradi tega brez zadržkov zaprli.

Mogoče bi tukaj bila rešitev v tem, da bi se med knjižnico xlib in X strenikom nahajal minimalističen proxy strežnik, ki bi ob sesutju X strežnika znal ohraniti povezave do odprtih programov ter počakal tako dolgo, dokler se X ponovno ne postavi.

Vendar običajno nek program alocira določena stredstva, ki jih potrebuje za prikaz. Na primer površino za izrisovanje, tabelo signalov, stanje programa. Rešitev bi lahko bilo deljen pomnilnik, ki bi se tudi ob morebitnem sesutju X strežnika ohranil. Nekaj podobnega že obstaja v obliki dodatka xshm, ki namesto socketov uporablja deljen pomnilnik za izmenjavo podatkov.

V primeru sesutja X strežnika, npr. zaradi slabih gonilnikov, nebi zaprlo programe. Ko se bi Xorg ponovno postavil, se bi povezal na proxy in tako lahko dalje sprejemal/pošiljal ukaze, deljen pomnilnik o sejah pa bi povrnil nadzor nad sredstvi, ki so jih programi ob zagonu alociral.

Older Posts »

Blog at WordPress.com.