Včeraj se je razvedelo, da imajo uporabniki Debiana in derivatov že skoraj dve leti[0] šibke ključe. Na srečo so na udaru predvsem ključi po algoritmu DSA (ssh) - ključi za gnupg so varni.

Zakaj tak naslov? Za vse skupaj je kriv Debian sam, zaradi lastnega (nepožegnanega) dodatka k kodi openssl. In ravno tu je Source Mage drugačen, saj ne spreminja “upstream” paketov (princip!), če to ni ravno nujno potrebno[1]. Tako je zagotovo dostikje bolj robat, se pa izogne težavam kot je naslovna. Kdo drug bo najbolje vedel kaj je za program dobro kot pa njegovi avtorji sami?

[0] to pomeni da je še celo pri Debianu težava tudi v stabilni različici
[1] paket se ne zgradi - tu je sprememba le v sistemu gradnje; vsi drugi “popravki” so neobvezni in privzeto onemogočeni

edit: še slikca:
slikca

Vroča CAPTCHA. Ah, človeška iznajdljivost! :D

Društvo Mountain Wilderness Slovenije (MWS) je naša podružnica MWI. Je mednarodno, nevladno in nepolitično združenje ekološko ozaveščenih gornikov, ki si prizadevajo za ohranjanje in zaščito neokrnjenih gorskih področij, tako v svoji državi kot tudi drugod po svetu.

Kaj ima to veze s prostim programjem*? Na strani za
včlanitev imajo pristopno izjavo v treh različicah. Na prvem mestu je različica v formatu ODF z opombo o openoffice! Pri PDF je omenjen celo KPDF! :D

Že v opisu priprave strani se vidi, da so bili temeljiti (plone očitno dela tudi v brskalniku lynx :lol: ).

* razen moje podpore

Prvoaprilskih sedem

Sortirane po času najdbe:
1. Moja - Source Mage
2. KDE
3. Arch
4. Kubuntu
5. xkcd, questionable content, dinosaur comic
6. The Register/Wikipedia
7. Gmail

Novosti v Source Mage

V zadnjih parih dneh je bilo kar nekaj novih izdaj, ena pa zamuja. Med prvimi je izzid nove testne različice sorcery in posledično tudi nove stabilne različice. Izid testnih je ponavadi precej nepomemben dogodek, tokrat pa se gre za nov vejo na podlagi prejšnje razvijalske. To pomeni da je zdaj v testni različici par kupov novosti, ki so bile v razvoju in poliranju zadnji dve leti.

Lahko bi rekel, da razvoj sorcery poteka v dveh smereh, diagonalno:
veje/razvoj sorcery

Bom poskusil še malo bolje razložiti na primeru. Ko se je končal razvoj na razvijalski veji 1.13, je ta koda šla v testno, hkrati pa se je začela nova razvijalska veja 1.14. Stabilna razičica je bila še vedno iz veje 1.12. Ko se je v testni različici nabralo nekaj popravkov in je delovala stabilo, je izšla prva stabilna različica iz veje 1.13. Razvoj se je nadaljeval v 1.14, v testno 1.13 pa so prihajali razni popravki, vsake nekaj časa pa je iz nje izšla nova stabilna različica 1.13. Zdaj se je zaključil razvoj 1.14 in postopek se bo ponovil.

Večino časa so v obtoku različice po stolpcih, zdaj se pa ravno ustvarja nov. Trenutne izdaje so izpisane krepko. Po stolpcih se med razvijalskimi in testnimi različicami lahko prenašajo samo popravki hroščev, ne pa novi bonbončki (načeloma velja feature-freeze).

Več o dejanskih novostih si lahko preberetu tu.

biser z wikija

