Friday, 21 April 2006

Sunday, 16 April 2006

Ciszej...jeszcze ciszej...nadal nie jest cicho!

Jakiś czas temu komp trafił z leża w piwnicy do mojego pokoju. I w końcu zauważyłem, jak ta bestia wyje. Już nie było mowy o zostawieniu muła na noc, bo spać się po prostu nie dało. Jakoś tak jest, że jak raz się zwróci uwagę na jedną upierdliwość, to potem nie daje ona spokoju, nawet, jeśli wcześniej była niezauważalna... Diagnoza: komputer jest za głośny.

Pierwszy winny został namierzony od razu, bo charczał jak śmiertelnie ranny zwierz. Zatrzymanie go ołówkiem dało cudowny efekt, ale było nieco ryzykowne na dłuższą metę. Wentylator z tyłu obudowy wyleciał, zastąpiony przez dwa nowe, jeden na jego miejsce, drugi z przodu kasty, na dole, żeby zasysał powietrze. Nowe wentylatorki kręcą się wolniej i ciszej, a do tego dopasowują prędkość do temperatury. No i były tanie jak barszcz ;-) (Arctic Cooling Fan PRO TC)

Temperatura spadła o 2ºC (wg lm_sensors), i jest ciszej. Dużo ciszej, ale nadal coś hałasuje... Tym razem - karta graficzna, z malutkim wiatrakiem kręcącym się w szaleńczym tempie. Skoro jest chłodniej, to można zakryć zbędne dziury w obudowie, powinno być ciszej... trochę płyty korkowej i zrobione. Efekt jest... pewien. Można też wywalić niepotrzebną stację dyskietek, zgrzytającą strasznie za każdym razem, gdy Windows sobie o niej przypomni. Hmm, co by tu... Pasywne chłodzenie za drogie, ale można kupić wentylator AC, prawie bezgłośny...

Nowa "zabawka" przyszła dziś z Allegro (sklepy komputerowe nie interesują się już posiadaczami tak archaicznego sprzętu jak mój, sniff sniff). Śrubokręt w rękę i do roboty. Arctic Cooling NV Silencer 1 już działa w moim komputerze, znów jest ciszej... teraz słychać dysk twardy, wentylator na procesorze i.... monitor. Ale głośność spadła o parę klas - sprzętu nie słychać w ogóle przy włączonej muzyce, zagłusza go cicha rozmowa. To wystarczy - do czasu ;-)

Usunięta stacja FDD
Dziura pod NV Silencer 1
Porównanie wielkości
Nagi chipset na karcie graficznej
Arctic Cooling NV Silencer 1
Zajęte dwa sloty PCI

A po głowie chodzi mi złożenie terminalu, całkowicie pozbawionego generujących dźwięk, ruchomych elementów, takich jak np. dysk czy aktywne chłodzenie...

Saturday, 15 April 2006

Krnąbrna elektronika

Godzina 10:81
Godzina 10:82

Dość intrygujący widok, napotkany kilka dni temu w poznańskim tramwaju. Mój zegarek pokazywał 11:22... Dzielny tramwajowy wyświetlacz, nie składając broni z powodu byle błędu konstruktora, wciąż odliczał czas.

Saturday, 8 April 2006

IPX and mounting Novell Netware shares on Gentoo

Start by enabling kernel support for IPX networking and NCP filesystem. For 2.6 kernels (it's simmilar on 2.4), you need to enable the following settings:

Networking -->
Networking options -->
<*> The IPX protocol
File systems -->
Network file systems -->
<*> NCP file system support (to mount NetWare volumes)
[*] Clear remove/delete inhibit when needed
[*] Use NFS namespace if available
[*] Use LONG (OS/2) namespace if available

On 2.6 kernels enabling NCP shows quite a long list of options. As I did not understand their meaning ;-) , I settled for defaults, which work just fine. You may want to enable National Language Support. I gave up on this as I was unable to find a working combination of codepage/iocharset for my local Novell server.


So, recompile (make install && make modules modules_install for gentoo-sources) and reboot. Emerge ncpfs (emerge -av ncpfs). I wanted my machine to automount the Netware share on every boot, thus I added an entry to /etc/fstab:

SERVER/user		/mnt/novell	ncpfs		uid=root,gid=disk,owner=root,passwd=pass,mode=660,volume=VOL1	0 0

Obviously, you have to replace SERVER with your local Novell servername, user with your username, VOL1 with the name of volume you wish to mount (or ommit volume=VOL1 at all to mount the entire server) and pass (in passwd=pass) with your guess_what. Of course, /mnt/novell has to exist.

There are a few caveats to keep in mind if you choose this approach. First and foremost, your password is visible to anyone who can read your fstab. This can be avoided by storing it in a config file, readable only to root (see man ncpfs for details). Second, the mount is fully accessible to anyone in the group disk (to allow only root, drop gid=disk from fstab entry).


