Robins blogg

2009-04-16

Annual update

Filed under: — site admin @ 00:04

EGit logo
Seems I write a lot more code than prose. The road to getting the Eclipse plugin pass as an official Eclipse project is underway. See http://www.eclipse.org/proposals/egit/.

It is causing a lot of stir in the community and good reviews. Yeah, it’s not complete, but seems people like what they see.

Manuel Wolker though not officially a code contributor yet, he gathered a BoF session at EclipseCon and has written a blame that we hope to integrate soon.

For more info see and

Maybe it’s time to polish that logo. It took five minues in Inkscape.

2008-03-14

D830

Filed under: — site admin @ 23:03

My Dell D830 laptop arrived with FreeDOS supplied. Dell didn’t install it as the default. My guess is few people use it. An obvious question is which OS (i.e. Linux) version to run. I’ve been a Mandriva fan ever since I put it into my CDROM drive sometime early 2007. Mostly because stuff works and it’s easy to install. Lately my “sambo” got herself a laptop so I sugested she use OpenSuSE, not for any other reason that it’s proably a good one.
Should my new machine run OpenSuSE too? Well maybe, but then I’d try something else. Unfortunately Kubuntu didn’t like my machine at all so Mandriva 2008 beta got installed. The Mandriva ONE edition i.e. With the Free edition I’d get a chicken-and-egg problem with WiFI drivers. I’d need to download the separately, which I cannot do because I don’t have WiFI set up.

Fortunaltely Mandriva ONE startup just find, found all hardware. Great!.

Oh, It’s a 64-bit CPU, but I “only” have 4 GB RAM so I see little point in actually running a 64-bit OS on it.

Update: I found out that I only get to use 3.5 GB with a 32-bit OS, so that’s a drawback.

2008-02-23

Bash fd abuse

Filed under: — site admin @ 12:02

A fun bash feature is redicecting to extra file descriptor. It allows you to filter
stout and stderr separately like this.

(some-command | stdout-filter >&3) 2>&1 | stderr-filter) 3>&1

The first part “some-command | stdout-filter” does stdout filtering. Then “>&3″ send that to another pipe, fd#3.
Meanwhile “2>&1″ now directs stderr from some-command to stdout (fd#1) and “| stderr-filter” does the filtering.
Finally 3>&1 directs 3 to stdout of the process that started the whole command, combining the outputs.

Example:

$ ((ls -l x y README | sed 's/^/STDOUT/' >&3) 2>&1|sed 's/^/STDERR/' ) 3>&1
STDERRls: cannot access x: No such file or directory
STDERRls: cannot access y: No such file or directory
STDOUT-rw-r--r-- 1 me me 8443 Feb 17 00:26 README

2007-09-25

JGit/EGit version 0.3 announced

Filed under: — site admin @ 20:09

Although not entirely bugfree, I did not find any serious ones so I thought it was time to tag a 0.3 release. I announced it to the Git Mailing list as well as to freshmeat. The screenshot to the left includes about all important features except the Team>Share dialog.

Cheers!

2007-09-08

Eclipse Git plugin now on Windows and it is committing too

Filed under: — site admin @ 00:09

The Git plugin for Eclipse is running on Windows. I had to drop the use of memory mapped I/O on the index for this to work since mapped files cannot be deleted on that platform. That and a few other smaller changes had to be done, e.g. there were a couple of places where I needed to convert backslash (\) to platform neutral ‘/’ which Git uses internally.

CRLF conversion is not yet done (any volunteers?). It should use the same principal logic as the real git When editing with only eclipse this is not so important since Eclipse keeps line endings and can be set to use Unix line endings on new files.


Dave Watson has implemented Commit available in the official master branch. He has more goodies coming like checkout and reset. I have tested and it looks very good.

2007-08-12

NIH Git Visualization

Filed under: — site admin @ 23:08

The Eclipse plugin grows slowly. The newest feature on my “pu” branch is better history visualization. This is by no means final. It is dead slow (takes ~50s) to start displaying the history of the Linux kernel. On smaller projects it is usable however. My guess is Linux kernel hackers in general do not use Eclipse. I just use it as a reference to a public project of some size.

2007-06-11

Git index in place

Filed under: — site admin @ 00:06

A slow but hopefully working implementation of the Git index is in place.This make resource decorations accurate and some operatiions are detected by git now (only move, delete, add and remove) so far.

I have the feeling we will commit real soon now because the only thing needed is an update index and a GUI for the commit.

2007-03-18

Eclipse Git Plugin advancements - Structured compare

Filed under: — site admin @ 23:03


Now Eclipse does structured compare on Git repositories. Since the plugin uses the hashing mechanism of git a project level compare of two versions is (or is near) instantaneous.

All of the graphical stuff is in Eclipse from the start. I just had to feed it.

2007-02-01

Java debugging tip - tracing

Filed under: — site admin @ 23:02

I almost accidentally discovered a debugging trick in java. Often doing lots of System.out.println() is the best way to debug code. Adding a line is usually not a problem, but sometimes it is, e.g. when debugging a remote application or if you want to trace a method call whose source is not easily available for modification. With a debugger, such as the one in Eclipse it’s easy. The key is that you can have conditional breakpoints whose condition is any java code snippet. So here’s how to do it.


Place a conditional breakpoint at the interesting place. You do that by placing a breakpoint the usual way. Then rightclick on the breakpoint symbol to the left in the editor and select Breakpoint properties.


Mark “Enable condition” and type some code. You can get pretty wild about what your code does here. It even runs your code, not just standard java stuff.


Click ok and do something and watch all those invocations of the Throwable(String) contructor in Eclipse’s Console window.

Note that I didn’t write the name of the constructor argument. That’s because the java runtime doesn’t know the name of the argument when code isn’t compiled with full debugging information. Eclipse then synthesizes names, i.e. arg0, arg1 etc. For code with full debug information you use the declared name of the argument).

