Alt om ingenting og litt i mellom En blogg av Knut-Olav

Debugging MythTV 0.23 and ivtv

8. juli 2010 · Comments Off

If you have a Hauppauge PVR-500 card and recently upgraded Ubuntu to latest 10.04 Lucid, then you might have had problems viewing live TV.

The quick fix might be to just install the package “ivtv-utils” and to reconfigure the video input/sources with mythtv-setup.

I also had a problem with disconnects and warnings of wrong protocol version. I cleaned out the database and deployed a new database with the sql file from /usr/share/mythtv/sql. That might be because of some badly configured IP-addresse for the backend and master, but I could actually not see why it changing from my LAN IP-address to 127.0.0.1 would have anything to do with it.

Anyway… Try installing ivtv-utils first. After installing that package the MPEG2 capture card selection becomes available. First I tried using the v4l option, but that didn’t work, not even any useful log messages to work with.

whiptail – enkel dialogboks for terminalen

7. juni 2010 · Comments Off

Dette er først og fremst en huskelapp for min egen del, men kanskje nyttig for andre også.

Jeg har laget mange shellscripts for å hjelpe meg i systemutvikling og til vedlikehold av tjenester. Av og til har jeg behov for å bekrefte at jeg virkelig ønsker å utføre handlingen, i tilfelle man skulle kjøre kommandoen ved et uhell, for eksempel å tømme Solr-indeksen (Solr er en søkemotor, et prosjekt fra Apache).

Ofte holder det med å bruke “read” for å lese inn tekst til en variabel, men et verktøy som heter “whiptail” gir et ncurses-grensenitt som tilbyr brukeren til å utføre forskjellige valg, for eksempel valget om “ja” eller “nei” for å utføre en kommando.

Som det aller enkleste eksempelet har man “yesno”-dialogboksen:


 # Ja/Nei-dialogboks med 10 rader og 50 kolonner
 # Skriver "jada" på skjermen hvis man velger "ja"
 whiptail --yesno "Vil du virkelig gå videre?" \
   10 50 && echo "jada"

Man kontrollerer svaret fra dialogboksen med exit-koden fra whiptail. Svarer man så “ja” i dialogboksen skrives “jada” ut på skjermen. Svarer man nei, så gjør den det ikke. Så enkelt.

Et annet eksempel er å vise en liste med som brukeren kan velge blant:


 whiptail --menu "Velg noe" \
   10 50 2 \
   1 "Valg 1" \
   2 "Valg 2" \
   3 "Valg 3" \
   4 "Valg 4"

Argumentet “2″ angir hvor mange valg som skal vises ad gangen, etterfulgt av ID/tekst-par for valgene. ID-en til valget som brukeren velger blir skrevet på skjerm.

Man har også andre former for dialogbokser, se “man whiptail” for flere opsjoner.

Android OS – mer enn bare gratis

3. juni 2010 · Comments Off

Terskelen for å lage applikasjoner som fungerer sømløst med operativsystemet og med andre applikasjoner over felles grensesnitt er et veldig viktig argument for å velge Android.

Steve Guggenheimer i Microsoft tar frem “gratis” som argument for at mange hopper på Android-bølgen med tablets, tilsvarende da netbooks kom på markedet med Linux-operativsystemer, men Android har noe som ikke Linux på netbooks hadde, og det er Market – tilgjengelighet.

Liten ryddesjau på hytta

23. mai 2010 · Comments Off

I bortimot 10 år har det ligget masse skrot i kommodeskuffene på soverommet mitt på hytta. Jeg kastet ut kommoden i fjor, noe som la igjen en passelig haug på gulvet med alt mulig tull.

Jeg gikk etter hvert lei av å måtte snike meg rundt alt skrotet, så jeg satte meg ned for å se hva som kunne kastes.


Jeg fant en huskelapp fra mine første dager som datanerd, med kommandoer for å flytte, kopiere og slette filer fra DOS kommandolinja, samt andre kjekke ting som å endre kommandoprompten – søppel.

Videre fant jeg en stor samling batterier hvor syra var godt på vei ut på mange av dem. Uansett så lite nyttig det er å vite, så var det litt interessant å se at det kun var Duracell-batteriene som syra hadde gått på – søppel.

Fant også noen Lego-deler, mye av det var knekte deler, ikke så rart jeg hadde stasja det i skuffen i første omgang – søppel.


Da jeg var liten brukte jeg og en kamerat mye tid på å flettet jeg sammen hyssinger og rulle det sammen til en ball. Om ballen på bildet er eneste jeg lagde er usikkert, men jeg har en anelse om at jeg ikke brukte så mye tid på dette allikevel – søppel.

Mange minner. Det ble en bærepose full med søppel denne gang.

