Selitev na wp.com

Blog se seli na ta naslov. Tako bom imel manj (nič) dela z vzdrževanjem in bom lahko ta čas koristneje porabil. :)
Npr. za dokončanje selitve LPN, ker mi trenutnega strežnika ne uspe spraviti na dieto (zakaj naenkrat požre toliko rama/noče zajedati medpomnilika!?). Bleh.

Grafi!

Tokrat samo par smešnih grafov in preglednic:

2 3 4 5 6

Nepovezano, nekdo je malce popravil wormux in zdaj dela tudi na N900! N900? To je svež in trenutno najbolj opevan pametni telefon daleč naokoli. Če je bilo letos leto netbook-ov, bo naslednje pomoje videlo razmah pametnih “telefonov”.

Dan izdaj

Danes je dan izdaj (v smislu proizvodnje, ne čustev). Izšel je nov KDE, na voljo je postal Dragon Age (za mase), naša mala skupinica škratov in škratinj pa je izdala GemRB 0.6.0 (za stare bioware trdojedrnike). Z njim se da zdaj preigrati tudi Icewind Dale in Baldur’s Gate. :)

Za popestritev pa dve sliki GemRB na eksotičnih operacijskih sistemih SyllableOS in ReactOS.

Ohloh

Živela zavajujoča statistika! Na stran sem dodal Ohlohov gradnik s statistiko mojega odprto-projektnega sodelovanja. Ohloh zbira razne podatke o projektih in jih bolj ali manj uspešno poskuša interpretirati (ne-štetje, dvojno štetje, negativno skupno število vrstic, napačni prevladujoči jezik, …). Odkar jih je kupil sourceforge pričakovano ni šlo nič na bolje (sam sourceforge pa na slabše).

Vseeno je prikladna zbirka za približno ugotavljanje kaj se dogaja s projekti, kaj kdo počne in v katerem jeziku. Na voljo je tudi primerjava projektov (Primer s pisarniškimi zbirkami) in samih jezikov (Primer).


Ohloh profile for lynxlynxlynx

GemRB 0.5.{0,1}

Predvčerajšnjim smo izdali GemRB 0.5.1 (aka 0.5.5), dva meseca nazaj pa 0.5.0. Narejeno je bilo ogromno in zato mi je tudi že uspelo na hitro preigrati cel Shadows of Amn! :D

Par slikic (ni prav dosti razlik od izgleda originalov):


WordNet:

subversion
n 1: destroying someone’s (or some group’s) honesty or loyalty;
undermining moral integrity; “corruption of a minor”;
“the big city’s subversion of rural innocence” [syn: corruption]
2: the act of subverting; as overthrowing or destroying a
legally constituted government [syn: subversive activity]

Pri GemRB in Wormux uporabljamo subversion (na kratko SVN) za RCS/SCM (revision control system/source countrol & managment). Je centraliziran sistem in naslednik CVS (najbrž je od tod večumno ime). Pri tem je uspešen, a so ga tačas prehiteli drugačni, necentralizirani (vsaj po konceptu) sistemi SCM kot so git, hg in drugi. Ima precej pomankljivosti in tokrat se bom osredotočil na par preprostih in hitro očitnih. V nobenem posebnem vrstnem redu:

subversion 1: .svn

$ grep -ir dragons gemrb/plugins/Core/
gemrb/plugins/Core/.svn/text-base/Animation.cpp.svn-base: //large, composite animations (dragons, multi-part area anims) require synchronisation
gemrb/plugins/Core/Animation.cpp: //large, composite animations (dragons, multi-part area anims) require synchronisation

SVN ima v vsakem podimeniku še en skriti podimenik za svoje podatke. Spam za grep in druga iskala, pa še sortira se na prvo mesto. Eden od razlogov, da je bil spisan ack in razne hitre rešitve kot recimo moj svn-grep (glej vnos o /etc/profile).

subversion 2: .svn 2

