Patents wide open

With this patent Apple managed to stop import of HTC phones in the US:

“A system and method causes a computer to detect and perform actions on structures identified in computer data. The system provides an analyzer server, an application program interface, a user interface and an action processor. The analyzer server receives from an application running concurrently data having recognizable structures, uses a pattern analysis unit, such as a parser or fast string search function, to detect structures in the data, and links relevant actions to the detected structures. The application program interface communicates with the application running concurrently, and transmits relevant information to the user interface. Thus, the user interface can present and enable selection of the detected structures, and upon selection of a detected structure, present the linked candidate actions. Upon selection of an action, the action processor performs the action on the detected structure.”

Read the patent here: http://www.google.com/patents/US5946647?printsec=abstract&source=gbs_overview_r&cad=0#v=onepage&q&f=false

And when you start looking at the flow-plans, you can begin to understand that by pure luck Apple was able to patent this. I could have to, because I am doing more or less the same thing when I am getting data from a provider, checking against a database and updating it if there are differences.

But it is about time that someone stood up and talked some sense to the patent bureau in the US, and also to the judges. These are common algorithms, and the patents are written so broad that you can more or less do what you want with the patent. What Apple has patented is just something that even script kids have been doing since the beginning of computer age.

As Apple says: Competition is healthy, but our competitors should create their own original technology, not steal ours. (translated from Norwegian).

To Apple: Stop reinventing the wheel and patenting it. Stop stealing from the past, and from great programmers before you. Stop hindering inventions and healthy competition.

 

 

Open source vs. commercial

I’m starting this blog-post with a quote from the ‘about’ text from the website Saxonica.

Saxonica is the company created by Michael Kay, developer of the Saxon product, to bring the technology to the commercial market. The company was created to ensure continued investment in moving the Saxon technology forwards, and remove the risk associated with using open-source software that has no support infrastructure. Over the six years Saxonica has been operating, this strategy has proved successful in providing quality products and services to both the commercial and open source user communities.

Why am I quoting this website.

Well because it confirmes my feelings that there should be a company wanting to generate money from – hopefully – their own open source projects.

This because, as this text says: “The company was created to ensure continued investment in moving the Saxon technology forwards, and remove the risk associated with using open-source software that has no support infrastructure. ”

Saxonica, who is responsible for XSLT and other XML technologies, undertakes the development of the Saxon XSLT, XQuery, and XML Schema processors. These are now available in Enterprise Editions, Professional Editions and Home Editions – the latter is free though with restrictions, while the others costs to use.

You could say that Saxonica is not the only one using the business model. Zend, the company that developed the Zend Engine to the PHP Scripting Language, also produces commercial products related to PHP. Examples are Zend Studio (which is based on Eclipse) and the Zend Server.
Because of the commercial business plan Zend is interested in developing PHP and show professional and enterprise usage of PHP.

These business models are described in detail in this report from SAP Research: http://dirkriehle.com/publications/2009-2/the-commercial-open-source-business-model/

My gut feeling is that the Saxonica and other similar Commercial Open Source Business Model is the right path, and I think that more and more OSS providers/organizations/… should follow.

 

Patent and patent troll registry

It is about time we start fighting the patent trolls. One way to do this is to greate a registry or a wiki to help out developers and companies to avoid breaching the patent and/or getting into patent disputes.

This is of great importance when your application has to deal with breaching a patent that is of so generic structure that you have to breach it – almost – no matter what you do.

Such a registry could (should?) be a tool also for lawyers and judges when dealing with such cases.

Again: It is time to fight these trolls back. Get them into the sunlight and turn them into stones. Are you up for a troll fight?

Methods and Apparatus for Information Storage and Retrieval Using a Dallas 279664v1 Hashing Technique with External Chaining and On-the-Fly Removal of Expired Data

Yes, the title is long – and it is also the name of the United States Patent
No. 5,893,120.
This is the patent that Bedrock Computer Technologies LLC claims that a total of 10 companies is infringing. You can read the filing here.
So what does this patent say?

“A method and apparatus for performing storage and retrieval in an information storage system is disclosed that uses the hashing technique with the external chaining method for collision resolution. In order to prevent performance deterioration due to the presence of automatically expiring data items, a garbage collection technique is used that removes all expired records stored in the system in the external chain targeted by a probe into the data storage system. More particularly, each insertion, retrieval, or deletion of a record is an occasion to search an entire linked-list chain of records for expired items and then remove them. Because an expired data item will not remain in the system long term if the system is frequently probed, it is useful for large information storage systems that are heavily used, require the fast access provided by hashing, and cannot be taken off-line for removal of expired data.”

It was registered by Richard Michael Nemes of Brooklyn, New York on January 2, 1997.

When I start reading the article, I am noticing that it is referencing, among others, DE. Knuth – The Art of Computer Programming. The “inventor” also references Knuth later in the application.

I am therefor questioning: Is this really an invention by Richard Michael Nemes?

What he is doing is using the work and knowledge of other persons and creating his own variation of it – probably enhancing it and probably also making it better. Searching (again, use your favorite search engine) for Richard Michael Nemes and you will find some rather interesting “inventions”.

  • Methods and systems for electronic transactionsIn the preferred computer system, the user is provided with a separate Internet-accessible entity referred to here as the “personal page.” A personal page, preferably, includes memory for storing information related to the user. For example, on his/her personal page the user indicates what he/she wishes to purchase, possibly along with other criteria associated with the purchase, such as, for example, a time that the purchase should take The user is provided with the ability to create personalized bidding rules that vendors that offer goods and services must respect. Vendors have the ability to specify similar criteria, which describe the goods and/or services they offer. Vendors can indicate, for example, the prices of their goods, times and places that their services are available, etc. Preferably, these specifications, called “vendor scripts,” are embodied in active software/data entities (agents) that traverse sites on the Internet visiting sites hosting users’ personal pages. Thus, preferably, vendor software/data agents (comprising vendor scripts) are the mobile, active elements in the system and purchasing requirements are stationary and more passive in comparison.
  • Electronic Transactions Based on Deal Forms In the preferred computer system, the user is provided with a separate Internet-accessible entity referred to here as the “personal page.” A personal page, preferably, includes memory for storing information related to the user. For example, on his/her personal page the user indicates what he/she wishes to purchase, possibly along with other criteria associated with the purchase, such as, for example, a time that the purchase should take The user is provided with the ability to create personalized bidding rules that vendors that offer goods and services must respect. Vendors have the ability to specify similar criteria, which describe the goods and/or services they offer. Vendors can indicate, for example, the prices of their goods, times and places that their services are available, etc. Preferably, these specifications, called “vendor scripts,” are embodied in active software/data entities (agents) that traverse sites on the Internet visiting sites hosting users’ personal pages. Thus, preferably, vendor software/data agents (comprising vendor scripts) are the mobile, active elements in the system and purchasing requirements are stationary and more passive in comparison.

But this would mean that I could take any Computer book that I own, read up on what the author is teaching me – enhancing and probably making the code (algorythm) better, and then file for a patent.

Honestly, this does not make sense. But I am just a humble Norwegian that happens to be a programmer. I am no lawyer and so I have no interest in creating a patent just to create one and then claim that some company has used it – even though I could make a sh*tload of money from it.

