strona główna

Archive for July, 2005

Ho hum

Thursday, July 28th, 2005

W 2007 ma szansę wejść na ekrany ["Gra Endera"](http://www.imdb.com/title/tt0400403/). Z jednej strony, reżyserem będzie Wolfgang Petersen, ten od ["Das Boot"](http://www.imdb.com/title/tt0082096/) i ["Niekończącej się opowieści"](http://www.imdb.com/title/tt0088323/), co rokuje raczej dobrze (["Troi"](http://www.imdb.com/title/tt0332452/) nie widziałem). Z drugiej, biorąc pod uwagę jakość większości kinowych adaptacji ważnych książek fantastycznych... strach się bać.

No nic, zobaczymy za dwa lata.

fuser pod Windows

Thursday, July 28th, 2005

Jedną z rzeczy, których zawsze mi brakowało pod Windows, był odpowiednik fuser – polecenia potrafiącego wyświetlić wszystkie procesy, które używają wskazanego pliku lub katalogu. W microsoftowym środowisku ta informacja jest jeszcze przydatniejsza niż w systemach uniksowych – NTFS blokuje otwarte pliki i katalogi przed zapisem, co oznacza że nie można zmienić lub usunąć katalogu w którym akurat rozsiadł się jakiś proces. Na przykład program o wiele mówiącej nazwie cisvc, indeksujący pliki.

Do tej pory, jeśli już musiałem, przeglądałem informacje wyświetlane przez [Process Explorer][process_exp] z [Sysinternals][si_com], ale było to rozwiązanie czasochłonne – wymagało ręcznego przejrzenia listy podejrzanych procesów i sprawdzenia, który z nich korzysta z danego pliku. Dopiero dzisiaj przyjrzałem się dokładniej liście oprogramowania udostępnianej przez [Sysinternals][si_com] i, święto nad świętami, znalazłem: [handle][handle_url].

C:\libs\env>"\Program Files\sysinternals\handle.exe" \libs\env

Handle v3.10
Copyright (C) 1997-2005 Mark Russinovich
Sysinternals - www.sysinternals.com

cmd.exe pid: 3824 C: C:\libs\env
cmd.exe pid: 4476 C: C:\libs\env
cmd.exe pid: 3764 C: C:\libs\env
handle.exe pid: 4908 C: C:\libs\env

C:\libs\env>

Fajne, a na dodatek:

C:\libs\env>"\Program Files\sysinternals\handle.exe" -h

Handle v3.10
Copyright (C) 1997-2005 Mark Russinovich
Sysinternals - www.sysinternals.com

usage: handle [[-a] [-u] | [-c ] | [-s]] [-p | ] [name]
[...]
-c Closes the specified handle (interpreted as a hexadecimal number).
You must specify the process by its PID.
WARNING: Closing handles can cause application or system instability.

Sweeet.

[process_exp]: http://www.sysinternals.com/Utilities/ProcessExplorer.html
[si_com]: http://www.sysinternals.com/
[handle_url]: sysinternals.com/Utilities/Handle.html

Nie wierzcie w osobomiesiące

Wednesday, July 27th, 2005

Od dłuższego czasu czytam regularnie
[joelonsoftware.com](joelonsoftware.com). Joel Spolsky jest
właścicielem niewielkiej firmy programistycznej w Nowym Jorku; na
swoich stronach www pisze na różne tematy dotyczące tworzenia
oprogramowania – o projektowaniu, interfejsach użytkownika,
szacowaniu czasu, wyznaczaniu cen i innych przydatnych sprawach.

Dwa dni temu opublikował nowy artykuł, ["Hitting the high
notes"][hitting], o oszczędzaniu poprzez zatrudnianie tańszych
programistów. W skrócie:

1. Różnice produktywności w grupie programistów potrafią być ogromne.
Ta informacja, nawet poparta bardzo wiarygodnymi danymi, jeszcze
nie jest niczym odkrywczym, pisał już
o tym Brooks w "The Mythical Man-Month" (["Mityczny
osobomiesiąc"][tmmm_pl]) i Lister z DeMarco w "Peopleware"
(["Czynnik ludzki: Skuteczne przedsięwzięcia i wydajne
zespoły"][pw_pl]). Co jest ciekawsze, to że nawet jeśli
ograniczymy grupę do programistów tworzących kod najlepszej
jakości (w artykule – górne 25% studentów), to różnice w
produktywności będą podobne.

Najszybsi potrafią pracować ponaddziesięciokrotnie szybciej od
najmniej wydajnych pracowników. I nie chodzi o tempo produkowania
kolejnych linii kodu, ale o czas potrzebny na rozwiązanie tych
samych zadań.

2. Programiści różnią się nie tylko produktywnością. Ważna jest
też kreatywność, talent, zdolność rozwiązywania problemów
z którymi nie zetknęli się wcześniej. Pomysłowość dziesięciu
marnych programistów nie zastąpi jednego, bardzo dobrego.

Oba punkty są bardzo istotne. Z pierwszego wynika, że nie warto
oszczędzać zatrudniając większą grupę gorszych programistów, nawet
jeśli zignorować fakt że rosną wtedy koszty komunikacji między nimi.
Różnice w wydajności znacznie przewyższają różnice w wynagrodzeniach
– według [raportu serwisu wynagrodzenia.pl][wynagrodzenia] najwyższe
wynagrodzenie jest mniej więcej pięciokrotnie wyższe od najniższego w
tym samym mieście. Ale to tylko jeśli wrzucić wszystkie firmy do jednego worka; jeśli ograniczymy się tylko do firm o podobnej wielkości, poniżej 30 osób,
z polskim kapitałem, to różnica w Warszawie jest trzykrotna.

Do drugiego punktu niewiele można dodać. Tworzenie oprogramowania to
nie jest praca fizyczna, tu nie chodzi o przeniesienie sterty śrubek z
jednego końca hali produkcyjnej na drugi. Rzadko sprawdza się podział
na "ludzi z pomysłami" i "ludzi do pracy", bo przytłaczająca większość
pracy nie wymagającej kreatywności została już dawno przerzucona na
maszyny.

Z tych informacji wynika jeszcze jeden wniosek, na inny temat niż artykuł Joela:
ostrożnie z szacowaniem czasu. Zgadywanie, ile czasu może komuś
innemu zająć zaimplementowanie danej funkcjonalności na podstawie
własnych doświadczeń jest zawsze ryzykowne, chyba że jest to osoba
bardzo dobrze znana albo dopuszczalne jest założenie marginesu
bezpieczeństwa nawet dziesięciokrotnie większego od początkowej oceny.
A już bardzo złym pomysłem jest wycenianie projektu bez wiedzy kto
będzie go realizował.

[Nie wierzcie w osobomiesiące][tmmm_pl].

[hitting]: http://www.joelonsoftware.com/articles/HighNotes.html
[tmmm_pl]: http://www.wnt.pl/wnt/ksiazki.nsf/uid/000216103245CBAMR4GKD88?OpenDocument
[pw_pl]: http://www.wnt.pl/wnt/ksiazki.nsf/uid/050204134508wPROS69AGY8?OpenDocument
[wynagrodzenia]: http://wynagrodzenia.pl/index.php?page=article&id=754

Administratorom

Monday, July 25th, 2005

[Three Dead Trolls in a Baggie: The system administrator song](http://www.deadtroll.com/index2.html?/sysadmin/index.html~content)

"Got a virus, lost your password, or you just can’t print,
in an hour he’ll show up and then he’ll crouch and squint.
He’ll fight to save your files, he might be there all day,
but sometimes he just presses “caps lock” and then walks away.

But hey! Suddenly my password works! Hoooray!"

Zaskoczenie

Sunday, July 24th, 2005

"Uaktualnienie dostępne.

Nowa wersja Skype (1.3.0.57) jest już dostępna – zalecana aktualizacja.

[Tak] [Anuluj]"

I tu niespodzianka. Wybranie "Tak" powoduje zamknięcie Skype i otwarcie strony, z której można ściągnąć nową wersję, w porządku; ale wybranie "Anuluj" powoduje tylko natychmiastowe zamknięcie Skype. To tyle jeśli chodzi o znaczenie słowa "zalecana". Nowa wersja to 7.5MB, co w miejscu w którym obecnie jestem oznacza jakieś 20 minut wymuszonego czekania :(

Na Skype trudno narzekać, bo i tak jest warte znacznie, znacznie więcej niż kosztuje, ale główną przyczyną dla której tak się upowszechniło jest to, że – w przeciwieństwie do poprzednich programów o podobnej funkcjonalności – po prostu działa, bez udziwnień i utrudnień. Instalacja i używanie jest proste, zgodne z prawem minimalizacji zaskoczenia (program zachowuje się w sposób, który najmniej zaskakuje użytkownika). No to mamy pierwszy wyjątek. A wystarczyło inaczej sformułować tekst w okienku.

Ziemia - powietrze

Saturday, July 23rd, 2005

Przypadkiem trafiłem na Discovery na program o poszerzaniu Kanału
Panamskiego, łączącego Atlantyk z Pacyfikiem. Całość ma imponujące
rozmiary: osiemdziesiąt kilometrów przez sztuczne jezioro i góry, a na
obu końcach wielkie śluzy podnoszą i opuszczają statki z wysokości 26
metrów. Całość jest używana bez większych zmian od 1914 roku.

Co jest naprawdę ciekawe: były dwie próby stworzenia takiego
połączenia w tym miejscu. Pierwszą zajęli się Francuzi pod
kierownictwem Ferdynanda de Lesseps i jego syna, Charlesa. Okazała
się spektakularną porażką, w wyniku całego szeregu przyczyn:

* projektu przygotowanego w pośpiechu, przez ludzi bez doświadczenia
w pracy w tropikach; według początkowego planu kanał miał
przebiegać na poziomie morza (przeciwnikiem tego pomysłu był
między innymi Eiffel),
* ego Ferdynanda – bardzo długo zwlekał ze zgodą na zmianę planu do
wersji zakładającej śluzy i kanał na wyższym poziomie,
* złej organizacji,
* nieodpowiedniego wyposażenia,
* bardzo wysokiej śmiertelności wśród pracowników (malaria i żółta
febra – nie wiedziano jeszcze, co je wywołuje).

Stopniowo większość z nich została usunięta, ale zmiany następowały
tak powoli, że w międzyczasie skończyły się pieniądze. Skończyło się
po dziewięciu latach na sprawach sądowych, oskarżeniach o malwersacje
i wyrokach więzienia.

Drugim podejściem zajęli się Amerykanie, po odkupieniu projektu od
Francuzów. Różnica w podejściu była spora: stworzyli bardziej
realistyczny projekt (zakładający system śluz), wymienili sprzęt,
pełniej wykorzystali to, co było na miejscu (między innymi linię
kolejową biegnącą dokładnie wzdłuż kanału) i poświęcili ogromne środki
i rok czasu na coś, co nie miało bezpośredniego przełożenia realizację
celu: walkę z komarami przenoszącymi febrę (która dzięki temu praktycznie zniknęła z Panamy) i malarię. Aha, lepiej też płacili.

Innymi słowy: z dwóch przedsięwzięć powiodło się to, które było lepiej
zaplanowane, bardziej dbało o pracowników i zapewniało im lepszy
sprzęt. Gdzieś tu jest morał, jestem tego pewien :)

Szpitale

Thursday, July 21st, 2005

Ot ciekawostka: na drzwiach sekretariatu oddziału wisi tabliczka "Wypisywanie chorych", ale nigdzie nie zauważyłem podobnej, z napisem "Wypisywanie zdrowych."

Może to oznaczać jedną z dwóch możliwości.

1. pacjent nie przechodzi ze stanu "chory" do stanu "zdrowy", jak mogłoby się wydawać, stopniowo. Proces przypomina raczej przejście fazowe: po spędzeniu w łóżku odpowiedniej ilości czasu człowiek, jeszcze chory, przychodzi do sekretariatu, i staje się zdrowy w którymś momencie podczas końcowych formalności,

2. personel szpitala nie wierzy lub woli się nie przyznawać, że ktokolwiek może wyjść stamtąd zdrowy.

Szczerze wolę wierzyć w wariant pierwszy.

A swoją drogą, podczas ostatnich dwóch dni miałem okazję dokładniej przyjrzeć się broszurkom i plakatom wywieszanym na szpitalnych korytarzach – te które widziałem zawierały głównie ilustrowany spis chorób leczonych produktami firm, które zapłaciły za ich wydruk. Po takiej dawce informacji na temat ilości możliwych problemów można zwątpić w to, że ktokolwiek jest zdrowy. Może autor tabliczki też naoglądał się takich plakatów.

Logoyes

Thursday, July 21st, 2005

Ot ciekawostka, logo firmy w 6 prostych krokach:

[http://www.logoyes.com/logocreator.php](http://www.logoyes.com/logocreator.php)

A ja, dziwny, chcę żeby moje logo zaprojektował plastyk :)

Ostatnio z różnych powodów zmniejszyła sie ilość czasu, który mogę poświęcać na pracę przy komputerze, co ma jednak tę zaletę że sporo czytam, między innymi "Code Complete". Ciągle coraz bardziej utwierdzam się w przekonaniu, że to książka warta polecania, a nawet ewangelizacji. Tony konkretnych, bardzo praktycznych rad, popartych – gdzie to możliwe – wynikami badań. Do tego świetne cytaty na marginesach i dodatkowa rozrywka wynikająca z przypominania sobie horrorków z przeszłości wynikających z tego, że ktoś postępował inaczej – między innymi sporej części mojego kodu sprzed pięciu lat. Z drugiej strony, pięć lat rozwijania złożonego, ciągle rozrastającego się systemu, świetnie (chociaż momentami brutalnie) pokazuje, które techniki niespecjalnie się sprawdzają.

Heinlein

Saturday, July 16th, 2005

Przeglądając [blog Jarka Zgody](http://zgoda.jogger.pl/#e132130) trafiłem na ten tekst:

"Istota ludzka powinna umieć zmieniać pieluchy, zaplanować inwazję, ubić wieprza, zbudować statek, zaprojektować dom, napisać sonet, poprowadzić księgę rachunkową, zbudować mur, nastawić złamanie, pocieszać umierających, wydawać rozkazy, przyjmować rozkazy, działać w grupie, działać samemu, rozwiązywać równania, analizować nowe problemy, roztrząsać nawóz, zaprogramować komputer, ugotować smaczny posiłek, walczyć skutecznie i umrzeć chwalebnie. Specjalizacja jest dla insektów." – Heinlein, "The Notebook of Lazarus Long"

Świetne. Przy okazji szukania źródła trafiłem na to:

"Programista powinien umieć znaleźć błąd, sprzedać aplikację, przebudować prowizorkę, poprowadzić zespół, zaprojektować aplikację, zaplanować projekt, zbudować bazę danych, skonfigurować sieć, zaimplementować opowieści użytkowników, przeanalizować opowieści użytkowników, pracować w zespole, pracować samemu, używać wzorców, tworzyć nowe rozwiązania, pisać dokumentację, mieć prawdziwe życie, stworzyć fajny serwis www, pisać listy wydajnie, rezygnować z wdziękiem. Specjalizacja jest dla werbowników." – Peter Merel ([podobno](http://no-smok.net/nsmk/SpecializationIsForInsects))

Zgadzam się. Nie wymagałbym wielkich umiejętności marketingowych i handlowych, ale należy mieć przynajmniej cień świadomości na temat tego jak myślą i czego oczekują od oprogramowania użytkownicy. Manie prawdziwego życia w tym bardzo pomaga.

Nie chodzi też o to, żeby programista faktycznie zajmował się administracją sieci. Powinien jednak wiedzieć, jak działa, czego się spodziewać, a w razie problemów – jak szukać ich przyczyn.

Więcej na ten temat napisał dwa lata temu [Eric Sink](http://notalegend.com), w tekście ["Potrzebujecie programistów, nie koderów"](http://software.ericsink.com/No_Programmers.html). Oj, tak.

Nareszcie Sarge

Saturday, July 16th, 2005

W końcu zabrałem się za aktualizację mojego kuchennego serwera z poprzedniego stabilnego Debiana (woody) do aktualnej wersji (sarge). Miałem nadzieję, że obędzie się bez większych kłopotów, w końcu nigdy specjalnie nie grzebałem w jego konfiguracji. Vanilla Woody z drobnymi zmianami gdzieś w /etc/apache i crontabie.

Zmiana w /etc/apt/sources, apt-get update, apt-get dist-upgrade, trochę testowania z ciekawości – prawie wszystko wydaje się być w porządku, ale user mode linux przestał się włączać. No to reset. I zaczynam szukać płytki instalacyjnej, bo próba startu systemu kończy się na etapie "LI".

Pomógł start z płyty instalacyjnej:

1. uruchomić w trybie "expert",
2. wybrać "Detect and mount cdrom", załadować wszystkie moduły jakie zaproponuje (na pytania o parametry modułów i PCMCIA odpowiedzieć "No", chyba że system bez tego sobie nie poradzi),
3. uruchomić konsolę (lub przejść na drugą, Alt+F2),
4. stworzyć katalog /target, zamontować w nim partycję bazową systemu oraz, jeśli /boot jest na osobnej partycji, zamontować też jego. U mnie wygląda to tak (/boot na partycji 1, / na 5):

* "mkdir /target"
* "mount /dev/ide/host0/bus0/target0/lun0/part5 /target"
* "mount /dev/ide/host0/bus0/target0/lun0/part1 /target/boot"

5. "chroot /target /bin/bash"
6. "lilo"

I już, po wykonaniu tych kroków system już wstaje. Wygląda na to, że dist-upgrade podmienił jądro na nowsze ale nie uruchomił lilo. Przykre. Lubię linuksa, sam od dawna go używam do zastosowań różnych – serwerowych, przez długi czas był też moim głównym systemem na stacji roboczej i komputerze domowym, więc przykro jest widzieć że tak zachowuje się dystrybucja uważana za jedną z bardziej dopracowanych.

Z akcentów pozytywnych – po restarcie user mode linux uruchomił się poprawnie.