BSD Planet * BSD People

May 09, 2008

Hubertf's NetBSD Blog

DaemonForums - New *BSD Forums

Kienja Kenobi wrote me to advertize the new DaemonForums website: ``The community is one of the most important aspects of *BSD. Without it, new users are not likely to succeed. Without the support found in places such as mailing lists and forums, new users are not even likely to make an attempt at a new operating system. To meet the need for easily accessible, user-friendly forums for *BSD, DaemonForums has been created.

Why DaemonForums? Up until recently, BSDForums.org has been the authoritative resource for *BSD forum help. However, due to the inactivity of the sole administrator of BSDForums, the forums have become impossible to manage due to volumes of spam, outdated software, and an anti-free (as in freedom) copyright license. The two active moderators on BSDForums have been clearing spam at a non-stop pace for months, but they have been powerless to put a long-term end to any spam. The moderators have now given up the impossible battle at BSDForums, so soon it will be flooded by useless, junk posts that outweigh the useful, BSD-oriented information. Therefore, DaemonForums is filling the gap. (See: http://www.bsdforums.org/forums/showthread.php?t=59607)

DaemonForums hopes to become the one-stop resource for completely help-oriented *BSD information. The leading members of BSDForums have migrated to DaemonForums and are now spear-heading the movement to the new forums, which are built specifically to prevent spam and outlast any single administrator.''

Enjoy!

May 09, 2008 01:23 AM

May 08, 2008

Hubertf's NetBSD Blog

More kernel works: preemption and realtime, devfs, modules, testing

The following kernel-related projects were raised in the past few weeks:

May 08, 2008 03:41 PM

May 06, 2008

Hubertf's NetBSD Blog

NetBSD reference card

Leonardo Taccari had the idea to make a reference card for NetBSD and pkgsrc, and has posted about it. The card is available in english and italian language, and covers links, commands for audio, localization, managing users and groups, monitoring the system, the NetBSD rc.d startup system, starting and stopping of services, wscons, pkgsrc and related tools and more.

May 06, 2008 11:57 PM

April 30, 2008

Hubertf's NetBSD Blog

pkgsrcCon 2008 - Registration and CFP Reminder

Lubomir Sedlacik has sent out a reminder about the pkgsrcCon 2008 registration and Call for Paper: ``There is only a month left until the registration deadline, June 1st!

The fifth annual pkgsrcCon will convene in Berlin, Germany on Jun 13 - 15, 2007.

pkgsrcCon is a technical conference for people working on the NetBSD Packages Collection (pkgsrc), focusing on existing technologies, research projects, and works-in-progress in pkgsrc infrastructure. Developers, contributors, and users are all welcome to attend, and to share an excellent opportunity to gather and to discuss ideas face-to-face on how to improve pkgsrc.

Registration is required for attendance since we have to provide beforehand a list of participants to the university. Everyone whose name is not on the list will not be able to enter the campus (and thus attend pkgsrcCon) on Saturday and Sunday. Also, for that reason please be sure to bring along with you some valid photo ID of yours (passport, government issued ID card).

There is also still some room for more presentations! Deadline for presentation submissions is May 25th.

For more information, including:

please visit http://www.pkgsrcCon.org/2008/''

April 30, 2008 11:42 AM

April 28, 2008

Hubertf's NetBSD Blog

BSD Magazine: 1st issue is out now!

After the DaemonNews paper magazine is long gone, there's a new paper magazine BSD Magazine now! Dru Lavigne lists the contents in her blog article on the mag, shamelessly ripped off here:

Besides the articles, the mag contains a DVD with FreeBSD 7.0.

I guess this is a very good thing, and an opportunity to show what NetBSD is and can do. I'm sure the publishers will be happy to receive more articles about NetBSD -- contribute!

April 28, 2008 09:54 PM

Reducing libc size

In embedded environments, space is always scarce - be it physically, for storage (disk/flash space), or for for computer memory. Mikko Rapeli has made that experience with NetBSD, and posted his solution, which is to reduce NetBSD's libc in size -- see his documentation!

Jörg Sonnenberger pointed out that another possible approach to save both diskspace and also (to some extent) RAM when running executables is not to use shared libs, but to use NetBSD's "crunchgen". Crunchgen statically links multiple binaries and their libs into a single executable, saving diskspace and RAM -- exactly what "busybox" does in the Linux world, just highly configurable and working with any sources. This is a very cool feature of NetBSD, which is used to prepare the install media from src/distrib, but it's also a very undocumented area of NetBSD. Any takers for a "beastybox" article? :-)

April 28, 2008 09:48 PM

Recent development related to puffs, ReFUSE, rump, and more (Updated)

NetBSD's kernel is under very active development these days, and while many changes are related to improve SMP, it's not the only area. An area where very interesting and unique work is being done is the filesystem interfaces that Antti Kantee is working. Things started out as a past year's Google "userfs" SoC project to implement an interface for running filesystem code in userland. The project was imported into NetBSD some time ago. On top of that, a library that mimics the Linux interface for filesystems in userland. Following the Linux name FUSE, the re-implementation is called ReFUSE (pun intended :). See the webpage about puffs, refuse, FUSE on the NetBSD website for more information.

Another project that was started by Antti after his work to run filesystem code in userland is "rump". The project allows to use "ordinary" filesystems that usually run inside the kernel, and mimic an environment similar to what's available inside the kernel, and move the whole filesystem into userland - verbatime, with no code changes! This allows to develop filesystem code in userland, and later on move it inside the kernel with no further changes - a bit step forward for filesystem development!

This all sounds rather easy, but as filesystems need to move data between storage and memory, a big issue in filesystems is interfacing with the virtual memory subsystem, and adding interfaces like puffs and ReFUSE also needs to consider VM for efficient transfers and caching.

Work in this area is still ongoing, and I've asked Antti about his recent achievements in this area[1]. While the only user-visible change is caching and performance improvements in the Secure Shell filesystem's handler "mount_psshfs", most of the changes are on the inside. Antti wrote me: ``The interesting ones from a programmer's perspective are probably:

Finally, while not really useful for anything except puffs development, I think the following is cool from the perspective of completeness:

''

With puffs and rump, there are two very interesting and active projects doing research in filesystems on NetBSD, which may lead to changes in the way filesystems are understood in the Unix world. While there, a third project that may be worth watching in this regards is this year's Google hurdt Summer of Code project by Marek Dopiera, which aims at implementing Hurd translators for NetBSD,

Update: Antti dropped me a note that another project related to filesystems is this year's "fs-utils" SoC project. The goal is to create a userland tool to manipulate filesystem images, and the idea is to reuse kernel code with the ukfs library. That way, no redundancy between kernel sources and userland sources are created, and both areas benefit from mutual testing and code maturity.

April 28, 2008 09:28 PM

April 27, 2008

Hubertf's NetBSD Blog

Plat'Home's SSD Linux: Linux Kernel + NetBSD Userland

Google News has pointed this outa few times, but as the NetBSD/evbppc port runs on their OpenBlockS for some time, I haven't paid much attention to Plat'Home's new OpenMicroServer. Timo Schoeler has pointed me at an interesting article in The Register, though (part one / two), which mentions a funny detail on what the machines ship with as operating system: ``The unit runs the SSD Linux operating system, which straps NetBSD userland functions onto the Linux kernel.''

From the SSD/Linux homepage: ``SSD/Linux is the Linux distribution developed by Plat'Home, for use with the MicroServer series. The distribution is optimized to fit on a small internal ROM, while offering all necessary functions for networking and peripheral devices.

The name of the distribution is derived from its place of development, Sotokanda in Tokyo, in imitation of BSD. It is published under a BSD-style open license. See the User's Guide for more information.

While the OS uses a Linux kernel, most of the userland is taken from NetBSD.''

April 27, 2008 12:57 PM

April 26, 2008

Hubertf's NetBSD Blog

Call For Open Source Awards 2008 Nominations

Let me quote this in full from O'Reilly's Allison Randal's blog: ``For the 4th year running, Google and O'Reilly will present a set of Open Source Awards at OSCON 2008. The awards recognize individual contributors who have demonstrated exceptional leadership, creativity, and collaboration in the development of Open Source Software. Past recipients for 2005-2007 include Doc Searls, Jeff Waugh, Gerv Markham, Julian Seward, David Heinemeier Hansson, Karl Fogel, David Recordon, and Paul Vixie.

The nomination process is open to the entire open source community, closing May 15th, 2008. Send your nominations to osawards AT oreilly DOT com. Nominations should include the name of the recipient, any associated project/org, suggested title for the award ("Best Hacker", "Best Community Builder", etc.), and a description of why you are nominating the individual. Google and O'Reilly employees cannot be nominated.''

Who's your #1 NetBSD person? Discuss at netbsd-advocacy@NetBSD.org, suggest to osawards@oreilly.com!

April 26, 2008 12:43 PM

April 24, 2008

Hubertf's NetBSD Blog

Summer of Code, and Security Advisories

Just a mini-catchup, I'm too lazy to duplicate the details here:

