First I tackled the living room, which took me quite awhile. It still could probably use some more vacuuming and washing of surfaces, but it's fairly tidy and clean, and there are very few things in the room that should either be elsewhere or tossed. Last night, the bedroom got the same treatment - finally tossing out all clothes that are in bad shape (whoa, a lot), things in memory boxen that never should've been in there in the first place (old MP3 players? seriously?), pillows that developed holes some years ago, things I made with yarn a long time ago that didn't hold together, large piles of broken electronics, etc.
End result: Kitchen has Mt. Garbage pairing another peak on my back porch. I want to do a similar purge of my kitchen, but will probably have to wait for garbage day. Also, I hope I don't have too much for the garbagemen to take in one load. On the upside, it feels a bit surreal living someplace this clean and tidy. It's nice that once things are this clean, it's not hard to keep them that way.
Added bonus: I found my awl (so I can make some small improvements to my sandals) and my Kippah (which isn't terribly useful to me, although I'm fond of it).
Recently I've been reconsidering a large software project I occasionally bumped into (and disliked) during undergrad - its broad goal was software reusability using contracts between software components. One of the marks of a good abstraction is that it tidies up things that are instinctually worthwhile, and a formal statement of what a function/object/method does is that to the informal documentation we expect of it. Question remains: are contracts the best way to do that? In conjunction with or replacing less-formal descriptions? Are contracts, stated in a predefined language, themselves subject to bitrot as new cross-cutting concerns (reentrant? recursion-safe? discretely separable? aliasing-safe? etc) change the way we think about code? There's obvious goodness when the compiler (or contract-checker) can say "hey, your concepts don't line up right as far as I can tell", and reusing chunks of code is something we all do, which is obviously valuable. How does the formalism line up with the canned message from another expert saying "here's the deal, ...."?
To risk stepping on a few toes, I wonder if they decided to build their language on top of C++ because it's such a messy and conceptually-leaky language that the efforts to engineer-ise it made such a big difference (and the consequences of people getting those efforts slightly wrong when learning were readily apparent).
Also have been thinking about how much trouble it is to move things between the various computing devices I have. It seems like it'd be worthwhile to have proximity handled better by such devices - why can't I effortlessly move running applications between my AndroidPhone and my desktops, toss notes and bookmarks around with just a flick/mousedrag, etc? Things are not terrible on this front (unix has generally been good at letting one run apps elsewhere with GUIs piped around), but I neither want to lose what's there with technology's progression towards convergence (AndroidPhones should be first-class computing devices by this metric) nor am I content with the status quo. To dream about what operating systems look like in the future, their upper layers would be written with this kind of thing strongly in mind. If I notice that I'm using software to move data/files/applications between these devices, the interface is too visible (although it's reasonable for devices that have not chosen to trust my network to pop up a yes/no).