2012-12-31: |
How our fileserver infrastructure is a commodity setup (and inexpensive)
GNU sort 's -h option
|
2012-12-30: |
What I'd have liked to hear about Python 3 from the developers
|
2012-12-29: |
Why I think that stupid spamming is actively wasteful
|
2012-12-28: |
A spammer that is not the brightest light in the box
|
2012-12-27: |
Why I somewhat irrationally have a distrust of ZFS on Linux
|
2012-12-26: |
Does Python 2 need to evolve?
|
2012-12-25: |
A confession: Python 3 has always made me kind of angry
|
2012-12-24: |
Why we're almost certainly staying with ZFS
|
2012-12-23: |
What we (probably) want in a future version of Solaris
|
2012-12-22: |
Packaging in compiled versus interpreted languages
|
2012-12-21: |
Version control comes first
|
2012-12-20: |
Sysadmins should pretty much version control everything
|
2012-12-19: |
Part of good awk programming is getting the clause order right
|
2012-12-18: |
Why I'm still using VMware
|
2012-12-17: |
Should you alert on the glaringly obvious?
|
2012-12-16: |
Alerts should be actionable (and the three sorts of 'alerts')
|
2012-12-15: |
A few small notes about OpenBSD PF (as of 4.4 and 5.1)
|
2012-12-13: |
A drawback of short servers
|
2012-12-12: |
fork() and closing file descriptors
One good use for default function arguments
|
2012-12-10: |
The general lesson from the need for metrics
Things that systemd gets right
|
2012-12-09: |
When I'd use a web server other than Apache
|
2012-12-08: |
Why Apache is such a temptation
|
2012-12-07: |
How I use virtualization (and what for)
|
2012-12-05: |
One way to break down how people use virtualization
In praise of KVM-over-IP systems
|
2012-12-04: |
You can't assume that your performance problems will be obvious
|
2012-12-03: |
A reason for detailed commit messages: as a guard against errors
|
2012-12-02: |
What goes into the terminal's 'cbreak' and 'raw' modes
|
2012-11-30: |
All kernel messages should be usefully ratelimited. No exceptions.
My new view on why you need to profile code
|
2012-11-29: |
One reason why having metrics is important
|
2012-11-28: |
When you make a harmless change, check to make sure that it is
|
2012-11-27: |
You don't necessarily know what matters for performance
|
2012-11-25: |
More thoughts on why Python doesn't see much monkey-patching
The limits of monkey patching in Python
|
2012-11-24: |
Simple markup as a style guide and limiter
|
2012-11-22: |
A little Unix difference that irritates: what word erase erases
Optional features are in practice not optional to understand
|
2012-11-21: |
The varying appeal of wikitext and other simple markup
|
2012-11-20: |
Where my Firefox performance problem seems to be
|
2012-11-19: |
Python 3's print() annoys me (although maybe it shouldn't)
|
2012-11-18: |
Linux is less divergent than commercial Unixes used to be
|
2012-11-17: |
Why Google's handling of multiple domains on inbound messages is okay
|
2012-11-16: |
Why DTrace does not attract people to Solaris very often
|
2012-11-15: |
A learning experience: internal mail flow should never be allowed to bounce
|
2012-11-13: |
The problem with SELinux (still)
A potential path to IPv6
|
2012-11-11: |
Explaining an RPM oddity
A reminder: string concatenation really is string concatenation
|
2012-11-10: |
Why Unix doesn't have user-changeable namespaces
|
2012-11-09: |
Some amusing cut and paste work from spammers
|
2012-11-08: |
Devops, the return of system programmers?
|
2012-11-07: |
DTrace: figuring out what you have access to at tracepoints
|
2012-11-06: |
Why I want to do full end-to-end performance tests
|
2012-11-04: |
Your logs should always include IP addresses (in addition to hostnames)
Good and bad formats for your log messages
|
2012-11-03: |
Another go-around on the drawbacks and balances of automation
|
2012-11-02: |
Why our ZFS fileservers sometimes boot slowly
|
2012-10-31: |
Our DTrace scripts for NFS server, ZFS, and iSCSI initiator monitoring
Some stats and notes on relay attempts for our external mail gateway
|
2012-10-30: |
How I am doing randomized read IO to avoid ZFS prefetching
|
2012-10-29: |
How ZFS file prefetching seems to work
|
2012-10-28: |
Some unusual SMTP activity from would-be spammers
|
2012-10-27: |
The difference between cryptographic and normal random number generators
|
2012-10-26: |
Thinking about an unusual sequence
|
2012-10-25: |
Always make sure you really understand what your problem is
|
2012-10-24: |
Why you should support 'reload' as well as 'restart'
|
2012-10-23: |
The problem of simulating random IO
|
2012-10-22: |
Why parsers matter
|
2012-10-21: |
Why fork() is a good API
|
2012-10-20: |
The issue with measuring disk performance through streaming IO
|
2012-10-19: |
An old Unix trick for saving databases
|
2012-10-18: |
A danger of default values for function arguments (in illustrated form)
|
2012-10-17: |
Operators and system programmers: a bit of System Administrator history
|
2012-10-16: |
Switch flow control and buffering: what we think was wrong in our iSCSI network
|
2012-10-15: |
The anatomy of a performance problem with our mail spool
|
2012-10-14: |
DTrace: two mistakes you can make in DTrace scripts
|
2012-10-13: |
DTrace: counting, aggregates, and a nice undocumented printa() feature
|
2012-10-12: |
SSL CAs have an impossible job (if you want them to be thorough)
|
2012-10-11: |
Controlling Linux TCP socket send buffer sizes
|
2012-10-10: |
Disk IO latency is often what matters
|
2012-10-09: |
The negative results problem with search engines
|
2012-10-08: |
Acclimatization makes competition in web search engines hard(er)
|
2012-10-06: |
Python can execute zip files
How averages mislead you
|
2012-10-05: |
Notes on Linux's blktrace
|
2012-10-04: |
Averages mislead: an illustrated example
|
2012-10-03: |
DTrace: notes on quantization and aggregates
|
2012-10-02: |
Some notes on getting durations in DTrace
|
2012-09-30: |
A new anti-spam precaution after our local spam incident
|
2012-09-29: |
A recent spam oddity that I've been mulling over
What I would like in colour-specification interfaces
|
2012-09-28: |
fork() versus strict virtual memory overcommit handling
|
2012-09-27: |
Microkernels and device drivers
|
2012-09-26: |
Microkernels and modularity: do microkernels ever make sense?
|
2012-09-25: |
The jaundiced C programmer's view of object orientation
|
2012-09-24: |
The wrong way to harvest system-level performance stats
|
2012-09-23: |
How we handle Ubuntu LTS versions
|
2012-09-22: |
Speculation about what comment spammers think they're doing here
|
2012-09-21: |
How I enter URLs in my browser
|
2012-09-20: |
My alternative to bookmarks: a page of links as the browser start page
|
2012-09-19: |
Two views of the argparse module
|
2012-09-18: |
My Python versions
|
2012-09-17: |
The options problem in Python
|
2012-09-16: |
The problem with noise
|
2012-09-15: |
Sensible reboot monitoring
|
2012-09-14: |
What determines how much work a ZFS resilver has to do
|
2012-09-13: |
Why you need mass package rebuilds in some circumstances
|
2012-09-12: |
The core problem with developers doing their own packaging
|
2012-09-11: |
A realization about ratelimit time horizons
|
2012-09-09: |
The core difference between Debian source packages and RPMs
When I've interned Python strings
|
2012-09-08: |
When you can log bad usernames for failed authentications
|
2012-09-07: |
What the standard(s) say about the order of readdir() 's results
|
2012-09-06: |
A little trick and gotcha with Exim ratelimits
|
2012-09-05: |
Some thoughts on logging failed login attempts (for existing users)
|
2012-09-03: |
People are not ignorant (usually)
|
2012-09-02: |
What I would like: testable mailers
Solaris 11 is still closed source (and Oracle is careless with words)
|
2012-08-31: |
A realization about one bit of test-driven development
A small rant about looking down on Linux users
|
2012-08-30: |
My perspective on why we do in-place reinstalls of machines
|
2012-08-29: |
A realization: install configuration files before packages
|
2012-08-28: |
When Exim generates bounce messages
|
2012-08-27: |
You should log all successful user authentication
|
2012-08-26: |
Some brief information about a local spam incident
|
2012-08-25: |
Some odd behavior from blog comment spammers
|
2012-08-24: |
The theoretical right way to check if an account is in a Unix group
|
2012-08-23: |
Illustrating the Ubuntu clown car, AccountsService edition
|
2012-08-22: |
My view on the understandability of language idioms
|
2012-08-21: |
Another problem with how Debian builds from source packages
|
2012-08-20: |
Sysadmins hate updates (more or less)
|
2012-08-19: |
Why I don't like the Debian source package format
|
2012-08-18: |
What everyone needs in source packages
|
2012-08-17: |
How Firefox performs (and doesn't) for me
|
2012-08-16: |
Why I hate vendors, printers edition
|
2012-08-15: |
The historical background of the *BSD 'base system' versus Linux
|
2012-08-13: |
When and where I fell out of love with Firefox
|
2012-08-12: |
A nice illustration of the cost of creating and destroying objects in Python
The CPython bytecode difference between iteration and looping
|
2012-08-11: |
How not to write kernel messages
|
2012-08-09: |
Learning something from not testing jQuery 1.8's beta releases
Ubuntu 12.04 and symbolic links in world-writeable sticky-bitted directories
|
2012-08-08: |
Linux ps's problem with login names
|
2012-08-06: |
The theoretical legality of shadowing builtins in Python
The (possibly apocryphal) story of System V IPC's origins
|
2012-08-05: |
Reasoning backwards (a story about what can happen to SATA disks)
|
2012-08-04: |
Oracle, ZFS, and Linux (and Solaris)
|
2012-08-03: |
What makes an operating system attractive
|
2012-08-02: |
Can Oracle make ZFS much more attractive?
|
2012-07-31: |
Would GPL'ing ZFS have worked or been a good idea?
Ruminations on the future of ZFS
|
2012-07-30: |
IPv6 is going to be a fruitful source of configuration mistakes
|
2012-07-29: |
The periodic strangeness of idiomatic Python
|
2012-07-28: |
The ecological niches of current open source Unixes
|
2012-07-27: |
What 32-bit x86 Linux's odd 896 MB kernel memory boundary is about
|
2012-07-25: |
The kernel memory addressing problem
My dislike for what I call 'perverse Test Driven Development'
|
2012-07-24: |
Unicode's two new problems
|
2012-07-22: |
The history of booting Linux with software RAID
A sleazy trick to capture debugging output from an initramfs
|
2012-07-20: |
Ubuntu 12.04 can't reliably boot with software RAID (and why)
The temptation of selective sender address verification
|
2012-07-19: |
Unicode code points and abstract characters
|
2012-07-18: |
Strings in Python 2 and Python 3
|
2012-07-16: |
Getting an Ubuntu 12.04 machine to give you boot messages
My arrogance about Unicode and character encodings
|
2012-07-15: |
My general issue with Unicode in Python 3
|
2012-07-14: |
ZFS's problem with generic messages
|
2012-07-13: |
Why system administration certifications have worked so far
|
2012-07-12: |
Why formal sysadmin education isn't likely any time soon
|
2012-07-11: |
The extremely cynical take on DevOps
|
2012-07-10: |
A theory on why defaults for tunable parameters stay unchanged
|
2012-07-09: |
Why the defaults for tunable kernel parameters matter
|
2012-07-08: |
Why System V shared memory may normally be limited
|
2012-07-06: |
Why Exim has a single queue for all email
Exploring an ARP mystery: a little Linux surprise
|
2012-07-04: |
How to irritate sysadmins and give mailers heartburn with your MXes
|
2012-07-03: |
The secure web voting problem
The well behaved Unix program and job control signals
|
2012-07-01: |
Another cynical take on the nofollow tag
|
2012-06-30: |
What Linux distributions should do to help their Python 3 transitions
|
2012-06-29: |
The magnitude of the migration to Python 3, illustrated
More about my issues with DTrace's language
|
2012-06-28: |
Why I don't like implicit string interpolation
|
2012-06-27: |
One root of my problem with GNU Emacs
|
2012-06-26: |
A little gotcha with SSH connection sharing
|
2012-06-25: |
Why sophisticated line editing is not in the kernel
|
2012-06-24: |
My take on fancy editors for programming
|
2012-06-22: |
How the Linux kernel command line is processed (more or less)
The effects of DTrace's problems
|
2012-06-21: |
How I want to do redirects in Apache, especially in .htaccess files
|
2012-06-20: |
An update on comment spammer behavior here on WanderingThoughts (once again)
|
2012-06-19: |
How I'm doing AJAX with Django in my web app
|
2012-06-17: |
A realization about whether I can contribute to Python development
Why our server had its page allocation failure
|
2012-06-16: |
Decoding the Linux kernel's page allocation failure messages
|
2012-06-15: |
How the Linux kernel divides up your RAM
|
2012-06-13: |
Some tricky bits in in-browser form mangling and validation
Client side form validation can let people explore their options
|
2012-06-11: |
What bits of a form are useful to check on the client side
Choosing how slowly your mailer should time out email
|
2012-06-10: |
The anti-spam implications of email being multiple things in one
Modern email is actually multiple things in one system (mailer timeouts edition)
|
2012-06-09: |
Rethinking when your mailer sends 'not-yet-delivered' warning messages
|
2012-06-08: |
An (accessible) explanation of the Flame malware's Windows Update compromise
|
2012-06-07: |
My experience doing a Fedora 17 upgrade with yum: it worked fine
|
2012-06-06: |
A feature that Linux installers should have: restoring your backups
|
2012-06-04: |
Why the TTY line discipline exists in the kernel
|
2012-06-03: |
Another view of the merge versus rebase debate in version control
My view on Mercurial versus Git
|
2012-06-01: |
Some things that strike me about Linux and UEFI secure booting
The secure boot problem
|
2012-05-31: |
What OSes have succeeded or failed here
Thinking about why Solaris has failed here
|
2012-05-30: |
What it means for an OS to succeed or fail
|
2012-05-28: |
Yes, git add makes a difference (no matter what people think)
How to do a very cautious LVM storage migration
|
2012-05-27: |
Complications in spam filter stats in our environment
|
2012-05-25: |
How CSLab currently does server side email anti-spam stuff (version 2)
|
2012-05-24: |
Today's Mercurial command alias: a short form hg incoming
How we do milter-based spam rejection with Exim
|
2012-05-23: |
Some notes on using XFT fonts in TK 8.5
|
2012-05-22: |
Our pragmatic experiences with (ZFS) disk errors in our infrastructure
|
2012-05-21: |
More on CISC (well, x86) versus RISC
|
2012-05-20: |
The XFT font naming issue
|
2012-05-19: |
A semi-brief history and overview of X fonts and font rendering technology
|
2012-05-17: |
My Firefox memory bloat was mostly from All-in-One Gestures
The Go language's problem on 32-bit machines
|
2012-05-15: |
Some stuff on 'time since boot' timestamps
|
2012-05-14: |
My Firefox 12 extensions and addons
|
2012-05-13: |
My experiment with Firefox Nightly builds: a failure
A basic step in measuring and improving network performance
|
2012-05-12: |
The death of paging on the web
|
2012-05-10: |
All your servers should have Linux's magic SysRq enabled
|
2012-05-09: |
Using rsync to pull a directory tree to client machines
Things I will do differently in the next building power shutdown (part 2)
|
2012-05-07: |
Third party Linux kernel modules should build against non-running kernels
|
2012-05-06: |
Why I wound up using Django
Counting your syndication feed readers
|
2012-05-05: |
Look for your performance analysis tools now
|
2012-05-04: |
Explaining a piece of deep weirdness with Python's exec
|
2012-05-03: |
Python scopes and the CPython bytecode opcodes that they use
|
2012-05-01: |
Into the depths of a Python exec scope-handling bug
|
2012-04-30: |
Notes to myself about progressive JavaScript
|
2012-04-29: |
The Python language tutorial is a gem
My two approaches to learning (programming) languages
|
2012-04-28: |
ZFS and various sorts of read errors
|
2012-04-27: |
The case of the Twitter spam I don't understand
|
2012-04-26: |
When we replace disks in our ZFS fileserver environment
|
2012-04-25: |
Models of providing computing access in a university department
|
2012-04-24: |
Universities and their non-employees
|
2012-04-23: |
My perspective on the 'Bring Your Own Device' controversy
|
2012-04-22: |
I may be wrong about my simple answer being the right one
|
2012-04-21: |
Bash's superintelligent errors about exec failures
|
2012-04-20: |
Sometimes the simple answers are the right ones (a lesson from bash)
|
2012-04-19: |
An interesting experience with IP-based SMTP blocks
|
2012-04-18: |
Why you should never use file (or libmagic ) to identify files
|
2012-04-17: |
ls -l should show the presence of Linux capabilities
|
2012-04-16: |
What you need for migrating web content
|
2012-04-15: |
My view on why CISC (well, x86) won over RISC in the end
|
2012-04-14: |
The wiki trap (that we've fallen into)
|
2012-04-12: |
Tanenbaum was wrong in the Tanenbaum-Torvalds debate
Hypervisors are not microkernels
|
2012-04-11: |
Faking (or not) a ternary if operator with && and ||
|
2012-04-10: |
Revisiting checksum functions
|
2012-04-09: |
Understanding hashing in Python
|
2012-04-08: |
My story of running scripts from the web
|
2012-04-06: |
Checksums and hashes
Why we haven't taken to DTrace
|
2012-04-05: |
Why I hate having /tmp as a tmpfs
|
2012-04-04: |
More on equality in Python (well, mostly Python 2.7)
|
2012-04-03: |
Python's two versions of equality, with a long digression on hash()
|
2012-04-02: |
The problem of ZFS pool and filesystem version numbers
|
2012-03-31: |
Our sysadmin environment
Why I no longer believe that you need Solaris if you want ZFS
|
2012-03-29: |
Scalable system management is based on principles
|
2012-03-28: |
How I (once) did change management with scripts
Ultimately, abuse issues have to be handled by humans
|
2012-03-26: |
Microkernels are quite attractive to academic computer science researchers
What it means to become another user on Unix
|
2012-03-25: |
Atom feeds and constrained (web) environments
Link: Getting Real About Distributed System Reliability
|
2012-03-24: |
Garbage collection and modern virtual memory systems
|
2012-03-23: |
Sometimes you get lucky
|
2012-03-22: |
The problems of operations and sysadmin heroism
|
2012-03-21: |
My view of where the Unix community is
|
2012-03-20: |
How I use objects in Python
|
2012-03-19: |
A modest suggestion: increase your text size
|
2012-03-18: |
The standard trajectory of a field
|
2012-03-16: |
Parsing versus rewriting: how to tell them apart
|
2012-03-15: |
Part of the cleverness of Unix permissions (a little thought)
|
2012-03-14: |
The right way to do wikitext transitions
Configuration management is not documentation, at least not of intentions
|
2012-03-12: |
Why it matters whether your software works when virtualized
Why ZFS log devices aren't likely to help us
|
2012-03-11: |
A CBL false positive reveals a significant issue with the CBL
|
2012-03-09: |
Why you do not want to patch your source code in place
|
2012-03-08: |
What I have to run for my custom environment on Fedora 16
|
2012-03-07: |
The hard part of custom environments on Fedora (or any Linux)
How not to use Apache's ProxyPass directive
|
2012-03-05: |
Web frameworks should be secure by default
Convenience in web frameworks is often insecure
|
2012-03-04: |
Some stuff on Python 2.7.x support periods
|
2012-03-03: |
Two ways I increase the security of SSH personal keys
|
2012-03-01: |
A trick for dealing with irregular multi-word lines in shell scripts
|
2012-02-29: |
SSDs and understanding your bottlenecks
The two sorts of display resolution improvements
|
2012-02-28: |
In place migration to Linux software RAID
|
2012-02-26: |
What information I want out of ZFS tools and libraries
How much spam is forged as being from who it's sent to?
|
2012-02-25: |
The (future) problem with Python 2.7
|
2012-02-24: |
Blogs and the problem of indexes
|
2012-02-22: |
How I can be wrong about the death of sysadmin jobs
|
2012-02-21: |
Using and understanding Python metaclasses (an index)
|
2012-02-20: |
Why I still have a custom-compiled Firefox
My view of where TCL went wrong
|
2012-02-18: |
The most popular sender domains for spam messages sent to here
The downside of automation versus the death of system administration
|
2012-02-16: |
Handling modern IPv6 in programming environments
|
2012-02-15: |
The temptation of LVM mirroring
A downside of automation
|
2012-02-13: |
The problem with long-term production support of things
|
2012-02-12: |
Some things about changing from old X fonts to modern TrueType fonts
Understanding FVWM States, with better FVWM code for selecting terminal windows
|
2012-02-11: |
How I select (terminal) windows from the keyboard in FVWM
|
2012-02-09: |
What supporting a production OS means for me
A general point about SSH personal keys
|
2012-02-08: |
Choosing the superblock format for Linux's software RAID
|
2012-02-06: |
The advantage of HDMI for dual displays
|
2012-02-05: |
My view on what will kill 'traditional' system administration
Link: Filenames.WTF
What five years of PC technology changed for me
|
2012-02-03: |
Understanding a subtle Twitter feature
Understanding Resident Set Size and the RSS problem on modern Unixes
|
2012-02-01: |
A ZFS pool scrub wish: suspending scrubs
|
2012-01-31: |
The solution to the modern X font handling mystery
Where is Oracle going with Solaris?
|
2012-01-30: |
HTML is not a SGML dialect and never really has been
|
2012-01-29: |
Dealing with Fitts' Law on widescreen displays
Thinking about spam rejection and abuse addresses
|
2012-01-28: |
How I use FvwmIconMan
|
2012-01-27: |
Why metaclasses work in Python
|
2012-01-26: |
The drawback of modern X font handling gets mysterious
|
2012-01-25: |
The death of system administration: I'm all for it
|
2012-01-24: |
Why I use exec in my shell scripts
|
2012-01-23: |
Every so often, I solve a problem with a hammer
|
2012-01-22: |
My view of the purpose of object orientation
|
2012-01-21: |
The C juggernaut illustrated
|
2012-01-20: |
Another Russ Cox regexp article: How Google Code Search Worked
|
2012-01-19: |
How not to do repeated fields in web forms
Let's make it official: Solaris 11 is closed source
|
2012-01-18: |
SOPA and PIPA matter for everyone
|
2012-01-17: |
The first browser blinks on XHTML parsing
|
2012-01-16: |
Understanding isinstance() on Python classes
What you can find out about the memory usage of your Linux programs
|
2012-01-15: |
Understanding the basic shape of Unix virtual memory management
|
2012-01-14: |
What do we mean when we talk about something's memory usage?
|
2012-01-13: |
Notes on what Linux's /proc/<pid>/smaps fields mean
|
2012-01-11: |
A Yum plugin I would like: using a local DVD as a repo source
How to use systemd to just run some stuff on boot
|
2012-01-10: |
An insight on the purpose of comments: volume control
|
2012-01-09: |
What my physical desk is like
|
2012-01-08: |
The latest annoyance with Google Groups
|
2012-01-07: |
Why you might want multiple keys for disk encryption
|
2012-01-05: |
Nailing down RPM epoch numbers
Disk encryption, backups, and your threat model
|
2012-01-03: |
How to lose your data with full disk encryption the easy way
The drawback of full disk encryption
|
2012-01-02: |
An example sort that needs a comparison function
|