Speaking of importing 3rd party code... I think it would be nice if someone would actually start work to closely integrate 3rd packages with the NetBSD operating system's base install. That way, such software could be installed (and updated...) via the package handling system, without juggling around the sources, rebuilding and reinstalling the base system. I'm sure there's plenty of stuff in NetBSD's src that could be phased out with the help of a properly integrated packaging system. Any takers?

April 24, 2008 02:16 PM

April 17, 2008

Hubertf's NetBSD Blog

Draco GNU/Linux 0.3.0 - powered by pkgsrc

From the e-linux.it announcement: ``Draco GNU/Linux is a distribution based on Slackware Linux and "pkgsrc", a package management system developed by NetBSD.

A new version, 0.3, was released a few days ago: "Introducing Draco GNU/Linux 0.3.0. Featuring kernel 2.6.23 (with optional 2.6.16), glibc 2.6.1, GCC 4.1.2, and OSS 4.0. Selected packages from pkgsrc are available through the repository and on an ISO image. This release also introduces Draco Desktop. Draco Desktop contains the latest stable Draco release, bundled with software from the latest pkgsrc branch. Draco Desktop defaults to Xfce, with Fluxbox as an option." Here is the brief release announcement. Draco GNU/Linux 0.3.0 is available for download either as a minimal base system or a "Desktop" edition, an installation CD with Xfce and Fluxbox window managers.

Download the CD images from here: draco-0.3.0.iso (232MB, MD5), draco-desktop-2007Q4.iso (596MB, MD5).''

April 17, 2008 12:11 PM

NetBSD on the Asus EeePC: Status page

I've committed a webpage describing NetBSD's support of the Asus EeePC. This is done with input from several people, and I'll be happy to add more data to the page. E.g. the Installation section could do with some more words.

Also, if someone has a picture of an EeePC running NetBSD, that'd be nice to add to that page (and to our "NetBSD in Action" gallery). I don't own an EeePC myself to make such a picture. URLs preferred.

April 17, 2008 12:05 AM

April 15, 2008

The Julipedia (Blog)

Lost 4x05

Watched episode 5 from season 4, titled &lt;a href="http://www.lostpedia.com/wiki/The_Constant"&gt;The Constant&lt;/a&gt;, yesterday night.  As a couple of friends put it: "Best. Episode. Ever."  Let's hope this trend doesn't end here!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3 more left to catch up.&lt;/div&gt;</content>

by Julio M. Merino Vidal at April 15, 2008 09:48 PM

April 13, 2008

Hubertf's NetBSD Blog

firefox-bin: undefined symbol: _ctype_ (fix)

Trying to get the Linux firefox binary going, I got this today:

% firefox-linux 
/usr/pkg/lib/firefox-linux/firefox-bin: symbol lookup error: /usr/X11R6/lib/libfreetype.so.9: undefined symbol: _ctype_ 
After upgrading all the packages, the error persisted (doh). After some digging, the solution is quite simple:
% unsetenv LD_LIBRARY_PATH

April 13, 2008 08:27 PM

April 12, 2008

The Julipedia (Blog)

Back to Stone Age

For a rather long while I had been able to avoid the use of the &lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt; services offered by my research group even if they were omnipresent. But today, this lucky trend vanished. I have been "forced" to use one of these devilish repositories to add some of my stuff. Using this goes against my "principles", as a colleague said.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you don't know it, Subversion is a &lt;span class="Apple-style-span" style="font-style: italic;"&gt;centralized&lt;/span&gt; version control system.  Linear history, the non-transparent way to back up the master server, primitive merging interfaces and, the worst thing of all, &lt;span class="Apple-style-span" style="font-style: italic;"&gt;the need to access the network for &lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic; "&gt;every single operation&lt;/span&gt; are unbearable facts.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Using a centralized VCS is like going back in time a million years. (Oh, excuse me, a million is too few.) I &lt;span class="Apple-style-span" style="font-style: italic;"&gt;hate&lt;/span&gt; it!  I recently went on a &lt;a href="http://julipedia.blogspot.com/2008/04/netbsd-talk-at-isla-cristina.html"&gt;trip&lt;/a&gt; and didn't have Internet access neither on the plane nor on the hotel; do you know how cool it was to still have full access (not just the working copy, that is) to my code, documents and everything else?  And even if you have Internet access, can you imagine how fast you can work without having to wait for the network?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well, I can't really blame the administrators. As far as I can tell, they are not too familiar with VCSs and, when making a decision, they just went for what was everywhere, which unfortunately is Subversion is everywhere. Everybody is making that mistake in this department and university.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Let's see when I will have some free time to prepare a presentation about DVCSs (including &lt;a href="http://monotone.ca/"&gt;Monotone&lt;/a&gt; as a case study) and give it to the whole department.  Given today facts, I should do this as soon as possible.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/end-of-rant&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Administrators, I know you are reading me.  Don't take this the wrong way! ;-)&lt;/div&gt;</content>

by Julio M. Merino Vidal at April 12, 2008 08:48 PM

Hubertf's NetBSD Blog

The Machine Emulator

From the freshmeat.net announcement: `` The Machine Emulator, or tme, provides a general-purpose framework for computer emulation. The goal is to create a large library of modules, each emulating a specific computer chip, bus, board, etc. These modules offer standard interfaces that allow you to connect them together to create a whole machine emulation with a minimum of effort.

This release can emulate a Sun 2/120 running NetBSD, a Sun 2/120 running NetBSD, a Sun 3/150 running NetBSD, and a SPARCstation 2 running NetBSD or SunOS 4.1.4 (aka Solaris 1.1.2).''

The interesting part here is the Sun 3 support - machines of that class run on Motorola m68k CPUs, and so far not many emulators are available for that machine, esp. ones that can run NetBSD. (I know about UAE, but I haven't heared reports of it running NetBSD. Correct me if I'm wrong!)

April 12, 2008 02:35 AM

April 09, 2008

Hubertf's NetBSD Blog

SMP on OpenFirmware based PowerPC machines in-tree

There's more to SMP than just Intel- and -compatible machines. PowerPC-hackers Tim Rightnour and Matt Thomas have added support for SMP on OpenFirmware based PowerPC machines, i.e. the NetBSD/ofppc port. The support is already committed to the NetBSD-current source tree, and Tim has posted the dmesg output of a 4-CPU machine, an IBM 7044-270. He also notes that this is the first PowerPC machine with four processors to ever run NetBSD.

April 09, 2008 01:17 AM

How to get world-class SMP performance with NetBSD, by ad and rmind

Andew Doran is currently employed by The NetBSD Foundation to change NetBSD's SMP implementation from big-lock to fine-grained kernel locking. With hin, Mindaugas Rasiukevicius has done a lot of work on NetBSD's scheduler, and Yamamoto Takashi has added a fair share of further infrastructure work in the kernel. I've asked them about their progress in the past months, and the following points give a rough idea on what was achieved so far, and what can still be expected.

The story so far. Andrew Doran writes: `` The kernel synchronization model has been completely revamped since NetBSD 4.0, with the goal of making NetBSD a fully multithreaded, multiprocessor system with complete support for soft real-time applications.

Through NetBSD 4.0, the kernel used spinlocks and a per-CPU interrupt priority level (the spl(9) system) to provide mutual exclusion. These mechanisms did not lend themselves well to a multiprocessor environment supporting kernel preemption. Rules governing their use had been built up over many years of development, making them difficult to understand and use well. The use of thread based (lock) synchronization was limited and the available synchronization primitive (lockmgr) was inefficient and slow to execute.

In development branch that will becomple NetBSD 5.0, a new rich set of synchronization primitives and software tools have been developed to ease writing multithreaded kernel code that executes efficiently and safely on SMP systems. Some of these are:

Mindaugas adds a few more items: `` The Future. Besides those achievements, there is more development work ongoing, and a number of items were presented for review and comment the past week, which will have further impact on NetBSD's performace on multicore and SMP machines: A call for participation: Benchmark! I think this is a very long list of changes, which will all be available in the next major release of NetBSD. Starting now, it would be interesting to measure and estimate the performance of NetBSD in comparison to other operating systems that emphasize SMP (but still keep performance a goal on uniprocessor machines) -- FreeBSD, Linux and Solaris/x86 come to mind. Possible benchmarks could include simple Bytebench, dhrystone and Bonnie benchmarks over more complex ones like postmark and database and webserver benchmarks. If anyone has numbers and/or graphs, please post them to the tech-perform@NetBSD.org mailing list!

April 09, 2008 01:10 AM

Cuneiform opensourced under BSD license

This is not strictly NetBSD-related, but still of interest as I consider licensing an important topic. Mike 'mishka' Volokhov wrote me mail to point out that the Cuneiform OCR program was recently opened under a BSD license. Mike notes that according to the Cuneiform Forum (russian language), the license for the Puma OCR core was chosen for three reasons:

If you ever need to convince your PHB to use the BSD license, there's one more example for you, now. Thanks Mike!

April 09, 2008 12:20 AM

AsiaBSDCon 2008 Papers

AsiaBSDCon 2008 was held in March 2008 in Tokyo, Japan. There werea number of interesting papers and talks, and a number of them had a focus on NetBSD:

April 09, 2008 12:12 AM

April 06, 2008

Hubertf's NetBSD Blog

Convincing your nearest Pointy-Haired Boss of NetBSD

Joel Carnat pointed me over at the OpenBSD lists, on which a discussion on how to get your employer to understand and possble switch operating systems. I guess the matter at fact is also of importance to NetBSD, and there are a number of items that apply to NetBSD as well, just in case you are looking how to convince your boss to drop that OpenBSD^WLinux box.

Nick Holland has posted a number of items which were edited here, see the link for full information:

Also, "Matt" adds a number of tricks on how to convince your boss. Abbreviated strongly here as well, see Matt's posting for the full version with all the details: While the mails were written with OpenBSD in mind, I think much of them apply to NetBSD as well. I'm not sure I agree 100% with all things said, but it's definitely a very good approach that more people should take! Send your testimonials about how your company switched to NetBSD to www @ NetBSD . org (feel free to put me on CC :-).

April 06, 2008 01:33 AM

April 05, 2008

The Julipedia (Blog)

NetBSD talk at Isla Cristina

Yesterday night, I got back from the "&lt;a href="http://www.iesmirabent.com/jornadas/index2.html"&gt;I Jornadas Tecnológicas Isla Cristina&lt;/a&gt;", a small technological conference organized at Isla Cristina, a little town in Huelva, Spain.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The main organizers were the teachers of a local technical school (the IES Padre José Miravent), and they invited me to give a talk about NetBSD development.  I will &lt;a href="http://www.netbsd.org/gallery/presentations/"&gt;publish the slides&lt;/a&gt; soon, but I have to warn you that you will not like the source format, aka PowerPoint. Being part of the university personnel, I was given a copy of Office 2008 for Mac and I wanted to give it a serious try before judging it.  It is certainly more powerful (or easy to use) than OpenOffice Impress, but it is also a lot slower; I don't know what they have done there, but the application feels really really sluggish.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Anyway, back to the point of the conference.  It has been great and surpassed all the expectations I had.  The organization was excellent, the people was very nice, the food was (very) abundant and the talks were interesting (except for a couple of exceptions).  What else could you ask for?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Just as a point of fact, there were around 300 registered people, and I guess around 100 of them came to my talk (it was first hour in the morning); that's a lot more public than I have ever had before, and it was a really exciting thing.  I hope the listeners enjoyed it as much as I did.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The only thing I regret was not staying there one more day (after the conference) so I could go around the town and take some cool photos.  Maybe next year :-)  Ah, speaking of next year: if you get invited to give a talk, don't think twice and accept the offer!&lt;/div&gt;</content>

by Julio M. Merino Vidal at April 05, 2008 09:48 PM

April 01, 2008

Hubertf's NetBSD Blog

Testdrive the new pkgsrc.se site

Leo Lundgren from the swedish netbsd.se / pkgsrc.se crew has notified me that they have massively revamped their pkgsrc website, and are asking for tester. The new site can be found at test.pkgsrc.se. The list of changes as outlined in the forum are:

Fredrik Carlsson also encourages users in the forum: ``We practically vacuum pkgsrc for information, but not everything is presented on the web pages. If you have ideas on what should be visible or how it should look, put a post here or email us. We are very flexible at this point and would like help presenting the information.''

April 01, 2008 11:24 PM

March 30, 2008

The Julipedia (Blog)

New Apple keyboard

I recently went from this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_xLbGV919cEE/R-_dnI6W8FI/AAAAAAAAAD4/gbW-pWJPsFg/s1600-h/Old+keyboard.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_xLbGV919cEE/R-_dnI6W8FI/AAAAAAAAAD4/gbW-pWJPsFg/s400/Old+keyboard.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5183605360603623506" /&gt;&lt;/a&gt;&lt;br /&gt;To this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_xLbGV919cEE/R-_dqI6W8GI/AAAAAAAAAEA/biht1jJVfCQ/s1600-h/New+keyboard.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_xLbGV919cEE/R-_dqI6W8GI/AAAAAAAAAEA/biht1jJVfCQ/s400/New+keyboard.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5183605412143231074" /&gt;&lt;/a&gt;&lt;br /&gt;The reason for the change was that the old keyboard was not comfortable any more after around two years of usage. I think that the old keyboard model (in general, not the specific one I had) developed problems after some months of intensive use: its keys lost the smooth pressure feeling they once had.  (Maybe adding some kind of oil beneath them might fix this problem, though, as the keys can be easily detached from the keyboard.)  Due to that, it was becoming extremely hard to type on that keyboard without mistakes. Plus I have lately got used to laptop-style keyboards: short and soft keys.&lt;div&gt;&lt;br /&gt;The new keyboard model feels nicely so far. It surely is basically a desktop-sized laptop keyboard, as its keys are very short and soft. But overall I like how I type on it, and my error ratio has lowered back to almost zero again :-)  If you are dubious about buying this keyboard, give it a try!&lt;/div&gt;</content>

by Julio M. Merino Vidal at March 30, 2008 06:48 PM

March 28, 2008

wormulon.net-BSD Hendrik Scholz (Blog)

Philly loot

<div xmlns="http://www.w3.org/1999/xhtml"> Here's most of the stuff that I obtained lately in Philadelphia.<br> <br> <div class="imgcontainer"><img src="http://www.wormulon.net/blogimages/2008/2008-03-philly_loot.jpg" width="550" height="413" alt="loot"><div class="imgtitle">DVDs, Oreos, Kahlua Especial, M&amp;Ms</div></div><br> <div class="imgcontainer"><img src="http://www.wormulon.net/blogimages/2008/2008-03-philly_chewinggum.jpg" width="550" height="278" alt="chewing gum"><div class="imgtitle">the chewing gum close up</div></div><br> </div> </content>

by Hendrik Scholz at March 28, 2008 06:48 PM

March 22, 2008

The Julipedia (Blog)

Problems booting Debian on the PS3

I had been running Fedora 8 for a long while on my PlayStation 3, but I got sick every time I had to run a &lt;tt&gt;yum update&lt;/tt&gt;: that process was very slow. Furthermore, I prefer Debian as a Linux distribution due to its administration utilities and strong policies, so I thought to give it a second chance on my PS3. Second? Yes, I already installed it a while ago, but given that the Cell SDK is only packaged for Fedora made me switch. Anyway, as I'm not doing as much Cell development as I thought at home, I don't care any more and want to install something I'll enjoy. Eventually that'll be NetBSD...&lt;br /&gt;&lt;br /&gt;So I installed Debian 4.0 using the &lt;a href="http://www.keshi.org/moin/PS3/Debian/Installer"&gt;experimental installer&lt;/a&gt;. The process went flawlessly, but I chose to do manual partitioning: I created a 1GB partition for swap as &lt;tt&gt;/dev/ps3da1&lt;/tt&gt; and a 9GB ext3 partition for the root file system as &lt;tt&gt;/dev/ps3da2&lt;/tt&gt;, in that order. Then, after installation, I was greeted by an unbootable system: for some reason, kboot failed to mount &lt;tt&gt;/dev/ps3da2&lt;/tt&gt; as its root file system and hence it couldn't parse its &lt;tt&gt;kboot.conf&lt;/tt&gt;. Salvaging that situation was easy though: just mount that file system by hand, check the contents of &lt;tt&gt;/etc/kboot.conf&lt;/tt&gt; and manually enter the command on the command line.&lt;br /&gt;&lt;br /&gt;But why was that failing? I already found this problem some months ago with the first attempt at installing Debian. And, for what is worth, things worked fine in Fedora 8, and it had the boot loader configuration files in the same place. After Googling a bit I found no answer, so I opted to read kboot's &lt;tt&gt;init&lt;/tt&gt; code. And there was the explanation: when looking for a root file system, it checks if the file system is marked as active and skips it if not.&lt;br /&gt;&lt;br /&gt;The solution was to install the &lt;tt&gt;pmac-fdisk&lt;/tt&gt; package under Debian, access the partition table of &lt;tt&gt;/dev/ps3d&lt;/tt&gt;, mark &lt;tt&gt;/dev/ps3da2&lt;/tt&gt; as active, save the changes and reboot to see the system boot automatically.</content>

by Julio M. Merino Vidal at March 22, 2008 03:48 PM

March 20, 2008

FreeBSD Diary

ThinkPad x61s

Unpacking the box, installing PC-BSD

March 20, 2008 12:48 AM

March 19, 2008

The Julipedia (Blog)

Google Summer of Code 2008 and NetBSD