$ rm -r wormux-0.8.4/
rm: remove write-protected regular file `wormux-0.8.4/m4/.svn/entries‘? y

Seveda so ti imeniki prikladno nepisljivi, zato si ob brisanju primoran rm podatki stikalo fuck-yeah (-f).

subversion 3: časi izvedbe!?

$ time svn log gemrb/plugins/Core/EffectQueue.h
————————————————————————
r6401 | fuzzie | 2009-06-11 19:34:17 +0200 (Thu, 11 Jun 2009) | 1 line

TimingMode in effects is a single byte
————————————————————————
/…/
————————————————————————
r2726 | edheldil | 2004-11-07 20:48:44 +0100 (Sun, 07 Nov 2004) | 2 lines

First and trivial version of FX queue

————————————————————————

real 0m14.737s

$ time git log gemrb/plugins/Core/EffectQueue.h
(ni izpisa, ker je bil poslan v less; to tudi ni ozko grlo)
real 0m0.024s

SVN mora za skoraj vsako neumnost poklicati strežnik. Ampak dvomim, da je to edini vzrok za tako počasnost (primer je bil projekt na sourceforge prek https protokola in isti projekt uvožen v git). Vidna je tudi pri drugih ukazih, zato tudi ni samo razlika v načinu pomnenja zgodovine - SVN to hrani za vsako datoteko posebej (v prej omenjenih podimenikih .svn), git pa ima centralno zgodovino za celo drevo, ki jo lahko hitro zoža na željeni del.

subversion 4: okornost

$ svn diff
Index: gemrb/plugins/OpenALAudio/OpenALAudio.cpp
===================================================================
— gemrb/plugins/OpenALAudio/OpenALAudio.cpp (revision 6737)
+++ gemrb/plugins/OpenALAudio/OpenALAudio.cpp (working copy)
@@ -27,7 +27,7 @@
int error = alGetError();
if (error != AL_NO_ERROR) {
printMessage(”OpenAL”, msg, WHITE );
- printf (”: %d “, error);
+ printf (”: %d”, error);
printStatus(status, YELLOW);
return true;
}
$ git diff
diff –git a/gemrb/plugins/OpenALAudio/OpenALAudio.cpp b/gemrb/plugins/OpenALAudio/OpenALAudio.cpp
index 7ddd7e4..cb51e59 100644
— a/gemrb/plugins/OpenALAudio/OpenALAudio.cpp
+++ b/gemrb/plugins/OpenALAudio/OpenALAudio.cpp
@@ -27,7 +27,7 @@ bool checkALError(const char* msg, const char* status) {
int error = alGetError();
if (error != AL_NO_ERROR) {
printMessage(”OpenAL”, msg, WHITE );
- printf (”: %d “, error);
+ printf (”: %d”, error);
printStatus(status, YELLOW);
return true;
}
$ svn diff –show-c-function
svn: invalid option: –show-c-function
Type ’svn help’ for usage.
$ svn diff -p
svn: invalid option character: p
Type ’svn help’ for usage.
$ svn diff -x “-pi”
svn: Error parsing diff options: Bad character specified on command line
$ svn diff -x -p
Index: gemrb/plugins/OpenALAudio/OpenALAudio.cpp
===================================================================
— gemrb/plugins/OpenALAudio/OpenALAudio.cpp (revision 6737)
+++ gemrb/plugins/OpenALAudio/OpenALAudio.cpp (working copy)
@@ -27,7 +27,7 @@ bool checkALError(const char* msg, const char* sta
int error = alGetError();
if (error != AL_NO_ERROR) {
printMessage(”OpenAL”, msg, WHITE );
- printf (”: %d “, error);
+ printf (”: %d”, error);
printStatus(status, YELLOW);
return true;
}
$ svn diff -x “-pui” –diff-cmd diff
Index: gemrb/plugins/OpenALAudio/OpenALAudio.cpp
===================================================================
— gemrb/plugins/OpenALAudio/OpenALAudio.cpp (revision 6737)
+++ gemrb/plugins/OpenALAudio/OpenALAudio.cpp (working copy)
@@ -27,7 +27,7 @@ bool checkALError(const char* msg, const
int error = alGetError();
if (error != AL_NO_ERROR) {
printMessage(”OpenAL”, msg, WHITE );
- printf (”: %d “, error);
+ printf (”: %d”, error);
printStatus(status, YELLOW);
return true;
}

Podukaz diff naredi čisto osnoven diff, medtem ko samo orodje podpira mnogo več. Git del teh zmožnosti že privzeto uporabi, druge pa lahko enostavno dodaš. SVN je dosti bolj omejen - v zgornjem primeru ni izpisal funkcije kjer je sprememba in tudi ni požrl par osnovnih stikal. Git je povrhu še obarval izpis. Po pregledu pomoči, se dodatna stikala doda z -x, vendar je nabor teh zelo omejen, ker gre za lastno implementacijo diff. S klicanjem zunanjega se da doseči več, ampak vse skupaj zahteva že precej tipkanja.

subversion 5: brez pager-ja

$ svn help diff
diff (di): Display the differences between two revisions or paths.
usage: 1. diff [-c M | -r N[:M]] [TARGET[@REV]…]
2. diff [-r N[:M]] –old=OLD-TGT[@OLDREV] [–new=NEW-TGT[@NEWREV]] \
[PATH…]
3. diff OLD-URL[@OLDREV] NEW-URL[@NEWREV]
$ man git-diff

SVN nima dokumentacije v obliki man strani (razen ene), ampak se do nje dostopa preko “svn help”. Ta vse naenkrat vrže na zaslon, tako da brez ročnega pošiljanja v kak pager, ne bo nič z naprednim iskanjem ali sprotnim branjem. To je težava tudi pri drugih ukazih (recimo prej omenjeni svn log). Izpis tudi kaže, da je dostikrat treba podati celoten URL do datoteke (npr. svn://blabla), namesto samo relativne poti na disku. Na srečo so to končno večininoma popravili v nedavno izdani različici 1.6.

…te pri Koči pri Triglavskih jezerih vprašajo, če se spoznaš na računalnike in se stvar konča s tem, da jim popraviš nedelujočo mrežo. :lol:

Ledvička in Poprovec

Včeraj smo izdali GemRB 0.4.0!! :D Podrobnosti so tu, gre pa za pomemben korak v razvoju. Če date veliko na številke, bi bila bolj pravilna različica 0.7.0, saj je bilo narejeno že ogromno (na splošno, ne samo od zadnje izdaje). Kaj sploh je GemRB? O tem sem že pisal.

Pridružil se nam je še en redni razvijalec in zadnji mesec je kar mrgolelo aktivnosti. Danes je celo nek navdušenec ponujal popust za nakup pandor, ker bi rad videl gemrb (no, Bioware IE igre) tudi tam. Glede na to, da so v trenutni izdaji že vse naprave kupljene ali rezervirane, se mi je zdelo kar fino, čeprav me sama naprava praktično ne zanima.

Danes pa sem izdal Sorcery stabilne veje 1.14.3. Šolski primer za “minor bugfix release”.

Hi guys,

Some friends of mine who were biking accross slovenia recently took a
picture of that insect:
http://www.duventdanslesboucles.net/index.php?option=com_content&view=category&layout=blog&id=49&Itemid=75
and they would like to know what it is.
I’ve been told on a forum it’s an oil beetle, what do you think?

:D

/etc/profile je sistemska datoteka, ki se ponavadi prebere po zagonu interaktivne lupine. V njej je nastavljena spremenljivka PATH (ker ima po shadow privzeto omejeno vredost), razni aliasi, lahko pa še posebna pravila za bash-completion in druge nastavitve. Je skripta kot katerakoli druga, zato je vsebina lahko poljubna. Seveda se v njen ne splača poganjati dolgotrajnih stvari, drugače boste čakali na poziv (prompt).

Moja različica vsebuje še naslednje:

HISTSIZE=10000
HISTFILESIZE=10000
HISTIGNORE=”&:exit:[bf]g”

Ta del poskrbi, da ima bash več spomina (bash history) in mi omogoča dostop do več že pognanih ukazov (namesto da bi vedno tipkal recimo “svn up && svn log -v | less” ali “eval `ssh-agent`; ssh-add”). HISTIGNORE onemogoči pomnenje ukazov exit, fg in bg ter zaporedij istih ukazov.

INPUTRC=/etc/inputrc
fortune -a
echo

Nadalje imam spremenjen pomen določenih tipk na tipkovnici (za readline) in obvezen fortune cookie.

alias gv=”gaze version”
alias gw=”gaze what”
alias gwp=”gaze -q where -path”
function gm { gaze -q where $1 | xargs gaze maintainer; }
alias gf=”gaze from”
alias gu=”gaze url”
alias gz=”gaze search”
alias gzn=”gaze search -name”
alias gh=”gaze history”
alias gt=”gaze time”
alias gi=”gaze install-spell”
alias gl=”gaze license”
function cv { local a=”"; while read line; do a=”$a $line”; done</var/log/sorcery/queue/install; gaze version $a; gaze time $a; }

Sledi cel kup aliasov kot bližnjic do raznih ukazov za Source Mage. Kjer želene funkcionalnosti nisem mogel ustvariti z aliasom, sem to naredil z lupinsko funkcijo. Učinek je za vse praktične potrebe enak.


git-commit(){ command git-commit -e -m "$(basename -- $1):" "$@"; }
alias git-cherry-pick="git-cherry-pick -x"
alias ggn="git grep -n"
svn-grep(){ grep -Rn --color=auto "$@" | grep -sEv "\.svn|Binary file|\.deps|Makefile" ; }

less(){
if [[ $# == 0 ]]; then
command less -i -x4 -; return;
fi;
local num=$(sed -n 's,^.*:\([0-9]*\)$,\1,p' <<< "$1");
local file="${1%:$num}"; shift;
if [[ $num ]]; then
command less -i -x4 +${num}g "$file" "$@";
else
command less -i -x4 "$file" "$@";
fi;
}

trcheck() { for i in $@; do echo -n "$i: "; msgfmt -v -c --stat -o /dev/null "$i"; done; }
function sha { openssl dgst -sha512 "$@" | cut -d" " -f2; }

To je razvijalski del. Prvo par bližnjic za git, potem svn-grep, ki imitira git grep in na koncu še vmesnik za less, da ga lahko na hitro poženem na določeni vrstici datoteke. To je nadpraktično, ker je izpis ukazov grep v obliki “datoteka:vrstica: niz, ki se ujema” in lahko potem hitro vidim in urejam kontekst (primer: less gemrb/plugins/Core/Spellbook.h:58).
Za zaključek še funkcija trcheck, ki preveri veljavnost prevodov in izpiše statistiko (npr. “po/sl.po: 314 translated messages, 3 fuzzy translations, 3 untranslated messages.”), ter sha, ki izpiše vsoto sha512 podanih datotek.

alias ps=”ps –forest”
alias grep=”grep –color”
alias pgrep=”pgrep -lf”
export LESSCHARSET=utf-8

Še par klasik za bolj pregleden in uporaben izpis.


if [[ $EUID == 0 ]] ; then
PS1='\[\033[01;31m\]\h \[\033[01;34m\]\W $? \$ \[\033[00m\]'
else
PS1='\[\033[01;32m\]\u@\h \[\033[01;34m\]\W $? \$ \[\033[00m\]'
fi
export PS1

Barvni poziv, ki vključuje še ‘$?’, da takoj vidim kakšno vrednost je vrnil pognani program (exit status):

navaden@lynxlynx git-gemrb 0 $ false
navaden@lynxlynx git-gemrb 1 $ true
navaden@lynxlynx git-gemrb 0 $

PS: moram nadgradit tale blog, kode sploh ne prebavlja. :(

- Next »