torstai 28. elokuuta 2008

Dellin näppäimistön pikanäppäinten säätäminen

Dell varustaa ainakin kannettaviaan näppäimistöllä, jossa on pikanäppäimiä nettiselailulle, sähköpostille ja laskimelle. Viimeksi mainittu on erittäin kätevä, jos on usein tarvetta pikaisille pienille laskuille. Valitettavasti Windowsin vakiolaskin on monessakin mielessä varsin alkeellinen. Onneksi pikanäppäimen suorittaman ohjelman voi vaihtaa muuttamalla avaimen HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AppKey\18 arvoa. Enää tarvitaan vain kunnollinen laskin!

keskiviikko 27. elokuuta 2008

Adobe Readerin käyttäjä PDF-tiedoston tekijän armoilla

Adobe julkaisi hiljattain version 9 ilmaisesta Reader-ohjelmastaan, jolla pystyy katselemaan PDF-tiedostoja. Kautta aikojen Adoben käytäntönä on ollut pakottaa PDF-tiedoston katselija noudattamaan tiedoston tekijän sääntöjä. Rajoitukset eivät koske ainoastaan tulostusta ja tekstin kopiointia. Uusin versio jatkaa vanhalla linjalla, vaikkakin pieni liennytys on tehty sallimalla käyttäjän estää käsityökalun pakottaminen "lukutyökaluksi". Esimerkiksi uudet mittaustyökalut toimivat vain, jos tiedoston tekijä on asettanut ne käyttöön. Edelleen ainoa tapa mitata sivulla olevia kuvioita on käyttää GSViewiä, joka ei muilta ominaisuuksiltaan ole aivan Readerin veroinen. Toivottavasti GNU PDF-projektista syntyy korkealaatuinen vapaa PDF-katselin, joka kunnioittaa lukijan tahtoa. Toivottavasti tämä katselin myös vierittää sivuja paljon sujuvammin kuin Reader, joka on edelleen huolimatta 15 vuoden kehityksestä on luvattoman hidas sivujen vierityksessä.

maanantai 25. elokuuta 2008

memmapfile-funktion käyttö MATLABissa

MATLABissa on jo muutaman version ajan ollut memmapfile-funktio, joka hyödyntää käyttöjärjestelmien tarjoamaa tiedostojen muistiinkuvauspalvelua. Tiedosto voidaan siis kuvata prosessin muistiin ikään kuin se olisi muistissa, vaikka se tosiasiassa onkin vain massamuistissa. Palvelua hyödyntävän ohjelmoijan ei tarvitse itse ladata osia tiedoston sisällöstä muistiin käsittelyä varten, vaan käyttöjärjestelmä hoitaa tämän tylsän ja virhealttiin tehtävän. Palvelu on oikeastaan todella tärkeä ajatellen nykyistä massamuistin ja keskusmuistin suhdetta: massamuistia voi olla tavallisissa mikrokoneissakin teratavu tai useampia, mutta fyysistä muistia on usein vain gigatavu. tai pari. Lisäksi MATLAB tuo vielä oman rajoitteensa muistinkäyttöön, sillä sille ei riitä, että muistia on yhteensä jokin määrä. MATLAB pystyy nimittäin tallentamaan matriiseja vain yhtenäiselle muistialueelle. Lisäksi ainakin Windowsissa MATLABin käytössä oleva muistialue pirstoutuu käytön aikana, jolloin kahden gigatavunkin muistilla varustetussa koneessa pystyy käsittelemään vain muutamaa sadan megan matriisia yhtä aikaa. MATLAB-ohjelmia on myös helppo kirjoittaa niin, että tarvitaan useita kopioita samasta matriisista.

memmapfilen käyttö on onneksi melko yksinkertaista. Oletetaan, että on olemassa 500 megatavun Level 4 MAT-tiedosto aikasarja.mat, jossa matriisi y sisältää jonkin systeemin syötteen rivillä kaksi, vasteen rivillä kolme ja ajan rivillä yksi. Seuraavalla koodilla 

   s = whos('-file', 'aikasarja.mat');