Google has launched the &lt;a href="http://code.google.com/soc/2008/"&gt;Summer of Code&lt;/a&gt; program once again this year, and &lt;a href="http://www.netbsd.org/"&gt;NetBSD&lt;/a&gt; is a mentoring organization for the fourth time as &lt;a href="http://mail-index.netbsd.org/netbsd-announce/2008/03/18/msg000014.html"&gt;announced in a netbsd-announce post&lt;/a&gt;. Unless things go very wrong in the following days, I will not take part this year as a &lt;i&gt;student&lt;/i&gt; because I will be intering at Google SRE during the Summer!&lt;br /&gt;&lt;br /&gt;However, I will try to become a mentor for the "&lt;a href="http://www.netbsd.org/contrib/soc-projects.html#convert-regress-to-atf"&gt;Convert all remaining regression tests to ATF&lt;/a&gt;" project. If you are looking for some interesting idea to apply for, this is a good one! Why?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It will let you get into NetBSD internals in almost all areas of the system: you'll need to understand how the source tree is organized, how to add new components to it (because tests are almost in all aspects regular programs), how the current pieces of the system interact with each other...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;You will need to gain knowledge in some areas (such as the kernel or the libraries) to be able to port tests from the old framework (if it deserves that name ;-) to the new one and, if you are really up to it, even add new tests for functionality that is currently uncovered by the test suite. But adding new tests is something you will not be required to do, because the sole task of migrating the existing ones is a huge task already.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Get involved in &lt;a href="http://www.netbsd.org/%7Ejmmv/atf/"&gt;ATF&lt;/a&gt;'s development because, as you study the existing test cases and their requirements, you will most likely find that it lacks some important functionality to make things really straightforward.&lt;/li&gt;&lt;li&gt;And, of course, make a unvaluable contribution to the NetBSD operating system. Having a public test suite with high coverage means that the system will gain quality. Yes, you will most likely uncover bugs in many areas of the system and give them enough exposure so that someone else may fix them.&lt;/li&gt;&lt;/ul&gt;Note that this project is really a Summer of &lt;i&gt;Code&lt;/i&gt; project. It does not have a long design phase on its own so, once you have got used to the system and ATF, you'll just code and immediately make useful contributions. In the past, projects that had a heavy design phase involved were not good because, in the end, the student did not finish the code on time.&lt;br /&gt;&lt;br /&gt;So... don't hesitate to apply! I'm looking forward to see your applications for this project :-)</content>

by Julio M. Merino Vidal at March 19, 2008 11:48 AM

March 17, 2008

FreeBSD Diary

Using two monitors with X.org

The GeForce 8600 GT with two monitors

March 17, 2008 12:48 AM

March 16, 2008

wormulon.net-BSD Hendrik Scholz (Blog)

American Express online accounts

<div xmlns="http://www.w3.org/1999/xhtml"> People are wondering why they are losing money online ... I needed to look something up and went to Amex to <em>register</em> my card. I was prompted with the following dialog:<br> <br> <div class="imgcontainer"><img src="http://www.wormulon.net/blogimages/2008/2008-03-amex-account.png" width="550" height="131" alt="Amex Account creation"><div class="imgtitle">Amex online account creation</div></div><br> <br> Here is the fine print:<br> <blockquote>Your User ID should contain 5 to 20 characters . at least one letter (not case sensitive) and contain no spaces or special characters (e.g. &, >, *, $, @)</blockquote><br> <blockquote>Your Password should contain 6 to 8 characters . at least one letter and one number (not case sensitive), contain no spaces or special characters (e.g. &, >, *, $, @) and be different from your User ID.</blockquote><br> <br> The user names and passwords are not case sensitive and the amount of special characters is severely limited. I wonder how often people break into third party accounts simply due to the fact that it is easy to guess passwords. And American Express is supposed to be good as these things as people move millions of dollars through them on a daily basis. </div> </content>

by Hendrik Scholz at March 16, 2008 06:48 PM

February 28, 2008

The Julipedia (Blog)

Software bloat, 2

A long while ago &amp;mdash; just before buying the MacBook Pro &amp;mdash; I already &lt;a href="http://julipedia.blogspot.com/2006/12/software-bloat.html"&gt;complained about software bloat&lt;/a&gt;. A year and two months later, it is time to complain again.&lt;br /&gt;&lt;br /&gt;I am thinking on renewing my MacBook Pro assuming I can sell this one for a good price. The reasons for this are to get slightly better hardware (more disk, better GPU and maybe 4GB of RAM) and software updates. The problem is: if I am able to find a buyer, I will be left without a computer for some days, and that's not a good scenario. I certainly don't want to order the new one without being certain that I will be paid enough for the current one.&lt;br /&gt;&lt;br /&gt;So yesterday I started assembling some old components I had lying around aiming at having an old but functional computer to work with. But today I realized that I also had the PlayStation 3 with Fedora 8 already installed, and that it'd be enough to use as a desktop for a week or so. I had trimmed down the installation to the bare minimum so that it'd boot as fast as possible and to leave free resources for testing Cell-related stuff. But if I wanted to use the PS3 as a desktop, I needed, for example, GNOME.&lt;br /&gt;&lt;br /&gt;Ew. Doing a &lt;tt&gt;yum groupinstall "GNOME Desktop Environment"&lt;/tt&gt; took quite a while, and not because of the network connection. But even if we leave that aside, starting the environment was painful. &lt;i&gt;Really&lt;/i&gt; painful. And Mono was not there, at all! It is amazing how unusable the desktop is with "only" 256MB of RAM; the machine is constantly going to swap, and the disk being slow does not help either. I still remember the days when 256MB was a lot, and desktop machines were snappy enough with only half of that, or even less.&lt;br /&gt;&lt;br /&gt;OK, so GNOME is a lot for 256MB of RAM. I am now writing this from the PS3 itself running WindowMaker. Which unfortunately does not solve all the problems &amp;mdash; and the biggest one is that it is not a desktop environment. Firefox also requires lots of resources to start, and doing something else in the background still makes the machine use swap. (Note that I have disabled almost all of the system services enabled by default in Fedora, including SELinux.)&lt;br /&gt;&lt;br /&gt;If I finally sell my MBP, this will certainly be enough for a few days... but it's a pity to see how unusable it is. (Yeah, by today's standards, the PS3 is extremely short on RAM, I know, but GNOME used to run quite well with this amount of RAM just a few years ago.)</content>

by Julio M. Merino Vidal at February 28, 2008 10:48 PM

February 24, 2008

The Julipedia (Blog)

ATF's error handling in C

One of the things I miss a lot when writing the C-only code bits of ATF is an easy way to raise and handle errors. In C++, the normal control flow of the execution is not disturbed by error handling because any part of the code is free to notify error conditions by means of exceptions. Unfortunately, C has no such mechanism, so errors must be handled explicitly.&lt;br /&gt;&lt;br /&gt;At the very beginning I just made functions return integers indicating error codes and reusing the standard error codes of the C library. However, that turned out to be too simple for my needs and, depending on the return value of a function (not an integer), was not easily applicable.&lt;br /&gt;&lt;br /&gt;What I ended up doing was defining a new type, &lt;tt&gt;atf_error_t&lt;/tt&gt;, which must be returned by all functions that can raise errors. This type is a pointer to a memory region that can vary in contents (and size) depending on the error raised by the code. For example, if the error comes from libc, I mux the original error code and an informative message into the error type so that the original, non-mangled information is available to the caller; or, if the error is caused by the user's misuse of the application, I simply return a string that contains the reason for the failure. The error structure contains a type field that the receiver can query to know which specific information is available and, based on that, cast down the structure to the specific type that contains detailed information. Yes, this is very similar to how you work with exceptions.&lt;br /&gt;&lt;br /&gt;In the case of no errors, a null pointer is returned. This way checking for an error condition is just a simple pointer check, which is no more expensive than an integer check. However, handling error conditions is more costly, but given that these are rare, it is certainly not a problem.&lt;br /&gt;&lt;br /&gt;What I don't like too much of this approach is that any other return value must be returned as an output parameter, which makes things a bit confusing. Furthermore, robust code ends up cluttered with error checks all around given that virtually any call to the library can produce an error somewhere. This, together with the lack of RAII modeling, complicates error handling a lot. But I can't think of any other way that could be simpler but, at the same time, as flexible as this one. Ideas? :P&lt;br /&gt;&lt;br /&gt;More details are available in the &lt;a href="http://mtn-host.prjek.net/viewmtn/atf/revision/file/1dc8887d38a3001e5465217991b054a4dab3a253/atf-c/error.h"&gt;atf-c/error.h&lt;/a&gt; and &lt;a href="http://mtn-host.prjek.net/viewmtn/atf/revision/file/1dc8887d38a3001e5465217991b054a4dab3a253/atf-c/error.c"&gt;atf-c/error.c&lt;/a&gt; files.</content>

by Julio M. Merino Vidal at February 24, 2008 06:48 PM

February 18, 2008

The Julipedia (Blog)

Rewriting parts of ATF in C