Next, you'll want to actually connect to IPX network. I assume that it is working on the very same ethernet connection you use as eth0. Execute ipx_configure --auto_interface=on --auto_primary=on and wait a few seconds for it to settle (it backgrounds immediately, but give it some time to actually connect). Then, examine ifconfig output for lines containing IPX. Their number may vary, depending on number of IPX versions enabled on the server. If all went well, you are now able to mount your Novell share with a simple mount /mnt/novell.


Now, the init scripts. To connect to IPX on boot, add this code into /etc/conf.d/net.eth0:

postup() {
# This function could be used, for example, to register with a
# dynamic DNS service. Another possibility would be to
# send/receive mail once the interface is brought up.
result=`ipx_configure --auto_interface=on --auto_primary=on`

COUNTER=0
while [ $COUNTER -lt 30 -a `ifconfig|grep IPX|wc -l` -lt 2 ]
do
let COUNTER+=1
sleep 1
done

if [ $COUNTER -eq 30 ]
then
return 127
else
return $result
fi
}

The '2' in '-lt 2' is the number of lines, containing IPX, present in ifconfig output after the connection has settled. Change it as fit. '30' in '-lt 30' and '-eq 30' is the allowed timeout for connecting, ie. if IPX is not up after 30 seconds script reports failure.

To properly mount your NCP shares (after the network connection is initialized), gentoo has to recognize them as network filesystems. Thus, add NET_FS_LIST="ncpfs" to both /etc/conf.d/localmount and /etc/conf.d/netmount.

Monday, 3 April 2006

Dostęp do formatki z zewnętrznego wątku

W dokumentacji .Net napisane jest jednoznacznie - jedynym wątkiem, który może wykonywać jakiekolwiek operacje na formatce (System.Windows.Forms.Form) jest ten, który ją utworzył. Pozostałym wolno jedynie wywoływać metody z serii Invoke(), które z kolei zaowocują wykonaniem podanego do nich delegate w wątku formatki. A jak tego po ludzku użyć? Ano tak:


w klasie formatki

//sygnatura funkcji do wywołania z zewnątrz
delegate void SetTextDelegate(string text);
//i sama funkcja
void SetText(string text)
{
if(!InvokeRequired)//czyli wywołanie z wątku formatki
button1.Text = text;
else
Invoke(new SetTextDelegate(SetText), text);//trzeba zmienić wątek
}

natomiast użycie tego w wątku zewnętrznym to po prostu

form1.SetText((i*i).ToString());

Wersja 2.0 platformy umożliwia wykonanie tej samej operacji jeszcze prościej, mianowicie poprzez wywołanie

form1.Invoke((MethodInvoker)delegate { form1.button1.Text = (i * i).ToString(); });

Tutaj niepotrzebne są żadne dodatkowe metody w formatce, po prostu informujemy framework, że ten kawałek kodu ma być wykonany w wątku będącym właścicielem form1. Jedynym haczykiem jest rzutowanie do MethodInvoker. Jest ono konieczne, ponieważ metoda Invoke() jako parametr przyjmuje dowolny System.Delegate... który niestety sam nie jest typu delegate. Bez MethodInvoker metoda anonimowa byłaby rzutowana do System.Delegate, co skończyłoby się błędem kompilacji. A w ten sposób kompilator rozumie o co nam chodzi.

Jeśli już wykorzystywałeś wątki razem z Windows.Forms to pewnie zastanawiasz się, po co ta cała szopka, przecież można odwoływać się do formatki z innego wątku i wszystko działa? Ano działa, ale tylko na Windows XP. W tej wersji platformy .Net wprowadzono niestety zabezpiecznia przed najczęstszymi błędami związanymi z programowaniem wielowątkowym, co prowadzi do tego, iż da się na niej uruchomić kod niepoprawny, który nie zadziała np. na Windows 98 lub mono. Zresztą, w aktualnej (1.1.13.*) implementacji Windows.Forms pod tym ostatnim jest parę innych problemów - np. tworzenie formatek (całkowicie niezależnych!) w kilku różnych wątkach prowadzi do niedeterministycznego zachowania programu i częstych padów...

Sunday, 2 April 2006

Nie dla idiotów?

Komputer znajomej, kupiony okazyjnie w wiadomym sklepie, zaraz po skończeniu się okresu gwarancyjnego zaczął się zawieszać kilka-kilkanaście minut po starcie. Po stwierdzeniu, że problem nie jest związany z softem otworzyliśmy obudowę...
Spalone kondensatory
Tak, tak, spalone są wszyściutkie kondensatory na płycie głównej :-]


Inny klient, ten sam sklep. Dysk, znów po gwarancji, oddany do naprawy do małego sklepu komputerowego. Serwisant zaintrygowany, bo klient oddał do naprawy dysk jako 40GB, a nadruk oznajmia, że pojemność wynosi 80GB. Chwila sprawdzania i wszystko jasne - w dysku jedna głowica z dwóch nie działała od początku, więc został sprzedany jako o połowę mniejszy.


Nie mogę zrobić nic innego jak tylko zgodzić się z hasłem z niemieckiej reklamy Mediamarkt:

"Nie opłaca sie kraść."