Again, I can use my typical example from back in the Commodore 64 days. In those days (mid 1980s) I created some assembly code (yes, I programmed in 6502 assembly) that moved some sprites back and forth on the screen. All done while I could write text on the screen. It used raster and interrupt techniques.

So I could create a stupid patent called: “Methods and apparatus for moving a graphical object on a computer screen without interruption of the operating system.”

Another issue related to this patent lawsuit is the company that has filed it: Bedrock Computer Technologies LLC. Do a search (use your favorite search engine (probably patent secured)) and you’ll find that they really don’t do much technology work, except for reading up on patents (buying some as well) and filing suits against large companies.

The worst thing in this lawsuit is that Bedrock also claimed that the small Web consulting company CitiWare Technology Solutions. Some websites claimes that the only reason why Bedrock added CitiWare to the list of infringers is that this company was the only one based in Texas, which was where Bedrock filed the lawsuit. Nice move.

Patents on such basic algorythms and/or techniques in programming must be put to an end.

Doing a search for David Garrod who is the man behind the Bedrock company on freshpatents.com I came over quite a few interesting results, one of which is called Distributed computing which is described as this:

The invention provides an off-the-shelf product solution to target the specific needs of commercial users with naturally parallel applications. A top-level, public API provides a simple “compute server” or “task farm” model that dramatically accelerates integration and deployment. By providing built-in, turnkey support for enterprise features like fault-tolerant scheduling, fail-over, load balancing, and remote, central administration, the invention eliminates the need for customized middleware and yields enormous, on-going savings in maintenance and administrative overhead.

This “invention” is so general that it cannot even be called a patent. It is more a specification for a job where you want to do distributed computing…

The abstract is even worse: “A distributed computing system manages execution of jobs and their associated tasks. Multiple scheduling strategies respect job priority preferences. A graphical user interface allows viewing of job status information and on-the-fly modification of job priorities

Can we now put an end to this patent bulls*it? Please?

Links to organizations who’s trying to put patent trolls out of practice:

Linux Defenders: http://www.linuxdefenders.org
Open Invention Network: http://openinventionnetwork.com/

One last note: Does this lawyer know how to actually use the patent. Can he see in code where this patent has been used?

PHP going down?