I have spent part of past week and this whole weekend working on a C-only library for ATF test programs. An extremely exhausting task. However, I wanted to do it because there is reluctancy in NetBSD to write test programs in C++, which is understandable, and delaying it more would have made things worse in the future. I found this situation myself some days ago when writing tests for very low level stuff; using C++ there felt clunky, but it was still possible of course.&lt;br /&gt;&lt;br /&gt;I have had to reimplement lots of stuff that are given for-free in any other, &lt;i&gt;higher&lt;/i&gt;-level (not necessarily &lt;i&gt;high&lt;/i&gt;-level) language. This includes, for example, a "class" to deal with dynamic strings, another one for dynamic linked lists and iterators, a way to propagate errors until the point where they can be managed... and I have spent quite a bit of time debugging crashes due to memory management bugs, something that I rarely encountered in the C++ version.&lt;br /&gt;&lt;br /&gt;However, the new interface is, I believe, quite neat. This is not because of the language per se, but because the C++ interface has grown "incorrectly". It was the first code in the project and it shows. The C version has been written from the ground up with all the requirements known beforehand, so it is cleaner. This will surely help in cleaning up the C++ version later on, which cannot die anyway.&lt;br /&gt;&lt;br /&gt;The code for this interface is in a new branch, &lt;a href="http://mtn-host.prjek.net/viewmtn/atf/branch/changes/org.NetBSD.atf.src.c"&gt;org.NetBSD.atf.src.c&lt;/a&gt;, and will hopefully make it to ATF 0.5: it still lacks a lot of features, hence why it is not on mainline. Ah, the joys of a distributed VCS: I have been able to develop this experiment locally and privately until it was decent enough to be published, and now it is online with all history available!&lt;br /&gt;&lt;br /&gt;From now on C++ use will be restricted to the ATF tools inside ATF itself, and to those users who want to use it in their projects. Test cases will be written using the C library except for those that unit-test C++ code.</content>

by Julio M. Merino Vidal at February 18, 2008 10:48 AM

February 08, 2008

The Julipedia (Blog)

C++: Little teaser about std::set

This does not build. Can you guess why? Without testing it?&lt;pre&gt;std::set&amp;lt; int &amp;gt; numbers;&lt;br /&gt;&lt;br /&gt;for (int i = 0; i &amp;lt; 10; i++)&lt;br /&gt; numbers.insert(i);&lt;br /&gt;&lt;br /&gt;for (std::set&amp;lt; int &amp;gt;::iterator iter = numbers.begin();&lt;br /&gt; iter != numbers.end(); iter++) {&lt;br /&gt; int&amp;amp; i = *iter;&lt;br /&gt; i++;&lt;br /&gt;}&lt;/pre&gt;&lt;b&gt;Update (23:40)&lt;/b&gt;: John gave a correct answer in the comments.</content>

by Julio M. Merino Vidal at February 08, 2008 04:48 PM

February 05, 2008

The Julipedia (Blog)

BenQ RMA adventures, part 2

My monitor is back from service! It was picked up on &lt;a href="http://julipedia.blogspot.com/2008/01/benq-rma-adventures-part-1.html"&gt;January 30th&lt;/a&gt;, and it has been returned today just after 6 days (4 work days). Note that the technical service's office was located in Portugal, just at the opposite side of the peninsula.&lt;br /&gt;&lt;br /&gt;And best of all, the monitor is fixed: firmware updated, so I can now disable the Overscan feature and get a perfect 1:1 pixel mapping on the HDMI input. Kudos to the BenQ RMA service for this quick and effective service!</content>

by Julio M. Merino Vidal at February 05, 2008 05:48 PM

February 04, 2008

The Julipedia (Blog)

ATF 0.4 released

I'm pleased to announce that the fourth release of &lt;a href="http://www.NetBSD.org/~jmmv/atf/"&gt;ATF&lt;/a&gt;, 0.4, just saw the light. The NetBSD source tree has also been updated to reflect this new release.&lt;br /&gt;&lt;br /&gt;For more details please &lt;a href="http://www.NetBSD.org/~jmmv/atf/news.html#20080204-atf-0-4-released"&gt;see the announcement&lt;/a&gt;.</content>

by Julio M. Merino Vidal at February 04, 2008 08:48 PM

Home-made build farm

I'm about to publish the 0.4 release of &lt;a href="http://www.NetBSD.org/~jmmv/atf/"&gt;ATF&lt;/a&gt;. It has been delayed more than I wanted due to the difficulty in getting time-limited test cases working and due to my laziness in testing the final tarball in multiple operating systems (because I knew I'd have to fight portability problems).&lt;br /&gt;&lt;br /&gt;But finally, this weekend I have been setting up a rather-automated build farm at home, which is composed so far of 13 systems. Yes, 13! But do I use so much machines? Of course not! Ah, the joys of virtualization.&lt;br /&gt;&lt;br /&gt;What I have done is set up a virtual machine for each system I want to test using &lt;a href="http://www.vmware.com/download/fusion/"&gt;VMware Fusion&lt;/a&gt;. If possible, I configure both 32-bit and 64-bit versions of the same system, because different problems can arise in them. Each virtual machine has a &lt;tt&gt;builder&lt;/tt&gt; user, and that user is configured to allow passwordless SSH logins by using a private key. It also has full sudo access to the machine, so that it can issue root-only tests and can shutdown the virtual machine. And about the software it has, I only need a C++ compiler, the make tool and pkg-config.&lt;br /&gt;&lt;br /&gt;Then I have a script that, for a given virtual machine:&lt;ol&gt;&lt;li&gt;Starts the virtual machine.&lt;/li&gt;&lt;li&gt;Copies the distfile inside the virtual machine.&lt;/li&gt;&lt;li&gt;Unpacks the distfile.&lt;/li&gt;&lt;li&gt;Configures the sources.&lt;/li&gt;&lt;/li&gt;Builds the sources.&lt;/li&gt;&lt;li&gt;Installs the results.&lt;/li&gt;&lt;li&gt;Runs the build-time tests.&lt;/li&gt;&lt;li&gt;Runs the install-time tests as a regular user.&lt;/li&gt;&lt;li&gt;Runs the install-time tests as root.&lt;/li&gt;&lt;li&gt;Powers down the virtual machine.&lt;/li&gt;&lt;/ol&gt;Ideally I should also run some different combinations of compilers inside each system (for example, SUNpro and GCC in Solaris) and make tools (BSD make and GNU make). I'm also considering in replacing some of the steps above by a simple &lt;tt&gt;make distcheck&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;I take a log of the whole process for later manual inspection. This way I can simply call this script for all the virtual machines I have and get the results of all the tests for all the platforms. I still need to do some manual testing in non-virtual machines such as in my PS3 or in Mac OS X, but these are minor (but yes, they should also be automated).&lt;br /&gt;&lt;br /&gt;Starting and stopping the virtual machines is what was trickiest, but in the end I got it working. Now I would like to adapt the code to work with other virtual machines (Parallels and qemu), clean it up and publish it somehow. Parts of it do certainly belong inside ATF (such as the formatting of all logs into HTML for later publication on a web server), and I hope they will make it into the next release.&lt;br /&gt;&lt;br /&gt;For the curious, I currently have virtual machines for: Debian 4.0r2, Fedora 8, FreeBSD 6.3, NetBSD-current, openSUSE 10.2, Solaris Express Developer Edition 2007/09 and Ubuntu Server 7.10. All of them have 32-bit and 64-bit variants except for Solaris, which is only 64-bit. Setting all of them up manually was quite a tedious and boring process. And the testing process is slow. Each system takes around 10 minutes to run through the whole "start, do stuff, stop" process, and SXDE almost doubles that. In total, more than 2 hours to do all the testing. Argh, an 8-way Mac Pro could be so sweet now :-)</content>

by Julio M. Merino Vidal at February 04, 2008 02:48 PM

February 03, 2008

The Julipedia (Blog)

unlink(2) can actually remove directories

I have always thought that unlink(2) was meant to remove files only but, yesterday, SunOS (&lt;a href="http://developers.sun.com/sxde/"&gt;SXDE&lt;/a&gt; 200709) proved my wrong. I was sanity-checking the source tree for the imminent &lt;a href="http://www.NetBSD.org/~jmmv/atf/"&gt;ATF&lt;/a&gt; 0.4 release under this platform, which is always scary, and the tests for the &lt;tt&gt;atf::fs::remove&lt;/tt&gt; function were failing &amp;mdash; only when run as root.&lt;br /&gt;&lt;br /&gt;The failure happened in the cleanup phase of the test case, in which ATF attempts to recursively remove the temporary work directory. When it attempted to remove one of the directories inside it, it failed with a ENOENT message, which in SunOS may mean that the directory is not empty. Strangely, when inspecting the left-over work tree, that directory was indeed empty and it could not be removed with &lt;tt&gt;rm -rf&lt;/tt&gt; nor with &lt;tt&gt;rmdir&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;The manual page for &lt;tt&gt;unlink(2)&lt;/tt&gt; finally gave me the clue of what was happening:&lt;blockquote&gt;If the path argument is a directory and the filesystem supports unlink() and unlinkat() on directories, the directory is unlinked from its parent with no cleanup being performed. In UFS, the disconnected directory will be found the next time the filesystem is checked with fsck(1M). The unlink() and unlinkat() functions will not fail simply because a directory is not empty. The user with appropriate privileges can orphan a non-empty directory without generating an error message.&lt;/blockquote&gt;The solution was easy: as my custom &lt;tt&gt;remove&lt;/tt&gt; function is supposed to remove files only, I added a check before the call to &lt;tt&gt;unlink(2)&lt;/tt&gt; to ensure that the path name does not point to a directory. Not the prettiest possibility (because it is subject to race-conditions even though it is not critical), but it works.</content>

