Tuesday, January 31, 2012
So it turns out that a lot of Silicon Valley companies use a weekly review of tasks accomplished and goals set as a productivity tool. That's kinda neat and could easily be used in personal projects as well.
I'd go so far as to say that expression of this type of goal/achievement could be a valuable part of the documentation process for any software.
Friday, January 27, 2012
A few things about big data:
- A book on best practices by Marz and Ritchie. You can pre-read it as well. I'm thinking about it. [hnn thread]
- The data science toolkit, a specialized Linux VM for download with lots of juicy databases and tools preinstalled and a common API.
- Real-time feed processing with Storm. Storm abstracts out the queue-workers pattern into an infrastructure component. Interesting stuff.
Thursday, January 26, 2012
Did you know econophysics existed? I didn't, but now I want to be an econophysicist when I grow up. It involves the study of large populations of (simulated) actors in an economic framework, like this: cartels are an epiphenomenon.
A post last week, "I want to fix programming," suggests that declarative programming (keeping around the "why" of what you're doing instead of the "how") would be a step up from what we're doing, and adds a couple of neat magic keywords that indicate how it might be done. Color me unconvinced, though, because just saying what you're doing and hoping the compiler is going to get it right might require a little too much from the compiler.
His specific case is a sort algorithm - he just specifies what he wants from the sort, and the compiler would do the sort. Well, I still think the answer there is to tell the compiler: "sort this stuff". Now I don't have to look at his constraints and say, "Well, wait a minute, that's a sort." If I were talking to a colleague, I wouldn't say, "All the elements of this list should match those in the other, with the constraint that each element in the list is less than the one after it." I'd say, "We'll sort this list." Then I'd look up a sort algorithm, and later, down the road, if it turned out that sort was a performance bottleneck, I'd maybe look for a better sort algorithm.
Just specifying the constraints is not enough. You're still losing information if you don't have a machine-readable set of semantics of what you're doing. (I say that as though this was already achievable with today's tools, when of course it mostly isn't, but you see my point.)
This week, we have a response, "Yup, programming is borked," and makes the cogent point that formalization of requirements is the key - and then still goes off the rails with brand-new syntax that's not human language or anything like it. He's got some interesting ideas, and is looking at authoring systems for non-programmers, which I find pretty fascinating, but I think he's still getting lost somewhere along the way.
I remain convinced that a hierarchical set of semantic views, preserved in the final program, is the way to go. Each part of the program not only has formal syntax defining it, but a conceptual framework indicating what it does, why it's done that way, changes that were made along the way, related tests (which can be seen as constraints) or even constraints (which can be seen as tests) - the whole ball of wax is right there and amenable to software manipulation. Changed requirements can then drill down right to the code that must be changed, and with sufficient sophistication, you could imagine that tools could make suggestions or even rewrite the formal syntax to conform to the requirements.
That's the goal.
Wednesday, January 25, 2012
Here's a thought: I keep running into various reasons to have a place where you could upload a file and have various tools run on it. Given the closure of MegaUpload, just the ability to share files within workgroups would be a useful spinoff of that.
So that's now an official task: write this platform.
Friday, January 20, 2012
Thursday, January 19, 2012
Here's a nice article about visualizing sorting algorithms [github] - but I like the fact that the graphics generated are really nice-looking. They use the Cairo graphics engine, which I clearly need to examine more closely.
More recently, the same guy did some visualizations of malware.
I ran across openFrameworks in September; it's the framework used to build that real-time video face mapper. The framework itself is pretty interesting, and it would be fascinating to write a domain for it in Decl - I'm having the same thoughts about Pygame, actually, the basis for the Fly steno tutorial I'm porting to Windows.
Anyway, I was just perusing old bookmarks and found a fascinating link to aesthetics reading for programmers that just begs for followup, and that guy's blog has some newer posts that reference openFrameworks - he's written a crawler for Github that automatically indexes add-ons and catalogs them at ofxaddons.com.
There's something like a language for ... creative ... stuff developing there. I get these glimpses of it. This is another lead to follow up when I have more time.
Wednesday, January 18, 2012
Tuesday, January 17, 2012
Sunday, January 15, 2012
Saturday, January 14, 2012
So AI game design is a thing: given a set of possible games defined by the pieces available, board, etc., come up with a "good" set of rules. What a "good" game is seems ... really human, but some exploration of using AI programming techniques to augment human game design has been done.
Here's a neat article. It's about exploring a very small game set using "Shibumi" equipment (released in October of 2011), which consists of a 4x4 set of holes and three colors of marbles to be played on those holes and stacked on one another to make pyramids. That totals up to 30 possible positions, which can be empty, white, black, or red (two bits each), so the set of possible board positions is encoded in 60 bits.
Turns out evolution isn't so hot for game design - the universe is too uneven to allow much gradual improvement. They've been having success with "Monte Carlo tree search", building trees using a semi-random process. Kind of neat. They want to compare it with GA in finding new games in this universe.
Their fitness function has to be playability as judged by a human.
Here's a notion: judge playability by determining how challenging it is to evolve a good player. Or something. That is to say, automate both ends of the process.
A rolling git update of works in progress, imagined and used by Cory Doctorow. It autoupdates your current working files to git and marks them with the current weather and some other indicators of what you might have been thinking. Really neat idea.
Google Maps is going to a usage cap model that means serious money for biggish sites with map embeds. One enterprising real estate site looked around and realized they could roll their own for less. Lots of interesting stuff going on in mapping these days.
Friday, January 13, 2012
I find this kind of project fascinating every time: analysis of tweeted jobs to find popular keywords, with nice graphics. Learn Objective-C in 2012, apparently.
Tuesday, January 10, 2012
A couple of old ones, and a couple of new ones. I really think patterns and boilerplate are a key component of the semantic approach, and for some reason they're cropping up in my daily reading today.
- Designing social interfaces - a Wiki with about 100 user interaction patterns; also a book.
- UI patterns - I'm pretty sure this has been linked from this blog before.
- Flask boilerplate
- Backbone.js boilerplate
- Pattern tap - these are more design elements, perhaps.
- Yahoo! design pattern library, of course
- Patternry open UI patterns
The D programming language is a replacement for C that isn't C++. I have yet to really look hard, but it actually looks pretty nice.
This is the first of a long list of programming bookmarks from way back that I'm going to serialize onto this blog so I don't lose them.
Sunday, January 8, 2012
Friday, January 6, 2012
Neat post on how social network charting was used to bust some slumlord fraudsters in Chicago. [hnn] Prompted a post of this fascinating picture, which was generated at least in part with this code. Finally also prompted a link to sharesleuth.com, a Mark Cuban project tracking securities fraud. I do so love reading about detective work.
I've wanted to build this for a while - and in the meantime, somebody else did. Here's the link. I need to mine it for features. Meanwhile I have a possible business partner wanting to build something like this; it's possible it will be Drupal-based and start from Open Atrium.
The Oatmeal with some excellent usability advice that simultaneously makes you laugh until your solar plexus hurts.
Another fascinating archive of large amounts of messy government text: the government attic. In particular interesting for their recent posting of (a lot of) FBI documents pertaining to the security of telephone services.
Here's a neat old technique I actually remember reading about long ago - and had forgotten about just as thoroughly as the rest of the industry had forgotten about it. Decision tables. A great user-responsive way to define complex logic.