liw.fi →
RecentChanges
Recent changes to this wiki:
diff --git a/sidebar.mdwn b/sidebar.mdwn index b929106..48e137d 100644 --- a/sidebar.mdwn +++ b/sidebar.mdwn @@ -9,6 +9,7 @@ * [Dimbola](http://dimbola.org/) * [Free Thursday](http://free-thursday.pieni.net/) * [Kalastuskievari](http://kalastuskievari.fi/) +* [Koha](http://koha-community.org/) <hr />
diff --git a/links.mdwn b/links.mdwn index 26839e0..80a5fd7 100644 --- a/links.mdwn +++ b/links.mdwn @@ -44,6 +44,7 @@ incarnation of that web page. [NZPUG](http://nzpug.org/) [Wellington.geek.nz](http://wellington.geek.nz/) [Thursday night curry](http://wellington.thursdaynightcurry.com/) +[Python Edinburgh](http://www.pythonedinburgh.org/) **Upstreams:** [Sound Converter](http://soundconverter.berlios.de/)
diff --git a/links.mdwn b/links.mdwn index ab2e6f5..26839e0 100644 --- a/links.mdwn +++ b/links.mdwn @@ -32,6 +32,8 @@ incarnation of that web page. [lars@catalyst](http://qa.debian.org/developer.php?login=lars%40catalyst.net.nz&comaint=yes) [Freedom Box](http://wiki.debian.org/FreedomBox) [Freedom Box at Alioth](https://alioth.debian.org/projects/freedombox/) +[DEP5](http://dep.debian.net/deps/dep5) +[DEP5 wiki](http://wiki.debian.org/Proposals/CopyrightFormat) **Linux:** [LWN](http://lwn.net/)
diff --git a/sidebar.mdwn b/sidebar.mdwn index 325fccd..b929106 100644 --- a/sidebar.mdwn +++ b/sidebar.mdwn @@ -5,6 +5,7 @@ #### **See also** * [[My CV|cv]] +* [Branchable](http://www.branchable.com/) * [Dimbola](http://dimbola.org/) * [Free Thursday](http://free-thursday.pieni.net/) * [Kalastuskievari](http://kalastuskievari.fi/)
diff --git a/swimming-upstream.mdwn b/swimming-upstream.mdwn index 4982273..fdd1cdf 100644 --- a/swimming-upstream.mdwn +++ b/swimming-upstream.mdwn @@ -1,9 +1,6 @@ [[!meta title="Swimming upstream"]] [[!tag talk]] -Swimming upstream: Challenges in packaging Koha for Debian -========================================================== - This is the text of the talk I gave at Debconf10, 2010-08-07. See also:
diff --git a/cv.mdwn b/cv.mdwn
index cdb39ed..e8de605 100644
--- a/cv.mdwn
+++ b/cv.mdwn
@@ -124,7 +124,8 @@ use, with AutoCAD.
to about 1997. Wrote the
[Linux System Administrators' Guide](http://tldp.org/guides.html),
since taken over by others.
- - [Debian](http://www.debian.org/) development 1996-2009. Now retired.
+ - [Debian](http://www.debian.org/) development 1995- (with two periods
+ of retirement).
- [Ubuntu](http://www.ubuntu.com/) development 2007-2009. Now retired.
* Photography. I've been an amateur photographer since 2001, but do not
currently publish my pictures anywhere.
diff --git a/swimming-upstream.mdwn b/swimming-upstream.mdwn index 48e03ea..4982273 100644 --- a/swimming-upstream.mdwn +++ b/swimming-upstream.mdwn @@ -7,8 +7,8 @@ Swimming upstream: Challenges in packaging Koha for Debian This is the text of the talk I gave at Debconf10, 2010-08-07. See also: -* <http://wiki.debian.org/UpstreamGuide> -* [[slides.pdf]] +* <http://wiki.debian.org/UpstreamGuide> -- Debian wiki page for this +* <http://files.liw.fi/swimming-upstream.pdf> -- slides (5.5 MiB) ---
diff --git a/swimming-upstream.mdwn b/swimming-upstream.mdwn new file mode 100644 index 0000000..48e03ea --- /dev/null +++ b/swimming-upstream.mdwn @@ -0,0 +1,318 @@ +[[!meta title="Swimming upstream"]] +[[!tag talk]] + +Swimming upstream: Challenges in packaging Koha for Debian +========================================================== + +This is the text of the talk I gave at Debconf10, 2010-08-07. +See also: + +* <http://wiki.debian.org/UpstreamGuide> +* [[slides.pdf]] + +--- + +I was a Debian developer for many years. +Last year I decided to leave Debian, +and see what else there is in the world. +This is the story of what happened. + +In short, I have become an upstream developer instead. +For three months earlier this year I worked on a project called Koha. +This talk is about what I've learned about Debian from an upstream point +of view, +and about upstream projects from a Debian point of view. + +I don't need to tell you about Debian. + +Koha is an integrated library management system. +That's the kind of library that has books in it. +Koha is used by many public and private libraries around the world. +It was originally developed in New Zealand, +and has been free software since the beginning. +Koha is now about ten years old, +consists of thousands of lines of perl code, +and is quite a mature product. + +I am going to use Koha as an example of an upstream project. +My talk is not just about Koha, +but about all kinds of upstream projects. + +The thing about building a Linux distribution like Debian is that it's +not just taking a bunch of upstream code and compiling that. +There's oh so much more to do. +All the software has to be configured and tweaked and patched to work together. + +Packaging an old, mature, somewhat crufty program like Koha for +Debian can be a bit of an undertaking. +Debian has decided to do many things in a particular way, +but so has Koha. +It's like two middle-aged people who've been single for decades falling +in love and moving in together. +They both want it, but both will need to adapt, +and both will need to give up some of their little quirks. + +In this case, the Koha upstream project wanted to have Debian packages +made for Koha. +Many of the Koha developers prefer Debian as the platform on which to +run Koha, but installation and upgrading from source was a sore point. +Not just of Koha itself, +but also of its dependencies. + +Koha is a web application, +and that means it will need to integrate with at least a web server +and a database engine. +It is written in Perl, +and relies on dozens of CPAN modules. + +The CPAN modules were the first stumbling block. +Not all of them were packaged for Debian. +In fact, dozens of them are missing from the Debian stable release. +Even if the module is there, it is usually too old for Koha. + +Luckily, most of the missing modules were in squeeze. +Five were missing. +What should an upstream do in this situation? +In the Koha case, +it was happily easy to make Debian packages for the missing CPAN modules, +so that's what I did. + +In general, it is probably not feasible for upstream to package +missing dependencies themselves. +It is also not sensible for upstreams to restrict themselves too much. +There are a lot of things outside of Debian that will be very helpful +for upstream development. +If upstream can make use of yet another CPAN module, +that can save them days, weeks, even years of coding. +This is code re-use at its best. + +* Lessons: + - upstream should avoid unpackaged dependencies, unless that's hard + - Debian should package everything so that upstream can + make use of the best tools for them + +I also joined the Debian pkg-perl team, +who were very helpful in getting the packages in good shape, +and kindly uploaded them into Debian. +This was important so that Koha would not have to provide and maintain +the packages outside of Debian. +Doing that would have been entirely possible, +but would have been more effort, +and would certainly have led to duplicated effort, +when other people did the same thing. +As proof of that, +for all five CPAN modules I packaged, +the popcon count became nonzero within the first day, +even though nothing in Debian depended on them. +People use CPAN a lot. + +* Lessons: + - CPAN makes it very easy to make Debian packages + - pkg-perl in Debian rocks (gregoa especially helped a lot) + +With those CPAN modules packaged, I was able to run the Koha test suite. +This gave much confidence that Koha would actually work once installed. + +The next step was to make sure it could talk to the web server and +the database engine. +Specifically, Apache and MySQL. + +At this point, it turned out that most of the hard questions had already +been discussed and solved within Debian. +Equally importantly, +they had been documented in the web-apps policy +and the database policy for Debian. +Before my Koha work, I had no experience with these Debian policies, +and I did not fully appreciate how helpful they are. + +The Debian policies, and the tools written to support the policies, +made it very easy to make a rudimentary Koha package that would +integrate with Apache and MySQL. + +* Lessons: + - upstream should have a test suite + - Debian Policy and sub-policies rock + - dbconfig-common: wow + - dh: wow + +Well, when I said it was really easy, I was simplifying things a bit. +There's a feature in Koha that made it a little bit more work than +should have been required. + +The Koha web application is divided into two parts: +a public interface for library customers, +and a private interface for library staff. +For no good reason at all, +Koha decided that these should be on different URLs. +In order to have a Koha package that worked out of the box I had to +use two different ports. +That's ugly, and not without problems. + +I expect Koha to fix that in the future. +It would be better if they did not require different URLs for the two sites, +and instead had a single site. + +This is an example of the kind of thing upstreams do when they don't +know what it means to build a distribution. +They make design decisions in the dark. +And the decisions make sense to them, +and probably work fine from their perspective. +The trick is to get them to see why Debian's point of view is right. + +* Lessons: + - upstreams will make design decisions that make sense for them, + but seem stupid for distros + - distros should work with upstreams to fix these things + +The next step was to make it possible to run multiple Koha instances +on the same host. +The Koha packaging work I was doing was funded by a New Zealand company, +Catalyst IT, +who will provide a hosted Koha solution with full freedom. +This is much easier if they don't need to set up a new server for each +customer. + +Here I ran into some upstream problems. +Koha comes with configuration file templates for Apache. +I needed to butcher, er, tweak these a lot, +to allow them to be easily adapted to multiple hosts. + +There were several other configuration files as well that needed tweaking. +The files were in a bunch of different syntaxes, since they were for +tools written by different projects. + +The result was a set of configuration file templates that are divorced +from what upstream actually provides. +When Koha makes changes to its own templates, +the templates in the Debian package will have to be adapted. +This is obviously an area that is likely to attract bugs. +The fix is to port my changes to the upstream files, +and I expect that to happen, +but did not want to make those changes while Koha was preparing a release. + +* Lessons: + - configuration is tricky (Diff truncated)
diff --git a/links.mdwn b/links.mdwn index 3b32188..ab2e6f5 100644 --- a/links.mdwn +++ b/links.mdwn @@ -31,6 +31,7 @@ incarnation of that web page. [pkg-perl](http://wiki.debian.org/Teams/DebianPerlGroup/) [lars@catalyst](http://qa.debian.org/developer.php?login=lars%40catalyst.net.nz&comaint=yes) [Freedom Box](http://wiki.debian.org/FreedomBox) +[Freedom Box at Alioth](https://alioth.debian.org/projects/freedombox/) **Linux:** [LWN](http://lwn.net/)
diff --git a/links.mdwn b/links.mdwn index 5245c2b..3b32188 100644 --- a/links.mdwn +++ b/links.mdwn @@ -30,6 +30,7 @@ incarnation of that web page. [KVM](http://wiki.debian.org/KVM) [pkg-perl](http://wiki.debian.org/Teams/DebianPerlGroup/) [lars@catalyst](http://qa.debian.org/developer.php?login=lars%40catalyst.net.nz&comaint=yes) +[Freedom Box](http://wiki.debian.org/FreedomBox) **Linux:** [LWN](http://lwn.net/)
diff --git a/rules.mdwn b/rules.mdwn index 2b0bf9b..3bd2c5a 100644 --- a/rules.mdwn +++ b/rules.mdwn @@ -15,3 +15,5 @@ Gibbs, yay. 9. Don't be late in telling you're late. 10. If you cannot automate it, make a checklist out of it. 11. Be careful what you reward, because you will get more of it. +12. Be careful what you measure, because you will optimize for that. +13. Don't debate with analogies.
diff --git a/links.mdwn b/links.mdwn index fec3588..5245c2b 100644 --- a/links.mdwn +++ b/links.mdwn @@ -87,7 +87,7 @@ incarnation of that web page. [Python+gobject](http://web.archive.org/web/20080214201849/http://www.sicem.biz/personal/lgs/docs/gobject-python/gobject-tutorial.html) [GNOME platform](http://library.gnome.org/devel/platform-overview/stable/) [C-faq](http://c-faq.com/top.html) -[K&R2 answers](http://users.powernet.co.uk/eton/kandr2/index.html) +[K&R2 answers](http://clc-wiki.net/wiki/K%26R2_solutions) [The C10K problem](http://www.kegel.com/c10k.html) [Portland Pattern Repository](http://c2.com/cgi/wiki) [Pentomino](http://yucs.org/~gnivasch/pentomino/)
diff --git a/links.mdwn b/links.mdwn index 429f8fb..fec3588 100644 --- a/links.mdwn +++ b/links.mdwn @@ -173,3 +173,4 @@ incarnation of that web page. [Pyramid Method](http://calnewport.com/blog/2009/06/03/the-pyramid-method-a-simple-strategy-for-becoming-exceptionally-good) [OnStartups Answers](http://answers.onstartups.com/) [Nerd handbook](http://www.randsinrepose.com/archives/2007/11/11/the_nerd_handbo.html) +[Openpgp key checks](https://we.riseup.net/riseuplabs+paow/openpgp-best-practices#openpgp-key-checks)
Added a comment: finddup
diff --git a/dupfiles/comment_1_2802aca091e4b19878aedb50c165dcc5._comment b/dupfiles/comment_1_2802aca091e4b19878aedb50c165dcc5._comment new file mode 100644 index 0000000..afe26a0 --- /dev/null +++ b/dupfiles/comment_1_2802aca091e4b19878aedb50c165dcc5._comment @@ -0,0 +1,15 @@ +[[!comment format=mdwn + username="https://getopenid.com/Tobu/" + subject="finddup" + date="2010-07-18T23:31:56Z" + content=""" +`finddup` is serving me well. It is in the `perforate` package. + +Typical use: + + finddup -l -i -d ~/a -d ~/b + +-l to link, -i to ignore perms, -d to list several directories. + +A tricky case is unifying inodes that already have multiple hardlinks. If you haven't found all the inodes and relink the file, you can actually end up using more space. +"""]]
diff --git a/obnam.mdwn b/obnam.mdwn new file mode 100644 index 0000000..339b6c4 --- /dev/null +++ b/obnam.mdwn @@ -0,0 +1,6 @@ +[[!meta title="Obnam"]] +[[!tag program]] + +Obnam is my backup application. +The official home page is <http://braawi.org/obnam/>. +This page exists here so that people who know Obnam is mine can easily find it.
diff --git a/release.mdwn b/release.mdwn index 2bf22c7..a1ffd32 100644 --- a/release.mdwn +++ b/release.mdwn @@ -15,3 +15,4 @@ 1. Tag the revision in version control. 1. Push version control. 1. Update bug tracker. Push it if it is distributed. +1. Announce on the relevant forums.
diff --git a/release.mdwn b/release.mdwn index 35094cd..2bf22c7 100644 --- a/release.mdwn +++ b/release.mdwn @@ -14,3 +14,4 @@ 1. Build and upload for other architectures too, if relevant. 1. Tag the revision in version control. 1. Push version control. +1. Update bug tracker. Push it if it is distributed.
diff --git a/links.mdwn b/links.mdwn index 21d14cf..429f8fb 100644 --- a/links.mdwn +++ b/links.mdwn @@ -36,7 +36,7 @@ incarnation of that web page. [decss](http://mjr.iki.fi/decss/) [Driver check](http://kmuto.jp/debian/hcl/) -**User/other groups:*** +**User/other groups:** [NZPUG](http://nzpug.org/) [Wellington.geek.nz](http://wellington.geek.nz/) [Thursday night curry](http://wellington.thursdaynightcurry.com/)
diff --git a/links.mdwn b/links.mdwn index daadb84..21d14cf 100644 --- a/links.mdwn +++ b/links.mdwn @@ -149,8 +149,10 @@ incarnation of that web page. [Redoxx](http://www.redoxx.com/) [NZ public holidays](http://www.ers.dol.govt.nz/holidays_act_2003/dates/2010_13.html) -**Places to visit:*** +**Places to visit:** [Guédelon](http://www.guedelon.fr/en/) +[Grand Canyon](http://en.wikipedia.org/wiki/Grand_Canyon) +[Canyonlands](http://en.wikipedia.org/wiki/Canyonlands) **Cooking:** [A No-Frills Kitchen Still Cooks](http://www.nytimes.com/2007/05/09/dining/09mini.html?ex=1336363200&en=e39e14cf6af1b0bc&ei=5090&partner=rssuserland&emc=rss)
diff --git a/links.mdwn b/links.mdwn index 8e3c60b..daadb84 100644 --- a/links.mdwn +++ b/links.mdwn @@ -73,6 +73,7 @@ incarnation of that web page. **Other stores:** [Pukufirma Lynoure](http://www.lynoure.com/) [Rajala](http://www.rajala.fi/) +[Paypal](https://www.paypal.com/) **Organizations:** [EFFI](http://www.effi.org/)
diff --git a/release.mdwn b/release.mdwn index f878a11..35094cd 100644 --- a/release.mdwn +++ b/release.mdwn @@ -11,5 +11,6 @@ 1. Build again. 1. Upload files. - `# dput code ../build-area/*.changes` +1. Build and upload for other architectures too, if relevant. 1. Tag the revision in version control. 1. Push version control.
diff --git a/release.mdwn b/release.mdwn new file mode 100644 index 0000000..f878a11 --- /dev/null +++ b/release.mdwn @@ -0,0 +1,15 @@ +[[!meta title="Software release checklist"]] +[[!tag checklist]] + +1. Make sure everything is committed to version control. +1. Run automatic tests. +1. Update version number, `NEWS`, `debian/changelog`. +1. Test-build upstream tarball, Debian packages, other release files. + - `# rm -rf ../build-area && bzr bd --native` +1. Run `lintian` on Debian packages. +1. Commit all release-time changes to version control. +1. Build again. +1. Upload files. + - `# dput code ../build-area/*.changes` +1. Tag the revision in version control. +1. Push version control.
diff --git a/links.mdwn b/links.mdwn index 05930f8..8e3c60b 100644 --- a/links.mdwn +++ b/links.mdwn @@ -148,6 +148,9 @@ incarnation of that web page. [Redoxx](http://www.redoxx.com/) [NZ public holidays](http://www.ers.dol.govt.nz/holidays_act_2003/dates/2010_13.html) +**Places to visit:*** +[Guédelon](http://www.guedelon.fr/en/) + **Cooking:** [A No-Frills Kitchen Still Cooks](http://www.nytimes.com/2007/05/09/dining/09mini.html?ex=1336363200&en=e39e14cf6af1b0bc&ei=5090&partner=rssuserland&emc=rss)
diff --git a/btree.mdwn b/btree.mdwn index 8641137..c946d0f 100644 --- a/btree.mdwn +++ b/btree.mdwn @@ -49,4 +49,5 @@ are your best hope. * Release tarballs and Debian packages: <http://code.liw.fi/debian/pool/main/p/python-btree/> * Bug tracking (SD): <http://code.liw.fi/btree/bugs/> +* Blog entries: <http://blog.liw.fi/tag/btree/> * Copyright license: GNU GPL3 or later.
diff --git a/btree.mdwn b/btree.mdwn index 246eb98..8641137 100644 --- a/btree.mdwn +++ b/btree.mdwn @@ -49,3 +49,4 @@ are your best hope. * Release tarballs and Debian packages: <http://code.liw.fi/debian/pool/main/p/python-btree/> * Bug tracking (SD): <http://code.liw.fi/btree/bugs/> +* Copyright license: GNU GPL3 or later.
diff --git a/btree.mdwn b/btree.mdwn index ee25e4c..246eb98 100644 --- a/btree.mdwn +++ b/btree.mdwn @@ -7,11 +7,11 @@ If you need to store and retrieve large amounts of data on disk, If you want to quickly look up data in memory, the Python `dict` class is probably what you need. However, if you want something for which neither is suitable, -a B-tree might be helpful. It is, however, **pre-alpha** level +a B-tree might be helpful. It is, however, **alpha** level software. It has never been used in a real application yet (unless you count [obnam](http://braawi.org/obnam/), the backup application the tree implementation was written for; obnam is -also pre-alpha). +also alpha). This is an implementation of particular kind of B-tree, based on research by Ohad Rodeh. See @@ -45,15 +45,7 @@ take care to create a new tree for further modifications, though.) Documentation is sparse. Docstrings and reading the code are your best hope. -The code is available as a [bzr](http://bazaar.canonical.com/en/) -branch: - - bzr get http://code.liw.fi/btree/bzr/trunk/ - -I will some day start making actual releases, but for now this is it. - -More stuff: - -* <http://code.liw.fi/btree/> — tarballs, etc. -* <http://code.liw.fi/btree/bugs/> — [SD](http://syncwith.us/sd/) - bug repository for btree. +* Version control: bzr get http://code.liw.fi/btree/bzr/trunk/ +* Release tarballs and Debian packages: + <http://code.liw.fi/debian/pool/main/p/python-btree/> +* Bug tracking (SD): <http://code.liw.fi/btree/bugs/>
diff --git a/btree.mdwn b/btree.mdwn index b618360..ee25e4c 100644 --- a/btree.mdwn +++ b/btree.mdwn @@ -36,6 +36,12 @@ does not decide where its nodes are stored: you provide a class that does that for it. I have two implementations of the `NodeStore` class, one for in-memory and one for on-disk storage. +The tree attempts to guarantee this: all modifications you make will +be safely stored in the node store when the btree.Forest.commit method +is called. After that, unless you actually modify the committed tree +yourself, it will be safe from further modifications. (You need to +take care to create a new tree for further modifications, though.) + Documentation is sparse. Docstrings and reading the code are your best hope.
diff --git a/btree.mdwn b/btree.mdwn index 9b5fb09..b618360 100644 --- a/btree.mdwn +++ b/btree.mdwn @@ -19,11 +19,12 @@ by Ohad Rodeh. See for details on the data structure. This is the same data structure that [btrfs](http://btrfs.wiki.kernel.org/) uses. -Note that my implementation probably differs from what the paper describes -or what btrfs implements. +Note that my implementation is independent from the btrfs one, +and might differ from what the paper describes. -The distinctive feature of this B-tree implementation is that a node is -never modified. Instead, all updates are done by copy-on-write. Among +The distinctive feature of this B-tree is that a node is +never modified (sort-of). +Instead, all updates are done by copy-on-write. Among other things, this makes it easy to clone a tree, and modify only the clone, while other processes access the original tree. This is utterly wonderful for my backup application, and that's the reason I wrote
diff --git a/btree.mdwn b/btree.mdwn index ecbe9b5..9b5fb09 100644 --- a/btree.mdwn +++ b/btree.mdwn @@ -8,7 +8,10 @@ If you want to quickly look up data in memory, the Python `dict` class is probably what you need. However, if you want something for which neither is suitable, a B-tree might be helpful. It is, however, **pre-alpha** level -software. It has never been used in a real application yet. +software. It has never been used in a real application yet +(unless you count [obnam](http://braawi.org/obnam/), the backup +application the tree implementation was written for; obnam is +also pre-alpha). This is an implementation of particular kind of B-tree, based on research by Ohad Rodeh. See
diff --git a/ttystatus.mdwn b/ttystatus.mdwn new file mode 100644 index 0000000..fa2514d --- /dev/null +++ b/ttystatus.mdwn @@ -0,0 +1,20 @@ +[[!meta title="ttystatus: progress and status updates on terminals for Python"]] +[[!tag program]] + +ttystatus is a Python library for showing progress reporting and status +updates on terminals, for (Unix) command line programs. Output is +automatically adapted to the width of the terminal: truncated if it does +not fit, and re-sized if the terminal size changes. + +Output is provided via widgets. Each widgets formats some data into +a suitable form for output. It gets the data either via its initializer, +or from key/value pairs maintained by the master object. The values are +set by the user. Every time a value is updated, widgets get updated +(although the terminal is only updated every so often to give user time +to actually read the output). + +See example.py in the sources for an example of how to use the library. + +* bzr get http://code.liw.fi/ttystatus/bzr/trunk/ + +Licenses under the GNU GPL version 3 or later.
diff --git a/gratis-content.mdwn b/gratis-content.mdwn index b225aa4..76b252d 100644 --- a/gratis-content.mdwn +++ b/gratis-content.mdwn @@ -40,6 +40,7 @@ or e-mail me at liw@liw.fi. Thanks. * [Internet Archive](http://www.archive.org/details/feature_films) * [NerdTV](http://www.pbs.org/cringely/nerdtv/shows/) * [Patent Absurdity](http://patentabsurdity.com/) +* [Pioneer One](http://vodo.net/pioneerone) * [the.scene](http://www.welcometothescene.com/) * [Sita Sings the Blues](http://www.sitasingstheblues.com/) * [Steal This Film](http://www.stealthisfilm.com/Part2/download.php)
diff --git a/gratis-content.mdwn b/gratis-content.mdwn index f536b2b..b225aa4 100644 --- a/gratis-content.mdwn +++ b/gratis-content.mdwn @@ -17,6 +17,7 @@ or e-mail me at liw@liw.fi. Thanks. * [Projekti Lönnrot](http://www.lonnrot.net/) (in Finnish) * [World Digital Library](http://www.wdl.org/) * [Finnish Literature Society Digital Library](http://www.finlit.fi/kirjasto/digi/) (in Finnish) +* [List of freely available programming books](http://stackoverflow.com/questions/194812/list-of-freely-available-programming-books) # Bands, artists
diff --git a/links.mdwn b/links.mdwn index ba8e6a7..05930f8 100644 --- a/links.mdwn +++ b/links.mdwn @@ -103,7 +103,7 @@ incarnation of that web page. [git tutorial](http://www.kernel.org/pub/software/scm/git/docs/gittutorial.html) [Test::More](http://search.cpan.org/~mschwern/Test-Simple-0.94/lib/Test/More.pm) [Devel::Cover](http://homepage.hispeed.ch/pjcj/testing_and_code_coverage/paper.html) -[Python test tools taxonomy](http://pycheesecake.org/wiki/PythonTestingToolsTaxonomy) +[Python test tools taxonomy](http://packages.python.org/testing/) [SD](http://syncwith.us/sd/) [cil](http://github.com/andychilton/cil)
diff --git a/coverage-test-runner.mdwn b/coverage-test-runner.mdwn index 2f92bce..792fc3b 100644 --- a/coverage-test-runner.mdwn +++ b/coverage-test-runner.mdwn @@ -39,7 +39,3 @@ option) any later version. * [trunk](http://code.liw.fi/coverage-test-runner/bzr/trunk/) * [trunk.debian](http://code.liw.fi/coverage-test-runner/bzr/trunk.debian/) - -# Bugs - -See the [[separate_bugs_page|bugs]].
diff --git a/hackingdoc.mdwn b/hackingdoc.mdwn new file mode 100644 index 0000000..b08db02 --- /dev/null +++ b/hackingdoc.mdwn @@ -0,0 +1,26 @@ +[[!meta title="Checklist for HACKING or README"]] +[[!tag checklist]] + +For many free software projects it would be good to have a short document +explaining how to get started with modifying it. It is customary to put +this information in the `README` file. Some people consider `README` to +be more suitable for end-users or people installing from source, and +so the name `HACKING` is also used. + +This is a checklist of things such a document might include. + +* How to build, for development, if it is differnet from normal builds. + (Normal build instructions should go into `README` or `INSTALL`.) +* Canonical version control repositories, for people who get a tarball. +* Any build dependencies needed, and possibly where to get them. +* How to run automatic tests. +* Any other helper tools for figuring out, e.g., how to run profiles and + performance tests. +* How the source tree is laid out, and where to find the major components + of the program. +* Where and how to send patches. +* Coding style issues, if any are unusual. + +There may be more. If you can think of any, please add (this is a +wiki, after all.) If you know of an existing checklist to replace +this page, please add a link there.
diff --git a/links.mdwn b/links.mdwn index 9fd4c20..ba8e6a7 100644 --- a/links.mdwn +++ b/links.mdwn @@ -107,6 +107,9 @@ incarnation of that web page. [SD](http://syncwith.us/sd/) [cil](http://github.com/andychilton/cil) +**Cool devices:** +[Tonido](http://www.futurenow.net.au/index.php/tonido-details) + **Sysadmin:** [passwordless ssh](http://wiki.hands.com/howto/passphraseless-ssh/) [abuse.net relay tester](http://www.abuse.net/relay.html)
diff --git a/lru.mdwn b/lru.mdwn new file mode 100644 index 0000000..ddc0534 --- /dev/null +++ b/lru.mdwn @@ -0,0 +1,15 @@ +[[!meta title="Least-recently-used cache in Python"]] +[[!tag program]] + +A pure-Python implementation of an +[LRU cache](http://en.wikipedia.org/wiki/Cache_algorithms#Least_Recently_Used). +Basically, it is a mapping of keys to values with a maximum size +(expressed in number of keys), +which drops the key that has been unused for the longest time, +if the number of keys grows too big. + +This implementation attempts to be reasonably fast, but in my hubris, +I have not benchmarked it against any of the implementations found in +PyPi. (Please do that and tell me if I'm an idiot.) + +* <http://code.liw.fi/python-lru/bzr/trunk/> — bzr branch
diff --git a/links.mdwn b/links.mdwn index 3c8af43..9fd4c20 100644 --- a/links.mdwn +++ b/links.mdwn @@ -58,6 +58,7 @@ incarnation of that web page. [Damicon Kraa](http://www.damicon.fi/) [DSE](http://www.dse.co.nz/dse.shop/) [NiceGear](http://nicegear.co.nz/) +[Harvey Norman](http://www.harveynorman.co.nz/) **Approved content sources:** [Equal Dreams](http://www.equaldreams.com/)
diff --git a/seivot.mdwn b/seivot.mdwn index b56761a..b46f22f 100644 --- a/seivot.mdwn +++ b/seivot.mdwn @@ -4,5 +4,9 @@ Seivot is a program I wrote with Richard Braakman to run simple benchmarks for backup programs. It is meant to help me develop [obnam](http://braawi.org/obnam/). +You need Python, and my [genbackupdata](http://braawi.org/genbackupdata/) +utility. It is licensed under the GPL, version 3 or later. + +* <http://code.liw.fi/seivot/bzr/trunk/> — bzr branch for the code.
diff --git a/seivot.mdwn b/seivot.mdwn new file mode 100644 index 0000000..b56761a --- /dev/null +++ b/seivot.mdwn @@ -0,0 +1,8 @@ +[[!meta title="seivot: backup benchmarking"]] +[[!tag program]] + +Seivot is a program I wrote with Richard Braakman to run simple +benchmarks for backup programs. +It is meant to help me develop [obnam](http://braawi.org/obnam/). + +It is licensed under the GPL, version 3 or later.
diff --git a/links.mdwn b/links.mdwn index cbe49c8..3c8af43 100644 --- a/links.mdwn +++ b/links.mdwn @@ -119,6 +119,7 @@ incarnation of that web page. [feed validator](http://feedvalidator.org/) [showmyip](http://www.showmyip.com/) [pagerank](http://www.prchecker.info/check_page_rank.php) +[down?](http://downforeveryoneorjustme.com/) **Photography:** [photo.net](http://photo.net/)
removed
diff --git a/liw-by-soile-madrid.jpg b/liw-by-soile-madrid.jpg deleted file mode 100644 index f3e598a..0000000 Binary files a/liw-by-soile-madrid.jpg and /dev/null differ
removed
diff --git a/gratis-content/discussion.mdwn b/gratis-content/discussion.mdwn deleted file mode 100644 index e4258c4..0000000 --- a/gratis-content/discussion.mdwn +++ /dev/null @@ -1,2 +0,0 @@ -The [Kahvi Collective](http://kahvi.org/) is an excellent source of free techno/trance/ambient music. ---Michael
diff --git a/gratis-content.mdwn b/gratis-content.mdwn index bef7382..f536b2b 100644 --- a/gratis-content.mdwn +++ b/gratis-content.mdwn @@ -30,6 +30,7 @@ or e-mail me at liw@liw.fi. Thanks. # Music, not directly from bands * [Jamendo](http://www.jamendo.com/) +* [Kahvi Collective](http://kahvi.org/) # Videos, movies
removed
diff --git a/coverage-test-runner/bugs.mdwn b/coverage-test-runner/bugs.mdwn deleted file mode 100644 index 21fcc15..0000000 --- a/coverage-test-runner/bugs.mdwn +++ /dev/null @@ -1,9 +0,0 @@ -[[!meta title="Bugs in CoverageTestRunner"]] - -See also bugs in the [Debian bug tracking system](http://bugs.debian.org/python-coverage-test-runner). - -[[!inline pages="xxx" feeds=no postform=yes - rootpage="coverage-test-runner/bugs" - postformtext="Report new bug:"]] - -[[!inline pages="coverage-test-runner/bugs/* and !discussion"]]
removed
diff --git a/coverage-test-runner/bugs/debian-changelog-license-wording.mdwn b/coverage-test-runner/bugs/debian-changelog-license-wording.mdwn deleted file mode 100644 index ce7060a..0000000 --- a/coverage-test-runner/bugs/debian-changelog-license-wording.mdwn +++ /dev/null @@ -1,11 +0,0 @@ -[[!meta title="debian/copyright license wording"]] - -When the first version of the Debian package was uploaded, its -debian/copyright file was unclear as to which version of the GPL -was intended as the first version that was OK. This is now fixed -in the trunk.debian branch: - - -License, or any later version. On Debian systems, you can find version 2 - -of the license at /usr/share/common-licenses/GPL-2 . - +License, either version 2 or any later version. On Debian systems, you - +can find version 2 of the license at /usr/share/common-licenses/GPL-2 .
diff --git a/links.mdwn b/links.mdwn index 4333cca..cbe49c8 100644 --- a/links.mdwn +++ b/links.mdwn @@ -57,6 +57,7 @@ incarnation of that web page. [Verkkokauppa](http://www.verkkokauppa.com/) [Damicon Kraa](http://www.damicon.fi/) [DSE](http://www.dse.co.nz/dse.shop/) +[NiceGear](http://nicegear.co.nz/) **Approved content sources:** [Equal Dreams](http://www.equaldreams.com/)
diff --git a/gratis-content.mdwn b/gratis-content.mdwn index b91b80c..bef7382 100644 --- a/gratis-content.mdwn +++ b/gratis-content.mdwn @@ -18,10 +18,11 @@ or e-mail me at liw@liw.fi. Thanks. * [World Digital Library](http://www.wdl.org/) * [Finnish Literature Society Digital Library](http://www.finlit.fi/kirjasto/digi/) (in Finnish) -# Bands +# Bands, artists * [Cantata Sangui](http://www.cantatasangui.com/) * [Severed Fifth](http://severedfifth.com/) +* [Siberry, Jane](http://www.janesiberry.com/janesiberry/music.html) * [Turmion kätilöt](http://www.raharecords.com/) * [Viola](http://www.violamusicclub.com/) * [Wainas](http://www.wainas.net/)
diff --git a/links.mdwn b/links.mdwn index f5efe3e..4333cca 100644 --- a/links.mdwn +++ b/links.mdwn @@ -103,6 +103,7 @@ incarnation of that web page. [Devel::Cover](http://homepage.hispeed.ch/pjcj/testing_and_code_coverage/paper.html) [Python test tools taxonomy](http://pycheesecake.org/wiki/PythonTestingToolsTaxonomy) [SD](http://syncwith.us/sd/) +[cil](http://github.com/andychilton/cil) **Sysadmin:** [passwordless ssh](http://wiki.hands.com/howto/passphraseless-ssh/)
diff --git a/btree.mdwn b/btree.mdwn index bacbc88..ecbe9b5 100644 --- a/btree.mdwn +++ b/btree.mdwn @@ -44,5 +44,6 @@ I will some day start making actual releases, but for now this is it. More stuff: +* <http://code.liw.fi/btree/> — tarballs, etc. * <http://code.liw.fi/btree/bugs/> — [SD](http://syncwith.us/sd/) bug repository for btree.
diff --git a/btree.mdwn b/btree.mdwn
index 1e78ee4..bacbc88 100644
--- a/btree.mdwn
+++ b/btree.mdwn
@@ -41,3 +41,8 @@ branch:
bzr get http://code.liw.fi/btree/bzr/trunk/
I will some day start making actual releases, but for now this is it.
+
+More stuff:
+
+* <http://code.liw.fi/btree/bugs/> — [SD](http://syncwith.us/sd/)
+ bug repository for btree.
diff --git a/links.mdwn b/links.mdwn index de5ceb5..f5efe3e 100644 --- a/links.mdwn +++ b/links.mdwn @@ -102,6 +102,7 @@ incarnation of that web page. [Test::More](http://search.cpan.org/~mschwern/Test-Simple-0.94/lib/Test/More.pm) [Devel::Cover](http://homepage.hispeed.ch/pjcj/testing_and_code_coverage/paper.html) [Python test tools taxonomy](http://pycheesecake.org/wiki/PythonTestingToolsTaxonomy) +[SD](http://syncwith.us/sd/) **Sysadmin:** [passwordless ssh](http://wiki.hands.com/howto/passphraseless-ssh/)
diff --git a/links.mdwn b/links.mdwn index 4906d72..de5ceb5 100644 --- a/links.mdwn +++ b/links.mdwn @@ -91,7 +91,6 @@ incarnation of that web page. [Kuhn UTF-8 test](http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt) [Hsieh hash](http://www.azillionmonkeys.com/qed/hash.html) [rsync](http://www.samba.org/rsync/tech_report/) -[Tarkistusmerkkien laskentamenetelmiä](http://koti.mbnet.fi/~thales/tarkmerk.htm) [hashes for content-based addressing](http://valerieaurora.org/monkey.html) [Name generator](http://online-generator.com/name-generator/project-name-generator.php) [Sqlite query language](http://www.sqlite.org/lang.html)
diff --git a/btree.mdwn b/btree.mdwn new file mode 100644 index 0000000..1e78ee4 --- /dev/null +++ b/btree.mdwn @@ -0,0 +1,43 @@ +[[!meta title="Python B-tree library"]] +[[!tag program]] + +**Disclaimer:** +If you need to store and retrieve large amounts of data on disk, +[SQLite](http://sqlite.org/) is probably what you're looking for. +If you want to quickly look up data in memory, the Python +`dict` class is probably what you need. +However, if you want something for which neither is suitable, +a B-tree might be helpful. It is, however, **pre-alpha** level +software. It has never been used in a real application yet. + +This is an implementation of particular kind of B-tree, based on research +by Ohad Rodeh. See +["B-trees, Shadowing, and Clones"](http://www.cs.tau.ac.il/~ohadrode/papers/btree_TOS.pdf) +for details on the data structure. +This is the same data structure that [btrfs](http://btrfs.wiki.kernel.org/) +uses. +Note that my implementation probably differs from what the paper describes +or what btrfs implements. + +The distinctive feature of this B-tree implementation is that a node is +never modified. Instead, all updates are done by copy-on-write. Among +other things, this makes it easy to clone a tree, and modify only +the clone, while other processes access the original tree. This is +utterly wonderful for my backup application, and that's the reason I wrote +btree in the first place. + +I have tried to keep the implementation generic and flexibile, so that +you may use it in a variety of situations. For example, the tree itself +does not decide where its nodes are stored: you provide a class that +does that for it. I have two implementations of the `NodeStore` class, +one for in-memory and one for on-disk storage. + +Documentation is sparse. Docstrings and reading the code +are your best hope. + +The code is available as a [bzr](http://bazaar.canonical.com/en/) +branch: + + bzr get http://code.liw.fi/btree/bzr/trunk/ + +I will some day start making actual releases, but for now this is it.
diff --git a/links.mdwn b/links.mdwn index 6eee88b..4906d72 100644 --- a/links.mdwn +++ b/links.mdwn @@ -47,6 +47,7 @@ incarnation of that web page. [coverage.py](http://nedbatchelder.com/code/modules/coverage.html) [Dimbola](http://dimbola.org) [Makefiletab](http://www.whilefalse.com/gedit-makefiletab/index.en.html) +[Koha](http://koha-community.org/) **People:** [Arno Wirzenius](http://www.iki.fi/arno.w/)
diff --git a/gratis-content.mdwn b/gratis-content.mdwn index f4b066b..b91b80c 100644 --- a/gratis-content.mdwn +++ b/gratis-content.mdwn @@ -18,7 +18,6 @@ or e-mail me at liw@liw.fi. Thanks. * [World Digital Library](http://www.wdl.org/) * [Finnish Literature Society Digital Library](http://www.finlit.fi/kirjasto/digi/) (in Finnish) - # Bands * [Cantata Sangui](http://www.cantatasangui.com/) @@ -27,6 +26,10 @@ or e-mail me at liw@liw.fi. Thanks. * [Viola](http://www.violamusicclub.com/) * [Wainas](http://www.wainas.net/) +# Music, not directly from bands + +* [Jamendo](http://www.jamendo.com/) + # Videos, movies * [Big Buck Bunny](http://www.bigbuckbunny.org/)
diff --git a/dupfiles.mdwn b/dupfiles.mdwn new file mode 100644 index 0000000..e367211 --- /dev/null +++ b/dupfiles.mdwn @@ -0,0 +1,21 @@ +[[!meta title="dupfiles: find and hardlink duplicate files"]] +[[!tag program]] + +I needed to save some space, and my disk had Debian and Ubuntu mirrors. Most +source packages are identical, so hardlinking the relevant files was a good +way to save a few tens of gigabytes. + +The [fdupes](http://netdial.caribe.net/~adrian2/programs/fdupes.html) +program was the only tool I found for this that was packaged +for Debian. Unfortunately, it can only list or delete duplicates, not +hardlink them to each other. + +I started writing a program to parse fdupes output and do the hardlinking, +but it evolved into a program that did everything. + +I named it dupfiles. + + bzr get http://code.liw.fi/dupfiles/bzr/trunk/ + +It has a test suite, but I don't know if it covers all cases. Probably +not. Worked for me, but please be careful. Patches most welcome.
diff --git a/gratis-content.mdwn b/gratis-content.mdwn index af9d078..f4b066b 100644 --- a/gratis-content.mdwn +++ b/gratis-content.mdwn @@ -33,6 +33,7 @@ or e-mail me at liw@liw.fi. Thanks. * [Code Rush](http://clickmovement.org/content/code-rush-download) * [Internet Archive](http://www.archive.org/details/feature_films) * [NerdTV](http://www.pbs.org/cringely/nerdtv/shows/) +* [Patent Absurdity](http://patentabsurdity.com/) * [the.scene](http://www.welcometothescene.com/) * [Sita Sings the Blues](http://www.sitasingstheblues.com/) * [Steal This Film](http://www.stealthisfilm.com/Part2/download.php)
diff --git a/links.mdwn b/links.mdwn index 5346ae6..6eee88b 100644 --- a/links.mdwn +++ b/links.mdwn @@ -29,6 +29,7 @@ incarnation of that web page. [debian.org](http://www.debian.org/) [KVM](http://wiki.debian.org/KVM) [pkg-perl](http://wiki.debian.org/Teams/DebianPerlGroup/) +[lars@catalyst](http://qa.debian.org/developer.php?login=lars%40catalyst.net.nz&comaint=yes) **Linux:** [LWN](http://lwn.net/)
diff --git a/rules.mdwn b/rules.mdwn index e82ff31..2b0bf9b 100644 --- a/rules.mdwn +++ b/rules.mdwn @@ -14,3 +14,4 @@ Gibbs, yay. in the parts without tests. 9. Don't be late in telling you're late. 10. If you cannot automate it, make a checklist out of it. +11. Be careful what you reward, because you will get more of it.
diff --git a/eoc.mdwn b/eoc.mdwn new file mode 100644 index 0000000..765dc1e --- /dev/null +++ b/eoc.mdwn @@ -0,0 +1,18 @@ +[[!meta title="Enemies of Carlotta"]] +[[!tag program]] + +Many years ago I wrote a mailing list manager, called +Enemies of Carlotta. + +I have pretty much stopped developing it. I still use it, +and will fix any horrible problems should they occur, but +otherwise don't expect me to do much. + +However, if you want to use it, please do. If you would like +to take over development, please do. + +The current code is in bzr, you can get it via: + + bzr get http://code.liw.fi/enemies-of-carlotta/bzr/trunk/ + +Have fun.
diff --git a/links.mdwn b/links.mdwn index 6707df0..5346ae6 100644 --- a/links.mdwn +++ b/links.mdwn @@ -45,6 +45,7 @@ incarnation of that web page. [moreutils](http://kitenet.net/~joey/code/moreutils/) [coverage.py](http://nedbatchelder.com/code/modules/coverage.html) [Dimbola](http://dimbola.org) +[Makefiletab](http://www.whilefalse.com/gedit-makefiletab/index.en.html) **People:** [Arno Wirzenius](http://www.iki.fi/arno.w/)
diff --git a/links.mdwn b/links.mdwn index 4a02dc8..6707df0 100644 --- a/links.mdwn +++ b/links.mdwn @@ -27,9 +27,6 @@ incarnation of that web page. **Debian:** [debian.org](http://www.debian.org/) -[debian.fi](http://debian.fi/) -[Manoj Python Policy](http://people.debian.org/~srivasta/manoj-policy/) -[New Python Policy](http://wiki.debian.org/DebianPython/NewPolicy) [KVM](http://wiki.debian.org/KVM) [pkg-perl](http://wiki.debian.org/Teams/DebianPerlGroup/) @@ -37,10 +34,8 @@ incarnation of that web page. [LWN](http://lwn.net/) [decss](http://mjr.iki.fi/decss/) [Driver check](http://kmuto.jp/debian/hcl/) -[OpenWRT](http://openwrt.org/) **User/other groups:*** -[HUMBUG (Brisbane)](http://www.humbug.org.au/) [NZPUG](http://nzpug.org/) [Wellington.geek.nz](http://wellington.geek.nz/) [Thursday night curry](http://wellington.thursdaynightcurry.com/) @@ -58,32 +53,27 @@ incarnation of that web page. **Computer stores:** [Verkkokauppa](http://www.verkkokauppa.com/) [Damicon Kraa](http://www.damicon.fi/) -[linuxkauppa](http://www.linuxkauppa.fi/) -[Mäkisen paja](http://www.atkkierratys.com/) [DSE](http://www.dse.co.nz/dse.shop/) **Approved content sources:** [Equal Dreams](http://www.equaldreams.com/) [Levyvirasto](http://levyvirasto.net/catalog/) [Meteli.net](http://meteli.net/) - -**Other stores:** [Heather Alexander](http://www.heatherlands.com/) [Amazon](http://www.amazon.com/) [Amazon UK](http://www.amazon.co.uk/) -[Pukufirma Lynoure](http://www.lynoure.com/) -[Rajala](http://www.rajala.fi/) -[Ruohonjuuri](http://www.bosoy.fi/ruohonjuuri/index.html) -[Varusteleka](http://www.varusteleka.fi/) [Fictionwise](https://www.fictionwise.com/) [Smashwords](http://www.smashwords.com/) +**Other stores:** +[Pukufirma Lynoure](http://www.lynoure.com/) +[Rajala](http://www.rajala.fi/) + **Organizations:** [EFFI](http://www.effi.org/) [IKI](http://www.iki.fi/index.html) [Burger Games](http://www.burgergames.com) [Vilhelm](http://vilhelm.fi/) -[speedtarrat.fi](http://www.speedtarrat.fi/) **Programming:** [GNOME API](http://library.gnome.org/devel/) @@ -97,9 +87,7 @@ incarnation of that web page. [Pentomino](http://yucs.org/~gnivasch/pentomino/) [Kuhn UTF-8 test](http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt) [Hsieh hash](http://www.azillionmonkeys.com/qed/hash.html) -[Code Coverage Lessons](http://homepage.mac.com/hey.you/lessons.html) [rsync](http://www.samba.org/rsync/tech_report/) -[zsync](http://zsync.moria.org.uk/) [Tarkistusmerkkien laskentamenetelmiä](http://koti.mbnet.fi/~thales/tarkmerk.htm) [hashes for content-based addressing](http://valerieaurora.org/monkey.html) [Name generator](http://online-generator.com/name-generator/project-name-generator.php) @@ -127,11 +115,6 @@ incarnation of that web page. [showmyip](http://www.showmyip.com/) [pagerank](http://www.prchecker.info/check_page_rank.php) -**Hardware:** -[UBCD](http://ubcd.sourceforge.net/) -[CUPS/Foomatic for Brother P-touch](http://www.diku.dk/~panic/P-touch/) -[QL550 on Linux](http://etc.nkadesign.com/Printers/QL550LabelPrinter) - **Photography:** [photo.net](http://photo.net/) [dcraw](http://www.cybercom.net/~dcoffin/dcraw/) @@ -139,8 +122,6 @@ incarnation of that web page. [RG](http://www.robgalbraith.com/) [TOP](http://theonlinephotographer.com/) [UPstrap](http://www.upstrap-pro.com/) -[Argyll](http://www.argyllcms.com/) -[kamerahuolto](http://www.kamerahuolto.fi) [Color management](http://photo.net/learn/digital-photography-workflow/color-management/) **Home office:** @@ -157,9 +138,6 @@ incarnation of that web page. [Redoxx](http://www.redoxx.com/) [NZ public holidays](http://www.ers.dol.govt.nz/holidays_act_2003/dates/2010_13.html) -**Politics:** -[Edustajamme.fi](http://blogit.edustajamme.fi/) - **Cooking:** [A No-Frills Kitchen Still Cooks](http://www.nytimes.com/2007/05/09/dining/09mini.html?ex=1336363200&en=e39e14cf6af1b0bc&ei=5090&partner=rssuserland&emc=rss)
diff --git a/links.mdwn b/links.mdwn index 3bd7144..4a02dc8 100644 --- a/links.mdwn +++ b/links.mdwn @@ -143,11 +143,6 @@ incarnation of that web page. [kamerahuolto](http://www.kamerahuolto.fi) [Color management](http://photo.net/learn/digital-photography-workflow/color-management/) -**Online photo printing:** -[Tunnin kuva](http://www.tunninkuva.fi) -[Fotonetti](http://www.fotonetti.fi) -[Kuvaboxi](http://kuvaboxi.fi/) - **Home office:** [Stefan Didak's home office](http://www.stefandidak.com/office/) [Mitch Haile](http://www.biscade.com/office/)
diff --git a/links.mdwn b/links.mdwn index daa51c6..3bd7144 100644 --- a/links.mdwn +++ b/links.mdwn @@ -77,7 +77,6 @@ incarnation of that web page. [Varusteleka](http://www.varusteleka.fi/) [Fictionwise](https://www.fictionwise.com/) [Smashwords](http://www.smashwords.com/) -[Cleanme](http://www.cleanme.co.nz/index.html) **Organizations:** [EFFI](http://www.effi.org/)
diff --git a/links.mdwn b/links.mdwn index a1c3c46..daa51c6 100644 --- a/links.mdwn +++ b/links.mdwn @@ -12,15 +12,6 @@ incarnation of that web page. [Valuutat](http://www.bof.fi/Stats/default.aspx?r=/tilastot/valuuttakurssit/valuuttakurssit_today_fi) [SO](http://stackoverflow.com/) -**Time tables:** -[150A](http://aikataulut.ytv.fi/linjat/fi/s150.html) -[165](http://aikataulut.ytv.fi/linjat/fi/s165.html) -[65](http://aikataulut.ytv.fi/linjat/fi/e65.html) -[Reittiopas](http://aikataulut.ytv.fi/reittiopas/fi/) -[Aikataulut](http://aikataulut.ytv.fi/linjat/fi/) -[matka.fi](http://www.matka.fi/haku/fi/) -[liikenteeseen.fi](http://liikenteeseen.fi) - **Books:** [Lspace](http://www.ie.lspace.org) [Bujold Nexus](http://www.dendarii.com/)
diff --git a/links.mdwn b/links.mdwn index 0cbf607..a1c3c46 100644 --- a/links.mdwn +++ b/links.mdwn @@ -40,6 +40,7 @@ incarnation of that web page. [Manoj Python Policy](http://people.debian.org/~srivasta/manoj-policy/) [New Python Policy](http://wiki.debian.org/DebianPython/NewPolicy) [KVM](http://wiki.debian.org/KVM) +[pkg-perl](http://wiki.debian.org/Teams/DebianPerlGroup/) **Linux:** [LWN](http://lwn.net/)
diff --git a/links.mdwn b/links.mdwn index 3853130..0cbf607 100644 --- a/links.mdwn +++ b/links.mdwn @@ -41,9 +41,6 @@ incarnation of that web page. [New Python Policy](http://wiki.debian.org/DebianPython/NewPolicy) [KVM](http://wiki.debian.org/KVM) -**Ubuntu:** -[PPA](https://launchpad.net/~liw/+archive) - **Linux:** [LWN](http://lwn.net/) [decss](http://mjr.iki.fi/decss/)
diff --git a/links.mdwn b/links.mdwn index 80a88c7..3853130 100644 --- a/links.mdwn +++ b/links.mdwn @@ -10,9 +10,7 @@ incarnation of that web page. **Frequent:** [Valuutat](http://www.bof.fi/Stats/default.aspx?r=/tilastot/valuuttakurssit/valuuttakurssit_today_fi) -[Aukiolot](http://www.pty.fi/aukiolo2009.html) -[Sää](http://weather.fi/Suomi/tasmasaa/Espoo) -[Ukkoset](http://www.vaski.net/thunder/ukkonen2.htm) +[SO](http://stackoverflow.com/) **Time tables:** [150A](http://aikataulut.ytv.fi/linjat/fi/s150.html)
diff --git a/links.mdwn b/links.mdwn index e314184..80a88c7 100644 --- a/links.mdwn +++ b/links.mdwn @@ -44,16 +44,7 @@ incarnation of that web page. [KVM](http://wiki.debian.org/KVM) **Ubuntu:** -[cj bugs](https://bugs.launchpad.net/ubuntu/+source/computer-janitor) -[um bugs](https://bugs.launchpad.net/ubuntu/+source/update-manager) -[liw's bugs](https://bugs.launchpad.net/~liw/+bugs) -[liw's packages' bugs](https://bugs.launchpad.net/~liw/+packagebugs) -[ubuntu@launchpad](https://bugs.launchpad.net/ubuntu) -[ubuntu uploads](https://launchpad.net/ubuntu/jaunty/+queue) -[foundations team bugs](http://qa.ubuntu.com/reports/team-assigned/ubuntu-foundations-assigned-bug-tasks.html) [PPA](https://launchpad.net/~liw/+archive) -[KVM](https://help.ubuntu.com/community/KVM) -[Debugging Crashes](https://wiki.ubuntu.com/DebuggingProgramCrash) **Linux:** [LWN](http://lwn.net/)
diff --git a/links.mdwn b/links.mdwn index bb40ce5..e314184 100644 --- a/links.mdwn +++ b/links.mdwn @@ -134,6 +134,7 @@ incarnation of that web page. [git tutorial](http://www.kernel.org/pub/software/scm/git/docs/gittutorial.html) [Test::More](http://search.cpan.org/~mschwern/Test-Simple-0.94/lib/Test/More.pm) [Devel::Cover](http://homepage.hispeed.ch/pjcj/testing_and_code_coverage/paper.html) +[Python test tools taxonomy](http://pycheesecake.org/wiki/PythonTestingToolsTaxonomy) **Sysadmin:** [passwordless ssh](http://wiki.hands.com/howto/passphraseless-ssh/)
diff --git a/links.mdwn b/links.mdwn index dd4e941..bb40ce5 100644 --- a/links.mdwn +++ b/links.mdwn @@ -78,7 +78,6 @@ incarnation of that web page. [Jukka Rajala](http://www.jukkar.com/) **Computer stores:** -[Ascent](http://www.ascent.co.nz/?x=1) [Verkkokauppa](http://www.verkkokauppa.com/) [Damicon Kraa](http://www.damicon.fi/) [linuxkauppa](http://www.linuxkauppa.fi/) @@ -134,6 +133,7 @@ incarnation of that web page. [Meliae](http://jam-bazaar.blogspot.com/2009/11/memory-debugging-with-meliae.html) [git tutorial](http://www.kernel.org/pub/software/scm/git/docs/gittutorial.html) [Test::More](http://search.cpan.org/~mschwern/Test-Simple-0.94/lib/Test/More.pm) +[Devel::Cover](http://homepage.hispeed.ch/pjcj/testing_and_code_coverage/paper.html) **Sysadmin:** [passwordless ssh](http://wiki.hands.com/howto/passphraseless-ssh/)
diff --git a/links.mdwn b/links.mdwn index eaca5d3..dd4e941 100644 --- a/links.mdwn +++ b/links.mdwn @@ -133,6 +133,7 @@ incarnation of that web page. [Euler](http://projecteuler.net/index.php?section=about) [Meliae](http://jam-bazaar.blogspot.com/2009/11/memory-debugging-with-meliae.html) [git tutorial](http://www.kernel.org/pub/software/scm/git/docs/gittutorial.html) +[Test::More](http://search.cpan.org/~mschwern/Test-Simple-0.94/lib/Test/More.pm) **Sysadmin:** [passwordless ssh](http://wiki.hands.com/howto/passphraseless-ssh/)
diff --git a/links.mdwn b/links.mdwn index a35464d..eaca5d3 100644 --- a/links.mdwn +++ b/links.mdwn @@ -83,6 +83,7 @@ incarnation of that web page. [Damicon Kraa](http://www.damicon.fi/) [linuxkauppa](http://www.linuxkauppa.fi/) [Mäkisen paja](http://www.atkkierratys.com/) +[DSE](http://www.dse.co.nz/dse.shop/) **Approved content sources:** [Equal Dreams](http://www.equaldreams.com/)
diff --git a/links.mdwn b/links.mdwn index 510097a..a35464d 100644 --- a/links.mdwn +++ b/links.mdwn @@ -41,6 +41,7 @@ incarnation of that web page. [debian.fi](http://debian.fi/) [Manoj Python Policy](http://people.debian.org/~srivasta/manoj-policy/) [New Python Policy](http://wiki.debian.org/DebianPython/NewPolicy) +[KVM](http://wiki.debian.org/KVM) **Ubuntu:** [cj bugs](https://bugs.launchpad.net/ubuntu/+source/computer-janitor)
diff --git a/links.mdwn b/links.mdwn index 9dd4b8c..510097a 100644 --- a/links.mdwn +++ b/links.mdwn @@ -34,6 +34,7 @@ incarnation of that web page. [Debugging Rules](http://www.debuggingrules.com/) [Producing OSS](http://www.producingoss.com/) [DAM](http://thedambook.com/) +[Safari Online](http://my.safaribooksonline.com/mysafari) **Debian:** [debian.org](http://www.debian.org/)
diff --git a/links.mdwn b/links.mdwn index 214de85..9dd4b8c 100644 --- a/links.mdwn +++ b/links.mdwn @@ -63,6 +63,7 @@ incarnation of that web page. [HUMBUG (Brisbane)](http://www.humbug.org.au/) [NZPUG](http://nzpug.org/) [Wellington.geek.nz](http://wellington.geek.nz/) +[Thursday night curry](http://wellington.thursdaynightcurry.com/) **Upstreams:** [Sound Converter](http://soundconverter.berlios.de/)
diff --git a/links.mdwn b/links.mdwn index c47c6f9..214de85 100644 --- a/links.mdwn +++ b/links.mdwn @@ -59,9 +59,10 @@ incarnation of that web page. [Driver check](http://kmuto.jp/debian/hcl/) [OpenWRT](http://openwrt.org/) -**User groups:*** +**User/other groups:*** [HUMBUG (Brisbane)](http://www.humbug.org.au/) [NZPUG](http://nzpug.org/) +[Wellington.geek.nz](http://wellington.geek.nz/) **Upstreams:** [Sound Converter](http://soundconverter.berlios.de/)
diff --git a/rules.mdwn b/rules.mdwn index ddc9a0d..e82ff31 100644 --- a/rules.mdwn +++ b/rules.mdwn @@ -13,3 +13,4 @@ Gibbs, yay. 8. Aim for 100% test coverage. You'll never get there, but bugs mostly happen in the parts without tests. 9. Don't be late in telling you're late. +10. If you cannot automate it, make a checklist out of it.
diff --git a/links.mdwn b/links.mdwn index 24d3642..c47c6f9 100644 --- a/links.mdwn +++ b/links.mdwn @@ -95,6 +95,7 @@ incarnation of that web page. [Varusteleka](http://www.varusteleka.fi/) [Fictionwise](https://www.fictionwise.com/) [Smashwords](http://www.smashwords.com/) +[Cleanme](http://www.cleanme.co.nz/index.html) **Organizations:** [EFFI](http://www.effi.org/)
diff --git a/links.mdwn b/links.mdwn index 8cfc9ac..24d3642 100644 --- a/links.mdwn +++ b/links.mdwn @@ -175,6 +175,7 @@ incarnation of that web page. [Onebag](http://www.onebag.com/) [Open Street Map](http://wiki.openstreetmap.org/index.php/Main_Page) [Redoxx](http://www.redoxx.com/) +[NZ public holidays](http://www.ers.dol.govt.nz/holidays_act_2003/dates/2010_13.html) **Politics:** [Edustajamme.fi](http://blogit.edustajamme.fi/)
diff --git a/links.mdwn b/links.mdwn index 6a986bb..8cfc9ac 100644 --- a/links.mdwn +++ b/links.mdwn @@ -74,6 +74,7 @@ incarnation of that web page. [Jukka Rajala](http://www.jukkar.com/) **Computer stores:** +[Ascent](http://www.ascent.co.nz/?x=1) [Verkkokauppa](http://www.verkkokauppa.com/) [Damicon Kraa](http://www.damicon.fi/) [linuxkauppa](http://www.linuxkauppa.fi/)
diff --git a/links.mdwn b/links.mdwn index cfafbae..6a986bb 100644 --- a/links.mdwn +++ b/links.mdwn @@ -125,6 +125,7 @@ incarnation of that web page. [EBS](http://www.joelonsoftware.com/items/2007/10/26.html) [Euler](http://projecteuler.net/index.php?section=about) [Meliae](http://jam-bazaar.blogspot.com/2009/11/memory-debugging-with-meliae.html) +[git tutorial](http://www.kernel.org/pub/software/scm/git/docs/gittutorial.html) **Sysadmin:** [passwordless ssh](http://wiki.hands.com/howto/passphraseless-ssh/)
Re-worded #8 to be an actual rule. Thanks to
Richard for pointing it out.
diff --git a/rules.mdwn b/rules.mdwn index e34ddf9..ddc9a0d 100644 --- a/rules.mdwn +++ b/rules.mdwn @@ -4,12 +4,12 @@ Gibbs, yay. 1. Always copy and paste a URL. -1. A will-do attitude trumps skills. -1. Always ask the simple troubleshooting questions first. -1. Externalize your memory: write things down, always carry a notebook. -1. Measure, don't guess. -1. Write flames, but don't send them. -1. Always write unit tests for error handling. -1. 100% test coverage is a fallacy, but bugs happen mostly in the parts - without tests. -1. Don't be late in telling you're late. +2. A will-do attitude trumps skills. +3. Always ask the simple troubleshooting questions first. +4. Externalize your memory: write things down, always carry a notebook. +5. Measure, don't guess. +6. Write flames, but don't send them. +7. Always write unit tests for error handling. +8. Aim for 100% test coverage. You'll never get there, but bugs mostly happen + in the parts without tests. +9. Don't be late in telling you're late.
diff --git a/rules.mdwn b/rules.mdwn new file mode 100644 index 0000000..e34ddf9 --- /dev/null +++ b/rules.mdwn @@ -0,0 +1,15 @@ +[[!meta title="Rules"]] +[[!tag article]] + +Gibbs, yay. + +1. Always copy and paste a URL. +1. A will-do attitude trumps skills. +1. Always ask the simple troubleshooting questions first. +1. Externalize your memory: write things down, always carry a notebook. +1. Measure, don't guess. +1. Write flames, but don't send them. +1. Always write unit tests for error handling. +1. 100% test coverage is a fallacy, but bugs happen mostly in the parts + without tests. +1. Don't be late in telling you're late.
diff --git a/tag/talk.mdwn b/tag/talk.mdwn new file mode 100644 index 0000000..d345936 --- /dev/null +++ b/tag/talk.mdwn @@ -0,0 +1,3 @@ +This tag is for talks and presentations I've given. + +[[!inline archive=yes feeds=no sort=title pages="link(tag/talk)"]]
diff --git a/linux-anecdotes.mdwn b/linux-anecdotes.mdwn new file mode 100644 index 0000000..74b64b0 --- /dev/null +++ b/linux-anecdotes.mdwn @@ -0,0 +1,282 @@ +[[!meta title="Linux Anecdotes"]] +[[!tag talk]] + +> A look at the history of Linux, as seen by a long +> time Linux user. The talk is a series of anecdotes, +> shy of technical details, and sprinkled with personal +> memories. +> +> 27 April 1998 +> +> This talk was given at the 1998 Linux Expo. + + +## Who I am and why I am here + +I seem to have acquired a little bit of reputation in the Linux community, +despite my efforts in to stay quiet and invisible, so that I don't get +so many questions from people having trouble with Linux. + +Part of my reputation is that I know Linux pretty well. That part is based +on the time when I and Linus Torvalds---I assume you know Linus---shared +an office at the University of Helsinki. In reality, I don't know Linux +all that well. For example, my one stab at kernel programming resulted +in a bug that took three years to track down and fix, and even then it +was done by someone hacking OS/2. I'm referring to the sprintf function +inside the kernel. + +I wrote sprintf in the summer of 1991. Linus needed some easy way to print +messages from the kernel, and did not then know how to use the stdarg +mechanism to implement variable argument lists to functions. I see +some people in the audience shaking their heads. Yes, it's true. There +was a time when Linus didn't know everything. Really. Trust me. I was +there. + +Anyway, I wrote a simple sprintf for Linus, to show him how it was done, +and he used in the Linux kernel, after some modification. The bug was in +the handling of an asterisk as the width for an output field. I forgot +to increment a pointer past the asterisk, so the code had no chance of +working for this case. No chance at all. This was clear to anyone who +tried it. Obviously, I didn't, which means that I probably shouldn't be +employed to write software. In 1994, three years later, one Friedemann +Baitinger noticed the bug, and sent me a patch. He was using the +sprintf while debugging a device driver he was writing for OS/2. + +Anyway, back to who I am. I've been a friend of Linus since before +Linux even existed. We met as first-year students in 1988. When he +started to write Linux, I naturally followed things with interest and +some jealosy. Except for sprintf, I didn't really participate, since +I'm not a hacker, just a wannabe. When Linux and its community grew, I +took part in various non-technical things that needed doing. For +example, I helped created the Linux Documentation Project, and +co-moderated comp.os.linux.announce, also known as cola. + +My moderating cola is the reason I'm here. When I had been doing it +for five years, that is, in last December, I decided to retire from it +and found a successor. In my farewell note to the group, I jokingly +said that I wouldn't mind getting a trip around the world, if anyone +wanted to send me one. It happens that some people don't understand +jokes, and it seems that Marc Ewing is one of them. He told me I would +come here to give a talk and he wouldn't take no for an answer. If you +feel bored now, you know whom to blame. + + +## Linus the god + +You all know Linus, at least by reputation. The wonder-child. The +coding wizard. The hacker god. Well, it wasn't always like that. What +I'm about to say next may shock the most devout Linuxers in the audience, +but that's all right. This is a free country, and anyway, I've been +promised police protection. + +I've already told you that Linus didn't always know everything. I'm +not saying he isn't omniscient now. After all, he might now be a god +and I'm not lightning-proof. So I'm only going to talk about old +times. I'm sure he'll forgive me that. + +Not only did Linus not know everything about C, he also didn't know +anything about PC's. In fact, he didn't even have one when I first met +him. When he bought his first PC, he didn't even start hacking it +right away. Instead, he played computer games, especially one called +something like Prince of Persia. I've never understood that part of him. +I mean, what's a computer game worth if it doesn't simulate +playing cards? No, give me solitaire, if you want me to play with a +computer. + +Even a few years later, when Linux was already a success, Linus had +this strange fascination for silly computer games, such as Doom and +Quake. By then he'd already learned some social skills and knew that one +just doesn't admit to liking computer games after the age of 12. +So when he was playin Doom, he used to explain that he was +debugging and stress testing memory management and the X server. + +When Linus decides to learn something, he really learns it, and usually +quickly. This is why he may now be omniscient. I remember once when we +were being questioned about some math home work. I happened to know Linus +hadn't done it. But bold as he was even then, he claimed to have done +them anyway. As luck would have it, the teacher wanted Linus to present +his solution to the class. On the way to the blackboard, Linus read the +problem, then stood in front of the board for a second or two, and went +on to present a solution that the teacher couldn't understand. Linus +can be quite annoying like that. + +Once, when Linus was abroad at some conference or another, he modified +my shell setup scripts so that when I logged in, it looked as if I was +using MS-DOS. That was fun, of course, but it begged for revenge. This +happened while we were sharing an office at the university, so once +when Linus went out to get something to drink or something, I created an +alias for startx for him. My alias first ran the real startx, and then +printed out a kernel `Oops' message. The first time Linus noticed this +made him a bit worried, but he logged out and cleared the screen too fast +to read it, but the second time made him really worried. I'd copied the +`Oops' message from linux-kernel, and of course it didn't suit Linus's +kernel at all. He had gotten as far as decoding the message by hand, +and muttering something like ``Why is it crashing there? It can't crash +there!'', when I burst out laughing and told him what I'd done. Linus +was quite relieved and never tried any practical jokes on me again. + + +## The early times + +Let's go back to the spring of 1991. In January, Linus bought a PC. +He'd been using a Sinclair QL before that, which, like much British +computer stuff, was ingenious and almost unusably different from +everything else. Like every self-respecting hacker, Linus had written +some software development tools of his own; an editor and an +assembler, I think. He'd also modified the QL hardware a bit, to +replace a broken keyboard, and to add a PC-compatible floppy drive. +When he bought the PC, he wrote a device driver for the QL so he could +move stuff from the QL to the PC. + +When he got up to speed with the PC, after having played +enough Prince of Persia, he started learning about programming the PC. +Especially assembly language programming, since only wimps use high +level languages. I remember one day when he was quite proud for having +written a strlen function in assembly. Gee, I was impressed. + +As I said, when Linus decides to learn, he really learns. A few weeks +later he showed me two simple concurrent processes. One printed out +A's as fast as it could, the other B's. That was much more fun to look +at than his strlen, but not, I think, immediately as useful. + +As time progressed, Linus added keyboard and serial port drivers, so +that he could use his modem from the PC. Normal people would have used +one of the dozens of existing terminal emulators, but Linus had to +write his own. After that, he spent a long time just reading netnews. +Sorry, I mean of course that he was debugging his terminal emulation code +by reading netnews. The emulator consisted of two processes, one reading +the keyboard and writing to the serial port, the other reading the +serial port and writing to the screen and emulating a terminal. + +At some point during this time Linus decided he wanted a Unix-like +system at home, and the obvious choice back then was Minix, since it was +the only thing he could afford. As it happened, Linus wasn't very +happy with Minix, so he kept improving his terminal emulator, and +modifying it to become more like an operating system. I guess we can +conclude by now that he succeeded. + +The success of Linux wasn't automatic, and things might well have gone +differently. For example, if the Hurd had been finished a few years +ago, Linux probably wouldn't exist today. Or the BSD systems might +have taken over the free operating system marketplace. + +However, things went as they did, and Linux prospered. The success has +resulted in fame and also material rewards for rewards, including +money. One of the first rewards wasn't money, but virtual +beer. You may have heard the expression, since it is still used +somewhat, but these days it is just a general good wish phrase. +Originally, it had a very concrete meaning. Two guys from Oxford, +England, calling themselves the Oxford Beer Trolls, wanted to buy +Linus some beer, but since it was impractical to move either +themselves, Linus, or the beer physically around, they asked me to +receive the money via mail, and buy Linus beer with it, and that's +what happened. So, virtual +beer really means money, preferably money sent to me. + +Alas, people started sending Linus money directly. I'm not +sure they did it out of gratitude, however, since they usually sent +personal checks from the US. As Linus quickly learned, Finnish banks +really, really hate checks. Especially personal checks. Particularly +personal checks from the US. They invent all sorts of bureaucratic pit-falls +and rules and fees to make it difficult and expensive to use checks. +If you want to make trouble for a Finn, send him a personal check from +the US. And that's not a joke. + +Linus also got some other stuff via mail. For example, a pair of 40 +megabyte hard disks. That was really nice, since it meant that Linus +was finally able to keep some backups. Not that he did, of course. +One of his well-known quotes is: "Backups are for wimps. Real men +upload their data to an FTP site and have everyone else mirror it." He +said that even after dialling his hard disk. + +At one point, Linus had implemented device files in /dev, and wanted to +dial up the university computer and debug his terminal emulation code +again. So he starts his terminal emulator program and tells it to use (Diff truncated)
diff --git a/sidebar.mdwn b/sidebar.mdwn index 8fe8a6e..325fccd 100644 --- a/sidebar.mdwn +++ b/sidebar.mdwn @@ -4,6 +4,7 @@ #### **See also** +* [[My CV|cv]] * [Dimbola](http://dimbola.org/) * [Free Thursday](http://free-thursday.pieni.net/) * [Kalastuskievari](http://kalastuskievari.fi/)
diff --git a/gratis-content.mdwn b/gratis-content.mdwn index 519e3ad..af9d078 100644 --- a/gratis-content.mdwn +++ b/gratis-content.mdwn @@ -36,6 +36,7 @@ or e-mail me at liw@liw.fi. Thanks. * [the.scene](http://www.welcometothescene.com/) * [Sita Sings the Blues](http://www.sitasingstheblues.com/) * [Steal This Film](http://www.stealthisfilm.com/Part2/download.php) +* [Valkaama](http://www.valkaama.com/) # Unsorted
diff --git a/tag.mdwn b/tag.mdwn index a1fbeb4..1575299 100644 --- a/tag.mdwn +++ b/tag.mdwn @@ -1,3 +1,3 @@ All tags used on this site: -[[!pagestats pages="tag/*"]] [essay topics ](http://www.mightystudents.com/) +[[!pagestats pages="tag/*"]]
diff --git a/tag.mdwn b/tag.mdwn index 1575299..a1fbeb4 100644 --- a/tag.mdwn +++ b/tag.mdwn @@ -1,3 +1,3 @@ All tags used on this site: -[[!pagestats pages="tag/*"]] +[[!pagestats pages="tag/*"]] [essay topics ](http://www.mightystudents.com/)
diff --git a/links.mdwn b/links.mdwn index c087043..cfafbae 100644 --- a/links.mdwn +++ b/links.mdwn @@ -61,6 +61,7 @@ incarnation of that web page. **User groups:*** [HUMBUG (Brisbane)](http://www.humbug.org.au/) +[NZPUG](http://nzpug.org/) **Upstreams:** [Sound Converter](http://soundconverter.berlios.de/)
diff --git a/links.mdwn b/links.mdwn index bf9a051..c087043 100644 --- a/links.mdwn +++ b/links.mdwn @@ -59,6 +59,9 @@ incarnation of that web page. [Driver check](http://kmuto.jp/debian/hcl/) [OpenWRT](http://openwrt.org/) +**User groups:*** +[HUMBUG (Brisbane)](http://www.humbug.org.au/) + **Upstreams:** [Sound Converter](http://soundconverter.berlios.de/) [moreutils](http://kitenet.net/~joey/code/moreutils/)
diff --git a/cv.mdwn b/cv.mdwn
index 7923ff3..cdb39ed 100644
--- a/cv.mdwn
+++ b/cv.mdwn
@@ -104,6 +104,8 @@ use, with AutoCAD.
- [Sound Converter](http://soundconverter.berlios.de/), a GUI program
to convert audio files to other formats. Now maintained and developed
by Gautier Portet.
+ - Enemies of Carlotta, a mailing list manager. No longer actively
+ developed.
- isutf8, part of [moreutils](http://kitenet.net/~joey/code/moreutils/),
a tool for determining if a file is correctly UTF-8 encoded. Written
to aid my ISO-8859-1 to Unicode transition.
diff --git a/links.mdwn b/links.mdwn index 6e8f301..bf9a051 100644 --- a/links.mdwn +++ b/links.mdwn @@ -129,6 +129,7 @@ incarnation of that web page. [Tollef's free relay](http://freerelay.err.no/) [Taking care of your domain](http://www.ripe.net/ripe/docs/ripe-114.html) [self-signed certs](http://sial.org/howto/openssl/self-signed/) +[iwantmyname](http://iwantmyname.com/) **General net:** [feed validator](http://feedvalidator.org/)
diff --git a/cv.mdwn b/cv.mdwn
index 47ba732..7923ff3 100644
--- a/cv.mdwn
+++ b/cv.mdwn
@@ -115,6 +115,8 @@ use, with AutoCAD.
- [Obnam](http://braawi.org), a backup program.
* Linux. I helped start its development in 1991, and have been
part of the Linux world ever since.
+ - Wrote sprintf, used by kernel logging engine. This is my only kernel
+ code contribution.
- Moderator of the Usenet newsgroup comp.os.linux.announce 1992-1997
- Helped start and run the Linux Documentation Project, from 1992
to about 1997. Wrote the
diff --git a/cv.mdwn b/cv.mdwn index 01d09d7..47ba732 100644 --- a/cv.mdwn +++ b/cv.mdwn @@ -117,7 +117,9 @@ use, with AutoCAD. part of the Linux world ever since. - Moderator of the Usenet newsgroup comp.os.linux.announce 1992-1997 - Helped start and run the Linux Documentation Project, from 1992 - to about 1997. + to about 1997. Wrote the + [Linux System Administrators' Guide](http://tldp.org/guides.html), + since taken over by others. - [Debian](http://www.debian.org/) development 1996-2009. Now retired. - [Ubuntu](http://www.ubuntu.com/) development 2007-2009. Now retired. * Photography. I've been an amateur photographer since 2001, but do not
diff --git a/index.mdwn b/index.mdwn index 048fb36..8b83474 100644 --- a/index.mdwn +++ b/index.mdwn @@ -10,6 +10,8 @@ Welcome to my corner of cyberspace, where I display those parts of my persona that I wish the public to see. +See my [[CV|cv]]. + This site is implemented as a [[!wikipedia Wiki]], using [ikiwiki](http://ikiwiki.info). You may edit any page, but please use the discussion page for each
diff --git a/cv.mdwn b/cv.mdwn new file mode 100644 index 0000000..01d09d7 --- /dev/null +++ b/cv.mdwn @@ -0,0 +1,140 @@ +[[!meta title="CV / Lars Wirzenius"]] + +## Contact information + + Lars Wirzenius + Phone (Finland): +358 50 346 6626 + Phone (NZ): +64212134174 + E-mail: liw@liw.fi + +## Introduction + +I am a computer programmer, and have been programming since 1984. + +My main programming languages are C and Python. I know TDD, HTML, +TCP/IP, and many other acronyms. + +I am an expert in the Linux environment. Linux and Unix environments +are the only ones I am looking to work in. + +I am strongly in favor of free or open source software. +I prefer to not use or develop proprietary software. I am looking +for ways to earn a living and save the world developing free software. +I prefer working for a small company rather than a large one. + +## Work and training + +**Consultant 2005-current.** I've worked on variety of projects for +several clients. In 2005-2006 I was under contract to improve the +technical quality of the Debian operating system, and as part of +that work developed [piuparts](http://piuparts.debian.org/), +a package testing tool for checking +that packages can be installed, upgraded, and removed without +problems. + +In 2007-2009 I contracted to Canonical, Ltd. to +do Ubuntu development. As part of that I developed the [Computer +Janitor](https://launchpad.net/computer-janitor) +tool to find unnecessary packages, and do some configuration +tweaks, such as adding or removing mount options to improve +performance. + +**[Oliotalo](http://www.oliotalo.fi/) 2002-2004.** Oliotalo develops +applications for machine to machine communication: embedded computers +are attached to vehicles, waste collectors, or other such machines, and +communicate wirelessly with a server. This allows remote monitoring and +telemetry and improves logistics and lowers maintenance costs. I have +designed and implemented the embedded Lisp interpreter +[Hedgehog](http://hedgehog.oliotalo.fi/) with which the embedded +computers are programmed in Oliotalo projects. Using Hedgehog, I have +developed alone and with others several embedded applications. I have +also been responsible for Linux system administration for the company. + +**pieni.net, 2001-** Started a miniature shell-server ISP on the +side with two friends. + +**Akumiitti Telematics / Keko Technologies 2001-2002.** +Keko developed a platform for machine to machine communication. +I designed and implemented an embedded software platform, the KEKO +Terminal. Keko went bankrupt just as the product was getting +finished for its first release, but before the product could be used. + +**Wapit Ltd 1999-2001.** I was project and team leader for the +[Kannel](http://www.kannel.org/), an SMS and WAP gateway. Kannel is a +multithreaded, multiprocess server that can handle high traffic loads. I +was responsible for architectural design, implementation, and project +management. Wapit went bankrupt, but Kannel is still in commercial +production use worldwide. + +**Helsinki University of Technology / CS laboratory / [HiBase +project](http://hibase.cs.hut.fi/) 1997-1999.** HiBase was a research +project to develop a main memory database and functional programming +language. The project ended in 2001 when Nokia withdrew funding. I +participated in its implementation by doing C programming and Linux +system administration. + +**University of Helsinki / Department of Computer Science +1993-1996.** I was a teaching assistant, helping students with +homework and checking their answers. I gave one lectured course on +C programming. + +**Translator examination board summer 1990.** I implemented a database +of official translators with dBase IV. + +**University of Helsinki / Department of Computer Science 1988-2002.** +Student, part-time studies from 1993 onwards on account of working full +time. Not graduated. + +**Extor Oy summer 1988.** I made technical drawings, mainly for sales +use, with AutoCAD. + + +## Natural languages + +* Finnish: native language (mother's side) +* Swedish: native language (father's side) +* English: excellent +* German: very poor + + +## Hobbies + +* Free software, 1990-. I develop software as a hobby, + although I never publish most of it. Some exceptions: + - [Sound Converter](http://soundconverter.berlios.de/), a GUI program + to convert audio files to other formats. Now maintained and developed + by Gautier Portet. + - isutf8, part of [moreutils](http://kitenet.net/~joey/code/moreutils/), + a tool for determining if a file is correctly UTF-8 encoded. Written + to aid my ISO-8859-1 to Unicode transition. + - [CoverageTestRunner](http://code.liw.fi/coverage-test-runner/), + runs Python unit tests and fails them if they + don't have full coverage (not counting explicitly excluded parts) + - [Dimbola](http://dimbola.org/), a new attempt at a photo manager + a la Adobe Lightroom + - [Obnam](http://braawi.org), a backup program. +* Linux. I helped start its development in 1991, and have been + part of the Linux world ever since. + - Moderator of the Usenet newsgroup comp.os.linux.announce 1992-1997 + - Helped start and run the Linux Documentation Project, from 1992 + to about 1997. + - [Debian](http://www.debian.org/) development 1996-2009. Now retired. + - [Ubuntu](http://www.ubuntu.com/) development 2007-2009. Now retired. +* Photography. I've been an amateur photographer since 2001, but do not + currently publish my pictures anywhere. +* [Effi](http://effi.org/) is a political organization protecting + basic human freedoms; sister organization to the American EFF. + Board member 2009. +* [Alter Ego ry](http://www.helsinki.fi/jarj/ae/) is the role-playing + assocation at the University of Helsinki. Board member 2000, + listmaster 2001-2003. +* [IKI ry](http://www.iki.fi/) is a non-profit association for + providing permanent e-mail and web addresses. + Board member 1996-1998, 2002. +* OtaDATA ry is an assocation for people interested in computers. + Board member 1997, vice president 1998. +* Usenet news [sfnet hierarchy](http://www.cs.tut.fi/sfnet/) + co-ordinator 1995, in charge of deciding which groups to create. +* [Spektrum rf](http://www.helsinki.fi/~fyl_spek/) is a student association + for computer science, math, physics, and chemistry students at the + University of Helsinki. Board member 1994, also other duties 1991-1995.
diff --git a/sidebar.mdwn b/sidebar.mdwn index 1604789..8fe8a6e 100644 --- a/sidebar.mdwn +++ b/sidebar.mdwn @@ -7,3 +7,8 @@ * [Dimbola](http://dimbola.org/) * [Free Thursday](http://free-thursday.pieni.net/) * [Kalastuskievari](http://kalastuskievari.fi/) + +<hr /> + +All content on this site is copyrighted by +Lars Wirzenius and possibly other authors (it's a wiki), and licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution-Share Alike 3.0 Unported License</a>.
Add a comment