by Julio M. Merino Vidal at February 03, 2008 04:48 PM

February 02, 2008

The Julipedia (Blog)

Linux is just an implementation detail

You can't imagine how happy I was today when I read the &lt;a href="http://www.linuxtechdaily.com/2008/02/kde-4-developers-an-interview-with-sebastian-kugler/"&gt;interview with KDE 4's developer Sebastian Kuegler&lt;/a&gt;. Question 6 asks him:&lt;blockquote&gt;6. Are there any misconceptions about KDE 4 you see regularly and would like to address?&lt;/blockquote&gt;And around the middle of the answer, he says:&lt;blockquote&gt;Frankly, I don’t like the whole concept of the “Linux Desktop”. Linux is really just a kernel, and in this case very much a buzzword. Having to mention Linux (which is just a technical implementation detail of a desktop system) suggests that something is wrong. Should it matter to the user if he runs Linux or BSD on his machine? Not at all. It only matters because things just don’t work so well (mostly caused by to driver problems, often a matter of ignorance on some vendor’s side).&lt;/blockquote&gt;Thanks Sebastian. I couldn't have said it better.&lt;br /&gt;&lt;br /&gt;What virtually all application developers are targeting —or should be targeting— is KDE &lt;i&gt;or&lt;/i&gt; GNOME. These are the development platforms; i.e. what provide the libraries and services required for easy development and deployment.  It doesn't make any sense to "write a graphical application for Linux", because Linux has no standard graphical interface (unless you mean the framebuffer!) and, again, Linux is just a kernel.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I &lt;i&gt;think&lt;/i&gt; I have already blogged about the problems of software redistribution under Linux... will look for that post and, if it is not there, it is worth a future entry.&lt;/div&gt;</content>

by Julio M. Merino Vidal at February 02, 2008 02:48 PM

January 31, 2008

The Julipedia (Blog)

Interview on NetBSD 4

I'm happy to have been part of the "&lt;a href="http://arstechnica.com/articles/culture/netbsd4-interview.ars"&gt;Waving the flag: NetBSD developers speak about version 4.0&lt;/a&gt;" interview.  Enjoy!</content>

by Julio M. Merino Vidal at January 31, 2008 12:48 PM

January 30, 2008

The Julipedia (Blog)

BenQ RMA adventures, part 1

A couple of weeks ago, I called BenQ's RMA service to ask for a fix for my new FP241W Z. I have problems with the HDMI digital input: the monitor crops part of the image on each side and makes it slightly bigger to fill all the screen. It turns out that there is a firmware upgrade for this specific monitor that adds a configuration option to turn off overscan, which effectively should resolve this problem. So I called them to get the firmware in my monitor updated.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The operator was very polite and helpful. After asking for the details of the monitor and the problem I was having, she confirmed that, effectively, the problem I was describing was due to an outdated firmware and that they'd be fixing it for free. I gave the necessary data and then &amp;mdash;after 20-something minutes&amp;mdash; they told me that a carrier would come to my location and pick the monitor up for delivery to the technical center. But first, such carrier had to contact me to set up a date for the hand out.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Two weeks after, no one had called me nor sent me any email. In fact, they told me that I should be receiving an email, so I simply waited patiently because, when it comes to email, things can be very slow. I even thought that I might have deleted that message as spam.  But two weeks was already too much.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So yesterday's afternoon, I called the RMA service again and explained the situation. They promised to fix it that evening. Effectively, they did. They called me this morning asking for another detail about the monitor, so I assumed things were being dealt with.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And this afternoon, at around 15.30, I received a funny SMS from the carrier that had to pick the monitor up. They basically said "We will come to pick up the package on the 30th (aka today). It will be between 9.00 to 12.00 or between 12.00 to 19.00.".  Great!  Could it be more inaccurate please?  First of all, the mentioned times cover practically all day. Second, most of that time had already been skipped. And third, I was getting the notice the same day they were coming. I immediately rang home and asked my mother if somebody had gone there. As they had not shown up yet, I returned home quickly, packed the monitor up in a hurry and soon after, the carrier reached home.  Just a matter of luck I was able to deal with this on time!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This isn't really a critique; I just want to explain how the process is going as things progress. The BenQ service has been very responsive and polite until now, and I think I can only blame the carrier service.  Let's hope things move fast and well from now on.&lt;/div&gt;</content>

by Julio M. Merino Vidal at January 30, 2008 11:48 PM

January 18, 2008

The Julipedia (Blog)

A request to virtualization software developers