Toshiba Camileo S10 ustabil i kulda

7. februar 2010 · Comments Off

Etter en ukes skitur til Østerrike, Bad Gastein, fikk mitt nye full-HD lommekamera prøve seg. Kameraet er av type Toshiba Camileo S10, et full-HD videokamera som passer fint ned i lomma.

Enkelte dager var det ned mot 19 minusgrader i bakkene og det taklet ikke kameraet. Under opptak i 1080p låste kameraet seg gjentatte ganger, fra bare noen sekunder til et halvt minutt med opptak, avhengig av dagens vær. Eneste løsning var å nappe ut batteriet og sette det inn igjen. Irriterende nok er det ikke eget batteri for klokka, så denne blir tilbakestilt.

For å i det hele tatt kunne filme noe i 1080p utendørs på ski måtte jeg filme korte klipp på 10-15 sekunder og vente litt mellom hvert opptak. Kameraet oppbevarte jeg i en snor rundt halsen på innsiden av skijakka.

Jeg mistenker at problemet ligger i minnebrikka, at kameraet ikke klarer å lagre unna raskt nok all den data som full-HD opptak krever. Da jeg stilte oppløsningen til 720p gikk det betraktelig bedre. Allikevel mistet jeg ett minutts opptak med denne innstillingen også, dette i pent og varmt vær, men med noe snø i lufta. Mitt tips er derfor å stoppe og starte opptaket ofte.

Minnebrikken jeg brukte var av type SDHC Class 4 på 4 GB fra Verbatim. Noen som kan anbefale en bedre og raskere minnebrikke?

VGnett gjorde en liten test av kameraet da det kom på markedet.

Kameraet skal garantert være med på flere skiturer, da det er lite, starter opp og er klar til bruk veldig raskt og tar flott video og flotte bilder utendørs, så lenge elektronikken holder seg i gang da…

Debugging your Android application

9. januar 2010 · Comments Off

I am novice on Android application development, slowly starting to understand the architecture. I particularly like that communication between applications and data storage are resource centric. But anyway…

If you have been developing mobile applications for Android you have most likely seen some exceptions in the Eclipse debugger that you don’t understand, maybe not the tiniest bit. This mostly has to do with lack of experience with the API combined with the strict way that Android sets up views and restricts which threads that are allowed to draw and control the views, along with other concurrency issues.

Starting up your application in the emulated Android environment is not the fastest thing to do, so how can you debug your applications in a little more snappier way? – In short, I really don’t know.

What I want is a sane error message with a stack trace of my application code, but since I can’t get that, I have to debug my application in other ways.

Break points
By setting a breakpoint in your code on places where you think the bug might exist, you can step through your source code until the application fails.

The cons of this are that it is time consuming to do all the manual step by step operations, it’s a boring way of debugging and the exception message you get might not be understandable to you.

Logging
The Android API provides a Log class that can be used to log messages and exceptions. It took me some time to figure out how to read the log messages, but the Android Eclipse plugin provides a LogCat view.

To show the LogCat view in Eclipse, you go to “Window”, “Show View”, “Other …”, expand the “Android” category and then open the “LogCat” view.

Example output from the LogCat view.

01-09 16:56:52.069: ERROR/Listings(1064): Failed to get trip listings
01-09 16:56:52.069: ERROR/Listings(1064): java.lang.RuntimeException: Example of exception logging
01-09 16:56:52.069: ERROR/Listings(1064):     at no.ut.trip.Listings$ProgressThread.run(Listings.java:112)

The example above shows an error message on the first line, the exception class and message on the second line, with the stack trace on the following lines. Might be helpful.

Don’t sort on tokenized strings in Solr

15. desember 2009 · Én kommentar

Apache Solr is a very powerful index and search engine. Unfortunately it does have some flaws, at least I think this issue is somehow not “by design”.

If you are going to use a field to sort on, make sure you use one of the native data types in Solr, and don’t enable any tokenizer on that data type. If you do, you might end up with HTTP 500 Internal Server Error and error log messages like this:

SEVERE: java.lang.RuntimeException: there are more terms than documents in field “title”, but it’s impossible to sort on tokenized fields

I found out that I had been using a data type with some filters and a tokenizer on a couple of fields, quite unnecessary since I don’t do any search on them. I have another field that I do search on. I only use these fields for display and sort.

Keep it simple. Use “string” for strings you don’t have to search on. If you have to do both search and sort on a field, make two fields. For example, name one of them like “title.sort”.

Cowboy coding

9. desember 2009 · Én kommentar

Cowboy coding seems interesting, and it might be just that I have been doing when developing Madcow, a PHP web framework.

