A java list randomizer

September 20th, 2009

This week I came across what seemed like a simple programming problem. From a large list of items I wanted to create a smaller list with random items copied from the larger list. The real world equivalent of would be something like bring me four random records from your CD collection.  Sounds simple? Well, there was an additional requirement on that I put on the solution, and that was that the smaller list should contain no duplicates.

There is a Random class in java that returns pseudorandom numbers. However, there is no guarantee that when calling Random.nextInt() a number of times the same number will not be returned twice.  In other words, the simple strategy filling a small list with elements from the large list picked at random with the help of Random.nextInt() will probably produce a result list when the same element is added twice. Not good enough.

One defense against that problem could be to keep track of which numbers the random generator has returned and simply discard any duplicates. For most cases that strategy is probably efficient, but sometimes it could lead to having to discard a whole bunch of random numbers. Moreover, execution times of such a solution would differ a lot depending on which numbers Random.nextInt() returned.

Another solution would be to copy all of the large list to a temporary list and remove each element taken to the smaller list from the temporary list. That way, no item would be added twice to the result list. However, if the source list is long, say a million entries, creating a temporary list to fetch holding all the million entries just to extract 100 random entries would be inefficient.

The elegant solution to this problem in my mind would instead be to create a list of offsets into the large list as long as the small list. The list of offsets would then be modified to emulate the effect of having a copy of the large list and removing entries from it. If the first entry of the offset list is offset 1, and the second offset also is 1, modify that to 2 instead, the element that would have been at position 1 if the original element at that position was removed.

I wrote a class implementing this solution, Randomizer.java. Feel free to use it or modify it anyway you wish.

The joy of unnecessary optimizations

September 20th, 2009

The overwhelming majority of all professional programming is about solving a large number of simple problems. The intellectually challenging problems are rare and in many situations solving a problem with a complicated but efficient solution is hard to justify. It is much cheaper to buy a faster computer with more memory to run your program than it is to write a smarter program that uses less resources.

However, I really enjoy the challenge of writing efficient and elegant code that solve a particular problem, so sometimes when I get a bit of free time and want to do something relaxing I spend time writing solutions to small programming puzzles that I run across in my day job working for Voxbiblia.

The next post contains the solution to one such puzzle and the solution I just wrote. It might be interesting to some.

CentOS prerelease security

September 9th, 2009

The CentOS Linux distribution is in many respects the optimal choice for anyone that wants a stable system that is supported over a number of years. I run it on a handful of servers and the problems are few and far between.centoslogo-200

However, one thing has been emerging as a bit of a problem lately, and that is that security updates from Red Hat has taken quite some time to get built and released for CentOS. This is especially true in the weeks following a new point release from Red Hat. Not having security updates available for known problems for weeks a the time makes users of CentOS less secure than they would otherwise be.

To help make this problem a bit less pronounced I have started to rebuild security updates from Red Hat and installing them on the systems I administer. That's one of the beauties of open source, you can fix things. If anyone else is interested in those updated packages they can be found at http://rpm.resare.com/centos5-pre-security. If you're in the target demographic you'll know what to do.

Random summer stuff. New jresolver, with DNSSEC support

August 12th, 2009

After a sort of long summer break I'm slowly feeling like it would be fun to blog a bit again. After an intense election campaign for the European Parliament in June, we actually did get a Pirate party representatitive elected, which feels like a milestone for the geeks in politics. Congratulations Christian!
dnssec-1
I have spent most of the summer doing work programming but I have also managed to go to Rome with Sångkraft and win a choir competition and update one of my free software projects, the jresolver Java stub resolver.

The new version of jresolver adds some autoconfig abilities as well as some awareness of DNSSEC. Now the resolver can query the recursive nameserver about weather a specific result is cryptographically verified or not. Perhaps not a terribly useful feature, but I think that anything that brings awareness to the effort to get people to use DNSSEC is a good thing. Anyway, the new version, 0.3.1, can be found over at fs.voxbiblia.com. Now, at least everyone that has a .se domain, run over to iis.se and read up on how to sign your zones.

Massövervakning igen?

May 26th, 2009

The election to the European parliament is coming up and this post part of a series series written in Swedish making the case for voting for the pirate party. For an English version of the basic argument, please see this post.