Source Mage ima podobne težave s stranjo kot Lugos. Končno je padla odločitev, da se Drupal odklopi od življenske podpore in da ostane samo wiki. Posledično je treba prenesti nekaj vsebin in urediti wiki (MoinMoin :( ).

No, med tem delom sem na wikiju našel tale zabavni spis (avtor neznan):

I love Source Mage

I love Source Mage so much I don’t want to sleep I just want to play with sorcery and cast and dispel and resurrect and compile and install and compile and optimise and optimize and optimise and optionally depend on caffeine and eat nothing but sorcery but mummy said caffeine is bad but I think she just wants my caffeine and I’m awake now and I can’t sleep and I need sleep and I can’t sleep and I think I’ve used the word and too much and I just did it again and I just did it again and again and again and I don’t think this makes much sense but I can’t stop because I can’t sleep and I can’t sleep because I can’t stop and need sleep and I love sorcery and I need sleep and I love sorcery and I need sleep and I love sorcery and I need sleep and I love sorcery and I need sleep and I love sorcery and I need sleep and I don’t think I can sleep now and I don’t think I can ever sleep again I’ll just stay here in front of my computer and hack sorcery and slowly quietly go insane but it doesn’t matter because I love Source Mage and I don’t care and I really need sleep but I haven’t been outside today I don’t know what its like outside I’ve never been outside but thats okay because I have sorcery to keep me company sorcery and the world wide web and its much better in here because in here is world wide and out there is just closed minded automatons who don’t understand the power of sorcery and I need sleep and people tell me I need sleep but I don’t believe them I think they’re just trying to get me vulnerable and I can’t sleep or they will come for me and take me and take me away and hurt me and I don’t like those people because they’re not real people the only people I know I know are real I know through my computer my computer tells me who is real and if you don’t have a public key how can i tell you are you what do you mean you don’t have a pgp key you must have a pgp key everyone I know who I know is real has a public key you are not real you are not real you can’t be real you can’t be a real person without an email address and I can’t trust you because I can’t verify your identity and I don’t know you who are you you are an impostor you are not my friend I don’t know you all my friends have pgp keys and you are not a pgp key and I can’t verify your fingerprint and you wont encrypt your speech and I can’t trust you I can’t trust anyone any more I can’t trust anyone except sorcery sorcery is my friend sorcery knows all and sorcery is cool and sorcery does everything and I love sorcery and I love Source Mage and I need sleep and I love Source Mage and I love sleep and I need Source Mage and I need Source Mage and Id fap with Source Mage.

Tako.

Ne le da natančno piše kje je problem, lepo je tudi opisano kako hrošč ponoviti (ok, tukaj zaradi enostavnosti to niti ni tako pomembno).

Kot pravi heker je Ivan nadalje vzel v roke gdb in pogledal v kodo kje prihaja do problema. To je uspešno ugotovil, razložil in celo priložil predlog popravka! :D Kot dodatno utemeljitev je dodan še kratek test. Kaj več bi si opica še lahko želela?

Značilnost vsakega dobrega poročila je zgovornost. Skoraj nobena informacija ni odveč in lažje je trebiti koristne od plev kot pa se dlje pogovarjati s poročevalcem, sploh ker ta lahko izgine ali izgubi interes.

GemRB 0.3.0 je na voljo!

Danes smo [0] izdali novo različico GemRB. Od zadnje je minilo kar nekaj časa, zato se je tudi nabralo precej sprememb (na bolje, se ve):

GemRB V0.3.0 (2008-02-17):
New features:
- TLK override handling (custom biographies and map notes)
- weapon immunities
- party AI
- expansion playmode
- more actions, triggers and effects
- loading of projectile explosion animations
- kit information window
- optional CMake build system (windows only)

Improved features:
- sound (now perfect!)
- character generation
- opcodes
- character record window
- pathfinding
- tooltip delay
- bugfixes

Jaz sem delal predvsem na vmesniku in odpravil še zadnjih par preprek za dober urok. Prej pogonu namreč ni bilo preveč všeč, če je bil ratzreščen po / kot veleva FHS.

Vidim da gemrb sploh še nisem predstavil! Na TODOju ga imam že iz prejšnjega blog-a, skupaj z wormux in ja2-stracciatella. Zato je kratek opis na mestu, naslednjem mestu, takoj za to piko.

GemRB je implementacija IE. :D Da ne bo pomote, s tem ni mišljen brskalnik, ampak Infinity Engine. Gre se za igralni pogon, ki je omogočil stvaritev nepreseženih klasik žanra FRP kot so Planscape Torment, Baldur’s Gate in Icewind Dale (plus nadaljevanja in dodatki). Na srečo večina teh bolj ali manj dela z wine [1].

GemRB bo omogočal gladkost igralne izkušnje, lažje spreminjanje (modding) in večjo prenosljivost (nekdo ga je že uspešno sprobal na dlančniku). Predvsem, predvsem pa je gemrb kot igralni pogon odlična začetna platforma za stvaritev proste igre s podobno mehaniko. Ker takih aspiracij praktično ni niti v industriji (z izjemo The Broken Hourglass [2]), bi bil tak projekt lahko zelo dobro sprejet. Sam sem že sit MUD-ov, hack’n’slash iger in različnih MMORPG-jev v inicialnih stadijih (končni najbrž niso nič boljši). Pri BG2 te zrajca že uvodna glasba, kaj šele sama igra. Da ne omenjam Planescape kot pripomočka za osebno rast! :lol:



[0] smo ker od novembra tudi sam pomagam. :) Med drugim ste mogoče opazili kje biva nova stran projekta. ;)
[1] z več ali manj čarovnije in tu ni problem samo različica wine (na srečo jih imam skoraj vse do 0.9.10)
[2] ni čudno, če sta pa glavna pri projektu dva zelo priznana IE moderja :)