However, it is not the same as Scrum. Many projects tend to fail using the Scrum methodology, possibly because of the lack of clearly defined roles, and then fall back to something looking like Cowboy Coding.

Unfortunately, it seems that the project I am currently working on at work is exactly that, Cowboy Coding, not Scrum…

Fortsetter jakten på MySQL-features

5. november 2009 · Comments Off

I dag kom jeg over noe merkelige greier i MySQL.

I en SELECT-spørring hvor jeg bruker WHERE for å søke etter strenger, så betyr det ingenting om jeg spør mot en tom streng eller masse mellomrom.

Jeg har en tabell som heter “texts” med kolonnene “uuid”, “name” og “content”. Feltet “content” er av type TEXT fordi jeg har behov for å lagre et ukjent antall tegn med tekst her.


+--------------+--------------+------+-----+---------+-------+
| Field        | Type         | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| uuid         | varchar(36)  | NO   | PRI |         |       |
| name         | varchar(16)  | NO   |     |         |       |
| content      | text         | NO   |     |         |       |
+--------------+--------------+------+-----+---------+-------+

Først testet jeg med en tom streng:


mysql> SELECT uuid,name,content FROM texts \
    -> WHERE content = "";
+--------------------------------------+-------------+---------+
| uuid                                 | name        | content |
+--------------------------------------+-------------+---------+
| 1b74168e-5b91-4c27-b1eb-257d6d0cee18 | description |         |
| 963c7f0a-e0dc-45e5-af5b-a803dee3a743 | arrival     |         |
| a7bf022e-fc95-4410-bd6e-e92b64f12db4 | regulation  |         |
| ebffc5bb-b3f8-473d-8f34-a5041f73987c | sanitation  |         |
+--------------------------------------+-------------+---------+
4 rows in set (0.00 sec)

Deretter forsøkte jeg bare for moro skyld å søke etter tre mellomrom:


mysql> SELECT uuid,name,content FROM texts \
    -> WHERE content = "   ";
+--------------------------------------+-------------+---------+
| uuid                                 | name        | content |
+--------------------------------------+-------------+---------+
| 1b74168e-5b91-4c27-b1eb-257d6d0cee18 | description |         |
| 963c7f0a-e0dc-45e5-af5b-a803dee3a743 | arrival     |         |
| a7bf022e-fc95-4410-bd6e-e92b64f12db4 | regulation  |         |
| ebffc5bb-b3f8-473d-8f34-a5041f73987c | sanitation  |         |
+--------------------------------------+-------------+---------+
4 rows in set (0.00 sec)

Men for all del da? Dette er jo samme resultatet som ovenfor.

Eller hva med denne spørringen? Jeg kan ikke skjønne hvorfor det er slik. En tom streng er ikke det samme som tre spacer!


mysql> SELECT uuid,name,content FROM texts \
    -> WHERE content = "   " AND content = "";
+--------------------------------------+-------------+---------+
| uuid                                 | name        | content |
+--------------------------------------+-------------+---------+
| 1b74168e-5b91-4c27-b1eb-257d6d0cee18 | description |         |
| 963c7f0a-e0dc-45e5-af5b-a803dee3a743 | arrival     |         |
| a7bf022e-fc95-4410-bd6e-e92b64f12db4 | regulation  |         |
| ebffc5bb-b3f8-473d-8f34-a5041f73987c | sanitation  |         |
+--------------------------------------+-------------+---------+
4 rows in set (0.00 sec)

Hvorfor i alle dager gjør MySQL dette her mot meg?

Én teori jeg har er at MySQL skal hjelpe meg som en dum utvikler i å returnere det korrekte svaret selv om jeg skulle skrevet inn et mellomrom for mye i søkefeltet mitt. Akkurat i samme stil som de andre gangene MySQL har vært så hjelpsom mot meg

Startet alpinsesongen på Gaustablikk

25. oktober 2009 · Comments Off

Lørdag dro jeg og tre kamerater til Gautablikk for å prøve ut snowboard og ski før vinterens store skiferie til Bad Gastein.


Gaustablikk har nå én åpen bakke, med t-krokheis. Det er ikke store greiene, men nok til å få oss opp av senga kl 7 om morgenen på en lørdag. Jeg forstår fremdeles ikke hvordan det gikk til…


Det var overskyet og lavt lys og det kom noe snø. Legg også merke til snøskillet på fjellene rundt dalen på bildet over.

Bakken var stort sett i fin form, men snøklumper og ujevn preparering gjorde det krevende å kjøre. Allikevel var det bedre forhold enn forventet, eller fryktet.

For å bevist at man har vært et sted, så tar man et bilde. Vi måtte dokumentere at vi var på Gaustablikk denne dagen.

Vi følte også for å dokumentere at bilder ble tatt…