Nu är jag tjatig. Medielogiken lär oss att när vi väl varit upprörda över FRA-lagen och integriteten ett tag skall hela vår uppmärksamhet riktas mot något annat en stund. Att hålla på och tjata om samma sak om och om igen går inte hem.

Jag kan dock inte komma vidare. Inte släppa att våra folkvalda inte verkar tycka att personlig integritet är något att kämpa och stå upp för. Varje kandidat till EU-parlament och riksdag förtjänar att höra frågan om och om igen: Var går din gräns när det gäller massövervakning? Tycker du att staten skall få läsa allas personliga kommunikation?

Jag frågade kristdemokraternas andranamn på EU-listan, Sofia Modigh för någar dagar sedan. Hon hade inga direkta svar, men blev synbart nervös. Jag kände mig dock tryggt förvissad om att hon skulle kunna rösta för vilket integritetskränkande förslag som helst framöver. Integritet är väl viktigt, typ, men ibland får man kompromissa. Så uppfattade jag andemeningen i hennes inställning.

Här kommer en liten tänkvärd film om ämnet. Se den, och fundera på vilka principer du vill att dina representanter i EU-parlamentet skall ha

Du bist Terrorist (You are a Terrorist) english subtitles from alexanderlehmann on Vimeo.

Hur mycket massövervakning är okej?

May 16th, 2009

The election to the European parliament is coming up and this post part of a series series written in Swedish making the case for voting for the pirate party. For an English version of the basic argument, please see this post.

Att resonera kring de olika lagar och lagförslag som handlar om avlyssning och övervakning är svårt. För det första är det tekniskt avancerade områden som till sin natur är svåra att förstå, men detta är ett problem som går att hantera med ambitiösa projekt och smarta människor som ägnar tid och energi åt att förstå och förklara.

Det jag tycker är det verkligt stora problemet är dock att de politiker som drivit igenom FRA-lagen och är på god väg att genomföra teledatalagringsdirektivet verkar vara helt ointresserade av att diskutera och argumentera för sina åsikter om hur mycket övervakning som är okej. Man pratar istället om annat, och när obehagliga frågor ställs kommer man med några väl inövade totalt intetsägande formuleringar.

Jag tycker att det är en acceptabel form av övervakning att polisbilar åker på våra vägar, och med videokamera filmar personer som bryter mot trafikreglerna. Jag tycker att det är orimligt att en internetleverantör skall vara skyldig att spara alla epostmeddelanden som skickas eller tas emot till alla svenskar, för att staten i efterhand kan vilja hämta ut sådana uppgifter om man misstänker att ett brott begåtts. Någonstans emellan dessa två punkter går min gräns, och jag känner mig otroligt frustrerad över att regeringen och socialdemokraterna steg för steg flyttar gränsen för vad staten kan göra utan att ens göra ett allvarligt försök att övertyga folket om att det är rätt sak att göra.

Jag skall inte gå in på alla sätt jag tycker att enskilda lagförslag är fel, i alla fall att du skall fundera på var du tycker att gränsen går när det gäller övervakning. Skull det vara acceptabelt att polisen kan ta del av av alla epostmeddelanden du skriver? Är det okej att någon kan kolla upp var du är varje gång du ringer i mobiltelefon? Är det fritt fram för staten att kartlägga vem som har kontakt med vem på internet?

Alliansen och Socialdemokraterna har under de senaste åren drivit en politik som på ett massivt sätt monterar ner vår rätt till privatliv, och inget tyder på att det skulle förändras framöver. Jag tror personligen inte att de har stöd bland sina väljare för den förda politiken, men det är omöjligt att veta eftersom man inte har pratat öppet om de här förändringarna och sökt väljarnas stöd.

Jag hoppas att tillräckligt många av oss som tycker att till exempel FRA-lagen är ett gigantiskt felsteg gör någonting åt det, genom att inte ge de politiker som utan debatt eller diskussion drivit om sakfrågorna drivit igenom politiken förnyat förtroende. Det gäller både Alliansen och Socialdemokraterna. Istället hoppas jag att vi röstar på Piratpartiet i tillräckliga mängder för att få en vågmästarsituation, då både vänstern och alliansen behöver piratpartiets stöd för att kunna föra sin politik. Det är så vitt jag kan bedöma det enda realistiska sättet att få en riksdagsmajoritet för en politik som bryter den nuvarande katastrofala trenden när det gäller elektronisk övervakning.

