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. :(

Nekaj čez enajsto zvečer 28.3. na #sourcemage je nekdo spraševal, kako je naslednje možno / logično:

$ date +%Y-%m-%d -d 'tomorrow'
2009-03-30
$ date +%Y-%m-%d -d 'yesterday'
2009-03-27

Prvi hip sem mislil da bo kakšen trik s prestopnim letom, ampak zdaj je že marec in to ne more biti to. Trik je v prehodu na poletni čas.

Če bi uporabil možnost -u, bi date uporabil časovni pas UTC/GMT in za “jutri” izpisal 29.3. Ker temu ni bilo tako, je uporabil sistemski časovni pas (ki je bil CET, GMT+1). Vse ostalo je stvar preproste matematike:

danes = 28.3. 23:45
včeraj = danes - 24h
jutri = danes + 24h

včeraj = 27.3. 23:45

jutri = 29.3. 23:45 + 1h zaradi prehoda na CEST (GMT+2)
jutri = 30.3. 0:45

Ključna je tista urica in seveda čas poganjanja - uro prej ali kasneje bi vse lepo delovalo.

Moja telefonska številka:

vd65b. .d3@@ .d#Y#.      6<99P  d90>  0939        #3 v88b >1.v
7P  Y0 4   8 Ybwwd>        vP  9Pv46. 6w#.       7<9  wwP . d4
8b  d0 `6w70 dP""Y1 wwww  ^>   33  ^8   `8 wwww dP^.    6  .<
>#44#’     0 >#b#P^      ^^    `#<8P' Y39P         8 >0.4 ^8^<

Saj niste mislili, da bo tako enostavno? :) Natečaj vseeno velja - kdor me prvi pokliče ali pošlje SMS z vsebino “Wasabi does not grow on Java”, ob priliki dobi pivo (oziroma kar rad pije, sploh če je celiakaš). Tale ezoterična uganka seveda je rešljiva. Za razliko od wasabija iz jave, se z njo ne morete opeči.

Navdih sem dobil pri The International Obfuscated C Code Contest. Veselo razbijanje. :)

EDIT: ne rešujte tega preko Planeta LPN, ker je tam wiki pojedel par znakov! Pojdite na naslovni naslov.

(Pred prenosom sem pozabil posodobit bazo, zato je tale nedavni post tu še enkrat. Če ga je že kdo prebral, ni v njem razen konca nič novega.)

Na ircu mi je Pyro povedal za tole uganko. Obljubil sem, da jo bom rešil v bashu, razen če se izkaže za preveč intenzivno (recimo da bi bil odgovor par biljard plus drobiž).

Izkaže se, da temu sploh ni tako in je rešitev že devetindevedeseta kombinacija:

# e v math.h je prekratek, zato poberimo prvih par
# tisoč decimalk z interneta in počistimo oblikovanje
e=$(wget -O - http://www-groups.dcs.st-and.ac.uk/~history/HistTopics/e_10000.html 2>/dev/null | sed -n \'/2.718/,/905198/ { s,2.718,2718,; s,\\s*,,g; p}\' | tr -d \'\\n\')
i=0

# potujoče okno desetih števk
while true; do
num=${e:$i:10}
if [[ ${#num} != 10 ]]; then
echo reached end of known e digits
echo $i
break
fi

# v coreutils je program factor, ki za podano številko vrne faktorje
# rezultat shranimo v polje in če je njegovih članov preveč,
# vemo da nimamo praštevila (število članov == število faktorjev+1)
nfactors=( $(factor $num) )
if [[ ${#nfactors[@]} == 2 ]]; then
echo $i:$num
break
fi
((i++))
done

Poženemo in preverimo rezultat:

...
99:7427466391
navaden@lynxlynx ~ 128 $ factor 7427466391
7427466391: 7427466391

Naslednji izziv je pi, algoritem pa enak.

...
4:5926535897
navaden@lynxlynx ~ 0 $ factor 5926535897
5926535897: 5926535897

Naslednji izziv je že malo težji, ker se ga s prejšnjim algoritmom reši samo dve tretjini. Je pa očitno zadnja uganka te serije. >:)

Tale problem lepo prikaže, kako se da mnogo stvari narediti neposredno, na hitro, kar v lupini. Celo težje računske probleme, kjer je pa seveda treba zaradi učinkovitosti intenzivne stvari prepustiti namenskim programom (v tem primeru factor). Klasična UNIX filozofija (”Do one thing and do one thing well” + shell glue).

GemRB 0.3.2

Danes sem poskrbel za izdajo novega GemRB. Več o tem pogonu za igre si lahko preberete na njegovi domači strani, kjer je tudi seznam sprememb od zadnje izdaje (prejšnjega septembra).

Zadnji mesec se je zgodilo precej dobrih stvari. Projektu se je pridružila še ena programerka. Izkušena (delala že na drugih reverse-engineering projektih), trmasta, pikolovska in ljubiteljica IE iger. Kaj bi si sploh še lahko želel? :) Po prvih parih patchih je hitro dobila dostop do repozitorija in k bolj aktivnemu delu spodbodla še ostale razvijalce. Sinergija++.

Moj glavni prispevek (v smislu vrstic kode) je v tej izdaji izklopljen, ker še zdaleč ni končan. Trenutno liki ne morejo pridobivati izkustvenih stopenj in ravno na tem sem delal. Delno implementacijo vmesnika za Throne of Bhall (na kratko tob; dodatek za bg2) sem ovekovečil z mojo prvo pesmico tipa limerick (imamo slovensko besedo za to?):

r5639 | lynxlupodian | 2009-02-04 17:11:24 +0100 (Wed, 04 Feb 2009) | 6 lines
Changed paths:
M /gemrb/trunk/gemrb/GUIScripts/bg2/GUICG9.py
M /gemrb/trunk/gemrb/GUIScripts/bg2/GUIREC.py
A /gemrb/trunk/gemrb/GUIScripts/bg2/LevelUp.py

tob: basic level up gui;
lots of things still to try
and mend and fix
and think up tricks
to have a nicely leveled guy.

Ja, ko bom velik, bom bard. :P

SVM Mac

Kot sem že omenil, mi je največja francoska revija o macih SVM Mac, obljubila nevirtualno kopijo decembrske izdaje, ker je v njej članek o Wormux-u.

Pošto sem dobil brez dosti zamude, me je pa presenetilo, da se je vse skupaj vrtelo le okrog kratkega sestavka. Če vsakogar vprašajo za dovoljenje za tak opisek, imajo pa res preveč časa!

Dokaz ni najbolj oster, ker je bil posnet s telefonom. Razen tega, da maskoti firefox-a rečejo rdeča panda, ni v samem članku nič posebnega, zato mi boste oprostili neberljivost. ;)
svm mac od dalečsvm mac od blizu

V reviji je veliko reklam, a tudi zanimiv vodič, ki po korakih razloži, kako si narediti lasten “zaslon” na večprstni dotik (”multitouch”).

Jeremy Allison je napisal dober povzetek govora iz Ontario Linux Festa o težavah z uvajanjem linuxa v Afriki (oz. slabše razvitih deželah). Tudi, če jo imamo, tehnična superiornost ni vse.

Nepovezano, še en grenkosladki biser.

Ste se kdaj vprašali kako hitro gre razvoj? Projekti registrirani pri CIA (ne tista :) ) imajo na voljo nekaj preprostih statistik. Seveda tam ni vseh projektov, jih je pa mnogo (4819) in čisto dovolj za čudenjem nad hitrostjo sprememb.

Pridružite se kanalu #commits na irc.freenode.net in videli boste kako to brzi. :) Za statično sliko pa kliknite na tole povezavo (podprimer za KDE).

- Next »