Visited the php.net website for other reasons than just to fresh up on a function that I was not sure how to use (PHP has the best documentation out there – period. Yes. It. Is. Even. Better. Than. The. C#. Or. VB. Documentation. At. Microsoft. Period!)

How ever, looking at the statistics that you can watch if you click on the links on This page: http://www.php.net/usage.php
You will notice that the usage of PHP is going down. C# is on the rise and so are other programming languages like Python.

I can understand why it is faster to program websites in C# (or .Net), and I do think that PHP should move in that direction. How ever.

I just had an enlightening moment with PHP and Smarty. It is so freakin’ fast to create forms and templates with Smarty that coding websites is more fun.

Earlier it’s been code this, then that and then populate that string. With Smarty you just create the template, look at it and decide that – yes this is what I want my page to look like – THEN – start populating the different elements on the page.
FAN-Tastic!
Still there are things that is easier in a real object oriented language like – for instance – C#. Whereas you’d do this for instance:
string strTest = “This is a text where I would like to replace goosebumps with cheeze!”;
So you do this: strTest.Replace(“goosebumps”, “cheeze”);
Instead of:
$strTemp = “Goosebumps shall be replaced”;
$strNew = str_replace(“Goosebumps”, “cheeze”, $strTemp);

But anyway. This is not a blogpost where I bash on PHP, I am just saying that it seems like the interest of PHP is declining. Maybe the community should do something about it.

Make it easier and more joy able to code websites.

Dugnad: Norske data

Har laget et XML-ark som inneholder oversikt over kommuner, fylker og byer i Norge. Denne mangler imidlertid noen byer, og annen informasjon som kommune-nummer, fylkesnummer osv.
Dersom noen har lyst til å bidra med å komplementere denne, så blir jeg overlykkelig. Tagger kan selvfølgelig endres. Har ikkes satt opp noe SVN eller noe, men hvis noe har svn så flytter jeg gjerne dette hit.

<?xml version="1.0" encoding="utf-8"?>
<kartdata>
   <fylker>
      <fylkesnavn>Østfold</fylkesnavn>
      <kommuner>
         <kommune name="Halden">
            <byer>
               <by>Halden</by>
            </byer>
         </kommune>
         <kommune name="Moss">
            <byer>
               <by>Moss</by>
            </byer>
         </kommune>
         <kommune name="Sarpsborg">
            <byer>
               <by>Sarpsborg</by>
            </byer>
         </kommune>
         <kommune name="Fredrikstad">
            <byer>
               <by>Fredrikstad</by>
            </byer>
         </kommune>
         <kommune name="Hvaler">
            <byer/>
         </kommune>
         <kommune name="Aremark">
            <byer/>
         </kommune>
         <kommune name="Marker">
            <byer/>
         </kommune>
         <kommune name="Rømskog">
            <byer/>
         </kommune>
         <kommune name="Trøgstad">
            <byer/>
         </kommune>
         <kommune name="Spydeberg">
            <byer/>
         </kommune>
         <kommune name="Askim">
            <byer>
               <by>Askim</by>
            </byer>
         </kommune>
         <kommune name="Eidsberg">
            <byer>
               <by>Mysen</by>
            </byer>
         </kommune>
         <kommune name="Skiptvet">
            <byer/>
         </kommune>
         <kommune name="Rakkestad">
            <byer/>
         </kommune>
         <kommune name="Råde">
            <byer/>
         </kommune>
         <kommune name="Rygge">
            <byer/>
         </kommune>
         <kommune name="Våler">
            <byer/>
         </kommune>
         <kommune name="Hobøl">
            <byer/>
         </kommune>
      </kommuner>
   </fylker>
   <fylker>
      <fylkesnavn>Akershus</fylkesnavn>
      <kommuner>
         <kommune name="Vestby">
            <byer/>
         </kommune>
         <kommune name="Ski">
            <byer>
               <by>Ski</by>
            </byer>
         </kommune>
         <kommune name="Ås">
            <byer/>
         </kommune>
         <kommune name="Frogn">
            <byer/>
         </kommune>
         <kommune name="Nesodden">
            <byer/>
         </kommune>
         <kommune name="Oppegård">
            <byer/>
         </kommune>
         <kommune name="Bærum">
            <byer>
               <by>Sandvika</by>
            </byer>
         </kommune>
         <kommune name="Asker">
            <byer/>
         </kommune>
         <kommune name="Aurskog-Høland">
            <byer/>
         </kommune>
         <kommune name="Sørum">
            <byer/>
         </kommune>
         <kommune name="Fet">
            <byer/>
         </kommune>
         <kommune name="Rælingen">
            <byer/>
         </kommune>
         <kommune name="Enebakk">
            <byer/>
         </kommune>
         <kommune name="Lørenskog">
            <byer/>
         </kommune>
         <kommune name="Skedsmo">
            <byer/>
         </kommune>
         <kommune name="Nittedal">
            <byer/>
         </kommune>
         <kommune name="Gjerdrum">
            <byer/>
         </kommune>
         <kommune name="Ullensaker">
            <byer/>
         </kommune>
         <kommune name="Nes">
            <byer/>
         </kommune>
         <kommune name="Eidsvoll">
            <byer/>
         </kommune>
         <kommune name="Nannestad">
            <byer/>
         </kommune>
         <kommune name="Hurdal">
            <byer/>
         </kommune>
      </kommuner>
   </fylker>
   <fylker>
      <fylkesnavn>Oslo</fylkesnavn>
      <kommuner>
         <kommune name="Oslo">
            <byer>
               <by>Oslo</by>
            </byer>
         </kommune>
      </kommuner>
   </fylker>
   <fylker>
      <fylkesnavn>Hedmark</fylkesnavn>
      <kommuner>
         <kommune name="Kongsvinger">
            <byer/>
         </kommune>
         <kommune name="Hamar">
            <byer/>
         </kommune>
         <kommune name="Ringsaker">
            <byer/>
         </kommune>
         <kommune name="Løten">
            <byer/>
         </kommune>
         <kommune name="Stange">
            <byer/>
         </kommune>
         <kommune name="Nord-Odal">
            <byer/>
         </kommune>
         <kommune name="Sør-Odal">
            <byer/>
         </kommune>
         <kommune name="Eidskog">
            <byer/>
         </kommune>
         <kommune name="Grue">
            <byer/>
         </kommune>
         <kommune name="Åsnes">
            <byer/>
         </kommune>
         <kommune name="Våler">
            <byer/>
         </kommune>
         <kommune name="Elverum">
            <byer/>
         </kommune>
         <kommune name="Åmot">
            <byer/>
         </kommune>
         <kommune name="Trysil">
            <byer/>
         </kommune>
         <kommune name="Stor-elvdal">
            <byer/>
         </kommune>
         <kommune name="Rendalen">
            <byer/>
         </kommune>
         <kommune name="Engerdal">
            <byer/>
         </kommune>
         <kommune name="Tolga">
            <byer/>
         </kommune>
         <kommune name="Tynset">
            <byer/>
         </kommune>
         <kommune name="Alvdal">
            <byer/>
         </kommune>
         <kommune name="Folldal">
            <byer/>
         </kommune>
         <kommune name="Os">
            <byer/>
         </kommune>
      </kommuner>
   </fylker>
   <fylker>
      <fylkesnavn>Oppland</fylkesnavn>
      <kommuner>
         <kommune name="Lillehammer">
            <byer>
               <by>Lillehammer</by>
            </byer>
         </kommune>
         <kommune name="Gjøvik">
            <byer>
               <by>Gjøvik</by>
            </byer>
         </kommune>
         <kommune name="Dovre">
            <byer/>
         </kommune>
         <kommune name="Lesja">
            <byer/>
         </kommune>
         <kommune name="Skjåk">
            <byer/>
         </kommune>
         <kommune name="Lom">
            <byer/>
         </kommune>
         <kommune name="Vågå">
            <byer/>
         </kommune>
         <kommune name="Nord-Fron">
            <byer/>
         </kommune>
         <kommune name="Sel">
            <byer>
               <by>Otta</by>
            </byer>
         </kommune>
         <kommune name="Sør-Fron">
            <byer/>
         </kommune>
         <kommune name="Ringebu">
            <byer/>
         </kommune>
         <kommune name="Øyer">
            <byer/>
         </kommune>
         <kommune name="Gausdal">
            <byer/>
         </kommune>
         <kommune name="Østre Toten">
            <byer/>
         </kommune>
         <kommune name="Vestre Toten">
            <byer/>
         </kommune>
         <kommune name="Jevnaker">
            <byer/>
         </kommune>
         <kommune name="Lunner">
            <byer/>
         </kommune>
         <kommune name="Gran">
            <byer/>
         </kommune>
         <kommune name="Søndre land">
            <byer/>
         </kommune>
         <kommune name="Nordre land">
            <byer/>
         </kommune>
         <kommune name="Sør-Aurdal">
            <byer/>
         </kommune>
         <kommune name="Etnedal">
            <byer/>
         </kommune>
         <kommune name="Nord-Aurdal">
            <byer/>
         </kommune>
         <kommune name="Vestre Slidre">
            <byer/>
         </kommune>
         <kommune name="Øystre Slidre">
            <byer/>
         </kommune>
         <kommune name="Vang">
            <byer/>
         </kommune>
      </kommuner>
   </fylker>
   <fylker>
      <fylkesnavn>Buskerud</fylkesnavn>
      <kommuner>
         <kommune name="Drammen">
            <byer>
               <by>Drammen</by>
            </byer>
         </kommune>
         <kommune name="Kongsberg">
            <byer>
               <by>Kongsberg</by>
            </byer>
         </kommune>
         <kommune name="Ringerike">
            <byer>
               <by>Hønefoss</by>
            </byer>
         </kommune>
         <kommune name="Hole">
            <byer/>
         </kommune>
         <kommune name="Flå">
            <byer/>
         </kommune>
         <kommune name="Nes">
            <byer/>
         </kommune>
         <kommune name="Gol">
            <byer/>
         </kommune>
         <kommune name="Hemsedal">
            <byer/>
         </kommune>
         <kommune name="Ål">
            <byer/>
         </kommune>
         <kommune name="Hol">
            <byer/>
         </kommune>
         <kommune name="Sigdal">
            <byer/>
         </kommune>
         <kommune name="Krødsherad">
            <byer/>
         </kommune>
         <kommune name="Modum">
            <byer/>
         </kommune>
         <kommune name="Øvre Eiker">
            <byer/>
         </kommune>
         <kommune name="Nedre Eiker">
            <byer/>
         </kommune>
         <kommune name="Lier">
            <byer/>
         </kommune>
         <kommune name="Røyken">
            <byer/>
         </kommune>
         <kommune name="Hurum">
            <byer/>
         </kommune>
         <kommune name="Flesberg">
            <byer/>
         </kommune>
         <kommune name="Rollag">
            <byer/>
         </kommune>
         <kommune name="Nore og Uvdal">
            <byer/>
         </kommune>
      </kommuner>
   </fylker>
   <fylker>
      <fylkesnavn>Vestfold</fylkesnavn>
      <kommuner>
         <kommune name="Horten">
            <byer>
               <by>Horten</by>
            </byer>
         </kommune>
         <kommune name="Holmestrand">
            <byer>
               <by>Holmestrand </by>
            </byer>
         </kommune>
         <kommune name="Sandefjord">
            <byer/>
         </kommune>
         <kommune name="Tønsberg">
            <byer>
               <by>Tønsberg</by>
            </byer>
         </kommune>
         <kommune name="Larvik">
            <byer>
               <by>Larvik</by>
            </byer>
         </kommune>
         <kommune name="Svelvik">
            <byer/>
         </kommune>
         <kommune name="Sande">
            <byer/>
         </kommune>
         <kommune name="Hof">
            <byer/>
         </kommune>
         <kommune name="Re">
            <byer/>
         </kommune>
         <kommune name="Andebu">
            <byer/>
         </kommune>
         <kommune name="Stokke">
            <byer/>
         </kommune>
         <kommune name="Nøtterøy">
            <byer/>
         </kommune>
         <kommune name="Tjøme">
            <byer/>
         </kommune>
         <kommune name="Lardal">
            <byer/>
         </kommune>
      </kommuner>
   </fylker>
   <fylker>
      <fylkesnavn>Telemark</fylkesnavn>
      <kommuner>
         <kommune name="Porsgrunn">
            <byer/>
         </kommune>
         <kommune name="Skien">
            <byer/>
         </kommune>
         <kommune name="Notodden">
            <byer/>
         </kommune>
         <kommune name="Siljan">
            <byer/>
         </kommune>
         <kommune name="Bamble">
            <byer/>
         </kommune>
         <kommune name="Kragerø">
            <byer/>
         </kommune>
         <kommune name="Drangedal">
            <byer/>
         </kommune>
         <kommune name="Nome">
            <byer/>
         </kommune>
         <kommune name="Bø">
            <byer/>
         </kommune>
         <kommune name="Sauherad">
            <byer/>
         </kommune>
         <kommune name="Tinn">
            <byer/>
         </kommune>
         <kommune name="Hjartdal">
            <byer/>
         </kommune>
         <kommune name="Seljord">
            <byer/>
         </kommune>
         <kommune name="Kviteseid">
            <byer/>
         </kommune>
         <kommune name="Nissedal">
            <byer/>
         </kommune>
         <kommune name="Fyresdal">
            <byer/>
         </kommune>
         <kommune name="Tokke">
            <byer/>
         </kommune>
         <kommune name="Vinje">
            <byer/>
         </kommune>
      </kommuner>
   </fylker>
   <fylker>
      <fylkesnavn>Aust-Agder</fylkesnavn>
      <kommuner>
         <kommune name="Risør">
            <byer/>
         </kommune>
         <kommune name="Grimstad">
            <byer>
               <by>Grimstad</by>
            </byer>
         </kommune>
         <kommune name="Arendal">
            <byer>
               <by>Arendal</by>
            </byer>
         </kommune>
         <kommune name="Gjerstad">
            <byer/>
         </kommune>
         <kommune name="Vegårshei">
            <byer/>
         </kommune>
         <kommune name="Tvedestrand">
            <byer/>
         </kommune>
         <kommune name="Froland">
            <byer/>
         </kommune>
         <kommune name="Lillesand">
            <byer>
               <by>Lillesand</by>
            </byer>
         </kommune>
         <kommune name="Birkenes">
            <byer/>
         </kommune>
         <kommune name="Åmli">
            <byer/>
         </kommune>
         <kommune name="Iveland">
            <byer/>
         </kommune>
         <kommune name="Evje og Hornnes">
            <byer/>
         </kommune>
         <kommune name="Bygland">
            <byer/>
         </kommune>
         <kommune name="Valle">
            <byer/>
         </kommune>
         <kommune name="Bykle">
            <byer/>
         </kommune>
      </kommuner>
   </fylker>
   <fylker>
      <fylkesnavn>Vest-Agder</fylkesnavn>
      <kommuner>
         <kommune name="Kristiansand">
            <byer/>
         </kommune>
         <kommune name="Mandal">
            <byer>
               <by>Mandal</by>
            </byer>
         </kommune>
         <kommune name="Farsund">
            <byer/>
         </kommune>
         <kommune name="Flekkefjord">
            <byer/>
         </kommune>
         <kommune name="Vennesla">
            <byer/>
         </kommune>
         <kommune name="Songdalen">
            <byer/>
         </kommune>
         <kommune name="Søgne">
            <byer/>
         </kommune>
         <kommune name="Marnardal">
            <byer/>
         </kommune>
         <kommune name="Åseral">
            <byer/>
         </kommune>
         <kommune name="Audnedal">
            <byer/>
         </kommune>
         <kommune name="Lindesnes">
            <byer/>
         </kommune>
         <kommune name="Lyngdal">
            <byer/>
         </kommune>
         <kommune name="Hægebostad">
            <byer/>
         </kommune>
         <kommune name="Kvinesdal">
            <byer/>
         </kommune>
         <kommune name="Sirdal">
            <byer/>
         </kommune>
      </kommuner>
   </fylker>
   <fylker>
      <fylkesnavn>Rogaland</fylkesnavn>
      <kommuner>
         <kommune name="Eigersund">
            <byer/>
         </kommune>
         <kommune name="Sandnes">
            <byer/>
         </kommune>
         <kommune name="Stavanger">
            <byer/>
         </kommune>
         <kommune name="Haugesund">
            <byer/>
         </kommune>
         <kommune name="Sokndal">
            <byer/>
         </kommune>
         <kommune name="Lund">
            <byer/>
         </kommune>
         <kommune name="Bjerkreim">
            <byer/>
         </kommune>
         <kommune name="Hå">
            <byer/>
         </kommune>
         <kommune name="Klepp">
            <byer/>
         </kommune>
         <kommune name="Time">
            <byer/>
         </kommune>
         <kommune name="Gjesdal">
            <byer/>
         </kommune>
         <kommune name="Sola">
            <byer/>
         </kommune>
         <kommune name="Randaberg">
            <byer/>
         </kommune>
         <kommune name="Forsand">
            <byer/>
         </kommune>
         <kommune name="Strand">
            <byer/>
         </kommune>
         <kommune name="Hjelmeland">
            <byer/>
         </kommune>
         <kommune name="Suldal">
            <byer/>
         </kommune>
         <kommune name="Sauda">
            <byer/>
         </kommune>
         <kommune name="Finnøy">
            <byer/>
         </kommune>
         <kommune name="Rennesøy">
            <byer/>
         </kommune>
         <kommune name="Kvitsøy">
            <byer/>
         </kommune>
         <kommune name="Bokn">
            <byer/>
         </kommune>
         <kommune name="Tysvær">
            <byer/>
         </kommune>
         <kommune name="Karmøy">
            <byer/>
         </kommune>
         <kommune name="Utsira">
            <byer/>
         </kommune>
         <kommune name="Vindafjord">
            <byer/>
         </kommune>
         <kommune name="Ølen">
            <byer/>
         </kommune>
      </kommuner>
   </fylker>
   <fylker>
      <fylkesnavn>Hordaland</fylkesnavn>
      <kommuner>
         <kommune name="Bergen">
            <byer/>
         </kommune>
         <kommune name="Etne">
            <byer/>
         </kommune>
         <kommune name="Sveio">
            <byer/>
         </kommune>
         <kommune name="Bømlo">
            <byer/>
         </kommune>
         <kommune name="Stord">
            <byer/>
         </kommune>
         <kommune name="Fitjar">
            <byer/>
         </kommune>
         <kommune name="Tysnes">
            <byer/>
         </kommune>
         <kommune name="Kvinnherad">
            <byer/>
         </kommune>
         <kommune name="Jondal">
            <byer/>
         </kommune>
         <kommune name="Odda">
            <byer/>
         </kommune>
         <kommune name="Ullensvang">
            <byer/>
         </kommune>
         <kommune name="Eidfjord">
            <byer/>
         </kommune>
         <kommune name="Ulvik">
            <byer/>
         </kommune>
         <kommune name="Granvin">
            <byer/>
         </kommune>
         <kommune name="Voss">
            <byer/>
         </kommune>
         <kommune name="Kvam">
            <byer/>
         </kommune>
         <kommune name="Fusa">
            <byer/>
         </kommune>
         <kommune name="Samnanger">
            <byer/>
         </kommune>
         <kommune name="Os">
            <byer/>
         </kommune>
         <kommune name="Austevoll">
            <byer/>
         </kommune>
         <kommune name="Sund">
            <byer/>
         </kommune>
         <kommune name="Fjell">
            <byer/>
         </kommune>
         <kommune name="Askøy">
            <byer/>
         </kommune>
         <kommune name="Vaksdal">
            <byer/>
         </kommune>
         <kommune name="Modalen">
            <byer/>
         </kommune>
         <kommune name="Osterøy">
            <byer/>
         </kommune>
         <kommune name="Meland">
            <byer/>
         </kommune>
         <kommune name="Øygarden">
            <byer/>
         </kommune>
         <kommune name="Radøy">
            <byer/>
         </kommune>
         <kommune name="Lindås">
            <byer/>
         </kommune>
         <kommune name="Austrheim">
            <byer/>
         </kommune>
         <kommune name="Fedje">
            <byer/>
         </kommune>
         <kommune name="Masfjorden">
            <byer/>
         </kommune>
      </kommuner>
   </fylker>
   <fylker>
      <fylkesnavn>Sogn og Fjordane</fylkesnavn>
      <kommuner>
         <kommune name="Flora">
            <byer/>
         </kommune>
         <kommune name="Gulen">
            <byer/>
         </kommune>
         <kommune name="Solund">
            <byer/>
         </kommune>
         <kommune name="Hyllestad">
            <byer/>
         </kommune>
         <kommune name="Høyanger">
            <byer/>
         </kommune>
         <kommune name="Vik">
            <byer/>
         </kommune>
         <kommune name="Balestrand">
            <byer/>
         </kommune>
         <kommune name="Leikanger">
            <byer/>
         </kommune>
         <kommune name="Sogndal">
            <byer/>
         </kommune>
         <kommune name="Aurland">
            <byer/>
         </kommune>
         <kommune name="Lærdal">
            <byer/>
         </kommune>
         <kommune name="Årdal">
            <byer/>
         </kommune>
         <kommune name="Luster">
            <byer/>
         </kommune>
         <kommune name="Askvoll">
            <byer/>
         </kommune>
         <kommune name="Fjaler">
            <byer/>
         </kommune>
         <kommune name="Gaular">
            <byer/>
         </kommune>
         <kommune name="Jølster">
            <byer/>
         </kommune>
         <kommune name="Førde">
            <byer/>
         </kommune>
         <kommune name="Naustdal">
            <byer/>
         </kommune>
         <kommune name="Bremanger">
            <byer/>
         </kommune>
         <kommune name="Vågsøy">
            <byer/>
         </kommune>
         <kommune name="Selje">
            <byer/>
         </kommune>
         <kommune name="Eid">
            <byer/>
         </kommune>
         <kommune name="Hornindal">
            <byer/>
         </kommune>
         <kommune name="Gloppen">
            <byer/>
         </kommune>
         <kommune name="Stryn">
            <byer/>
         </kommune>
      </kommuner>
   </fylker>
   <fylker>
      <fylkesnavn>Møre og Romsdal</fylkesnavn>
      <kommuner>
         <kommune name="Molde">
            <byer/>
         </kommune>
         <kommune name="Kristiansund">
            <byer/>
         </kommune>
         <kommune name="Ålesund">
            <byer/>
         </kommune>
         <kommune name="Vanylven">
            <byer/>
         </kommune>
         <kommune name="Sande">
            <byer/>
         </kommune>
         <kommune name="Herøy">
            <byer/>
         </kommune>
         <kommune name="Ulstein">
            <byer/>
         </kommune>
         <kommune name="Hareid">
            <byer/>
         </kommune>
         <kommune name="Volda">
            <byer/>
         </kommune>
         <kommune name="Ørsta">
            <byer/>
         </kommune>
         <kommune name="Ørskog">
            <byer/>
         </kommune>
         <kommune name="Norddal">
            <byer/>
         </kommune>
         <kommune name="Stranda">
            <byer/>
         </kommune>
         <kommune name="Stordal">
            <byer/>
         </kommune>
         <kommune name="Sykkylven">
            <byer/>
         </kommune>
         <kommune name="Skodje">
            <byer/>
         </kommune>
         <kommune name="Sula">
            <byer/>
         </kommune>
         <kommune name="Giske">
            <byer/>
         </kommune>
         <kommune name="Haram">
            <byer/>
         </kommune>
         <kommune name="Vestnes">
            <byer/>
         </kommune>
         <kommune name="Rauma">
            <byer/>
         </kommune>
         <kommune name="Nesset">
            <byer/>
         </kommune>
         <kommune name="Midsund">
            <byer/>
         </kommune>
         <kommune name="Sandøy">
            <byer/>
         </kommune>
         <kommune name="Aukra">
            <byer/>
         </kommune>
         <kommune name="Fræna">
            <byer/>
         </kommune>
         <kommune name="Eide">
            <byer/>
         </kommune>
         <kommune name="Averøy">
            <byer/>
         </kommune>
         <kommune name="Frei">
            <byer/>
         </kommune>
         <kommune name="Gjemnes">
            <byer/>
         </kommune>
         <kommune name="Tingvoll">
            <byer/>
         </kommune>
         <kommune name="Sunndal">
            <byer/>
         </kommune>
         <kommune name="Surnadal">
            <byer/>
         </kommune>
         <kommune name="Rindal">
            <byer/>
         </kommune>
         <kommune name="Aure">
            <byer/>
         </kommune>
         <kommune name="Halsa">
            <byer/>
         </kommune>
         <kommune name="Tustna">
            <byer/>
         </kommune>
         <kommune name="Smøla">
            <byer/>
         </kommune>
      </kommuner>
   </fylker>
   <fylker>
      <fylkesnavn>Sør-Trøndelag</fylkesnavn>
      <kommuner>
         <kommune name="Trondheim">
            <byer>
               <by>Trondheim</by>
            </byer>
         </kommune>
         <kommune name="Hemne">
            <byer/>
         </kommune>
         <kommune name="Snillfjord">
            <byer/>
         </kommune>
         <kommune name="Hitra">
            <byer/>
         </kommune>
         <kommune name="Frøya">
            <byer/>
         </kommune>
         <kommune name="Ørland">
            <byer/>
         </kommune>
         <kommune name="Agdenes">
            <byer/>
         </kommune>
         <kommune name="Rissa">
            <byer/>
         </kommune>
         <kommune name="Bjugn">
            <byer/>
         </kommune>
         <kommune name="Åfjord">
            <byer/>
         </kommune>
         <kommune name="Roan">
            <byer/>
         </kommune>
         <kommune name="Osen">
            <byer/>
         </kommune>
         <kommune name="Oppdal">
            <byer/>
         </kommune>
         <kommune name="Rennebu">
            <byer/>
         </kommune>
         <kommune name="Meldal">
            <byer/>
         </kommune>
         <kommune name="Orkdal">
            <byer/>
         </kommune>
         <kommune name="Røros">
            <byer/>
         </kommune>
         <kommune name="Holtålen">
            <byer/>
         </kommune>
         <kommune name="Midtre Gauldal">
            <byer/>
         </kommune>
         <kommune name="Melhus">
            <byer/>
         </kommune>
         <kommune name="Skaun">
            <byer/>
         </kommune>
         <kommune name="Klæbu">
            <byer/>
         </kommune>
         <kommune name="Malvik">
            <byer/>
         </kommune>
         <kommune name="Selbu">
            <byer/>
         </kommune>
         <kommune name="Tydal">
            <byer/>
         </kommune>
      </kommuner>
   </fylker>
   <fylker>
      <fylkesnavn>Nord-Trøndelag</fylkesnavn>
      <kommuner>
         <kommune name="Steinkjer">
            <byer/>
         </kommune>
         <kommune name="Namsos">
            <byer/>
         </kommune>
         <kommune name="Meråker">
            <byer/>
         </kommune>
         <kommune name="Stjørdal">
            <byer/>
         </kommune>
         <kommune name="Frosta">
            <byer/>
         </kommune>
         <kommune name="Leksvik">
            <byer/>
         </kommune>
         <kommune name="Levanger">
            <byer/>
         </kommune>
         <kommune name="Verdal">
            <byer/>
         </kommune>
         <kommune name="Mosvik">
            <byer/>
         </kommune>
         <kommune name="Verran">
            <byer/>
         </kommune>
         <kommune name="Namdalseid">
            <byer/>
         </kommune>
         <kommune name="Inderøy">
            <byer/>
         </kommune>
         <kommune name="Snåsa">
            <byer/>
         </kommune>
         <kommune name="Lierne">
            <byer/>
         </kommune>
         <kommune name="Røyrvik">
            <byer/>
         </kommune>
         <kommune name="Namsskogan">
            <byer/>
         </kommune>
         <kommune name="Grong">
            <byer/>
         </kommune>
         <kommune name="Høylandet">
            <byer/>
         </kommune>
         <kommune name="Overhalla">
            <byer/>
         </kommune>
         <kommune name="Fosnes">
            <byer/>
         </kommune>
         <kommune name="Flatanger">
            <byer/>
         </kommune>
         <kommune name="Vikna">
            <byer/>
         </kommune>
         <kommune name="Nærøy">
            <byer/>
         </kommune>
         <kommune name="Leka">
            <byer/>
         </kommune>
      </kommuner>
   </fylker>
   <fylker>
      <fylkesnavn>Nordland</fylkesnavn>
      <kommuner>
         <kommune name="Bodø">
            <byer>
               <by>Bodø</by>
            </byer>
         </kommune>
         <kommune name="Narvik">
            <byer/>
         </kommune>
         <kommune name="Bindal">
            <byer/>
         </kommune>
         <kommune name="Sømna">
            <byer/>
         </kommune>
         <kommune name="Brønnøy">
            <byer>
               <by>Brønnøysund</by>
            </byer>
         </kommune>
         <kommune name="Vega">
            <byer/>
         </kommune>
         <kommune name="Vevelstad">
            <byer/>
         </kommune>
         <kommune name="Herøy">
            <byer/>
         </kommune>
         <kommune name="Alstahaug">
            <byer/>
         </kommune>
         <kommune name="Leirfjord">
            <byer/>
         </kommune>
         <kommune name="Vefsn">
            <byer/>
         </kommune>
         <kommune name="Grane">
            <byer/>
         </kommune>
         <kommune name="Hattfjelldal">
            <byer/>
         </kommune>
         <kommune name="Dønna">
            <byer/>
         </kommune>
         <kommune name="Nesna">
            <byer/>
         </kommune>
         <kommune name="Hemnes">
            <byer/>
         </kommune>
         <kommune name="Rana">
            <byer/>
         </kommune>
         <kommune name="Lurøy">
            <byer/>
         </kommune>
         <kommune name="Træna">
            <byer/>
         </kommune>
         <kommune name="Rødøy">
            <byer/>
         </kommune>
         <kommune name="Meløy">
            <byer/>
         </kommune>
         <kommune name="Gildeskål">
            <byer/>
         </kommune>
         <kommune name="Beiarn">
            <byer/>
         </kommune>
         <kommune name="Saltdal">
            <byer/>
         </kommune>
         <kommune name="Fauske">
            <byer/>
         </kommune>
         <kommune name="Skjerstad">
            <byer/>
         </kommune>
         <kommune name="Sørfold">
            <byer/>
         </kommune>
         <kommune name="Steigen">
            <byer/>
         </kommune>
         <kommune name="Hamarøy">
            <byer/>
         </kommune>
         <kommune name="Tysfjord">
            <byer/>
         </kommune>
         <kommune name="Lødingen">
            <byer/>
         </kommune>
         <kommune name="Tjeldsund">
            <byer/>
         </kommune>
         <kommune name="Evenes">
            <byer/>
         </kommune>
         <kommune name="Ballangen">
            <byer/>
         </kommune>
         <kommune name="Røst">
            <byer/>
         </kommune>
         <kommune name="Værøy">
            <byer/>
         </kommune>
         <kommune name="Flakstad">
            <byer/>
         </kommune>
         <kommune name="Vestvågøy">
            <byer/>
         </kommune>
         <kommune name="Vågan">
            <byer/>
         </kommune>
         <kommune name="Bø">
            <byer/>
         </kommune>
         <kommune name="Hadsel">
            <byer/>
         </kommune>
         <kommune name="Øksnes">
            <byer/>
         </kommune>
         <kommune name="Sortland">
            <byer/>
         </kommune>
         <kommune name="Andøy">
            <byer/>
         </kommune>
         <kommune name="Moskenes">
            <byer/>
         </kommune>
      </kommuner>
   </fylker>
   <fylker>
      <fylkesnavn>Troms</fylkesnavn>
      <kommuner>
         <kommune name="Harstad">
            <byer/>
         </kommune>
         <kommune name="Tromsø">
            <byer>
               <by>Tromsø</by>
            </byer>
         </kommune>
         <kommune name="Kvæfjord">
            <byer/>
         </kommune>
         <kommune name="Skånland">
            <byer/>
         </kommune>
         <kommune name="Bjarkøy">
            <byer/>
         </kommune>
         <kommune name="Ibestad">
            <byer/>
         </kommune>
         <kommune name="Gratangen">
            <byer/>
         </kommune>
         <kommune name="Lavangen">
            <byer/>
         </kommune>
         <kommune name="Bardu">
            <byer/>
         </kommune>
         <kommune name="Salangen">
            <byer/>
         </kommune>
         <kommune name="Sørreisa">
            <byer/>
         </kommune>
         <kommune name="Målselv">
            <byer/>
         </kommune>
         <kommune name="Dyrøy">
            <byer/>
         </kommune>
         <kommune name="Tranøy">
            <byer/>
         </kommune>
         <kommune name="Torsken">
            <byer/>
         </kommune>
         <kommune name="Berg">
            <byer/>
         </kommune>
         <kommune name="Lenvik">
            <byer/>
         </kommune>
         <kommune name="Balsfjord">
            <byer/>
         </kommune>
         <kommune name="Karlsøy">
            <byer/>
         </kommune>
         <kommune name="Lyngen">
            <byer/>
         </kommune>
         <kommune name="Storfjord">
            <byer/>
         </kommune>
         <kommune name="Kåfjord">
            <byer/>
         </kommune>
         <kommune name="Skjervøy">
            <byer/>
         </kommune>
         <kommune name="Nordreisa">
            <byer/>
         </kommune>
         <kommune name="Kvænangen">
            <byer/>
         </kommune>
      </kommuner>
   </fylker>
   <fylker>
      <fylkesnavn>Finnmark</fylkesnavn>
      <kommuner>
         <kommune name="Vardø">
            <byer>
               <by>Vardø</by>
            </byer>
         </kommune>
         <kommune name="Vadsø">
            <byer>
               <by>Vadsø</by>
            </byer>
         </kommune>
         <kommune name="Hammerfest">
            <byer>
               <by>Hammerfest</by>
            </byer>
         </kommune>
         <kommune name="Kautokeino">
            <byer/>
         </kommune>
         <kommune name="Alta">
            <byer>
               <by>Alta</by>
            </byer>
         </kommune>
         <kommune name="Loppa">
            <byer/>
         </kommune>
         <kommune name="Hasvik">
            <byer/>
         </kommune>
         <kommune name="Kvalsund">
            <byer/>
         </kommune>
         <kommune name="Måsøy">
            <byer/>
         </kommune>
         <kommune name="Nordkapp">
            <byer/>
         </kommune>
         <kommune name="Porsanger">
            <byer/>
         </kommune>
         <kommune name="Karasjok">
            <byer/>
         </kommune>
         <kommune name="Lebesby">
            <byer/>
         </kommune>
         <kommune name="Gamvik">
            <byer/>
         </kommune>
         <kommune name="Berlevåg">
            <byer/>
         </kommune>
         <kommune name="Tana">
            <byer/>
         </kommune>
         <kommune name="Nesseby">
            <byer/>
         </kommune>
         <kommune name="Båtsfjord">
            <byer/>
         </kommune>
         <kommune name="Sør-Varanger">
            <byer/>
         </kommune>
      </kommuner>
   </fylker>
</kartdata>

I love podcasts!

Can’t help it, but podcasts are just awesome. The best ones give me laughs, information and in some cases the latest. The ones I am listening to are:

  • Boagworld
    ‘The podcast for those who design, develop and running websites on a daily basis…’
    Paul Boag and Marcus Lillington is just very nice to listen to giving valuable information to those of us who fit the above slogan-line.
    It’s for a reason why I am listening this first. It is really a good podcast, and at best you really learn a thing or two.
  • The Linux Action Show
    Chris and Bryan uses their knowledge on Linux in this show. Both working in the IT industry – in different departments (Bryan is a developer, while Chris is a system operator) – and so you get the best of both sides.
    The presenters uses their knowlegde to either lash out against the community, or they applaud the same…
  • The Freelance Switch (Ended)
    This one gave me valuable insight in how to keep customers (not that I have many), getting new ones and other valuable tips.
    Search it out and listen to the archive.

At the moment I am looking for a Podcast that can give me more valuable information on Google Analytics (or web analytics in general). I haven’t found one yet.

Which podcasts do you listen to, and why?

Working with Linux

Sometimes I do wonder why I am not running (or buying) a computer with the standard OS – in my case that would be Windows 7. I bought this computer without any OS and installed Ubuntu 10.04 (LTS), and I am still running this version although it does give me some headaches…

I have been running Ubuntu Linux as my primary OS – installing it not as a virutal machine, but on the “metal” (as some say). There are ups and downs.
These are the downs:

  • In some cases you have to strugle getting the right drivers.
    I have experienced not getting wireless not working – especially newer external cards (3com for instance)
    And on this Dell E4310 the screen drivers does not work so the screen is flickering unless I am downgrading to an older Kernel.
  • In some cases you cannot install the same software as you can in Windows (like for instance the driver for the mobile card)
    Vodaphone provides a software for windows, and has also created a linux version. How ever the Linux version is not that stable, and the development stagnated…
  • You experience hassle with software that should work so much better out of the box.
    And now I am thinking of Libre Office where the dictionary (English even!) does not work…
    In earlier version of Open Office I have experienced that the writer gets slower and slower…
  • And of course – you don’t have “standard” software
    And then of course I am thinking of the lack of Photoshop, Illustrator and InDesign – which I have blogged about earlier.

I also have a feeling that the general development of Linux is stagnating as well. There was some interest in the OS for a while, but now I feel that the pendulum is going the other way. I also see this in Norway where businesses who has been testing/using Linux and using Open Office and is now moving back to Windows.
Why some may ask.

Reason: The lack of third party software, developers and more. What you have lots of in the Windows world – consultants that can help you with anything related to the software you are currently using.
At least here in Norway there aren’t that many consultants that can help you out with everything – as far as I can see. If there were those who were using Open Office wouldn’t move back to the Windows world.

So why am I still using Linux?
Sometimes I don’t know, and sometimes I do. The main reason is that I am a PHP developer (besides job where I am developing in C#.Net and VB.Net, doing XSLT and XML stuff too), and with the Apache, mySQL and PHP running on native Linux I have the LAMP stack at hand.
Also most servers are Linux and so it is nice to know ways around them.
A Linux desktop is faster than the Windows machine I am using at work – which has more or less the same spec as the laptop I am using.
… and it is safer, although you should run Virus and other sercurity software – especially rootkit checks.
… and you don’t have IE on your computer…

So Why Am I Still Using Linux?
I believe it is because I most of the day is working on a Windows machine. I had a periode where I had to work solely in Linux and that is where you see the problems Linux gives you. But then again, how often in life do you have the chance to give something back, report problems so that the software you are using gets better.
And it can change faster than on the other software platforms. You are not controlled by a company that says ‘Because you are a small country or a small company, you have to wait for the service update that comes in 12 months’ (that is if you are lucky).
In the Linux world you can have someone out there who has the same problem, and the skill to fix it, and the problem could be solved with co-operation.
That’s probably why I am staying with Linux, which is the ups…

Version Control System

Currently I am using Subversion but after some synchronizing “problems” and a override-commit took ages to complete, I started looking around for other Version Control Systems.
There are some, and below are some of those that I’ll be looking into before deciding to either stick with Subversion (SVN) or move on to something else:

Concurrent Versions System (better known as CVS)
CVS is a version control system, an important component of Source Configuration Management (SCM). Using it, you can record the history of sources files, and documents. It fills a similar role to the free software RCS, PRCS, and Aegis packages.

Subversion
Subversion is an open source version control system. Founded in 2000 by CollabNet, Inc., the Subversion project and software have seen incredible success over the past decade. Subversion has enjoyed and continues to enjoy widespread adoption in both the open source arena and the corporate world.
Subversion is developed as a project of the Apache Software Foundation, and as such is part of a rich community of developers and users. We’re always in need of individuals with a wide range of skills, and we invite you to participate in the development of Apache Subversion.

GIT
Git is a free & open source, distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
Every Git clone is a full-fledged repository with complete history and full revision tracking capabilities, not dependent on network access or a central server. Branching and merging are fast and easy to do.

Mercurial
Mercurial offers you the power and speed to efficiently handle projects of any size and kind. Every clone contains the whole project history, so committing, branching, tagging and merging are local, fast and convenient. You can use a multitude of workflows and easily enhance its functionality with extensions.

Bazaar
Bazaar is a version control system that helps you track project history over time and to collaborate easily with others. Whether you’re a single developer, a co-located team or a community of developers scattered across the world, Bazaar scales and adapts to meet your needs. Part of the GNU Project, Bazaar is free software sponsored by Canonical. For a closer look, see ten reasons to switch to Bazaar.

My needs
I am using Eclipse to code PHP web applications. This work is done on a laptop and I upload to a web server changes, new features or a new application. Because I am getting clients on some of the applications it is important to have changes stored somewhere, and also to have a Source code Version System (or a Version Control System (VCS).
I also travel mostly by bus and because of the length of the commute (70-80 minutes) I get quite a lot of work done on the road. Therefor it would be nice to commit even though you don’t have Internet access. It’s not a must-have feature, but rather a nice-to-have feature.
I also have an Windows XP laptop available, and so a Windows client/server is also a nice-to-have feature.

So my needs are:

  • The VCS must have an eclipse plugin
    (This is my most important feature at the moment.)
  • Must be easy and understandable
  • Must be used by more than one developer (It is always good practice to thing expansion ahead rather than afterwards)
  • There must be a Linux, Apple and Windows version
  • I do some of my work commuting (I have a 70-80 minutes bus ride to/from work/clients). So Offline committing is a nice feature
  • Documentation. The VCS must have good documentation so that it is easy to start using it

I have learned that there are at least two types of Version Control Systems:

  • Distributed revision control
  • Revision control

Distributed revision control (DRC)
This VCS type keeps track of software revisions and allows many developers to work on a given project without necessarily being connected to a common network. Meaning: You have a repository locally on your computer.
GIT, Mercurial and Bazaar are typical examples or a DRC

Revision control (RC)
Revision control, also known as version control or source control (and an aspect of software configuration management or SCM), is the management of changes to documents, programs, and other information stored as computer files. It is most commonly used in software development, where a team of people may change the same files.
Subversion, Source Safe (Discontinued, only severe bugs are fixed – according to Wikipedia) and CVS are examples of a RC.

So my safe bet is to look at GIT, Mercurial and Bazaar.

Bazaar:
Created by Canonical, and so I am quite safe here as my laptop is running Ubuntu. But since I am also having a XP-machine available I need windows support. Bazaar has both covered.
Eclipse IDE plugin: Yes
So Bazaar seems like a nice option. I need to test this VCS before deciding of course.
Bazaar is being actively developed by a large community which is nice.

GIT
Created by Linus Thorvalds and used in projects like the linux kernel, Perl, Android, Eclipse and more.
Since GIT is being used by Eclipse there is of course an Eclipse plugin so that you can commit using GIT.
I have read that the learning curve for using GIT is quite steep.
GIT is being actively developed by a large community which is nice.

Mercurial
Created by Matt Mackall and according to the always reliable wikipedia, Mackall started developing Mercurial just days after Thorvalds started developing his GIT.
There is a Eclipse plugin for Mercurial, although this is not stated on the projects website.
Mercurial is being actively developed by a large community which is nice.

So currently my adventure towards a life with a new VCS starts here. And I will start with Bazaar.
Installing:
Quite easy. You either use apt-get or as I did Synaptic Package Manager. Remember that it is called bzr in ubuntu packages. When you choose bazaar in Synaptic it will automatically add bzrtools for you. I also added bzr-docs to get the documentation.

Migrating from Subversion:
Firstly, there are more than one way to migrate from SVN to BZR. Secondly, the information on how to migrate is spread across a few websites.

  1. The first way to migrate I found was to use the svnadmin dump command. This creates a dump file that I then had to copy from the server to the laptop. That took ages.
    The command you use is : svnadmin dump /path/to/svn-repo > filetocontainsvnrepo
    You can also use name-of-svn-repo instead of /path/to/svn-repo
    The filetocontainsvnrepo can be / will be quite large, so have a quite empty disk to save your work on.
    Also: Have plenty of time at your hand (or start this work late at night and hope/pray for non surprising messages when you wake up and check output of dump). The amount of time the dump will take of course depends on how many revisions there are in your repository. I had around 100 revisions. This of course the way subversion works – even though you have 1000 projects in the SVN-repository, they all use the same “counter”. Meaning: If you commit changes in Project X this will become revision 1, then you commit changes to Project Y which is stored in the repository, this will become revision 2 and so on.
  2. While copying I came over the bzr svn-import plugin (apt-get install bzr-svn) which worked much nicer.
    With the bzr svn-import command you connect like you would with the svn+ssh command (on my system that is), or the command you normally use when you commit or do other changes to the repository.

Documentation
While dumping the SVN repository I decided to use the time wisely and looked at the documentation for Bazaar. Canonical provides two versions of the documentation for beginners: The five minute mini tutorial and the Bazaar Quick start Guide.
I decided to read the five minutes mini tutorial.
First I created a user, and since my name contains Norwegian characters I was a bit anxious to see how BZR handled those. No worries there.
This mini tutorial gives you an easy understanding on how to set up a repository and committing. It also teaches you how to commit to a central repository. I wanted to dig further – like to see how BZR suggest you set up a repository (Like they do in the SVN documentation). I found this chapter which tells you how to set up a repository, and so I will go for the preferred way of setting up a repository:
project1/ # A repository for project1
+- trunk/ # The mainline of development of project1
+- branches/ # A container directory
+- foo/ # Branch for developing feature foo of project1

One thing that didn’t come clear to me was:

  • Should I enter the directory where the source code is now (as in – the local website on the local web server)
  • or should I create a directory somewhere else on the laptop hard disk?

And so I had to find out. First I read the FAQ. No information there. Then I checked https://answers.launchpad.net/bzr/ to see if there could be anyone as dumb as me. So I found out that you don’t really do what you do in SVN.
What you do is to go to the directory where you have your project – like – on my system I have created a Project folder called www and below it I have for instance www.example.com. In www.example.com I have created log and www-directory.
So I go into this directory and type
bzr init
bzr add
bzr commit -m “Initial import”
And whoopsie all your files and directories in that directory is version controlled. Pretty neat, eh?

So now I needed to add BZR support in Eclipse:
Adding BZR-support is quite easy. All you do is to follow this link: http://wiki.bazaar.canonical.com/BzrEclipse/Installation

2011

I’ve been having so much to do lately that this blog has slowed down. I hope that I can blog a bit in 2011 to, but most importantly is to keep having enough to do.

At the moment I am having a great time with Smarty which is a template language for PHP. It’s just plain awesome. I am also teaching myself jQuery. So now I have a book on the latter (jQuery – Novice to Ninja) and it seems really great. I’ve picked up a trick or two.

At work I am polishing my Regex knowledge and xPath knowlegde. I am involved in SportsML and other XML technologies/formats used and/or developed by IPTC. I hope I can blog a bit about that. Especially SportsML.

Recently I have also had the pleasure of learning the hard way the proper way of indexing mySQL-databaser and the importance to do so. As an example: I have a client that is using some PHP/mySQL-stuff that I have done. Before indexing the SQL-queries took a while. After indexing their service has become quite a lot snappier and they are really happy about the “upgrade”.

So for 2011:
PHP, mySQL, Smarty, jQuery, C#/Mono and SportsML will be my main topics.