Mina argument för Piratpartiet i Europaparlamentet

May 2nd, 2009

The election to the european parliament is coming up and this post is the first in what hopefully will be a series written in Swedish making the case for voting for the pirate party. For an english version of the basic argument, please see this post.

Snart är det europaparlamentsval. I detta inlägg har jag för avsikt att gå igenom några för- och nackdelar som spelat in när jag gjort mitt val att gå med i piratpartiet och min plan att rösta på dem den 7 juni.

Piratpartiet är ett politiskt parti som arbetar för en reformerad upphovsrätt och att motverka utvecklingen mot ett övervakningssamhälle. Partiet tar inte ställning i frågor som är utanför partiets uttalade områden, och har för avsikt att genom samarbete med andra politiska partier och konstellationer främja den egna politiken.

Den främsta invändningen mot att rösta på Piratpartiet för mig är att jag med en piratröst väljer representation som, om vi kommer så långt som till parlamentet, väljer att vara tyst i politiska frågor där jag personligen har starka åsikter. Jag skulle vilja avveckla jordbrukssubventionerna och stoppa Europaprlamentets flyttcirkus mellan Bryssel och Strasbourg. Än värre, med lite otur kan Piratpartiets uttalade strategi, att gå med i och rösta med den parlamentsgrupp som ger bäst gehör för partiets frågor, innebära att min representant röstar på ett sätt som är emot min övertygelse i vissa frågor.

Jag tror dock att denna nackdel för det första i praktiken inte är så stor som den verkar och för det andra mer än väl uppvägs av det fördelar jag ser med att rösta pirat:

Piratpartiet kan sannolikt driva frågorna om rättssäkerhet och personlig integritet mer effektivt än andra partier med liknande åsikter i dessa frågor. För en EU-parlamentariker finns det nämligen alltid för många ärenden och viktiga frågor, så även om jag skulle lägga min röst på en kandidat från exempelvis miljöpartiet som delar mina ståndpunkter om detta så är sannolikheten stor att denne kommer att ägna mandatperioden åt saker som jag inte alls tycker är så viktiga. Dessutom är frågor om till exempel mjukvarupatent och reglering av internet så svåra att det krävs spetskompetens för att alls kunna arbeta effektivt med detta. Det är helt enkelt otroligt lätt för den parlamentariker som inte är mycket påläst i en fråga att bli bortfintad och därmed ineffektiv, även om grundåsikterna är de rätta. Här har Piratpartiets toppkandidat Christian Engström järnkoll.

En röst på Piratpartiet är alltså den mest effektiva röst som går att lägga mot övervakningssamhället och för en ny syn på upphovsrätt i Europaparlamentet. Dessutom är en plats i Europaparlamentet en chans för Piratpartiet att visa vad man går för när det gäller öppenhet i det politiska arbetet, effektivitet att få fram sina frågor och en möjlighet till medieutrymme som ger bättre chanser att nå det stora målet, en plats i Sveriges riksdag.

I am a proud pirate

April 25th, 2009

reklamarkiv-logosToday I have decided to join the Pirate Party of Sweden and I intend to vote pirate in the upcoming elections to the European Parliament. The Pirate Party is a political party that explictly limits is policy opininons to issues of internet regulation, intellecual property, file sharing and surveilance.

I intend to vote pirate despite the fact that I have opinions in any other areas of policy primarily for two reasons. Firstly, I think that those issues are critically important and are not properly addressed or even understood by any other of the major political parties in Sweden. Secondly, I am frustrated by the current political parties inability to provide voting alternatives for people like me who value the classical liberal values of individual freedom and rights.  I'd love to vote for a truly liberal party that would credibly promise not to sacrifice privacy and individual liberties and be the enablers of truly horrible pieces of legislation such as the FRA law. However, in the current situation there is no such party that even comes close to have a chance to get representation.

So, without further ado I  now pronounce myself a member of the Pirate Party and I encourage every swedish voter to vote pirate on June 7th.