Here is a request for a feature I have not yet seen in any virtualization application &amp;mdash; used &lt;a href="http://www.parallels.com/en/products/desktop/"&gt;Parallels Desktop&lt;/a&gt; 2, &lt;a href="http://www.vmware.com/mac"&gt;VMware Fusion&lt;/a&gt; 1.1 and another product I can't speak of yet &amp;mdash; that I'd &lt;span class="Apple-style-span" style="font-style: italic;"&gt;love&lt;/span&gt; to have.  It'd make things so much easier for me...  So here is an open request just in case one of the developers of free alternatives (e.g. &lt;a href="http://www.virtualbox.org/"&gt;VirtualBox&lt;/a&gt;) reads it and decides to get ahead of the competence by implementing it.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Before explaining my feature request, let's consider you have a server on your network on which you run multiple virtual machines (VMs) for whatever purpose. These machines are exported to the network using &lt;span class="Apple-style-span" style="font-style: italic;"&gt;bridged networking&lt;/span&gt; so that other computers in the network can access them transparently as if they were physical computers. To make this setup trivial, you have a DHCP server on your network that hands out static IP addresses to these virtual servers, and you also have a DNS server that maps these addresses to static names. This way, users on your network can access the virtual machines by simply spelling out their host names.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now let's move to the laptop world where you are connected to different networks all the time (e.g. at home or at work) or no network at all. Here I will assume that you will want to access the VMs exclusively from your laptop. In this case, you should not use bridged networking because you'd be exporting all your virtual machines to the possibly untrusted network. &lt;i&gt;And&lt;/i&gt; you cannot rely on the external DHCP nor DNS servers to deal with static IP addresses nor host names for you because in many situations you have no control over them.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Your best bet is to use &lt;i&gt;shared networking&lt;/i&gt; to configure your VMs (or &lt;i&gt;host-only networking&lt;/i&gt; if they needn't access the outside world).  But if you do so, your VMs will get random IP addresses because you have no control over the DHCP sever bundled into the virtualization application. And as a result of this, you cannot assign host names to them. As a workaround, you can manually configure each operating system running on a VM to have a static IP (bypassing DHCP), then add an entry in the host's &lt;tt&gt;/etc/hosts&lt;/tt&gt; file to assign a host name to the guest OS and at last add an entry in the guest's &lt;tt&gt;/etc/hosts&lt;/tt&gt; file to assign a host name to the host OS. Which is painful.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In my idea world, the virtualization applications could have the ability to fine-tune the bundled DHCP server to hand out specific addresses to the virtual machines (VMs) and a way to specify DNS host names for them, all from the configuration interface and without having to touch any configuration file in the host system (nor guest, for that matter). E.g. add a little configuration box for the IP address and host name of the guest OS alongside the box that already exists to configure the MAC address. Then have the bundled DHCP server hand out the appropriate entries to the guests, add an entry to the host's &lt;tt&gt;/etc/hosts&lt;/tt&gt; and provide a virtual DNS server to the guests so that they can resolve each other's names.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;An use case for this? I have two VMs that I carry around in my MacBook Pro that I use very frequently and that I do not want to expose to the outside network at all. One is a Fedora 8 installation and the other a NetBSD one. I start them up from the graphical interface and then access them through SSH exclusively. But in order to reliably use SSH, I need to do the above manual steps to set up a host name for them, or otherwise using SSH is a pain.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I am also trying to set up an automatic build farm for ATF (composed probably of 10-15 VMs) and the need to set all these details manually is extremely boring.&lt;/div&gt;&lt;/div&gt;</content>

by Julio M. Merino Vidal at January 18, 2008 03:48 PM

January 17, 2008

The Julipedia (Blog)

Testing the process-tree killing algorithm

Now that you know the procedure to &lt;a href="http://julipedia.blogspot.com/2008/01/how-to-kill-tree-of-processes.html"&gt;kill a process tree&lt;/a&gt;, I can explain how the automated tests for this feature work. In fact, writing the tests is what was harder due to all the race conditions that popped up and due to my rusty knowledge of tree algorithms.&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;Basically, the testing procedure works like this:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Spawn a complete tree of processes based on a configurable degree D and height H.&lt;/li&gt;&lt;li&gt;Make each child tell the root process its PID so that the root process can have a list of all its children, be them direct or indirect, for control purposes.&lt;/li&gt;&lt;li&gt;Wait until all children have reported their PID and are ready to be killed.&lt;/li&gt;&lt;li&gt;Execute the kill-tree algorithm on the root process.&lt;/li&gt;&lt;li&gt;Wait until the children have died.&lt;/li&gt;&lt;li&gt;Check that none of the PIDs gathered in point 2 are still alive (which could be, but reparented to init(8) if they were not properly killed). If some are, the recursive kill failed.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;The tricky parts were 3 and 5.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In point 3, we have to wait until all children have been spawned. Doing so for direct children is easy because we spawned them, but indirect ones are a bit more difficult. What I do is create a pipe for each of the children that will be spawned (because given D and H I can know how many nodes there will be) and then each child uses the appropriate pipe to report its PID to the parent when it has finished initialization and thus is ready to be safely killed. The parent then just reads from all the pipes and gets all the PIDs.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But what do I mean with &lt;span class="Apple-style-span" style="font-style: italic;"&gt;safely killed&lt;/span&gt;? Preliminary versions of the code just ran through the children's code and then exited, leaving them in zombie status. This worked in some situations but broke in others. I had to change this to block all children in a wait loop and then, when killed, take care to do a correct wait for all of its respective children, if any. This made sure that all children remained valid until the attempt to kill them.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In point 5, we have to wait until the direct children have returned so that we can be sure that the signals were delivered and processed before attempting to see if there is any process left. (Yes, if the algorithm fails to kill them we will be stalled at that point.) Given that each children can be safely killed as explained above, this wait will do a recursive wait along all the process tree making sure that everything is cleaned up before we do the final checks for non-killed PIDs.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This all sounds very simple and, in fact, looking at the &lt;a href="http://mtn-host.prjek.net/viewmtn/atf/revision/file/03762dcd82a309a543d67178f61d53c0a1bed985/tests/atf/units/t_procs.cpp"&gt;final code&lt;/a&gt; it is.  But it certainly was not easy at all to write, basically because the code grew in ugly ways and the algorithms were much more complex than they ought to be.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content>

by Julio M. Merino Vidal at January 17, 2008 03:49 PM

January 16, 2008

The Julipedia (Blog)

How to kill a tree of processes

&lt;a href="http://julipedia.blogspot.com/2008/01/implementing-timeouts-for-test-cases.html"&gt;Yesterday&lt;/a&gt; I mentioned the need for a way to kill a tree of processes in order to effectively implement timeouts for test cases. Let's see how the &lt;a href="http://mtn-host.prjek.net/viewmtn/atf/revision/file/f51b4c7f694ff98e0e303743797eb3cccb6f9ea4/atf/procs.cpp"&gt;current algorithm&lt;/a&gt; in ATF works:&lt;br /&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;The root process is stopped by sending a SIGSTOP to it so that it cannot spawn any new children while being processed.&lt;/li&gt;&lt;li&gt;Get the whole list of active processes and filter them to only get those that are direct children of the root process.&lt;/li&gt;&lt;li&gt;Iterate over all the direct children and repeat from 1, recursively.&lt;/li&gt;&lt;li&gt;Send the real desired signal (typically SIGTERM) to the root process.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;There are two major caveats in the above algorithm. First, point 2. There is no standard way to get the list of processes of a Unix system, so I have had to code three different implementations so far for this trivial requirement: one for NetBSD's KVM, one for Mac OS X's sysctl kern.proc node and one for Linux's procfs.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then, and the worst one, comes in point 4. Some systems (Linux and Mac OS X so far) do not seem to allow one to send a signal to a stopped process. Well, strictly speaking they allow it, but the second signal seems to be simply ignored whereas under NetBSD the process' execution is resumed and the signal is delivered. I do not know which behavior is right.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If we cannot send the signal to the stopped process, we can run into a race condition: we have to wake it up by sending a SIGCONT and then deliver the signal, but in between these events the process may have spawned new children that we are not aware of.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Still&lt;/i&gt;, being able to send a signal to a stopped process does not completely resolve the race condition. If we are sending a signal that the user can reprogram (such as SIGTERM), that process may fork another one before exiting, and thus we'd not kill this one.  But... well... this is impossible to resolve with the existing kernel APIs as far as I can tell.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One solution to this problem is killing a timed-out test by using SIGKILL instead of SIGTERM. SIGKILL could work on any case because means &lt;i&gt;die immediately&lt;/i&gt;, without giving a chance to the process to mess with it. Therefore SIGCONT would not be needed in any case &amp;mash;because you can simply kill a stopped process and it will die immediately as expected&amp;mdash; and the process would not have a chance to spawn any more children after it had been stopped.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Blah, after writing this I wonder why I went with all the complexity of dealing with signals that are not SIGKILL... say over-engineering if you want...&lt;/div&gt;&lt;/div&gt;</content>

by Julio M. Merino Vidal at January 16, 2008 11:48 PM

January 15, 2008

The Julipedia (Blog)

Implementing timeouts for test cases

One of the pending to-do entries for ATF 0.4 is (was, mostly) the ability to define a timeout for a test case after which it is forcibly terminated.  The idea behind this feature is to prevent broken tests from stalling the whole test suite run, something that is already needed by the factor(6) tests in NetBSD.  Given that I want to release this version past weekend, I decided to work on this instead of delaying it because... you know, this sounds pretty simple, right? Hah!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What I did first was to implement this feature for C++ test programs and added tests for it.  So far, so good.  It effectively was easy to do: just program an alarm in the test program driver and, when it fires, kill the subprocess that is executing the current test case. Then log an appropriate error message.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The tests for this feature deserve some explanation.  What I do is: program a timeout and then make the test case's body sleep for a period of time.  I try different values for the two timers and if the timeout is smaller than the sleeping period, then the test must fail or otherwise there is a problem.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The next step was to implement this in the shell interface, and this is where things got tricky.  I did a quick and dirty implementation, and it seemed to make the same tests I added for the C++ interface pass.  However, when running the bootstrap testsuite, it got stalled at the cleanup part.  Upon further investigation, I noticed that there were quite a lot of sleep(1) processes running when the testsuite was stalled, and killing them explicitly let the process continue.  You probably noticed were the problem was already.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When writing a shell program, you are forking and executing external utilities constantly, and sleep(1) is one of them.  It turns out that in my specific test case, the shell interpreter is just waiting for the sleep subprocess to finish (whereas in the C++ version everything happens in a single process).  And, &lt;span class="Apple-style-span" style="font-style: italic;"&gt;killing a process does not kill its children&lt;/span&gt;.  There you go.  My driver was just killing the main process of the test case, but not everything else that was running; hence, it did not die as expected, and things got stalled until the subprocesses also died.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Solving this was the fun part. The only effective way to make this work is to kill the test case's main process &lt;i&gt;and&lt;/i&gt;, recursively, all of its children. But killing a tree of processes is not an easy thing to do: there is no system interface to do it, there is no portable interface to get a list of children and I'm yet unsure if this can be done without race conditions.  I reserve the explanation of the recursive-kill algorithm I'm using for a future post.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After some days of work, I've got this working under Mac OS X and also have got automated tests to ensure that it effectively works (which were the hardest part by far).  But as I foresaw, it fails miserably under NetBSD: the build was broken, which was easy to fix, but now it also fails at runtime, something that I have not diagnosed yet. Aah, the joys of Unix...&lt;br /&gt;&lt;/div&gt;</content>

by Julio M. Merino Vidal at January 15, 2008 05:48 PM

January 06, 2008

The Julipedia (Blog)

Got a BenQ FP241W Z flat panel

As I already&lt;a href="http://julipedia.blogspot.com/2008/01/24-widescreen-comparison.html"&gt;&lt;/a&gt; &lt;a href="http://julipedia.blogspot.com/2007/12/choosing-24-widescreen-monitor.html"&gt;mentioned&lt;/a&gt;, I was interested in buying a 24" widescreen monitor for both my laptop and PlayStation 3. I considered many &lt;a href="http://julipedia.blogspot.com/2008/01/24-widescreen-comparison.html"&gt;different options&lt;/a&gt; but, based on my requirements (1920x1200, 1:1 pixel mapping, dual HDMI/DVI-D inputs), I ended up choosing the &lt;a href="http://benq.com/products/LCD/?product=839"&gt;BenQ FP241W Z&lt;/a&gt; (yeah, did it &lt;a href="http://julipedia.blogspot.com/2006/01/got-benq-fp202w-flat-panel.html"&gt;again&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;This thing is gorgeous as the following photos will show you. Lots of real screen state to work — the ability to have many different, non-overlapping editors and terminals open at once is very convenient — and great to watch videos. But it has a "small" problem (I &lt;i&gt;want&lt;/i&gt; it fixed!) that I'll explain after them...&lt;br /&gt;&lt;br /&gt;So here are two photos of the MacBook Pro working in clamshell mode, connected to the new monitor:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_xLbGV919cEE/R4E5K7J2CFI/AAAAAAAAACo/PrOoJec4t9g/s1600-h/IMG_0662.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_xLbGV919cEE/R4E5K7J2CFI/AAAAAAAAACo/PrOoJec4t9g/s400/IMG_0662.JPG" alt="" id="BLOGGER_PHOTO_ID_5152462308529014866" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_xLbGV919cEE/R4E5LbJ2CGI/AAAAAAAAACw/toLugzTs9AE/s1600-h/IMG_0660.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_xLbGV919cEE/R4E5LbJ2CGI/AAAAAAAAACw/toLugzTs9AE/s400/IMG_0660.JPG" alt="" id="BLOGGER_PHOTO_ID_5152462317118949474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And here are a couple of images showing the PlayStation 3 in action:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_xLbGV919cEE/R4E5L7J2CHI/AAAAAAAAAC4/DX6X2cRqokY/s1600-h/IMG_0657.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_xLbGV919cEE/R4E5L7J2CHI/AAAAAAAAAC4/DX6X2cRqokY/s400/IMG_0657.JPG" alt="" id="BLOGGER_PHOTO_ID_5152462325708884082" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_xLbGV919cEE/R4E5MbJ2CII/AAAAAAAAADA/6RoUILr60Zc/s1600-h/IMG_0664.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_xLbGV919cEE/R4E5MbJ2CII/AAAAAAAAADA/6RoUILr60Zc/s400/IMG_0664.JPG" alt="" id="BLOGGER_PHOTO_ID_5152462334298818690" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;OK, this last image is the one I wanted to discuss. It is showing the "PlayStation Store", accessible directly from an option in the XMB interface. It is easy to see that the image is cropped on the four sides: some letters are cut, and the top and bottom buttons are shown extremely close to the screen border's. This is not what I expected.&lt;br /&gt;&lt;br /&gt;Even more, booting Linux reports that the framebuffer's dimensions are 1688x964 even though the screen says it is working in 1080p mode (1920x1080). If I force Linux to go to full 1080p, then the terminal is also cropped on the four sides, making it unusable. According to &lt;a href="http://episteme.arstechnica.com/eve/forums/a/tpc/f/67909965/m/963009859831"&gt;this thread&lt;/a&gt;, this is caused by the monitor assuming that the HDMI input has overscan hence it crops the image. (Note that the image is being slightly &lt;i&gt;scaled up&lt;/i&gt; to fill the whole screen, because the visible area is smaller than the displayed one! And I certainly don't want that.)&lt;br /&gt;&lt;br /&gt;It looks like that a firmware update released on May 2007 adds an Overscan tunable option on the settings, which allows you to disable this feature and thus get the whole image. But unfortunately my monitor was manufactured on April 2007, so it has the old firmware. Grr. Will call BenQ support tomorrow and see if they can do anything about it (I guess they'll be able to do a firmware upgrade, but they may need to take the monitor for several days^Wweeks.). Otherwise I may end up returning this unit. Heck, I searched 1:1 pixel mapping like crazy and now I find this other, unexpected problem. No way.&lt;br /&gt;&lt;br /&gt;Other than that, great display. Now, if only I had a Mac Pro to accompany it... ;-)</content>

by Julio M. Merino Vidal at January 06, 2008 08:48 PM

January 05, 2008

The Julipedia (Blog)

24" widescreen comparison

As promised in the previous post &lt;a href="http://julipedia.blogspot.com/2007/12/choosing-24-widescreen-monitor.html"&gt;Choosing a 24" widescreen monitor&lt;/a&gt;, here comes the brief analysis I did before deciding which monitor to buy. Refer to the &lt;a href="http://www.netbsd.org/%7Ejmmv/julipedia/20080105-24-widescreens.xhtml"&gt;comparison table&lt;/a&gt; (or the &lt;a href="http://www.NetBSD.org/~jmmv/julipedia/20080105-24-widescreens.pdf"&gt;PDF version&lt;/a&gt; if the XHTML one does not work for you) for more details. I'm linking this externally because putting it here, in this width-limited page, would be unsuitable.&lt;br /&gt;&lt;br /&gt;The data in that table has been taken from the official vendor pages when possible, even though they failed to list some of the details. I tried to look for the missing ones around the network and came up with, I think, fairly trustable data. But of course some of them may be wrong.&lt;br /&gt;&lt;br /&gt;By the way, be specially careful when comparing the &lt;i&gt;Contrast ratio&lt;/i&gt; and &lt;i&gt;Response time&lt;/i&gt; fields. Each vendor likes to advertise these in different ways, so you cannot really compare them without knowing what each value really means (and I don't, because they generally don't specify it).&lt;br /&gt;&lt;br /&gt;Anyway, even the table is not complete (some fields are marked with N/A because I could not easily came up with an answer), I hope it will be useful to some of you.</content>

by Julio M. Merino Vidal at January 05, 2008 09:48 AM

January 03, 2008

The Julipedia (Blog)

Interferences in CVS tagging

Once again, CVS shows its weaknesses. Last night I committed a fix to pkgsrc and soon after I noticed I had a prior e-mail by Alistair, a member of PMC and the one responsible for the preparation of pkgsrc releases, asking developers to stop committing to the tree because he was going to tag it for pkgsrc-2007Q4. It turns out that my fix did not get into the branch because the directory it went in (&lt;tt&gt;devel/monotone&lt;/tt&gt;) had already been tagged. Had I committed the fix to, say, &lt;tt&gt;x11/zenity&lt;/tt&gt;, it would have gone into the branch. Or worse, had I committed a fix that spanned multiple files, some of them would have got to the branch and others not.&lt;br /&gt;&lt;br /&gt;So what, am I supposed to read e-mail before I can do a commit? What if the mail does not arrive on time? What if the commit had affected many more directories and some of them had already been tagged but some not?&lt;br /&gt;&lt;br /&gt;This is just another example of CVS showing its limitations and stupidities. Given that each file's history is stored independently — i.e. there are no global changesets — the only way to tag the repository is to go file by file and set the tag on each. And then, you need to check which revision of each file is the one to be tagged. I do not know why is this so slow even when you do a &lt;tt&gt;rtag&lt;/tt&gt; (so the one doing the work is the server alone) on HEAD, but in the case of pkgsrc this process took more than 2 hours!&lt;br /&gt;&lt;br /&gt;OK, OK, I'm hiding the truth. The thing is there are some ways around this: for example, using the &lt;tt&gt;tag&lt;/tt&gt; command will tag the exact revisions you have in your working copy, or passing a date to &lt;tt&gt;rtag&lt;/tt&gt; will tag the repository based on the provided timestamp. This way you ensure that the tagging process will be consistent even if people keep committing changes to the tree. &lt;i&gt;However&lt;/i&gt;, the first of these commands will require a lot of network communication and the second will put a lot of stress on the server, making the command even slower (or that's what I've been told).&lt;br /&gt;&lt;br /&gt;In virtually all other version control systems that support changesets, a tag is just a name for a given revision identifier. And defining this tag is a trivial and quick process. Well, Subversion is rather different because tags are just copies of the tree, but I think that they deal with these efficiently.</content>

by Julio M. Merino Vidal at January 03, 2008 08:48 PM

January 01, 2008

The Julipedia (Blog)

Welcome, 2008

It is a new year again.&lt;br /&gt;&lt;br /&gt;Let's see if I can, at least, accomplish one goal: I should try to not delay stuff as much as I have been doing until now. This specially refers to replying to some e-mails and working on some stuff I once started but have not had the time to finish (bad excuses, I know). The clearest example that comes to my mind is Boost.Process, for which I have got many status-requests already... but there are also some tiny pet projects such as genfb support for NetBSD/mac68k and witheouts for tmpfs. Of course, there also is the conversion of more NetBSD tests to ATF.&lt;br /&gt;&lt;br /&gt;But, and this is a big but, the first semester of the year will probably keep me extremely busy with my Ph.D. courses... and, to make things worse, when I get home in the evening I'm so tired that I don't want to do more work. Will have to try to organize tasks a bit better so that there is time for everything.&lt;br /&gt;&lt;br /&gt;Anyway, happy new year to everyone! And thanks to your continuous visits and support, this is the 400th post :-)</content>

by Julio M. Merino Vidal at January 01, 2008 10:48 AM

December 17, 2007

FreeBSD Diary

PC-BSD

PC-BSD has a lot going for it

December 17, 2007 04:48 AM

December 09, 2007

FreeBSD Diary

IMAP - getting Dovecot running

POP implies one computer. IMAP allows many.

December 09, 2007 01:48 AM

September 10, 2007

FreeBSD Diary

Creating multiple jails

When creating more than one jail, these shortcuts might help

September 10, 2007 04:48 AM

August 06, 2007

FreeBSD Diary

IBM ThinkPad T41: Upgrading RAM and HDD - pictures

Pictures now!

August 06, 2007 04:48 AM

August 01, 2007

FreeBSD Diary

IBM ThinkPad T41: Upgrading RAM and HDD

Things are getting tight and slow...

August 01, 2007 01:48 PM

July 09, 2007

FreeBSD Diary

Virus scanning

Setting up amavisd and clamav on FreeBSD

July 09, 2007 04:48 AM

Fighting spam with pf

Spam is nasty. pf is good.

July 09, 2007 04:48 AM

March 08, 2007

FreeBSD Diary

Jails under FreeBSD 6

Jails are great. Here's my recipie

March 08, 2007 05:48 AM