2007-01-21

The Eclipse Git plugin project

Filed under: — site admin @ 23:01


First working version compare

Quickdiff in action in Git controlled repo

I don’t seem to be able to blog much. Last year I did som hacking on Git, the version manager originally written to manage the Linux kernel source code. I’m quite happy with the export to CVS now. For more details, just browse the history of git. The reason I got into git was that I wanted something better than CVS, something that could work locallly, so I wouldn’t need to pollute the main repository with all my mistakes. Subversion was the obvious first thing to check out, but that didn’t fit the bill. It is server based, but does renames nicely. At the downside it’s slower, it crashed during conversion of the CVS repo (leaving a defunkt repo). Now CVS is reliable, something I’m not willing to give up. I’ve never had any sort of stability problem with CVS and few other people had. It is also fast enough to work very nicely over a GPRS connection. Clearcase.. well. No thanks. Bitkeeper was an option, but then I stumbled over Git and especially Stacked Git. It’s just awesome. As all good software it needs improvements. The “float” command is my contribution. It allows simple reordering of patches.

Then I wanted to use Stacked Git with Eclipse for (non open source) development. This works fine, but you have to use the command line as there is no fully functional plugin. Shawn Pearce, an very very active contributor to the Git project had started a plugin for Eclipse, called EGit. It wasn’t much use per se, but it had the basic infrastructure needed for me to solve the most apparent needs when developing in Eclipse, i.e. a history browser and quickdiff support. After bugging Shawn with some errors, which he fixed faster than most MTA bounce mail, I could develop those features which Shawn the pulled into Egit.

To the right of this entry are the first two screenshot I sent to Shawn (on IRC, I think). These aren’t entirely up to date, but not too much off either.

2006-09-06

Bash-tips: #1 - e-flaggan

Filed under: — site admin @ 22:09

Ni känner säker igen det. Man skriver ett skript som gör nåt nyttigt, men en dag fallerar det och det tar en massa tid att stöda upp efter allt skriptet gjorde efter det fallerade.

För att skriva mera tillförlitliga bash-skript utan att ha överdrivet mycket felkontroller kan man använda en option som automatiskt avslutar skript vid fel. Då slipper man skript som går vidare och saboterar en massa data när nåt kommando går fel. Flaggan heter ‘-e’ och kan läggas på första raden i bash-skript eller senare, då med kommandot set -e

#!/bin/bash -e
trap 'echo "***error**"' 0

tar cvfz /tmpdir/arkiv.tgz *
rm -rf *

# Stäng av felhanteringen just före vi avslutar
trap 0

I detta exempel kopierar vi först en massa filer och raderar dem sedan. Men om arkivet inte går att skapa så vill vi naturligvis inte radera allt. Med felkontroll på allt blir skripten säkrare. Utan -e skulle skriptet radera allt och tyvärr är det så många skript gör eftersom det är så jobbigt att lägga in felkontroller. I ett stabilt skript är en stor del av koden explicita felkontroller. Trap-kommandot är ett inbyggt kommando som fångar signaler, man signal(2), men även några anda händelser, t.ex. när skript avslutas vilket vi är intresserade av här för att få ut ett felmeddelande när nåt går fel.

Sen inträffar det förstås att kommandon kan ge en felkod utan att man vill terminera direkt. Det kan finnas en alternativ väg eller så vill man anpassa felmneddelandet. Om kommandot är ett villkor i en if-sats bryts inte skriptet om kommandot går fel utan if-satsen får ta hand om felkoden.