map=memmapfile('aikasarja.mat',...
'Format', {'double' s(1,1).size 'y'},...
'Repeat', 1,...
'Offset', 22);
syntyy objekti map, jossa itse aikasarjoihin pääsee käsiksi notaatiolla map.Data.y. Tässä on ensin whos-funktiolla otettu tiedoston sisältämän matriisin ominaisuudet talteen rakenteeseen s. Matriisin koko on syötetty suoraan memmapfilen Format-argumenttiin, joka tarvitsee lisäksi ohjeen datan tulkitsemiseksi (double) ja nimeämiseksi (y). Tämän jälkeen voi vaikkapa laskea varsin siedettävällä muistinkäytöllä taajuusvaste-estimaatin:
[FRF, frequency] = tfestimate(map.Data.y(2,:), map.Data.y(3,:));
Oleellista on tietää, missä muodossa data on tiedostossa. memmapfile on sen verran matalalla tasolla, että helposti joutuu lukemaan MAT-tiedostoformaatin dokumentaatiota pystyäkseen antamaan oikean arvon Offset-argumentille. Tässä tapauksessa oikea offset on 22, koska matriisin nimen pituus on kaksi tavua (y-kirjain ja null-merkki). Tiedostojen tarkastelussa tarvitaan hyvä tiedostonmuokkain. Paras löytämäni on KHexEdit, joka tosin toimii vain Linuxissa. Ehkäpä samat toiminnot tarjoava ohjelma on olemassa myös Windowsille.

Rekursiivinen hakemistolistaus MATLABissa

Kotikutoinen rekursiivinen hakemistolistaus MATLABissa. Esimerkki käytöstä:
>> pwd

ans =

D:\Ohjelmistot\MATLAB\R2008a\bin

>> s = rlsdir('.');
>> s.name

ans =

.\registry


ans =

.\util


ans =

.\win32


ans =

.\util\mex


ans =

.\win32\accessible


ans =

.\win32\codecs


ans =

.\win32\imageformats


ans =

.\win32\ipp20


ans =

.\win32\mbuildopts


ans =

.\win32\mexopts

>> s = rlsdir('registry');
>> s.name
>> s = rlsdir('util');
>> s.name

ans =

util\mex

>>

Toiminta perustuu oletukseen, että hakemistot . ja .. ovat ensimmäisenä listassa. Tämä ei toteudu ainakaan silloin, jos hakemisto(i)ssa on tiedostoja, jotka alkavat #:lla. Esimerkiksi Emacs jättää jälkeensä tällaisia tiedostoja.

Koodi (jota saa käyttää vapaasti):

function dirs = rlsdir(root)

% DIRS = RLSDIR(ROOT)
% Returns a recursive listing of subdirectories of ROOT in structure DIRS
% similar to that returned by the built-in function DIR. The pathname of
% the NAME field of the structure DIRS is given relative to ROOT.

