I decided to make the move this weekend. Witnessing Kelly adopt GNU/Linux after being a long-time user of Microsoft solutions inspired me to transition away from Microsoft Windows. So, I bought an open-box 500GB Seagate FreeAgent external hard drive from Fry’s Electronics for 140USD, moved all my data files from my Windows desktop, and converted my desktop to one that runs CentOS 5.0.
The computers in my home currently run Mac OS X on a Mac Mini, CentOS 4.4 on an old PII 400MHz, CentOS 5.0 on a P4 2.6GHz, and Microsoft Windows XP Pro on a Dell Inspiron 8600 laptop with a Pentium M 2.0GHz processor. I was thinking about trying out Ubuntu, but after hearing that it was derived from Debian, I decided to stick with a distribution based on RedHat Enterprise Linux.
John Johnson Jr. of the LA Times reports that NASA investigators narrowed down the loss of the Mars Global Surveyor to a bad command sent to the wrong address. Johnson also reports, “The review also said the spacecraft’s onboard fault protection system failed to respond to the errors.”
Surely, NASA could afford to run through the procedure of sending the command on a simulation.
from The Departed
Police Camera Tech: Who the fuck are you?
Dignam: I’m the guy who does his job. You must be the other guy.
The New York Times has posted an obituary for John Backus. All recent computer science graduates have been exposed to John Backus’ work with BNFs, making him a legend like Djiskstra. John Backus makes up the Backus in the Backus-Naur duo. I admit that I did not remember Backus as the creator of Fortran, but the article discusses the importance of his Fortran work, which introduced new methods to make working with machines easier for people.
I find myself trying to make it easier for hardware engineers to work with a software interface. Here’s a description of a programming language in Backus-Naur form that I just wrote up:
statement ::= variable_declaration “;” | expression “;”
variable_declaration := type variable_name | type assignment
expression ::= addition | subtraction | assignment | operand
assignment ::= variable_name “=” expression
addition ::= expression “+” expression
subtraction ::= expression “-” expression
operand ::= numeric_constant | variable_name
Poor scheduling has been the bane of several projects with which I have had involvement. Ever since the one-month estimate that I gave for my first independent software development project, a shopping cart, a statement by Fred Brooks resonates continually in my mind. In The Mythical Man-Month, Brooks states, “More software projects have gone awry for lack of calendar time than for all other causes combined.” There are many things that are detrimental to projects, and Brooks suggests that the lack of time is the most significant factor that hampers a project and overshadows the total damage inflicted by all others.
Having learned and relearned the importance of good reality-based scheduling, I become squeamish when receiving a seemingly groundless estimate on project duration. In particular, I am very pessimistic about schedules that call for an entire project to be completed within a month. Conceptualization of a nontrivial system can easily exceed two weeks. Design will most likely require more than a week. This leaves implementation and testing with less than a week in a one-month schedule.
Two approximations to a feasible solution for the software procurement problem with a constraint of one month are the minimization of the product feature set and the minimization of system quality. These have served as candidates, though with strong resistance from project members, in the past. Betting against optimistic or baseless schedules is betting with the house.
Brandon Hutchinson provides a concise howto for chrooting SSH. For recent distributions of Red Hat Enterprise Linux (like CentOS), the following may also be needed in addition to Hutchinson’s Fedora Core procedures:
$ cp /lib/ld-linux.so.2 /chrootedpath/lib/.
$ chmod 666 /chrootedpath/dev/null
$ chmod 666 /chrootedpath/dev/zero
Running ldd on the sshd binary executable will display the executable’s shared library dependencies. The first item on the list addresses a possible dependency that was omitted in Hutchinson’s howto. The absence of this file is a possible cause for a “/bin/sh: No such file or directory” error message to be displayed when connecting as the chrooted user.
Attempting to SFTP as the chrooted user may result in the connection being immediately closed. After logging in as the chrooted user, executing /usr/local/libexec/sftp-server may also result in a “Couldn’t open /dev/null: Permission denied” error message to be outputted. This is fixed by applying the second item of the preceding list.
Hutchinson’s shell script can be modified to incorporate the additional steps that are presented above.
A personal copy of the howto for future reference is found
here.