Pa še res je. S tem ne mislim urejevalnika besedil, ampak enega zabavnega in sposobnega programerja po imenu Zed Shaw.

About Me

I’m so incredibly famous that I decided to put up this blog to keep everyone on the internet informed about me. The most important person. Others try to be known by everyone and grab their 15 minutes of fame, but only Zed brings style and grace to the enterprise of owning the world.

No, zdaj veste v kakšnem stilu piše. :D Spominja na Maddoxa, samo da ni absurden.

Pred kratkim je zaslovel s svojim rant-om (večinoma) o Ruby on Rails. Tragedija? Komedija? Odločite se sami, vsekakor je zanimivo branje. :)

Še drugi zanimivi članki (le ščepec opusa):
Programmers Need To Learn Statistics
Or I Will Kill Them All

The Master, The Expert,
The Programmer

O verodostojnosti IT raziskav

Git pozna bisekcijo, kar lahko precej pomaga pri iskanju izvora hroščev. Sledi predstavitev na čisto realnem primeru:

$ git bisect start # začnem z bisekcijo
$ git bisect bad # trenutno stanje (commit, revision) je slabo
$ man git-bisect # kako že naprej? :)
$ git log # poiščem stanje za katero vem da je dobro (po spominu, drugače bi moral testirati)
commit 41be597523c753415deac2a4ad131bc5119831c0



$ git bisect good f0509a2be # označim dobro stanje
Bisecting: 11 revisions left to test after this
[6e6d793a3929575752793e9cfc222a0e4443dc78] lib*: removed trailing whitespace

Iz izpisa sledi, da je med dobrim in slabim stanjem 2*11±1 drugih stanj. Zdaj sem na sredi začetnega intervala in lahko preverim ali je stanje dobro. Če je res dobro, je hrošč nastal nekje v zgornji, drugače pa v spodnji polovici intervala. Postopek bom ponavljal dokler ne izluščim problematičnega stanja. Ključno je da je preverjanje stanja stanja zanesljivo, drugače lahko začne git iskati krivca med samimi nedolžnimi!

To testiranje seveda lahko opravimo na roke, lahko si pa pomagamo s skripto. Ker moj primer ni trivialen se mi je splačalo testiranje zavtomatizirati (pa čeprav je ta bisekcija zelo kratka). Git zna pognati skripto in za ta postopek je pomembna le njena izhodna vrednost (return code, exit status) - 0 pomeni da je stanje dobro, 1 pa da ni. Za še bolj zanesljive rezultate bi lahko v skripti test pognal večkrat in potrdil uspeh le če so bile vse ponovitve uspešne.

Testna skripta sicer zgleda kriptično, njen namen je pa da preveri koliko časa traja testni postopek. Če traja predolgo je stanje slabo …

$ cat lock-timer
test=”cast -c xine-lib syslog-ng sudo shared-mime-info poppler-data nas”
critical_time=10018000 # 1 + 0 minutes + 0 for m + 18.000 seconds

time=$(sudo su -c “./install &>/dev/null;
sed -i ’s,\”y\”,n,’ /usr/sbin/cast;
{ time $test >/dev/null; } 2>&1 | sed -n ‘/real/{ s,[reals\t\.],,g; s,m,0,p }’”)
# ^ time it and intelligently strip all non-numerals

time=”1$time” # time doesn’t always pad its output
(( $time < $critical_time ))

