Older blog entries for star (starting at number 3)

Well I figured I would post something. For those people who have ever been by my desk, which is not most of you, I have crazy colours everywhere that give people headaches.

Now I have made it easy so you can do this yourself! And now it doesn't require getting any crazy code to compile that didn't ship with your favourite OS. You too can use xterm-setter and get the crazy colours you need. Sorry it only works for xterms, not gnome-terminal, kterm, zvt, MacOS term or any other crazy or much improved terminal. If you want to read more about it you can go here but it wont' really help.

Have fun, and bond to the colours!!!

Ok it took me long enough to get this here, but I did add some more information about what you need to get nautilus compiled to the HACKING file. I know it is a lot of stuff to get out of CVS, but within two months it will be much less and will be fairly simple. I have started the project to minimize the number packages that need to come that way, but it will take some time, as I have other things to worry about. I also will need to coordinate a release of some modules as there are some bug fixes that nautilus needs from packages like ORBit.

Build Stuff

OK, todays topic on build stuff is what to do about packages!

One interesting problem with open source development is you may have to switch back and forth between three different ways of recieving code fairly frequently. The three majore forms are.

  • CVS
  • Release Tar Balls
  • System Package
Now what I want is to create sensible meta data for modules. We can call them module objects, that have all the properties you will need when refering to a module. Most likely the functions you will want are build(), get_code(), clean(), install(), remove_code(), update_code(), clean(), get_state(), configure().

So the properties of a module object would be.

  • Name
      Simply a way to reference the module.
  • Version
      A number to reference what release this
  • Type
      CVS
        name
          the name in the repository
        location
          :pserver:rslomkow@cvs.gnome.org:/cvs/gnome
        branch
      Release Tar Ball
        name
          basename of tarball
        location
          ftp://ftp.gnome.org/pub/foo/bar/mod-version.tgz
      System Package
        name
          system package name
        location
          ftp://ftp.gnome.org/pub/foo/bar/mod-version.tgz

    • Build Prefixes
        arguments to the configure command
    • Setup Script
        a set of commands to prepare a build area. That are specific to the module.

      At the moment I don't warrent the confusion of additional logic in this object to handle how you build, I am just going to leave that to the configure() and build().

      Now the tricky part is how to allow the user to be able to override parts of the object, in a simple config file. Which brings up the issue, should I create as of yet a new configuration file format? Or should I make it easy for it to be interpreted by my parser. I know all the user interface guys say make it easy for the user! But If I make a new format then they have to learn somthing new! Most people knkow how to write basic perl these days. Also if I make it easily machine interperatable then extending it may be easier.

      Human Interest

      It is amazing how small the software world is. Just a couple years ago, everything was made by mysterious people elsewhere, now I have met the people who wrote most of the software I use. And it seems the web just extends and fills in the gaps. You take a new job and meet another 20.

  • Well Today I finally got nautilus compiled on my home debian machine. Yay!!! It turns out that if you use and old version of libpng such as 0.96, everything (imlib, gnome-libs, nautilus) will compile fine, but as soon as you run it you will get SIGSEV in __morecore in libc.so.6. It will drive you batty and won't be able to run nautilus. I am not sure where the correct place to check for the version of libpng is. libpng 1.0.3 and higher work fine. (debian package libpng2 and libpng2-dev ) will give you what you need. So I now have a full configuration for what you need to build gnome and nautilus on Debian. Perhaps I will post the needed packages a little later.

    I am still working on my portable development tools. Currently I am focusing on things that work for both a bourne derived shell and perl. I am doing most things in perl, but it makes sense to have hooks so korn, bourne, bash, and zsh users can have their environment setup the same way the build is.

    I have some working prototypes, all ready packaged up to be used as perl libraries that I use to do gnome builds. I will add some more functionality soon.

  • incremental build of multi-package systems
  • notion of a purge build, that will wipe out the destination directories and the source directories
  • a generalized notion of levels of rebuild

    I also wrote a static route startup script using a config file. It is designed for Debian, since they seem to still be lacking this, at least with potato Debian has a sensible networking script. If you need static routes for your machine you can grab my stuff here. It just uses a very basic config file and will add and remove the routes with a stop and start.

  • Yay today I did my first commit to Nautilus, OK it was someone elses code, but I did commit something.

    Right now I am going over some various idea for how to deal with developer environments.

  • Do not store data in the environment unless you have to.
  • Keep configuration information seperate from logic, or even seperate from a particular programming language.
  • Use a sensible programming language. I am choosing perl despite some complaints that it is not sensible.
  • Keep it easy, yet keep it simple.

    Configuration Information You always need to have value pairs, X=Y, this is simple and generic and you will need it for any programming or configuration. It makes the most sense to store this in a file, that you have other scripts/application parse to gain the configuration. This way you do not have to hard configs into your application (other than the location of the configs) and it makes it easily extensible, so you could have an IDE load the configs, a series of installation scripts, and possibly even and environment. This also bennifits maintainability greatly, if you only have to change setting once! Not in 15 million files.

    I am currently working on some tools so you can have a perl modules or a bourne derived shell extract settings from the same file and then set those settings for further use.

    sensible programming language Maintainability, Maintainability, Maintainablity. Tools do not have heavy performance requirements. They need to be changed and adapted frequently, for integration with other tools, other networks, new releases of OS's. They need to be able to do fancy text processing and deal with meta-data. Your tools will also need to call other tools at the OS level. Continual change, and text processing, and calling external utilities makes scripting languages ideal for this.

    Generally builds have enough complexity and logic, that you want a language with decent referencing, library abilities, and scopeing.

    Shell is a little weak, as is tcl. Perl I chose because, way more people know it than others (this is important for maintainability), it is easy to learn (if you are familiar with programming in any other language - I would never reccomend perl as a first language), perl integrates very nicely with calling outside programs, and perl has LOTS of usefull ready made modules. The problem with perl is that it can be difficult to maintain your code, the language discourges you from writing clean code, but it does not require you to write unreadable code.

    keep it easy keep it simple The idea for tools is to make developers more effective, and to allow a new developer to become effective quickly. At the same time, it is not worth while to reduce the number of commands if it requires additonal conceptioual complexity. DO NOT make context senstive setup commands. This saves typing but does not make it easier for people to become familiar with what is going on.

    Some other ideas are that their should be one command to do.

  • initialize an environment from scratch.
      This just saves time. New developer comes in, gets new OS, runs one command gets all the required tools and setup, should download the packages needed, should setup the filsystem, give the developer the localizations they need.
  • update tools and source.
      Things change, it happens. Developer should have one command to hit a centralized spot, and find out what changed and be up to date.
  • build and release everything.
      This is really needed to verify that a setup is correct and that the code that was there doesn't break anything. It needs to be done, it should do all related components.
  • initialize development environment to work on a project.
      In a command line world this is one command, in a GUI world this is a button or open the IDE config file, but there should be one simple way to grab all the settings for a project. These need to be maintained regularly.
  • New Advogato Features

    New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

    Keep up with the latest Advogato features by reading the Advogato status blog.

    If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!