#!/bin/bash -e
trap 'echo "***error**"' 0

if ! tar cvfz /tmpdir/arkiv.tgz *
then
 tar cvfj /tmpdir/arkiv.tar.bz2 *
fi
rm -rf *

# Stäng av felhanteringen just före vi avslutar
trap 0

I detta fall provar vi att komprimera hårdare (ifall disken inte räckte till för vanlig gzip. Om bzip2-komprimeringen misslyckas terminerar skriptet.

I slutändan hamnar man på att skriva ungefär like mycket felhanteringskod med -e, främst för att få fram bra felmeddelanden, men de tidiga versionerna, där logiken är vikitigast, kommer att vara mycket mer robusta och lättare att felsöka.

2006-08-27

Abstraktioner

Filed under: — site admin @ 21:08

Ibland stöter man på de där överseriösa kodarna, de som bestämt måste tillämpa varenda sak de hört talas om, vartenda pattern som finns i nån bok och att skriva abstrakta abstraktioner. Varför? Gör det så enkelt som möjligt. När en abstraktion är mera komplex än verkligheten så måste det vara nåt fel. “Design patterns” är också en en grej som vissa aldrig kan få nog av. Fundera på varför du du använder vissa patterns och fråga dig om t.ex. alla dina EJB :er(Enterprise Java Bean) måste förekomma tillsammans med Sessionsbönor, fasader och fan och hans mormor. Blev det enklare av det, eller blev du bara mera produktiv räknat i antal rader kod? Om du behöver dem så automatgenerera dem med EJB-doclet eller nåt annat verktyg, skriv dem inte för hand. Eller factories och factoryfactories… Det finns situtationer där var och en av dessa patterns kan försvaras. Att man kan använda dem är inget argument.

1972 sade E.W. Dijkstra detta i sin Turing Award-föreläsning (The Turing Award är ungefär datorvetenskapens “Nobelpris”)

… In this connection it might be worthwhile to point out that the purpose of abstracting is not to be vague, but to create a new semantic level in which one can be absolutely precise.

Abstraktioner handlar om att göra saker enkla, inte om att göra dem “abstrakta”. Keep It Simple Stupid.

DV-kamera

Filed under: — site admin @ 17:08

(denna artikel har legat som draft ett tag, men det är väl det draft är till för)

Så var det dags att skaffa DV-kamera. Som vanligt är man fundersam när det gäller hårdvara och linux. Även om Linux förmodligen stöder mer hårdvara än nåt annat OS så är det ju inte säkert att just det man tänkt ansluta är med på listan. Mina farhågor kom dock på skam.

DV-kameror (Digital Video) förekommer med olika gränssnitt, USB, Firewire (aka. i-Link, IEEE-1394), minneskort och DVD. Efter diverse efterforskande kunde jag konstatera att USB kanske fungerar med vissa kameror men att Firewire fungerar med alla (underförstått de som har firewire-gränsssitt). Dessutom visar det sig att de videoredigeringsprogram som finns för Linux förutsätter firewire, så även om man har USB-stöd i hårdvaran, blir det ändå jobbigt att hämta filmerna utan firewire.

Utan firewirestöd inbyggt datorn måste man förstås köpa det också. Som tur är finns det massor med alternativ där de flesta torde fungera i Linux. Jag har inte undersökt så noga så jag frågade lite på Linuxportalen.se. Därefter köpte jag en Canon MV880Xi och därtill en kabel och ett ZUN2300-kort (3-portars firewire Cardbus-kort) till min laptop. ZUN2300-kortet var mycket billigare än jag först befarat (225 kronor).

Att koppla in FW-kortet och kameran var inga problem. Plug-and-play. Inga drivrutiner att installera eller konfigurera (det fanns nån skiva för Windows, men den är fortfarande i sitt oöppnade fodral). Det program jag valde heter Kino (http://www.kinodv.org/) som är ett enkel program för videoredigering som fungerar utmärkt och är enkelt. Jag testade Cinelerra (http://cvs.cinelerra.org/) men, tyvärr kraschade programmet vid första testen och GUI:et är inte lika enkelt. Jag får väl prova programmet igen senare eftersom det verkade intressant. Det finns också några kommersiella program för Linux som jag inte testat.

Elgiganten i Sickla misslyckades f.ö. med att sälja kamera. Försäljaren kunde inte svare på i stort sett en enda fråga. Det som kom ur honom var antingen nonsens-svammel eller helt fel (tur att jag råkade det).

2006-08-15

Uppe igen

Filed under: — site admin @ 21:08

Kanske inte spelar så stor roll, men tanke på hur mycket det bloggas här. Uppgraderade till senaste Mandriva-betan och då dog en massa, bl.a. apache. För det första hade dom flyttat certifikaten men sen kraschade det iallafall utan ett knyst i nån logg. Som ren vänlighet får ni, ärade läsare, veta hur jag fixade det. Just det, inte ominstallation.

Det första vara att konstatera att apache inte startade alls, trots att startkommandot sade så (service httpd start). Men eftersom ps -u apache inte listade några processer så måste så vara fallet.

Först körde jag bash -x /etc/init.d/httpd start. Då kunde jag se se hur httpd startades och sedan själv köra det kommandot med strace, dvs strace -fF /usr/sbin/httpd -f /etc/httpd/conf/httpd.conf -DAPACHE2 -DHAVE_PHP5….

Jag klipper lite där eftersom det är rätt många -DHAVE. I slutet av spårningen stod det vad som blev fel. en yp-extension laddades (förmodligen ett tidigare trasigt beroende mellan RPM:erna som gjorde att modulen överhuvudtaget kom med.

18253 open("/usr/lib/php/extensions/yp.so", O_RDONLY) = 15
18253 read(15, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0`\16\0\000"..., 512) = 512
18253 fstat64(15, {st_mode=S_IFREG|0755, st_size=8192, ...}) = 0
18253 mmap2(NULL, 16084, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 15, 0) = 0xb74a6000
18253 mmap2(0xb74a9000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 15, 0x2) = 0xb74a9000
18253 --- SIGBUS (Bus error) @ 0 (0) ---

rpm -qf /usr/lib/php/extensions/yp.so gav namnnet på RPM:en. Sen var det bara att avinstallera NIS-modulen (NIS hetter Yellow Pages en gång i tiden, men dom British Telecom ville behålla det namnet för sig själva) och starta apache, med lyckat resultat denna gång :)

2006-02-16

CVS för att spåra konfigurationer

Filed under: — site admin @ 22:02

För att initiera CVS-arkiv finns en import-funktion. Man måste dock inte använda det bara för att spara källkod. Man kan använda det för backup också eller för att spåra konfigurationsändringar och se när de skett. När jag säger konfigurationsändringar är det /etc jag tänker på.

Skapa arkivet med cvs -d /arkivkatalog init

Skapa seden ett skript att köra varje dag. Med vixie cron kan du helt enkelt skapa filen med följande namn
/etc/cron.daily/etcbackupviacvs och detta innehåll:

#!/bin/bash
cd /etc
cvs -d /arkivkatalog -Q import -m backup myhost/etc backup backup$(date +%Y%m%d%H%M)

Glöm inte att chmodda den med chmod +x /etc/cron.daily/etcbackupviacvs

Kör skriptet en gång och skapa initialkonfigurationen.

Om nåt slutar fungera eller om man undrar vad nån wizard gjort, kan man titta i CVS och se vad som ändrats. Ex.Vad
har hänt i brandväggsskonfigen när jag senast ändrade konfigurationen. Kör först cronjobbet manuellt genom att köra
skriptet ovan (eller vänta till cron drar igång jobbet).

# cvs -d /arkivkatalogl/backupcvs rdiff -u -r backup200602150200 -r backup200602161800 myhost/etc/shorewall
cvs rdiff: Diffing myhost/etc/shorewall
Index: myhost/etc/shorewall/interfaces
diff -u myhost/etc/shorewall/interfaces:1.1.1.2 myhost/etc/shorewall/interfaces:1.1.1.3
--- myhost/etc/shorewall/interfaces:1.1.1.2    Wed Jan 25 23:19:01 2006
+++ myhost/etc/shorewall/interfaces    Thu Feb 16 22:20:24 2006
@@ -193,5 +193,4 @@
 #
 net    eth0    detect
 loc    eth1    detect
-loc    tap2    detect
 #LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE

Ajdå. Mandrivas wizard såg inte OpenVPN’s nätverksgränssnitt som inte var aktivt när wizarde kördes. Visserligen varnade den, men den sade inte vad som var problemet.

2006-02-13

Tuxracerbanor

Filed under: — site admin @ 21:02

Belly rub image
Snubblade över en sajt med tuxracer-banor

Tuxracer Belly Rub

2006-01-16

Inloggningsruta i VNC

Filed under: — site admin @ 00:01

Standardsättet att köra VNC är att man drar igång en session som är inloggad som en viss användare. Att köra som man brukar köra X är inte mycket svårare. Så här gjorde jag i Mandriva 2006.

  • Skapa en user som heter vnc.
  • Skapa filen /etc/xinet.d/vnc
    service vnc
    {
            socket_type     = stream
            protocol        = tcp
            wait            = no
            user            = vnc
            server          = /usr/X11R6/bin/Xvnc
            server_args     = -inetd -query localhost -once -geometry 1024x768 -depth 16
            disable         = no
            only_from       =  ip/mask som får komma åt tjänsten. t.ex. 169.169.0.0./16.
    }
    

  • Lägg in denna rad i /etc/services
    vnc 5900/tcp
  • Redigera bara /etc/kde/kdmrc så och ändra i Xdmcp-sektionen.
    [Xdmcp]
    Enable=true
    

När vi ändå är inne på ämnet… Om man inte vill köra X på konsolen (jag har mina skäl), men vill kunna köra X via vnc emellanåt så ligger lösningen ochså i kdmrc. Ändra

[General]
StaticServers=

Dvs säg åt KDM att inte starta servern på :0 som annars är standard

2005-12-27

Rädda disk med trasig partitionstabell.

Filed under: — site admin @ 19:12

Min 60GB:ar rasade. Det syntes som att jag inte hade några extended-partitioner längre. Med smartmontools kunde man se att det fanns fel på disken, liksom i /var/log/messages.

Här är stegen aningen förenklat för att återställa.

  • Kopiera disken.

    Det är ingen idé att försöka laga innehållet på en trasig disk. Det som händer är att man trasar datat ännu mera eller t.om. slutgiltigt. Jag genom att boota maskinen med Mandrake Move (Knoppix funkar också) och kopiera disken till en annan disk, i detta fall till en annan maskin via ssh. En FireWire/USB-disk är ett alternativ (min maskin var en laptop så en annan intern disk var inget alternativ).
    dd if=/dev/hda bs=512 conv=noerror,sync | ssh robin@kivi cat \>xine.hda

    Det här tar tid med ett normalt nätverk. 60GB / 100Mb = ~ 2 timmar.
  • Skanna disken efter partitioner.

    gpart söker efter sånt som ser ut som partitioner.
    losetup /dev/loop0 xine.hda
    gpart -f -g -v /dev/loop0


    Bland det intresanta (råkar veta att storleken verkar rätt)

    Possible partition(SGI XFS filesystem), size(9528mb), offset(47692mb)
       type: 131(0x83)(Linux ext2 filesystem)
       size: 9528mb #s(19514496) s(97675263-117189758)
       chs:  (1023/255/0)-(1023/255/0)d (0/0/0)-(0/0/0)r
       hex:  00 FF C0 FF 83 FF C0 FF FF 67 D2 05 80 C4 29 01
    


    Man får en hel del falska tips om partitioner. Det är inte så mycket att oroa sig för mera än att det tar tid att prova alla, men det kan man undvika om man
    har en aning om hur stora partitioner man hade.

  • Montera partitioner
  • Startsektorn * 512 (blockstorlek) ger offset till partitionen. Gör om losetup
    med offset.

     losetup -d /dev/loop0
     losetup -o $((97675263*512)) /dev/loop0 xine.hda
    

    Nu kan man (skall kunna) montera filsystemet med

    mount /dev/loop0 /mnt/cdrom

    Är man orolig kan man prova detta istället

    mount -t xfs /dev/loop0 /mnt/cdrom -o ro,norecovery

    Nu kan man komma åt innehållet som vanligt.

    ls /mn/cdrom

2005-12-14

VMWare och Mandriva 2006

Filed under: — site admin @ 00:12

Linuxhackarna har en vana att knäcka externa moduler titt som tätt. Här finns en länk till ett bra ställe med patchar för att få igång VMware när man uppdaterat till en ny kärna. I mitt fall 2.6.12 i Mandriva 2006. Ett tack till grabbarna (?) som fixat det.

2005-12-12

Magneter och laptops

Filed under: — site admin @ 01:12

Min gamla Latitude passerade nog pensionsgränsen nyligen. Min son lekte med en magnet och satte den mot skärmen som omedelbart svarade med att bli svart. Den hann bli fem år, vilket jag antar ändå är en respektabel ålder för en användbar laptop. Av nån anledning trodde jag inte platta skärmar var känsliga för magneter, men nu vet jag att det kan finnas komponenter i dem som är det.

Disken fick flytta in en annan laptop där den och OS:et (Mandriva 2006) på den gick igång rätt snällt. Nätverk och skärm fick dock konfigureras om. Windows vill dock inte alls gå igång.

Executive summary in english: Magnets may actually destroy your flat/laptop. screen.

Powered by WordPress