Ker bo zdaj postopek testiranja samodejen, bo git sam dokončal celotno bisekcijo. Brez tega bi jaz moral po vsakem koraku ročno ugotavljati stanje stanja.

$ git bisect run ./lock-timer
running ./lock-timer
Bisecting: 5 revisions left to test after this
[2c6b3949dfe68c7ef8c7cfaaa6d28a7668f90fce] common: removed two “new” wrong locks (cherry picked from commit ff1944760ad070d4186f5f7d87d2fbe5303b567b)
running ./lock-timer
Bisecting: 2 revisions left to test after this
[a664cba6560bf60e17c8ab98e4186913d9aadeb9] moved over from the previous repo: changelog printing customization (cherry picked from commit 387ac9304221e65b443f5ce5d75de2aca49bdec4) (cherry picked from commit bc8ecce21bd90ddfcb06d39a1b445fda28a0bd8a)
running ./lock-timer
Bisecting: 1 revisions left to test after this
[1811339c403d32d65f2927071af43d44665f1d31] common: remove EOL whitespace (cherry picked from commit 1ba309e90a88b28a26d1432fee7cc5712d34b80c)
running ./lock-timer
Bisecting: 0 revisions left to test after this
[020f45f576e256c81cbba72089334396d4562f31] use locking in the rest of libstate (=everywhere) (cherry picked from commit a14b4e055dbf59ff5af4b2efdc787e24a56b5861)
running ./lock-timer
020f45f576e256c81cbba72089334396d4562f31 is first bad commit
commit 020f45f576e256c81cbba72089334396d4562f31
Author: Jaka Kranjc
Date: Tue Jan 15 11:46:21 2008 +0100

use locking in the rest of libstate (=everywhere)
(cherry picked from commit a14b4e055dbf59ff5af4b2efdc787e24a56b5861)

:040000 040000 529cbcde750b49a5f79d4ef8e8f861ae52c8c94d e345e2f004434acb31c46e539dab87dfcd8fa223 M var
bisect run success

Lepo se vidi (škoda da wp popači izpis) kako dela git-bisect in na koncu je očitno, da je problematičen 020f45f576 (”… is first bad commit”), katerega commit (islovar: potrditev?!) message je tudi v celoti izpisan.
Čas za nove optimizacije. :)

Za konec pa še:

$ git bisect reset

S tem ukazom se git vrne na začetno vejo (bisekcija se dogaja na posebni) in postopek se konča. Uporabno, če gre kaj narobe. ;)

Moram pa obvezno omeniti, da dobljeni rezultat ni nujno pravi krivec. Najdeno stanje je lahko le omogočilo, odkrilo težave drugje. To se mi je tudi že zgodilo. :) Čisto korektna bisekcija je nakazala čisto korektno stanje. Vendar je tista sprememba le omogočila drugim hroščem, da so postali “vidni”. Ok, striktno gledano je bila kriva ona in je imel git prav - če bi to spremembo preklical, bi bilo spet vse v redu. Vendar je taista sprememba zaželjena, treba je popraviti tiste druge podlubnike. Tečno.

Če vam zadnji odstavek ni bil jasen, si oglejte naslednji ilustrativni primer evolucije programa:
stanje 1

#!/bin/env bash
echo juuhu

stanje 2

#!/bin/env bash
read -p “kako ti je ime? ” odgovor
echo juuhu, $odgovor

stanje 3

#!/bin/env bash
read -p “kako ti je ime? ” odgovor
if [[ odgovor == “huda mravljica” ]]; then
echo AAAAAAAA
kill $$
else
echo juuhu, $odgovor
fi

Ups, naredil sem napako v testu, primerjam dva niza namesto spremenljivke in niz. Sledi popravek:
stanje 4

#!/bin/env bash
read -p “kako ti je ime? ” odgovor
if [[ $odgovor == “huda mravljica” ]]; then
echo AAAAAAAA
kill $$ #samomor, simulacija sesutja
else
echo juuhu, $odgovor
fi

Zdaj mi pa huda mravljica sporoči, da se skripta sesuje! Napiše “Terminated” in to je to. :(

Če bi poskušal napako najti z git bisect, bi prišel do stanja 4 (nikamor), ker je bila prej problematična koda nedostopna (tisti slab test je bil vedno neresničen (false)), čeprav se je napaka pojavila v stanju 3.

- Next »