temp = dir(root); % List the root dir
temp(1:2)=[]; % Remove this directory (.) and upper level (..)
n = 1;
for n = 1:length(temp) % Loop through directories and files
if temp(n).isdir == 1 % If a directory is found ...
temp(n).name = [root '\' temp(n).name]; % concatenate the root level
temp = [temp; rlsdir(temp(n).name)]; % directory name and the newly
end % found directory to a
end % temporary variable and list
m = []; % the contents of the new dir.
for n = 1:length(temp) % Remove all non-directories from the temporary
if temp(n).isdir == 0 % variable.
m = [m ; n];
end
end
temp(m) = [];
dirs = temp; % Return the temporary variable.

end

sunnuntai 24. elokuuta 2008

Ubuntu piipittää

Satunnaisesti HP Compaq 6820s:n herätessä keskeytystilasta (Ubuntu-termi) kone piippaa viisi tai kuusi kertaa. Piippaukset kestävät noin 0,1-0,5 sekuntia ja niiden välissä on noin 0,1 sekunnin tauko. Jokainen piippaus nousee ja häipyy pehmeästi. Ääni lienee sinimuotoinen ja taajuudeltaan noin 1-2 kHz. Alsamixerin näyttämän Master-kanavan voimakkuusasetus vaikuttaa piipityksen voimakkuuteen. Ubuntu käyttää kyseistä ääntä ilmoittaakseen virheestä. Äänen voi ruksata päälle ja pois virranhallinnan asetuksista:

Keskeytystilasta herättäessä ilmeisesti oletetaan, että näyttö ei ole käytettävissä virheilmoitusten esittämiseen. On ehkä mahdollista ruksata jostain päälle tekstuaalinen ilmoituskin. Pikaisella silmäyksellä lokeista löytyi vain seuraavat virheet (debug-tiedostosta): 

Aug 24 12:23:43 hp kernel: [    0.419762] APIC error on CPU1: 00(40)
Aug 24 12:23:43 hp kernel: [ 0.419764] APIC error on CPU0: 00(40)
Lokien syövereissä saattaa toki olla virheilmoituksia, jotka vain jäävät ymmärtämättä ilman parempaa Linux-osaamista. Vai pitäisikö osata lukea rivien välistä?

lauantai 23. elokuuta 2008

Linux ei löytänyt CD-asemaa

Miten on mahdollista, että Linux 2.6.20 ei löydä CD/DVD-asemaa? Luulisi näin tavallisen laitteen toimivan ilman muuta ajanmukaisessa Ubuntu 8.04:ssä. Laitetiedostoa ei kertakaikkiaan ollut, eikä asemaan asennettu levy saanut lyhytkestoista viserrystä lukuun ottamatta aikaan mitään muuta toimintaa. Voisiko vika johtua siitä, että 2.6.20 oli käytössä Hardy Heronissa, jossa pitäisi olla 2.6.24? Joka tapauksessa 2.6.24 löytää CD-aseman ongelmitta, joten se näkyy nyt lshw:n listauksessakin:

*-cdrom
description: DVD-RAM writer
product: CD/DVDW TS-L632M
vendor: TSSTcorp
physical id: 0.0.0
bus info: scsi@3:0.0.0
logical name: /dev/cdrom
logical name: /dev/dvd
logical name: /dev/scd0
logical name: /dev/sr0
version: 0A17
capabilities: removable audio cd-r cd-rw dvd dvd-r dvd-ram
configuration: ansiversion=5 status=open

perjantai 22. elokuuta 2008

Kännykät halvempia kuin ikinä

Otsikko Tekniikka&Talous-lehdessä 21.08.2008: "Kännykät halvempia kuin ikinä". Viime aikoina on usein nähnyt ikä-sanan essiiviä käytettävän tällä tavalla. Eikö suomen kielessä sanaa ole yleensä käytetty mieluummin kieltolauseessa kuin väitelauseessa? Esimerkiksi "en ikinä tekisi sitä." Olisiko paras käyttää superlatiivia: "kännykät halvimmillaan"? Toinen superlatiivin tarve tulee eteen kehuttaessa olympiakisoja: kaikista parhaimmat kisat. Tässäkin näkee käytettävän ikä-sanan essiiviä: http://www.digitoday.fi/yhteiskunta/2008/08/22/kiina-vangitsi-ulkomaisia-bloggaajia/200821726/66

lauantai 2. elokuuta 2008

Uutiskommentti: Kiinan nettisensuuri

Olympialaisten alla kaiken maailman toimittajat valittavat nettisensuuria. Luonnollinen purkauskanava toimittajan kärsimykselle on hänen oma tiedotusvälineensä. Niinpä saamme lukea ja kuulla asiasta tuon tuosta. Ihmeellistä asiassa on, että kukaan ei uutisoi ratkaisukeinosta. Onhan netissä ohjeet sensuurin kiertämiseksi. Yksinkertainen keino sensuurin kiertämiseksi on oman firman VPN-yhteys ja välityspalvelin.