Small Adventures
Linux
Warning: opinion piece by mbrewer. Far from objective (not that much on this site is)
OS Philosophy
Linux is not awesome, actually it really sucks. If you are tempted to ask "Well what would be better?" check out my microkernel spec. For my purposes, Linux sucks far less than anything else out there right now. I don't game at all and I know Linux quite well at this point, so there's no reason to run Windows. OS X is just a largely closed source *nix with a pretty but hard to configure UI that just gets in my way. Why deal with it? For people who want/need a pretty UI I recommend OS X. If you have a reason to run windows, go ahead and do it (just don't ask me for help). If you need more stability run Solaris or something like that. BSDs are cool too, they just hate me.
Open source/Free Software
I'm actually a big Open Source person. If you look below it might be obvious why. I'm a control freak when it comes to software. I actually DO modify software occasionally, and often read it to debug it, or just understand what it's doing. If I have something closed source eventually I'll want to open it for some reason, and end up switching to open source instead. So I just don't bother using closed source anymore. Also, it'll break due to API changes since I tend to run bleeding edge software. Another reason is that I (and my friends) have been known to actually security audit bits of code. I've read bits of OpenSSH to check exactly what information it broadcast to the server for example. With closed source you just can't know. Basically, with open source I can fix it, I can change it, I can check how it works, and it can't become abandonware. I'm not RMS, I don't think it's imoral to use proprietary software, I just think it's begging to get screwed over.
UI Philosophy
If I can't beat it to a pulp and rebuild it it's not good enough and I don't want to touch it. Okay, here's what I actually mean by that. Given a complete scripting language, or a commandline interface (and thus an interface to many complete scripting languages), I can make a program do whatever I need. Whoever the designer of a program had in mind, it's never me. I always find some little loophole that I want done differently. If I can't punch through the interface and tweak that, I end up using different software, or not using a tool at all and doing it by hand (if I can). For example, I got so frustrated with wireless scripts that I wrote my own. I recently tried wpa_supplicant but got fed up because I can't get it to understand ad-hoc mode. I can't seem to easily force it off, it hops AP's when I'm not looking, and some other minor issues. On the other hand fvwm is so highly customizable that I just completely changed the interface to fit my needs, and now it's perfect and anything else drives me batty. As a result of all of this, I tend not to be a fan of shiny UI GUI things, because they just aren't flexible, scriptable, and powerful enough (not that they can't be, but I find they rarely are). I always end up needing to work around them somehow.
Favorite Distros
- Gentoo (for flexability)
- Debian (for stability/ease of use... this is what I run on my server)
- Random bits about other unices and more esoteric OSen, there are oh so very many, and most of them did SOMETHING right.
- NetBSD hates my guts. I have nothing against it, but every time I try it, it falls over dead on me.
Personally I run Debian on machines that need to "just work" and Gentoo on machines that I want complete unencumbered control over. I've tried Ubuntu and I'm too much of a control freak to use something that user friendly. I end up spending a lot of time getting RID of everything just to get back to what is fundamentally debian. I have not experimented with redhat, mandriva, suse or any of those since 2005 or so. At the time they were all terrible for me, with bad package management, too much versioning (meaning the whole system is versioned, not just hte packages), and not very clean/clear upgrade paths if you just always want the newest stuff.
My toolset
This is an incomplete list, but at least it touches the big stuff, eventually I'd like to add WHY I use each of these tools.
- Basics:
- shell: bash (sometimes zsh)
- text editor: vim
- mail program: mutt
- UI:
- window manager: fvwm (lots of custom configs)
- status: fvwm button bar with embedded term running a python script
- terminal emulator: urxvt with single-line scroll patch
- Office Suite:
- presentations: vim + latex + xpdf (see beamer)
- word processing: vim + latex + aspell
- diagrams: dia
- spreadsheets: gnumeric
- graphs: gnuplot
- viewing word docs: antiword, abiword
- Web:
- browser: w3m
- browser with jscript and stuff: firefox (not a fan)
- Network:
- Chat:
- AIM, Jabber etc: pidgin (with otr)
- IRC: irssi or pidgin
- Debugging:
- kismet
- tcpdump
- arping
- wireshark
- Tunneling:
- DNS: nstx, ozymandns
- Tor: torrify
- ssh (awesome for tunneling)
- Cracking:
- WEP cracking: aircrack
- WEP deauth: aireplay
- Moving files:
- to/from windows: Samba
- normally: scp, rsync
- UI:
- whole desktop: vnc (rarely)
- keyboard/mouse forwarding: x2x
- mostly: ssh console (this is why console programs are awesome)
- Audio work:
- recording: audacity ardour
- editing: rosegarden
- realtime effects:
- subsystem: jack with realtime support
- control of jack: qjacktl
- effect plugin system: jack-rack
- Playback:
- mplayer
- music alarm clock: bash script
- randomized play: bash script
- volume: aumix, alsamixer (aumix is tied into my fvwm shortcuts)
- Image work:
- downloading from camera: gphoto2
- editing: gimp, imagemagick
- viewing: feh
- browsing: gqview
- Programming:
- C compiler: gcc (duh)
- applications: Ocaml, sml
- scripting:
- quick scripts: bash, awk, cut, grap, sed, find, etc.
- longer scripts: python
- degugging:
- basics: gdb
- memory leaks and others crappy code: valgrind
- syscalls: strace
- Server:
- webserver: apache2 (with features turned off)
- dns server: bind (djbdns is too weird)
- dns proxy: dnsmasq
- dhcp: dnsmasq
- NAT: iptables
- routing: iptools
- Tor
- security: snort, tripwire
Interesting/Useful Scripts
These are some of the scripts that I actually use that are slightly nontrivial.
Scripts:
- iproute sets up my routing tables on boot, I have yet to set up something that UNdoes this... meh.
- iptables sets up NAT for my personal wireless network to my DSL link.
- failover.py is a quick python script that I use to fail my server over to wireless the aptartment complex' wireless if my DSL goes dead. This doesn't make it available to the outside world, but it means my server can E'mail me for example.
- select_random is a wonderful bash one-liner that selects a random item from a stream in a single pass with "constant" (theoretical logorithmic) memory overhead. I use this as the basis for a lot of other scripts.
- mp3play is one hell of a horrific hack which plays random mp3's using mplayer. If you pipe the right stuff to "tmp/mplayer_fifo" you can control it from another application. I use this to control it from fvwm with shortcut keys... or sometimes I directly echo while ssh'd in from another box.
- alarm is a companion script to mp3play. It uses mp3play to create an alarmclock to wake me up to music. It actually checks to see if mp3play is already running, and starts it if it's not. Again, very hacky.
- format Takes a .csv file - es exported for google from google contacts, as input and outputs a printable format. Useful if you want all of your contacts for say... a throughhike.
Interesting Useful Configs
These are configs that I actually use that are slightly nontrivial.
Configs:
- .fvwm2rc from my home directory. This is the one I actually use (or, at least what I used at the time fo this writing). This borders on turning fvwm into a tiling windowmanager, and sets things up so you never need a mouse (My mouse is ucrrently 3 feet away actually).
- .vimrc from my home directory. I'm still fighting with convincing vim to never ever try and sync. Basically I only want it to write to FS when I tell it to, and never force a sync to the disk (which it really wants to do)
- mbrewer
Last modified Wed Apr 1 20:15:24 2009 UTC