Aftenposten igjen…

Noen lærer visst aldri, telefonsalgsforsøk igjen selv om jeg klagde sist og følgende ble fyrt av til abbonementsavdelingen:

“Kan dere få stappet inn i systemet deres at jeg IKKE, gjentar IKKE vil bli oppringt av aftenposten. Har dere noe tilbud kan dere sende en epost. Jeg kommer ALDRI, gjentar ALDRI til å bestille noe større abbonement på grunn av en telefonselger, derimot gir telefonselgere fra aftenposten meg en sterk trang til å si opp det abbonementet jeg har – om det er det som skal til for at dere skal la være å plage meg.

Joda, jeg vet at dere har juridisk rett til å ringe meg opp all den tid jeg har et kundeforhold til dere, men sånn til opplysning er det fullstendig bortkastet tid og det eneste som dere kan oppnå¨med det er å miste meg som abbonent.

Med irritert hilsen”

Såpass irritert at det nesten er litt pussig at jeg ikke slo i filler tastaturet mens jeg skrev…

“Vi takker for din henvendelse til Aftenpostens kundesenter. Du vil få svar på e-post fra en kundekonsulent så snart saken din er ferdigbehandlet.” kom i svar. Spent på å se hva kundekonsulenten kommer med… (I følge Dogbert er ordet konsulent sammensat av ordene “con” og “insult”…)

Og så kom det en bekreftelse på at jeg er satt opp som “ikke ring opp” – vel vi får se… Og forøvrig, om noen andre vil kopiere brevet for bruk i tilsvarende situasjoner, så gjør gjerne det. Hyggelig å få en tilbakemelding i så fall.

Posted in Diverse | Comments Off on Aftenposten igjen…

Nye Brød

Matkjedene fjerner gamle varer, så brødoppskriften må revideres. Det vil jo si at jeg går over fra å kjøpe en ferdig kornblanding til å blande selv, så egentlig er det jo et fremskritt:

Ingredienser

  • 100g Sesamfrø,
  • 100g linfrø,
  • 100g solsikkefrø,
  • 100g helkorn hvete
  • 150g grov sammalt rug
  • 150 g sammanlt hvete
  • 2,5g gjær (en terning på ca 1x1x1 cm)
  • 1,25 l vann og 1/2 dl matolje
  • eller 0.75 l vann og 5 dl kefir
  • 1 ss salt
  • ca 1,5 kg fint hvetemel (evt noe sammalt, men minst 1 kg bør være fint, ellers hever ikke brødet seg) (eller speltmel, se nederst)

Ha sesamfrø, linfrø, solsikkekjerner, og helkorn hvete i en stor bolle, hell over ca 0.75l kokende vann rør om og la blandingen stå og kjøle seg ned, gjerne over natten.

Varm opp ca 0,5 liter vann (evt kefiren) og rør inn i blandingen. Ha i saltet, eventuell olje og gjær når temperaturen er passende (gjerne med en gang, men om blandingen er for varm vil det ødelegge gjæren) rør godt. Rør inn sammalt hvete og rug og så fint hvetemel til deigen har en tykk og seig konsistens. La deigen heve en til noen få timer i romtemperatur. Rør og kna inn mer hvetemel til deigen har passe konsistens til utbaking. Pass på å kna deigen mye, ellers vil brødene “drysse”. Når deigen er nok knadd, skal den trekke seg litt sammen igjen når den rulles ut. Bak ut tre brød, la dem heve i 4-5 timer, sett dem inn i kald ovn og stek på ca 200 grader i 50 minutter. (En varmluftsovn bør ha litt lavere temperatur, 190 grader og kanskje litt kortere steketid.)

Jeg har ovn hvor oppstart og steketid kan settes, så jeg setter brødene i ovnen om kvelden og våkner til ferske brød nese morgen.

Det går an å improvisere og eksperimentere med meltyper. Men det er greit å ha i bakhodet hva slags egenskaper de forskjellige meltypene har for gjærbakst: Fint hvetemel er det som i størst grad gjør at brødet holder seg sammen og hever seg, rugmel og og sammalt hvete fungerer også, men i mindre grad. Rug gir en syrlig smak på brødet, havregryn gjør brødet saftigere. Det er vanlig å ha noe olje i brøddeigen, men med en del havregryn er dette overflødig.

Etterhvert har jeg klart å finne en lokal leverandør av speltmel, så pr idag er hvetemelet byttet ut med spelt. Dette gir en seigere og mer klissen konsistens på deigen under utbakingen, men sluttresultatet blir svært bra, brødet blir saftig det kan kjennes nesten litt fuktig ut. Det går også an å erstatte helkorn hvete med helkorn spelt (selges også som speltperler). Imidlertid, for å få disse kornene myke nok, må de få et oppkok.

