99 little bugs in the code
99 bugs in the code
patch one down, compile it around
117 bugs in the code
And Other Bad Words
99 little bugs in the code
99 bugs in the code
patch one down, compile it around
117 bugs in the code
Whatchya doin’?
Eatin’ chocolate.
Where’d ya get it?
The doggy dropped it.
Where’s the doggy?
Behind the door.
What’s he doin’?
Makin’ more.
At work, we use vim for our editing needs – which, as programmers, means we spend our day in vim.
We have a lot of mixed-format code – sometimes it has tabs, sometimes it has spaces. Personally, I prefer spaces for my indenting, but I’m a convert to the church of make-your-code-match-the-existing-code. As opposed to reformatting the existing code, which is soooo irresistible until you’re faced with a mountain.
So, I have to switch back and forth a lot. Here, for the sake of posterity, is how to switch from spaces to tabs on-the-fly in vim:
:set noexpandtab
:set copyindent
:set preserveindent
:set softtabstop=0
:set shiftwidth=4
:set tabstop=4
Professor: Being captain is about intuition and heart. A good captain can’t have either one. That’s why cold, logical Bender is perfect for the job.
Bender: Well, I do think of human life as expendable.
I’ll be honest, this post is mostly to gloat.
The night after the other parental unit’s disastrous night in the tent, I offered the kids a second camping trip to the back yard.
Alpha slept all night… in the tent. (willingly!)
Beta slept all night… in the tent.
I slept all night… in the tent.
I was the last one to nod off, and that was before eleven p.m. And we all slept until after sunrise.
I had a problem. My home directory is huge – 9 gigs – but I don’t know what’s taking up all that room. My porn stash is on another partition where my wife doesn’t know to look, so something is taking up a lot of room and I want to know what and why.
Oh yeah, I know how to check the size of a directory – use du ('du -sh .'
) for the usage of current directory (including all sub directories). And, to see the size for every individual directory in the current directory, 'du -sh *'
. Easy peasy.
But that didn’t tell me what I needed to know, since the total size of all visible directories was less than a quarter of the used space. That’s where hidden directories come into play.
Now, in the unix world, there isn’t a special file permission to hide a file or directory. You just name it with a leading dot, like '.my_hidden_stuff'
, and most utilities won’t display it. There’s nothing intrinsically hidden about it, though. You can view them easily enough, e.g. 'ls -a'
will show everything, including the “hidden” stuff.
What if you want to see just the hidden stuff? It’s not as simple as saying 'ls -a .*'
, since that includes '.'
(the current directory) and '..'
(the parent directory), too. Some utilities, like du
, will then combine arguments with a common root, which means you get the summary for the current directory, but none of the hidden files broken out.
Solution
In bash, at least, you can include simple regular expressions on the command line. (Remember, in unix, your command line is pre-processed by the shell (bash, csh, tcsh, etc.) and the expanded items are given to the program. DOS/Windows, by contrast, the expansion and processing is the responsibility of the program and command.com (or cmd.exe) does little processing itself.
The regex for all dot files, minus ‘.’ and ‘..’, is '.[^.]*'
(which basically says, “start with a dot, and the next character must exist but cannot be a dot, and then anything goes after that”).
So, my command to see how much space each of my hidden directories are using, is
du -shx .[^.]*
I have ‘fortune’ run at login for all of my machines. These are the fortunes I saw, one right after the other, while hopping from machine to another:
Our country has plenty of good five-cent cigars, but the trouble is they charge fifteen cents for them.
Then, when I connected to the next machine…
What this country needs is a good five cent ANYTHING!
My computers are getting better at coordination. I had best keep them happy.
I say:
$ VBoxManage controlvm <vbox uuid> usbattach <device uuid>
VirtualBox says:
VBoxManage: error: USB device '<device>' with UUID <uuid> is being exclusively used by the host computer
I say:
$ gpasswd -a <vbox user> plugdev
and log out the vbox user completely (no vms running, no logged-in shell).
And now the device is available and add-able.
“I’m working on my tan.”
“Dude. It’s night time.”
“If it were daytime, I wouldn’t have to work very hard, would I?”
I’m working on a fun little project to set up a custom-made bootable usb key. But I ran into a little trouble after using a chroot, due to /dev
and mount --rbind
.
# mount -t proc none /mnt/gentoo/proc # mount --rbind /sys /mnt/gentoo/sys # mount --rbind /dev /mnt/gentoo/dev # mount -t tmpfs tmpfs /mnt/gentoo/tmp # mount -t tmpfs tmpfs /mnt/gentoo/var/tmp # mount -t tmpfs tmpfs /mnt/gentoo/usr/src # mount | grep gentoo /dev/sde1 on /mnt/gentoo type ext2 (rw) none on /mnt/gentoo/proc type proc (rw) /sys on /mnt/gentoo/sys type none (rw,bind,rbind) /dev on /mnt/gentoo/dev type none (rw,bind,rbind) tmpfs on /mnt/gentoo/tmp type tmpfs (rw) tmpfs on /mnt/gentoo/var/tmp type tmpfs (rw) tmpfs on /mnt/gentoo/usr/src type tmpfs (rw) # chroot /mnt/gentoo
All’s well, until it’s time to exit the chroot
and unmount everything..
# umount /mnt/gentoo/usr/src /mnt/gentoo/var/tmp \ /mnt/gentoo/tmp /mnt/gentoo/sys /mnt/gentoo/proc \ /mnt/gentoo/dev /mnt/gentoo umount: /mnt/gentoo/dev: device is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1))
I don’t see anything mounted under there. Fuuuu…
# mount | grep gentoo /dev/sde1 on /mnt/gentoo type ext2 (rw) # lsof|grep gentoo # fuser -m /mnt/gentoo /mnt/gentoo: #
Rebooting at this stage is inconvenient, but will certainly solve the problem. But what is left using /mnt/gentoo/dev
?
Googling around, and seeing some people with similar problems, finally lit a light bulb above my head:
# cat /proc/mounts | awk '{print $2}' | grep gentoo /mnt/gentoo /mnt/gentoo/dev /mnt/gentoo/dev/pts /mnt/gentoo/dev/shm
So mount --rbind
worked as advertised and recursively mounted /dev and everything sub-mounted. And I didn’t realize that udev mounted other things under /dev
without updating /etc/mtab
. Sigh.
# umount /mnt/gentoo/dev/shm /mnt/gentoo/dev/pts /mnt/gentoo/dev /mnt/gentoo #
And now I can get on with my life.