September 20th, 2010

Semiformalishmaybe

Cats with Carrots

Cleaning: almost finished (not very interesting! This is mostly note-to-self)Collapse )

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, ...."?

Collapse )

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).