Disse brødene produseres ved passende anledninger ved stuntbedriften Sickels hjemmebakeri. Siste gang 51 brød i løpet av 27. november 2011.

Posted in Mat | 1 Comment

Debian online upgrade from i386 to amd64 architecture

Jan 2011: Tried this recently on a P4 machine. After a library relink, the machine stopped working… I had to give in and do a fresh amd64 reinstall. No idea why it didn’t work now.

Having a relatively freshly installed core2 machine with debian i386 on, I realized I had chosen the wrong architecture. On one side,as I hardly had done any customisation on the box, a reinstall would have been the easy way out, on the other side, I don’t like reinstallation as a solution on linux, and this was the perfect test in case I should need to do it on some other occasion.

I followed the instructions from verboom.net and that mostly worked perfect as soon as I had checked out that amd64 and x86_64 is the same thing.

I ran into some problems during the upgrade:

  1. More or less as excepted, some version numbers were wrong. E.g gcc-4.3-base had been replaced with gcc-4.5-base and libdb4.5 also was replaced with some newer version. For the latter, a slew of different versions were available, I installed all of them during the first phase – just in case. There were also a couple of missing depenencies during the first stage installation. I just added them and reran the commands as needed.
  2. I was stuck for a while due to telinit having problems with libsepol.so.1. In the end I had to find it on another box with i386 debian and copy it into /lib32 – then it worked – if I ever do this again, I will make a copy of that file before doing anything else.
  3. during the upgrade, a number of gir1.0 things were upgraded to gir1.2, those got completely stuck, I was told by apt that I was not allowed to remove the gir1.0 virtual package. Doing some googling I found out that those parts were connected to gnome, so I just deleted them – good riddance (did I mention I don’t like gnome?)
  4. in some cases I ran into dependency problems that were solved rerunning the install or fiddeling a bit of when the different packages were installed
  5. for some reason portmap was pulled in – then the nfs-client stopped working with some strange message about maybe needing a /sbin/mount. helper. A apt-get –reinstall install nfs-client removed portmap and got it working again

In the end, it mostly worked fine, as long as I saw this as an opportunity to clean the gnome out of the machine. If I had needed gnome, I don’t know if this had worked – of cource in some cases it may make sense to first remove gnome, do the arch upgrade and then reinstall gnome. The spesific problems were probably due to bad timing – having a gnome update across my archictectural update. It may feel like a waste, but it is important to start out with doing a dist-upgrade in the old architecture to make sure everyting is up to date.
There were some -686 kernels installed. To remove those, I had to use dpkg –purge as apt-get claimed they didn’t exist.
Postgresql turned out to be a problem as the data base file are not compatible between the 32 and 64 bits versions. To get postgres running, one should do a dump of the database before the upgrade, then purge the existing version to have the data base files deleted, then reinstall it when the machine is up running 64 bits, then reload the backup.

Posted in linux | Comments Off on Debian online upgrade from i386 to amd64 architecture

svg and html

Using an uptodate browser (or a java script library, such as svgweb) it is fairly easy to integrate a svg file into a html page and to handle the svg-file from html, for a primer, see e.g. alistapart.com. Basically, when you have the svg in your page, you use

svgobject.contentDocument.getElementById( ... );

where svgobjectg is the <object> that embeds the svg, contentDocument takes you to the svg-file itself, and using getElementById or other dom-functions, you can access all elements of the svg, manipulating them to your heart’s desire. I am using it in an own application for adding live data to a stripchart.

However, it was not so easy to find out how to go the other way. In the stripchart application above, I have set an onclick-handler within the svg. It draws a horizontal line where the click was, then a timed updater in the html inspects the svg, finds that the line is visible,

if (svgobject.contentDocument.getElementById('markerline').stroke=="black"){
doSomething();
}

and does an action (in my case, reads out the value of the stripchart at the location of the line).

All fine and dandy, as long as you do not mind waiting till the updater fires.

As long as we have access to all parts of the svg from javascript in the html-document, the obious way of fixing this should be to put an eventhandler “into” the svg from the html’s javascript – eg

svgobject.contentDocument..getElementById('area').addEventListener('click',function(event){alert('change');});

This works! – but only in the Google chrome browser.

Doing a lot of head scratching and googling, at last I found a page on svg scripting in the MDC doc centre. It turned out that I have the object parent for my use that points ‘out’ from the svg. So if I put a

<rect x="-30" y="0" width="260" height="400" stroke-width="2" fill="lightgray" onclick="parent.test()" />

into my svg, it calls the test() function in the html’s javascript.

Tested in Firefox 3.6.13, opera 11.01, chrome 9.0.597.98 and Internet Explorer 8.0.6001 – the latter armed with svgweb 2011-02-03 “Lurker Above”.

No more time for blogging now, off to do some real work!

