NFS Automount with Snow Leopard

english, geek, howto, pat No Comments »

Before upgrading to Snow Leopard, I was using the NFS automount capability of Mac OS X. It was a handy way for my laptop to connect to my home NAS server (a linux box running Ubuntu).

Unfortunately I had to redo the NFS config after upgrading and I noticed that Directory Utility was not present anymore in Snow Leopard.

Here is what I found out after some research:

  • the NFS automount configuration is now done directly in Disk Utility (under File > NFS Mounts…) and not in Directory Utility like in Leopard (which does not exist anymore).
  • the configuration that worked for me was the following one (for accessing a read-write NFS share):
    Remote NFS URL: nfs://[server]/[path]
    Mount location: [path to local mount folder]
    Advanced Mount Parameters: -i,-s,-w=32768,-r=32768
    
  • for automount to reload its configuration, I had to run the following command:
    sudo automount -vc
  • That’s it. The NFS share should now be accessible.

    References:

  • http://discussions.apple.com/thread.jspa?threadID=2137675
  • Time Machine: Handy but Bitchy!

    english, geek, howto, pat No Comments »

    I have been spending the last couple of days of my spare time performing a simple operation with my mac, yet slightly more complicated than expected: merge the two partitions of my hard drive into one. This was necessary since I did a mapping, quite usual on Linux, where my system was sitting on the first partition (50 GB) while my user data was on the second one (the rest of 300 GB). But this mapping was not making me happy, since the system partition was always almost full (Mac OS X is not well suited for a multi partition disk drive, I find).

    Although you can resize a live partition with Disk Utility (great feature, even if you booted with it), you cannot move the base position of a partition. You can merely resize it, if more space is available. So I had to back my second partition up for later restoring it. I went for Time Machine, since I was already using it for backing up my laptop.

    Time Machine Caveats

    Unfortunetely I noticed a couple of caveats during the restore operation:

  • When using the Time Machine restore utility shipped with the OS X install DVD, you can only restore the partition where the system is, but not other ones. This was quite of a surpise to me. Although you can choose on which partition you want to restore your system (the target, not the source).
  • Although your data is actually sitting on the Time Machine backup drive, you cannot use it directly (i.e. copy it back using the Finder or a shell). The reason for that is the ACLs that Leopard is putting on each and every file and folder to protect changing the Time Machine backup. In addition the ACL system (which is a parralel access control to the Unix one, which I did not know the existence of beforehand) is deeply flawed: you cannot reliably remove recursively the ACLs from a directory structure (you will still find files scattered within the structure having ACLs) and you even cannot remove the ACL permissions on symbolic links (this seems to be a bug of chmod on Leopard, although ACLs on a symlink do not seem to have any effect)
  • Solution for merging two partitions

    I finally found a solution to restore the second partition or to merge them: I had to fiddle directly with the Time Machine backup, copying manually the files I wanted from the second partition to the first, and did a restore of the first partition using Time Machine restore utility.

    Here are the details of the steps I took:

  • Plug my external drive where I have my Time Machine backup, open a terminal and sudo as root:
    sudo -s
  • Deactivate on that drive the ACL checks, so that I can modify directly the Time Machine backup:
    fsaclctl -p /Volumes/[backup drive] -d
  • Move the folders from the second partition to the first one with
    mv [from] [to]
  • Reactivate the ACL checks on the external drive:
    fsaclctl -p /Volumes/[backup drive] -e
  • Do the restore of the first partition with the Time Machine restore utility (located on the Leopard install DVD).
  • This worked for me. You should now have a merged partition on your drive, the restore utility having removed the ACLs during the operation. Phew! This was not a straight forward action! I still cannot believe that Apple did not take into account that people can have more than 1 partition on their drive (I might still have missed the way to do it, did not find it so far though).

    Links/Info

  • Macosxhint: reconnect Time Machine backup after a drive swap
  • Inspect the ACLs of your file with ls:
    ls -le

    For the record, this will yield the following listing when ACLs are present (pay attention to the lines starting with ‘0: ‘ and ‘1: ‘:
    drwxrwxr-x@ 138 root admin 4692 Sep 13 2008 Applications
    0: group:everyone deny add_file,delete,add_subdirectory,delete_child,writeattr,writeextattr,chown
    1: group:everyone deny delete
    drwxr-xr-x@ 2 pat staff 68 May 9 22:12 DeveloperSDK3
    0: group:everyone deny add_file,delete,add_subdirectory,delete_child,writeattr,writeextattr,chown
    drwxr-xr-x@ 5 pat staff 170 Oct 23 2008 VirtualBox
    0: group:everyone deny add_file,delete,add_subdirectory,delete_child,writeattr,writeextattr,chown

    You can also do that recursively using the following command:
    ls -lateR > filelist

  • You can remove ACLs on a file with this command (not working properly for a recursive operation with the option -R)
    chmod -a# 0 [file]
    where 0 is the ACL entry to remove.

  • The Geekiest Hello World

    english, geek, pat No Comments »

    Folks, I think that I have found (one of) the geekiest hello world out there. Implemented in Groovy using the dynamic interception of method calls. Here it goes:

    class Hello {
      Object invokeMethod(String name, Object arguments) {
        System.out.println "hello $name!"
      }
    }
    
    def hello = new Hello()
    hello.john()
    hello.you()
    

    Which produce the following output:

    hello john!
    hello you!
    

    I suppose the same mechanism can be used with Ruby (and some other dynamic languages).

    Self-Reproducing Program in Groovy

    english, geek, pat 3 Comments »

    I had this in mind since yesterday: how to write a self-reproducing program in Groovy, or a Quine, a program which prints out its source code. It’s actually a fun exercise.

    Here is my version:

    a = 'c = (char)39; println "a = $c$a$c"; println "$a"'
    c = (char)39; println "a = $c$a$c"; println "$a"

    It looks scary, but it is actually not that terrible. The first line is the definition of a variable a of the form:

    a = '[some string]'
    

    The second line is first the definition of the single quote character assigned to c. We then print out the first line (including the variable definition), where we replace the single quote by our character c, and where $a is the content of a. This part looks like:

    println "a = $c$a$c";
    

    Finally we print out a.

    The only thing that we need now to do, is to replace [some string] in the first line. It happens that if we take the complete second line and assign it to ‘a’ in the first line, we will get the desired output. We see here that if we had not used $c in the first println of the second line instead of the single quote, the string assigned to a in the first line would not be legal, since it would contain inside the string a string delimiter (and if we escape it, we don’t get the same output as the program code).

    That’s it. It was fun.

    Links:

  • A quine on Wikipedia
  • Interesting blog post about a self-reproducing program
  • Annoying ’screen’ Backspace Problem

    english, geek, howto, pat No Comments »

    Already a long time that this issue is bugging me. The great ’screen’ unix command has a problem, at least on ubuntu: the backspace key produces the same effect than delete (first char on the right of the cursor gets deleted). Very annoying. Hopefully the solution is easy. Edit your file ‘~/.bashrc’ and add the following line:

    alias screen='TERM=screen screen'

    WPtouch Plug-in

    english, geek, pat No Comments »

    Just installed a Wordpress plug-in that aims at providing a good rendering on the iPhone. It’s called WPtouch. Neat.

    Pidgin Status Update from Twitter

    english, geek, howto, pat 5 Comments »

    Just figured out how to get Twitter update the pidgin status (e.g. GTalk, Jabber, ICQ, MSN, etc.). For that, you need to install a pidgin plug-in written in Perl. Here is a small howto about it (as the Perl stuff was a bit tricky):

  • Download and install the multi-network Pidgin client
  • Install Perl. On Windows (yeah, I know. It’s at work. ;) ), install Active Perl version 5.8.8.X. Don’t take the last one, the 5.10.0, as Pidgin does not support it yet.
  • Install the Package XML:XPath, either using the CPAN console (install XML:XPath) or using the package manager of Active Perl.
  • Restart Pidgin and check that Perl is enabled. (Help -> About -> at the bottom of the page, you should see ‘Perl: Enabled’).
  • Download the twitter plugin and put it in the plugin folder of Pidgin. (For instance on Windows in ‘C:\Program Files\Pidgin\plugins’)
  • Configure the plug-in and enjoy!
  • Flock for Blogging

    english, geek, pat No Comments »

    Just trying the Flock browser for posting a blog news. It’s great. It’s about like writing an e-mail, with a good blog integration, where you can define tags, categories and that kind of news-related things. Really cool. Much quicker than the web interface. ;)

    Tomato on WRT54GL: LED shows WIFI status

    english, geek, howto, pat No Comments »

    Something I wanted to do since ages. My wireless router WRT54GL running the Tomato firmware has a button on the front, which can be used to toggle WIFI on and off. The router has also a rather visible LED indicator, behind the button, that is unfortunately not used to show the WIFI status. (Originally, the wifi status is just shown by a tiny LED, that is just visible when watching closely the device).

    It’s easy to fix that. Using the web interface, go to the ‘Administration’ > ‘Buttons / LED’ page. Replace the custom script by the following code:


    # status: 1: wifi on, 0: wifi off
    status=$(wl -a eth1 dump | grep associated | cut -d " " -f 2);
    # toggle wifi & amber led
    wl -a eth1 $([ $status -eq 0 ] && echo up || echo down)
    led amber $([ $status -eq 0 ] && echo on || echo off)

    Then change the setting for ‘0 – 2 Seconds’ to ‘Run Custom Script’. That’s it. Now when we press the button, the wireless is toggled and the LED switches itself accordingly.

    Tested with Tomato 1.19.

    Googling his credit card number

    english, geek, pat No Comments »

    According to the free newspaper “news” of today (Zurich, Switzerland) page 15, the computer-science Professor Kieron O’Hara, which is concerned about the loss of privacy in the internet age, is advising the editor in the interview to “google regularly one’s name, phone number and credit card number”, to see if this information is to be found somewhere on the net. OMG. I am wondering where this crap comes from. Either is this professor as intelligent as my banana tree, or the editor writing this did the interview in Esperanto, which neither of the two are understanding.

    Why is it a bad idea to google one’s credit card number? Just in case you don’t know.

  • The connexion to the google server is not encrypted. So anybody evesdropping on the path to it could get the information (e.g. at your local provider or your neighbour that just hacked your weak WEP wireless encryption).
  • There is no guarantee whatsoever about what google is gonna do about the submitted queries. At best it will be stored in one of their database in clear text.
  • At worst it will appear on a big screen inside the reception room in a google office, on the live query list.
  • Green Server

    english, environment, geek, howto, pat 2 Comments »

    Last week I bought a consumption measurement device for 20 bucks. I wanted to know how much current is needed for various electronic devices I use at home, some of them on a 24/7 basis. I have got a home server running Linux, that I use as a NAS, print server, slim server (for streaming mp3 files to an mp3 device) and for experimenting a bit with Xen and Ubuntu. I have got also some other devices like a wireless access point (WRT54GL running Tomato), a cable modem, an external backup hard disk, a b&W laser printer and a few other electronic devices.

    Of course, one of the most energy hungry device I have is the server, which is always switched on. I was expecting a consumption of about 60 W, because I tried to choose efficient components, some of which were listed on a review regarding a green computer consuming 54 W when idle. My hardware configuration is the following:

    • Processor AMD 64 x2 EE 3800+, dual core and energy efficient version (which is actually quite cheap)
    • Micro-ATX Mainboard M2NPV-VM with AM2 socket
    • 2 GB of RAM (DDR2 PC4300)
    • 2 Seagate 7200.8 250 GB hard disks used as a software RAID-1 array
    • Power supply ElanVital 500W, ATX, with 80% efficiency.
    • Plextor Plexwriter DVD burner

    So I shut downed my server, plugged it in the measurement device and booted it. The value I could read on the device, after the reboot was finished and the server was idle, was higher than expected: 85 W. I was not very happy with that value and began to try to optimize it.

    • I first tried to remove the DVD burner, but I got just 2 W of reduction, which was not good enough.
    • Then yesterday I tried to install the last stable release of Ubuntu, which is Ubuntu 7.10 gutsy 32 bits version (I add previously Ubuntu feisty with a XEN enabled kernel). I was pleased to see that the server was only consuming about 68 W (DVD burner included). I then tried to re-install XEN and after rebooting saw that I was again at 85 W. So the XEN kernel had different options enabled that were not optimized for a good power management.
    • I got back to the stock kernel and tried to activate the automatic spin-down of the hard disks. I did this using the command
      hdparm -S 60 /dev/sda
      hdparm -S 60 /dev/sdb

      which spins down the two disks after being idle for 5 minutes. I was able to grab a few watts and get down to 60 W, which is not too bad. I added the two commands in /etc/rc.local so that it gets executed automatically on boot.

    • I then tried to activate the automatic CPU frequency scaling, so that when the processor has a low usage, its frequency gets automatically reduced, hence saving some energy as well. I was getting some problems using the module powernow-k8, so I updated the bios to the latest version (1201), which resolved that issue. I could then install correctly the cpu scaling daemon. I just had to run
      apt-get install cpufreqd

      and then edit the file /etc/default/cpufreqd and insert “powernow-k8″ in the option CPUFREQ_CPU_MODULE (you can check which module you need to use here). With these two operations, the BIOS upgrade and the cpu frequency scaling, I was able to grab a few watts, getting down, when the server is idle, to about 53 W, which is already a lot better than the 85 W I was getting without tuning.

    The options I might consider now are the following:

    • I could reduce significantly the power consumption if I automatically switch off the server every night. I am using it also to do a distant backup of another computer, but I could setup the BIOS to switch it on every night to do that, if it is not already the case. The only thing I would need to do is just to switch the server on, whenever I want to print something or hear mp3’s, which is not too bad. The server would then switch itself off at night, after doing the backup.
    • If I want to use XEN, I should compile my own patched kernel (for XEN) and tune the power management options to get the same consumption as on the stock kernel.
    • I could try to tune further the kernel options, which I am not sure that I am going to do, as it is much more convenient to use the stock kernel than to use a self compiled one (e.g. for updates).
    • I could try to find a way to cut off the consumption of some other electrical devices, which are most of the time not used or in standby mode, but do consume power anyway. Like for instance the laser printer (standby 14 W), the external backup hard disk Seagate 500 GB 7200.10 (standby 12 W), the wireless access point WRT54GL (always on, 14 W) or the cable modem (always on, 12 W). Not sure how I can do that. Of course I could plug some of these devices in a multi socket with a switch, but I would need to turn it on each time I want to access the internet using my laptop and turn it off afterwards (in addition it’s not compatible with my automatic distant backup). Not very elegant. I guess I will have to think about that issue.

    Additional links:

    Goanna: Update

    english, geek, pat 1 Comment »

    I just stumbled upon that video giving an update about the bug catching tool goanna, project on which I worked in 2005-2006. There is apparently now a nice integration within the Eclipse IDE.

    Goanna Video, Techfest, Melbourne

    Eclipse Summit Day 2

    english, geek, pat No Comments »

    Small summary of a couple of projects seen during the second conference day:

    • eRCP (abbreviation of embedded Rich Client Platform): this version, which is a subset of RCP, is targetted towards mobile devices and is also based upon OSGi. eRCP bundles light version of components from RCP, like eSWT, eJFace and eWorkbench and eUpdate. OSGi and the JVM is tuned for mobile devices and therefore has a smaller memory footprint than for a normal OSGi application, along with some other optimizations and tweaks. The aim is to get the benefits from RCP, while slightly adapted for mobile devices: multiplatform, native look & feel and better compatibility between devices than MIDP.
    • eSWT (embedded SWT): I talked yesterday about RAP for AJAX application and RWT. eSWT is a similar project, but targetted this time for mobile devices. eSWT is also a subset of SWT and is split in 3 components for better memory usage: Core eSWT (required), Expanded eSWT and Mobile Extension eSWT, the two latter being optional. Like SWT, eSWT uses native widgets from the underlying operating system, although a difference is that much of the code within eSWT is native code, giving rise to much better performances than a basic wrapping of OS widgets (a critical factor for mobile devices). eSWT implementations exist already for a number of mobile device platforms, like Windows Mobile and Symbian series 80, among others. A version for Symbian series 60 is ongoing and should be released shortly, along with the corresponding SDK. During the talk, a demo of a simple news reader was made, where a version using SWT was running on a desktop computer, a second version using RWT was run as an AJAX application, and finally a version using eSWT was running on a mobile device. Impressive to see that a single code base can be used to produce 3 applications running each on a completely different platform, although at least small modifications of the code base are needed.
    • Ganymatic: there is a couple of challenges for building an Eclipse distro, mainly managing the dependencies and running basic tests to be sure that plug-in A does not break the API of plug-in B when combined. This project, based on the package manager Buckminster aims at making such a process easier by providing an integrated infrastructure. This would enable to generate a distro automatically by fetching the required base packages, installing recursively their dependencies, running a number of automated tests to be sure everything is in place, making the binary build and reporting possible errors. The project will be used in particular for next year Eclipse’s release called Ganymede.
    • BMW CarIT: Eclipse is here used as a platform along several lines. For instance an Autosar IDE has been realized based on Eclipse RCP (using technologies like EMF, GEF, OAW), providing a modeling tool for developing Autosar applications. There is also the embedded development in C++ done with Eclipse CDT, where a custom compiler has been quickly integrated, including error/warnings annotations, taking advantage of the openness and extensibility of Eclipse as an IDE. Some other projects regarding Eclipse have also been presented (like an automated deployment solution).
    • Medany Platform: this is a project developed in France on top of Eclipse RCP and eRCP. The idea is here to use mobile devices (PDA) to aquire medical data and synchronize them with some servers. eRCP is used on the mobile devices while RCP on the server. The project is heavily based on Model Driven Architecture (EMF, OAW) and some other Eclipse projects (WTP, DTP).

    I guess, that’s it for this year. More information can be found on the Eclipse Summit 2007 website.

    Eclipse Summit Day 1

    english, geek, pat No Comments »

    I am at the moment in Ludwigsburg, which is in the Stuttgart’s area, in Germany, for the annual Eclipse Summit 2007. This is actually a quite interesting conference in the effervescent and mainly open source field of Eclipse. Lots of different projects around the mother project Eclipse are being presented. There are actually lots of interactions between them. Check the Eclipse Summit page for more information as well as a live cast and the slides regarding the talks.

    A little summary of some interesting projects seen today:

    • Erich Gamma presenting the Jazz project. A collaborative development environment. It provides a number of tools, which are integrated together, to enable a better collaboration in software development. I am seeing this a bit like a web 2.0 touch to software engineering, where the different developers have the opportunity to follow in real time the development of the whole tool: chat together using instant messenging, see a distributed task list of the project, send by drag and drop references to bugs or defects, see who is online at the moment to be able to address a given problem with that person directly, etc. The application is unfortunately not open source, but is of course based on Eclipse RCP.
    • An update regarding the Equinox or OSGI framework, which is an underlying framework and architecture on which Eclipse is based from the version 3.0.
    • An AJAX framework called RAP. This project aims at providing a target platform for deploying existing SWT applications, as AJAX apps, providing API’s (mostly) compatible with SWT. RAP or the RWT framework, as it is called, is in fact a subset of the SWT API’s. An application using the RWT target platform will be automatically translated into a web application upon execution, including javascript handling of the user events. It seems like a great idea to have a unique code base for an application, using either SWT or RWT depending on the deployment type. Although I am wondering how a seemless integration of the RAP application within the browser can take place: for the moment, the RAP application will have for instance its own windows, within the browser window, which I don’t find very nice. But in any case, a project to keep an eye on.
    • An update regarding JDT. I know I had read it in the release notes when Eclipse 3.3 was released, but I re-discovered the CTRL + 3 (Command + 3 on a Mac) shortcut. It does basically the same than Quicksilver or Spotlight on a Mac, just within Eclipse. Typing a short text, it does a search among all possible operations applicable to the situation. A great way to save time when launching operations (e.g. show the error log view or do a code cleanup).
    • GUIDancer: I find this name funny. This application basically enables to run tests of GUI based applications, at the moment just using Swing, although the version 2.0, which should be release to the end of the year, should support SWT and Web applications as well. A good complement to Unit Testing.

    I will try to charge my laptop battery until tomorrow, so that I can give an update of the second day.

    @Edit. I forgot to mention the EMF Compare project:

    • EMF Compare is a project started exactly one year ago at Eclipse Summit 2006. The aim was to privide model comparison capabilities, which were lacking at the time. One year later, a working prototype has been implemented. This enables, when using EMF for Model Driven Architecture, to be able to compare graphically two models, useful for instance when merging back to Subversion or CVS a modified version of a model. This project can be also used to compare graphically different XML files.

    Spam

    english, geek, pat No Comments »

    I have just seen in the blog dashboard the following activity log:

    “Akismet has protected your site from 6,753 spam comments.”

    Nice. There are some people out there that are quite nice and have useful things to comment on, I see. Hopefully I am using Akismet, a spam protection tool for Wordpress, that is using a webservice for comment validation. It actually works pretty well. I have just got a couple of spam comments lately, that I have anyway to approve before showing up.

    WP Theme & Icons by N.Design Studio
    Entries RSS Comments RSS Log in