Skripta odstrani reklame na ebuddy web messengerju. Vse kar potrebujete je addon za Firefox ( Greasemonkey ).
Nato namestite ebudy.user.js in reklam na ebuddyju ni več.
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.
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.
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 0x40056c: file test1.c, line 12.
(gdb) r
Starting program: /home/luka/test1
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.
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.
Č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.