Posted in Diverse, html, svg | 1 Comment

Gammal gretten gubbe slår til igjen og sender brev til ntb

Aftenposten har artikkelen Henrettelse gikk galt i USA som bare henviser til ntb. Der står det:

(…)har blitt henrettet ved hjelp av narkosemiddelet sodium thiopental lot til å være våkne(…)

Kan dere lære journalistene at det er ikke noe som helst som heter sodium på norsk, det heter natrium (det finnes i enhver ordbok) – og dessuten heter forbindelser som heter noe med thio- på engelsk tio- på norsk (tiopental finnes for eksempel som oppslagsord på snl.no ). At det skrives i et ord er for en detalj i dette å regne, men dette stoffet heter altså natriumtiopental på norsk.

Jeg vil da håpe at det ikke er ntbs generelle språkpolicy at ord man ikke forstår på et fremmedspråk ukritisk skrives uoversatt i en forøvrig norsk tekst, men så ofte som ordet “sodium” dukker opp i nyheter, kan man jo nesten lure.

Posted in Diverse | Comments Off on Gammal gretten gubbe slår til igjen og sender brev til ntb

SQL – setting and resetting in one query

A colleague has a web application where a number of flags can be set or reset using checkboxses. These flags corresponds to rows in a table. When they have been altered, those who are set are returned from the browser, whereas those that are not set are not mentioned.

The obious (imo) way of doing this is first to reset everyting:

update settings set flag=0

then set those returned with e.g.

update settings set flag=1 where id in(2,3,4,7)

but it is really possible to do it all in one go, using the sql if-function:

update settings set flag=if(id in(2,3,4,7),1,0)

This will set those with id in the in-clause to 1, all others to 0.

Posted in sql | Comments Off on SQL – setting and resetting in one query

Making stripcharts using svg and javascript

April 2013: I have made a new project based on this, although for static plotting.

I needed to present data in a webapplication using strip chart. From earlier experiences on data presentation, I knew that making bit mapped graphics to be updated when new data were to be presented, put a fairly high load on the server, as everything was to be reprocessed each time, at the other end, a java applet seemed to be overkill for this application. So to the rescue, svg and javascript.

The original inspiration was from A List Apart that showed the possibility of manipulating a svg graphics using javascript. Googling a bit, I came across mblogics and G Wade Johnsson’s anomaly.org. Although both those were too complicated for what I needed, I was able to steal quite a few ideas from those two implementations.

Presently I am able to run multiple stripcharts in one web page, fetching data from a server and updating the charts and some parts of the web page:Screenshot 17.02.2011

Most of the files needed for the front end are available in Svg_stripchart110217. The backend’s logic cannot be used without the database, but in the zip file there is a file ‘ajaxserver-23.json’ which is an example of a response from the server, just make a normal web server application in php or whatever suits your needs that rather than html for presentation in a web browser returns a selection from your data set as a json-file.

The other files are
stripchart.php.htm – a ‘driver’ html file that loads the neccesary parts into a browser
stripchart.svg – a svg template to start the plot
chart.js – javascript defining the strip chart object
stripchart.js – sets up and uses the chart.js objects
msi_smarty.css – some styling – a lot of it is unused here as this file is used for a complete application

in addition to my files, two external libraries are needed:

prototype (I am still using 1.6, 1.7 is just released, I cannot see any reason that should cause any problems, but I have still not tested it)

svgweb – a compatibility layer to extend svg support to more browsers. It is critical to be able to run the strip charts on internet explorer, If you know you are using svg-supporting browsers (most others) just delete the reference to svg.js in the .html-file. On my server, I have the external libraries installed in /lib/.

Stay tuned here to pick up updates.

2011 02 17:

  • Some cleaning up and commenting of the code
  • Possible to select scale and parameter to plot per strip chart
  • Red and yellow signaling too high or too low measurements

TODO:

  • Dynamic handling of parameters. (done, but not yet uploaded)
  • Using the parent object to update the html when a mark is set, rather than waiting for the pe to notice it

Another use of many of the same ideas is in Reading temperature data out of postgresql.

Posted in svg | 1 Comment

En inngriper

På vei til jobben går jeg noen dager praktisk talt gjennom en skolegård. Normalt smiler jeg litt av barnas aktiviteter og holder et lite øye med hva som foregår for å i minst mulig grad krasje med noen når for eksempel en fotballkamp plutselig beveger seg rett over gangveien.

I dag tidlig, var det litt mindre trivelige aktiviteter som foregikk. Jeg ble først oppmerksom på noen barn som ropte og da jeg kastet et blikk i den retningen kunne jeg se en småskolegutt type litt større sitte overskrevs på en småskolegutt litt mindre med sistnevnte godt dyttet ned i snøen. Ved et ekstra blikk var det tydelig at han som lå nederst ikke var helt med på leken. Jeg kunne ikke se noen inspiserende lærere men fant fort ut at dette kunne ikke fortsette, så jeg hoppet over et par snøfonner og la en arm om brystkassa på den største gutten og løftet ham rett av den minste. Den minste spratt opp og kastet et forskrekket blikk på meg. “Gå” sa jeg, “det er greit nå”. Den store hadde også lyst til å gå, men jeg hadde et godt grep i jakkeermet hans. “Det der gir du deg med” “—eeeh, unnskyld” kom det kjapt. Godt inntrent, sier man unnskyld, er man tilgitt og alt er i orden. “Nei”, sa jeg, “det hjelper ikke, du sier ikke unnskyld, du holder opp med det der”. Etter litt mer formaninger slapp jeg ham og han følte tilsynelatende ingen trang til å utdype bekjentskapet.

Jeg vet ikke om han er dum nok til å fortelle hjemme hva som har skjedd. Men skulle det i avisene i morgen være noe om en mann som går omkring og kaster seg over barn i skolegårder i nærheten av der jeg jobber er dette bakgrunnen.

Og ja, jeg er stolt av det jeg gjorde, og ja, jeg gjør det igjen om nødvendig. Med litt flaks tok han meg for å være julenissen…

I en helt annen setting, på bussen på veien hjem fortalte jeg en dame en god del eldre enn meg akkurat hva jeg mente om at hun satt med støvlene oppe i det motstående setet – hun kom med noen lyder som hørtes ut som et forsøk på begynnende forsvarstale, men det ble stille og beina havnet på gulvet. Hun var vel gammel nok til å fatte at hun hadde en svært dårlig sak om hun hadde begynt å krangle… Min feminine side er tydeligvis nabokjerringa.

Posted in Barn | Comments Off on En inngriper

PHP Matrix multiplication

Needing to do some matrix multiplication in php, I found some code that looked quite promising, but it had a couple of problems: In addition to the matrixes, it needed the max dimentions of the matrixes as arguments and it returned a matrix with these max dimentions, eg, I needed to multiply a 4×4 with a 1×4 matrix and got the answer as a 4×4 matrix, although if I ignored all the zeros, the anwer was correct, I didn’t want to use that code, so go on:

function matrixmult($m1,$m2){
	$r=count($m1);
	$c=count($m2[0]);
	$p=count($m2);
	if(count($m1[0])!=$p){throw new Exception('Incompatible matrixes');}
	$m3=array();
	for ($i=0;$i< $r;$i++){
		for($j=0;$j<$c;$j++){
			$m3[$i][$j]=0;
			for($k=0;$k<$p;$k++){
				$m3[$i][$j]+=$m1[$i][$k]*$m2[$k][$j];
			}
		}
	}
	return($m3);
}

It could have been made a bit more robust by adding some checks if all the subarrays were the same size, but I have so far not bothered to do that.

And in addition, I'll throw in a matrix transposer for free:

function matrixtransp($m){
	$r=count($m);
	$c=count($m[0]);
	$mt=array();
	for($i=0;$i< $r;$i++){
		for($j=0;$j<$c;$j++){
			$mt[$j][$i]=$m[$i][$j];
		}
	}
	return($mt);
}

Again, I could do some checks to see that the matrix really is a matrix and not a random collection of arrays, but not now.

Quite simple code, but I have not been able to find anything that works well anywhere.

Posted in php | Comments Off on PHP Matrix multiplication

Concatenating a utf8 char field and a datetime field in mysql

In a database of mine (using mysql 5), I needed to make a ‘fake name’ – concatenating the real name and a datetime, so I did a concat(name, ‘(‘,thetime,’)’) in the sql and got just what I expected TheName (2011.02.02 12:45). That is – until I used a name containing letters outside the old 7-bit ascii. if name was NørwegiånName, what I got was NørwegiÃ¥nName (2011.02.02 12:45) in other words – the original utf8 string (I am using utf8 all through the application) was re-encoded into utf8 …

Looking into what mysql had done to my view, it turned out that my simple concat had been automagically turned into concat(cast(name as char charset utf8), ‘(‘,thetime,’)’) – removing the added cast did not change anything. When running the query in mysql workbench i noticed that the concatenated fields came back as a blob – indeed, something rather fishy was going on behind the scenes…

In the end, it turned out that mysql in it attempt to help me had for some reason converted the wrong field. The automatic cast of a datetime field does not seem to return a utf8-string – even though everything from the schema down to the textfields are set as utf8. casting the datetime at last gave what I wanted: concat(name, ‘ (‘,cast(thetime as char charset utf8),’)’) at last gave me my NørwegiånName (2011.02.02 12:45).

Thank you som much for the assistance mysql…

Posted in sql | Comments Off on Concatenating a utf8 char field and a datetime field in mysql