Home

Titivillus

Jul. 26th, 2008

11:23 pm - Found a neato blog...

So, I found this guy's blog: Mathmatics and Computation(not sure how to be honest... [info]shae was it you?). Anyway, here's an example post I really enjoyed: Representations of Uncomputable and Uncountable sets.

Anyway, the neat thing about that article is it reminded me of the time I tried to construct a theory of data typing and semantics on my own(um... yeah... its a little arrogant and a little naive... okay... a lot arrogant, really, the idea was to see what I thought in a mathematically precise way so I could go look at the literature with appropriate humility... or something)...

So, what's cool is it kinda makes me think my attempt to formulate a theory was not so misguided. The basic notion I was really focused on was on a bit-string representations and equivalence relations on those bit-strings.

But really... go read this guy's blog... its far cooler than my own theories. :)

01:41 am - Two types of people...

The first group will find this link to a monograph: Synthetic topology of data types and classical spaces riveting and fascinating, The second group will wander off with an at-best confused look on their face.

And topology changed my life... maybe for the negative(it's really, really, complicated. Surprising, I know, that one can have an emotionally complicated reaction to Topology, but that is indeed the case for me... I have a strange life...), I suppose that's why I haven't gotten around to reading up on Category Theory(well, that and after being burnt out on grad school for like... 2 years, I neglected to read my copy of Basic Category Theory for Computer Scientists, and then inadvertently placed it in a box of books, in a room stacked full of such boxes... I think I own like one or two thousand books... so... I consider their boxed state to be a reminder that I need to earn some money so we can live some place nice enough to consider getting some proper shelving and putting them out proper...)

Anyway, I always suspected Topology had a neato-connection to computer science(other than just me enjoying both topics...).

Jul. 25th, 2008

01:59 pm - Paranoia vs. Open Sharing.

I like being open, I really do, sure, I may think gift economies are wishful thinking at best(especially in "open source"), but that doesn't mean that I want to keep all my stuff in the dark.

The problem is though I have ideas that I don't mind sharing, I just don't want to "bust out" on the web for the entire world to see. I don't have a lot of money, that whole "running my own business" thing sure seems a lot like unemployment.

Am I interested in getting a job or making a start-up to sell to Google/Yahoo/MS/Amazon/someone-with-lots-of-money-and-no-due-diligence? Well, I won't say I'm not, but I want to build some big cool things that will take some time and then flounder because I'm bad at networking, bad at some types of "polish"(and have no money to solve that one, because really, that's what other people do, pay for polish, outsourcing is not evil), and have no real ability at selling to money people, and sometimes I'm not so great at follow up.

My reluctance though, stems from my wanting to make a living. I would be happy making a living, if it meant my ideas could be a bit freer. I hate the whole IP-land-grab-and-bury that seems implicit in a lot of things. Also, I just don't trust a lot of "hi-fi" money sorts. Yes, I apply the rule that any financial transaction I don't understand is a bad one. Also, if it didn't seem like a lot of people with a "lot" who go in with people with a "little" seem to just be unable to resist taking the little guy for a ride for that extra 1%(I mean, have you read the economic news lately and honestly say that feeling is misplaced?)

But mostly, I would just like to talk about my ideas with a couple of serious technical sorts, and LJ just does not seem to be the forum to do that in. Email honestly kinda works for me, but I can get long winded there too.

I suppose the best answer is to just shut up and code.

Jul. 24th, 2008

11:03 pm - Archiving stumbleupon shares/send to's?

So, I'm tired of StumbleUpon, but I wouldn't mind downloading the list of links I've sent to friends, so if anyone knows of a way to do that... well, I would appreciate it.

03:06 am - A major milestone was reached(and the crickets are chirping...).

I successfully(as in, 10 minutes ago) got my "RPC" library to communicate.

Yes, yes, I know, at best RPC is "yawn boring", (and some people seem to be just downright cranky about RPC).

But then again, leave it to Google to make it cool again via Protocol Buffers.

And nope, I'm not using Protocol Buffers. Had this been released... hrm... a year ago, I would probably just have gone ahead and used them, although, I do enjoy the neglected cleverness in UBF(of course, I feel reasonably good here too, if Protocol Buffers makes some of the Erlang guys sad about their "pretty much just as good, same idea" UBF, well, I can think of worse company to be in).

Anyway... this is a digression that maybe no one is reading :), so back to topic. What makes my RPC is special is that it uses a compiler I desperately want to open source, but due to some concerns about cross contamination issues(I wrote 100% of the code in this, but some of the code was paid for by someone else), I've been waiting on a piece of paper to be signed which says its all good, and we each release it under Apache 2.0, so it doesn't really matter who owned it.

But I will make the claim that my code is cooler than Protocol Buffers. I would expect protest at this arrogance, but alas, crickets are still chirping in the deafening silence...

So why am I cooler? Well, this codebase is certainly not as polished as Google's, but what I do is define an interface(a set of messages) and allow them to be grouped, and generate a ton of boilerplate(we're in Javaland, but also, some of this could be done via reflection, but why not do it statically with things final'ed out the yin-yang and let Hotspot make you look that much cooler).

However, what makes this interface-centric compiler cooler is, in addition to fancy auto-wiring and decorator-proxying of a group of interfaces, is that its abstract in its type-mapping as well, so this IDL compiler codebase(in development and active use for about 3 years, ZOMG!!!1!!) does dispatching in PHP web applications, maps SOAP/WSDL to method calls, does "XML data binding", and converts binary chunks to/from method calls, and last-but-not-least, creates a "Message" object for each method in the interface(which has a public void send(I myInterface) and public Object call(I myInterface) method, oh, whatever, look at the javadocs: net.metanotion.util.Message).

I suppose this Message object is somewhere between a closure, continuation, future, and thunk, but its really dandy since the it can be pushed around left and right and called(reusably even) whenever needed.

So, this is like, at least 10x the coolness of protocol buffers. And the best final part is that you get all this with static typing too. So if things change, your code will get called on it.

And of course, "RPC is brittle" I can hear you say... well, I even have you there. Interfaces can be small sets of related messages(this is, um, a design issue), but I do something cool to help you out: I run the definition of your interface(modulo whitespace, comments, etc.) through MD5 and tag each binary chunk with the digest of the version of the interface that encoded it. Not the "final" solution, but definitely a tool to help solve the problem.

How's that for making RPC cool again?

Jul. 19th, 2008

01:27 am - Writing Mobile Apps, eh?

Tim has Mobile Net Gloom.

And this is my "me too" post. Yep. I agree. 100%. I wrote a mobile cell phone app, and it went so "well" that it was the beginning of the end of the prior contracting engagement I had. Anyway, it took long enough, but the politically well placed asshole who succeeded in "running me off", was later forced to admit: It wasn't my fault the app sucked.

And you want to know why? Sure, there's an API problem, but that could have been solved so long ago that Android would be irrelevant.

The problem is really not a technology problem. The problem is the phone companies. Do you want to know how bad they really are? Scott Adams worked for Pacific Bell. In other words: Dilbert was inspired by the phone company.

I watched Office Space for the first time while on Coop for BellSouth. And you know what? I cried. And not the "haha funny" sort either. BellSouth is part of the reason I went to grad school.(For what its worth, grad school went so swimmingly, that its a big part of why I'm "self employed").

Anyway, so "Mobile Apps" are an unstoppable force running into an unmoveable obstacle: the phone company. But I've had enough skin in that game, I'll let someone else take the beating before trying again. Who knows, maybe it won't suck. Anyway, I do enjoy seeing Steve Jobs make the phone companies his bitch. Sure, I won't be on the iPhone(not trading one closed system for another thank-you-very-much), but Steve couldn't be twisting the nuts of a more deserving group.

Jul. 15th, 2008

04:33 pm - Confusing Physical and Logical Models.

And here we have someone, who probably ought to know better, decrying normalized databases.

And the article is all about performance.

Of course, no mention of the various update anomalies that normalizing a database saves you from. Also, the discussion of performance doesn't mention that when he says large, he should mean: 100,000,000's of tuples, and Gigabytes of space, and lots of concurrent reads.

If you have that problem, well, congratulations, you're probably well paid and have the means to buy the tools to solve that problem(or you could hire me to solve them for you...).

However, he doesn't mention the case were denormalizing will kill you.

In a small database with small loads, you won't have problems(Well, speed problems, unless you accidently do a full on cartesian product with some moderate tables, again, denormalizing will cause havoc with "update anomalies").

In a large database, well, I think you should not "sacrifice" a good logical model, and I do think a lot of databases force you to painfully "unoptimize" your system's logical model, but anyway... remember, large is Large. If you can google for someone posting to a forum or livejournal who has more data than you, you're probably not large. If you have to ask, you're not large. For instance, I have a 20GB DB with over 100,000,000 records. It does just fine on a Dual core, 2GB box.

So... let's talk intermediate(my size actually).

Normalized data takes less space. Seriously. Denormalized takes more(normalization eliminates duplication... QED). So, let's say you denormalize your medium sized database. Now, if your working set is affected(and it will be) your tables may grow to such a size that they won't fit in RAM anymore. In that case, you will thrash you DB cache, and start hitting disk for queries.

Which means, denormalization better give you a 1000x increase in performance to keep your performance EVEN, since the disk is 1000x slower than RAM.

Seriously, I had a dernomalized table. It was slow as hell. I made it normalized and used a view which scares the hell out of my former boss to this day, and it goes infinitely faster. It was having a slow down problem, and we added caching table regenerated everyday(in 10 seconds, btw, and that occurs after the daily batch import) that replaced a chunk of the view and it goes really fast. Before I did all that, the denormalized data required about 50,000 inserts EVERY DAY(it involved date extents) and the table started with about 10,000,000 records, and clearly did not fit in RAM, and suffered massive(you guessed it) "update anomalies", which is a polite way of saying "Buggy and slow as hell". Normalization made it "correct, and moderately paced", a selective optimization of the view(which was a denormalization, but only used as an INTERMEDIATE RESULT IN A VIEW) made it "correct and fast".

Jul. 11th, 2008

09:19 pm - Do you ever just think, "Who cares, just build something."?

Google can have stupid ideas too. REST Anti-Patterns, SOA Elitism, Network Attached Memory: Terracota as an Alternative to Memcached, The Revenge of RPC: Google Protocol Buffers and Facebook Thrift, Why Can't Microsoft Ship Open Source Software?, Revisiting the XML Angle Bracket Tax, A Couple of Caveats on Queuing...

Now, I should mention, I love theory, I love discussing The Right Way To Do It, and Will and I argue about stuff like this all the time. Of course, I am also at home, trying mostly furiously to build something and sell it. I have friends who have "built it all wrong" and made money.

And at the end of the day, I just want to build systems I enjoy. Sure I may use a little bit of RPC here, mess up REST there, build horribly concrete, unoriginal, derivative systems, that some people will completely hate.

And you know what. I'm okay with that. I want to build the best thing possible, but I read all this, of course its just bloviating blogs, people having conversations, and its productive in some sense. Its fine.

Of course, part of the problem is like, say the article about Microsoft building an NUnit clone, and people "pointlessly" rebuilding issue tracking systems. Well, so what? I mean, if it makes them happy people, great. Open Source should not be some sort of Grey Goo, assimilating everything with everyone contributing only to the One True Implementation Of X. Screw that, inefficiency is not waste, build a thousand, a hundred thousand clones, and someone will discover something better, or not, or something completely different.

My friend Will also thinks there may be a future were software is largely free and open source and that there will be labor surpluses from our production surpluses. I'm more doubtful, we all have to earn a living, and reimplementing software better have some economic value or it won't be done nearly as often as people would probably like.

A labor surplus, btw, is when people think you should be able to pay an ACS Certified BS in Chemistry $19,000/year, or a programmer with a Masters Degree $20/hour, less than full time, for a basically full time position(but not full time hours). Sorry. Surpluses mean people using things for more "marginal" uses. For instance, if you believe there is surplus oil available, driving around in a 8 mile/gallon SUV. If surplus labor is available, who needs automation. Automation is a response to a shortage(to get a multiplier from work done).

Of course, back to building things. I'm building software systems according to a hopscotch of methodologies, and a lot of people might think I'm arrogant, but you know what? Whatever, I'm building something. When the economists discuss Creative Destruction, the emphasis should be on creation, the progress of moving forward. That's not utopian thinking. While not a Malthusian, we occupy a finite planet, however, that doesn't mean we can't make things better.

I suppose this really means I should stop reading blogs for a bit :).

Jul. 6th, 2008

09:41 pm - Updated open source releases: Cool new functionality :)

I have updated two of my open source release. First off, was a minor update to my Java Utilities, partially because some additional classes and minor bugfixes applied to the sorta major release of my IO Library.

The main focus of the IO Library release was the addition of the completed AppendBlockIO data store. The class net.metanotion.io.appenddb.AppendBlockIO provides a integer-keyed data store of byte arrays. It provides non-nested, mostly lock-free, mostly non-blocking, thread safe ACID transactions. It makes extensive use of in-memory immutable data structures, and the file itself achieves a lot of its safety by only appending updates(no writes are performed on the file in any other way). The package makes use of an in-memory cache to avoid slowdowns and writing every update to the file to disk. The package comes with an extensive suite of tests in the src/test/java/net/metanotion/io/appenddb/AppendBlockIOTest.java in the IO library source distribution.

The simple file data store is a Big Deal to me at least. Mainly its an elegant use of state and immutability both in-memory and in the file. Without the cache and some garbage collection, the "append only" aspect of the file would be unmanageable with the B-Tree nodes. A few thousand updates could easily swell what "ought" to be 500KB to 100MB(don't ask where those numbers came from...).

Also, this makes a great start toward a simple embedded data store in pure Java. I have big plans for this... big plans...

Jun. 24th, 2008

01:29 am - Renting.

Well, due to my wife's recent full time employment(um... needed to post about that...) where she was temping, and due to the 60 mile round trip, and a general desire for better accommodations, we have started(and stopped, for the time being) looking for a new place that's much closer.

First, go read Externalities from Home Ownership.

Let's talk about the Ownership Society. Nearly 70% of American's "own" a home(I would be far more interested to know the number who own "free and clear" of a bank lien). And then there's the bias. Upon getting married, a great number of local people assumed I would have bought a house for me and wife to live in(and what the hell was wrong with me for not doing that... these people were scandalized to hear that I rent, and planned on renting).

And so what does go in to owning a home? Well, a 10% to 20% down payment, market timing risk if you're forced to sell, closing costs, realtors, etc. And then of course, once you own, if stuff breaks, you have to fix it. I have been inconvenienced twice in 10 years by having to call a landlord to replace a hot water heater, but I had to pay nothing each of those times.

Now that's not to say you shouldn't ever own a home, but that it does come with a set of downsides. Contrary to propaganda there are downsides.

But let me make my big point.

Most Landlords are assholes. Most apartments suck at ANY price.

The market is illiquid. Apartment shopping on the internet should be a breeze(Number of bedrooms? Number of full baths? Half Baths? Rent range? Availability? Lease Length? Dishwasher? etc.). And in some places, it is. However, around here it isn't. We have the newspaper. And we have morons who take out ads and do not answer their phone(throw out half the newspaper right there). And then we have all the apartments/houses/duplexes/whatever that are shitholes at any price. Yes, shitholes. I don't want to compete with the cockroaches. I don't want to have a "clean" bathroom that still looks dirty due to the stains. I want central heat and air. I don't want a McMansion. I just want a decent middle class place to live.

And then there are the places that we like... and they cost more than we can afford. Currently, my income is down, but my wife makes above the average and median wage in TN, working as a Stability Chemist with an ACS BS in Chemistry(at a job that took over a year to find. Did I mention the one that wanted a Chemist to do environmental testing for $23,000/yr? Kids, college doesn't get you more money... your daddy's connections might, but that degree itself doesn't).

And I'll throw my dig at college too. Why do you think so many jobs want people with college? How about "Debt Slavery". If you borrowed money to pay for college, you're going to be more pliable about things, and you kinda have to jump at the first thing that comes by. Let's face it. I'm a jackass, and I admit its partially because I have no debt. I have freedom of action that other people don't. Eh, here's some reading about college to throw in there too: Higher Education Conformity and Why You Need a Degree to Work For BigCo(this is a must read...).

And before you jump on me for being bitter. I'm not actually. I just see a big gap between what a lot of people believe and what I see with my own two eyes.

And back to renting vs. home ownership. Part of the problem there stems from the fact that the only way to get the sort of place most people want to live in is to buy. You can't rent it. And that, is a real bummer.

Jun. 18th, 2008

07:54 pm - Glad we have that whole "Constitution" and "Bill of Rights" thing...

How Cops Really Want to Police. Not to say the cops don't have some major frustrations, and not to say I really always trust the courts to figure things out, but the concept of "on site judge" leads to "on site judge, jury, and executioner". And if they get things wrong? Well gee... that would sure suck.

And of course, in the vein of courts getting it wrong... I was glad the Supreme Court ruled Habeas Corpus to be upheld in Gitmo, but sad to see that 4 of our justices want to take a dump on the Constitution as well.

In many ways, January 20th won't come soon enough.

01:45 pm - Things You Should Never Do(anyone want to help?)

So, in the list of "Things You Should Never Do" is design a secure protocol.

Thus, proving I'm an idiot, I'm doing exactly that. Actually, that's not entirely true, but I was considering how exactly to implement some things, and hope that some people who read this(hello, all 3 of you...) might have some experience to fill in my gaps.

Basically, I'm writing a Java application that needs to do three things:

And I'm aware that SSL/TLS is standard with Java(at least, any JRE I care about supporting...) and can do all 3 of these things, and will work well enough to accomplish goal #1.

What I'm not sure about is the whole PKI and certificate signing that needs to happen to get goal #2 and goal #3 to work. In the interest of simplicity, I'm considering usage a simplified variant of HTTP Digest Authentication with SHA-256 and having each party store the hashed password/username/realm(salt) for the credentials of the other party. The main benefit is in I'm interested in not having to force clients and/or servers to go out and buy certificates or do any nonsense like that just to make sure no one can see their TPS reports going across the wires.

So, anyone want to explain to me the central point I'm missing, particularly about the TLS/SSL implementation in Java? Oh yeah, for reference, I'll be using Apache MINA for the socket level mucking about.

Read more... )

08:48 am - More good reading...

The Death of Postmodernism And Beyond is pretty interesting.

I will point out that this author picks 1980 as a generational gap line... interestingly enough, I was born in 1979 which puts me somewhere on the fuzzy edge of Gen X, and the fuzzy line in this paper.

I will also have the wherewithal to know that I need to stop typing. Its 8:51 right now... and I'm pretty sure if I say more, at 4pm I will sigh in exasperation....

Jun. 17th, 2008

03:53 pm - "We Hire Only The Best Here"

I realized, after reading my post from this morning, that 8:30am is not one of my more lucid time of days. Anyway, so I thought I would elaborate more on that sort of "Who's The Best" navel gazing that is popular amongst the blogerati(you know, people like Paul Graham, Steve Yegge, and Joel Spolsky).

First off, lets talk about why English majors are useful: Textual analysis and literary criticism(and this sort of relates to Semiotics if you're watching Will).

Joel Spolsky runs a company that hires programmers. Paul Graham does about the same thing, except they're called startups(and go for a more "probabilistic" Hockey Stick oriented pay scale). Yegge? Ask him what his motivation is.

Anyway, these people blog about "Rock Stars" and "Smart, Gets Things Done" types, etc, its a pretty similar idea(may the term meme rot in hell...), and its fascinating to watch the forum responses. What are they? Criticism? Examples? No... its mostly people asking "How do I Know I'm one of the blessed?"

Well, its really funny because its that sort of distracted navel gaving that prevents you from getting there. And the real irony is that letting go of being one of the elite, of course, does not guarantee you'll become one.

And then there's pragmatism. For instance me? What's my motivation? Well, I'll tell you, I write this livejournal now for two purposes, a staging area for a "fame enhancing" blog I'm working on setting up, and in general as a marketing effort for my attempts to establish a software company. Sure, I should be writing software(this is a timeout right now, hit one of those bits of code that needs more thought, and so I wandered off to let ideas cook), but marketing is really important. I promise you. And I suck at marketing. Also, yeah, I do write my LJ for personal reasons too, and will continue to do so, more so even, once I move this marketing material from here to my blog(once its set up... yeah, yeah... working on it).

So, let's see, what kind of programmer am I? How the hell should I know... Although the word underpaid comes to mind, but anyway... Does it matter? No. Not really. Sure, introspection matters because its let me identify strengths and weaknesses which leads to useful conclusions(e.g. need to contract a graphic designer at some point to make my stuff like good), but really, in the end, I'm pretty much in it alone, either some combination of my abilities, plus luck, and Divine Provenance will enable me to earn a living, fail, or "go parabolic", or it won't.

So I guess this is to say, you should read Joel's other article, Fire And Motion and probably go read The Black Swan by Taleb and stop worrying about it.

And you know what? There are plenty of programmers who are far crappier than me who have made a living or gotten rich off of software, and plenty smarter and better who haven't.

Utlimately, elitism makes me sick for one other Really, Really, Really big reason. So, without the elite, you might feel that you're doomed to failure, ignominy, and useless servitude. Talk of elitism is partially to make you feel dependent on said elite for your purpose, survival, dignity. Well? Fuck that Shit. You're all important, beautiful, and unique snowflakes. Really. Unforunately, we're not in Eden, so you know, its between you, God, and the afterlife, but I really do believe that. Don't ignore entirely what everyone else is doing(it does affect you, the ultimate flaw with libertarian philosophy, "We're All in it Together", trust me), do what you understand and what you can figure out.

08:32 am - Mindless Link Propagation...

Done, and Gets Things Smart. Very good read.

And for the record (and to make this post... um... you know, have some content...), I do not claim to be a Done and Gets Things Smart or a Smart and Gets Things Done type of person.

I used to worry some about ranking functions(still do some), but frankly, I have shit to do, so the only issue I have with "Rockstar Meme" that floats around is this: Have you noticed both Yegge and Spolsky mention "Done"? Really? Well, here's a clue, "Get Back To Work!!!".

Seriously though, why aren't you doing more? Or as Richard Hamming put it in You and Your Research "If what you are doing is not important, and if you don't think it is going to lead to something important, why are you at Bell Labs working on it?" (And yes, another "Rockstar Meme" writer, Paul Graham refers to that one in Good and Bad Procrastination).

Jun. 16th, 2008

05:54 pm - (ad hoc temporary solutions... grumble)...

So, I posted a new release of the Metanotion IO Library today. Nothing new added that's usable yet(politely, they're called "sketches" of implementations of stuff, mostly implementing and extending classes to make these FileSystem objects usable in Swing GUI's, in a transparent manner, also bug fixes, better(slightly...) Javadocs, and more complete implementations of stuff that was half-finished before).

Eventually, I'm going to put an atom feed on my open source releases... however... today is not that day.

Also, yes, I've gone from hiding my code from everyone to "developing in public", but supposedly its a Good ThingTM to not go dark. So, go look at my code and have a good laugh.

I even had the gumption to post a link to my URI Templates library on the Google code page for tracking implementations.

Jun. 13th, 2008

02:05 pm - Solving one of those "oh yeah, but..." situations.

PHP is a popular language for writing dynamic websites. The problem is, some people may be confused that its the "semantics" of PHP itself that is responsible for this. While its not possible to rule that out 100%, there's a pretty good case that its ease of deployment that seals the deal.

After all, you just drop a file in a folder, and Just WorksTM... except when it doesn't. PHP has a horrible confusing semantics for a programming language, and those semantics change based on the OS its deployed on(yes, some people use Windows, get over it), the settings of the INI(which can be changed more easily per virtual host in some setups than others, so you're at the mercy of what other people need too), and even point releases of the language. In other words, the likelihood that your PHP code that needs to do something fancy is going to be portable or "future proof" approaches 0%. After three years of relatively intense work on PHP, that's my experience.

Of course, just go TRY to find Java Servlet hosting. Servlet's aren't so bad, but the best containers cost more than a couple of dollars, and the hosting is more expensive. Doing fancy things with virtual hosting in a shared hosting environment can get gnarly(um.. impossible?) too(especially with just Tomcat or Jetty). So, yay for Java, its easiest to deploy on the Intranet where you control the server.

But that's not what I'm doing. I'm writing web applications to base my business on in Java, to deploy on the internet, and I need hosting. In a BAD way.

Which is why I'm happy to announce that I had a meeting yesterday with the guy who has so far done most of my web hosting on his colocated server, and there I found out that our maintenance cat does a much better job than Twitter's.

So what does that mean? I get my entire wishlist: PostgreSQL, plus the ability to use pgAdmin(via SSL Explorer) and Tomcat will be ALL mine. I don't have to share Tomcat with anyone else. Also, I will have a lot of control of the configuration of both Tomcat and PostgreSQL's config. Which is good, because the solutions I have to some Tomcat hosting issues will not peacefully "coexist" in a shared hosting environment. And finally, a strong likelihood of being able to run Java application servers on some other ports(subject to evaluation by the maintenance cat).

Jun. 11th, 2008

02:52 pm - Mapping URL's for fun, and maybe profit...(in other words, more open source from me).

Yet again, I have released more code as open source. This time, its a library for converting URL's into maps and lists. Its a server side implementation of the ideas embodied in URI Templates, which is a little different than the intent, but hey...

The code is available at http://www.metanotion.net/software/urlmapper/, along with an example, and the javadocs(admittedly, the Javadocs are useless unless you want to get into the internals. The example code on the webpage pretty much sums up using the library).

Jun. 10th, 2008

01:28 am - Local food vs. Mass production.

Personally, I like the concept of specialization: I write computer software, and other people make food for me to eat, places for me to go, and things for me to do. I enjoy what I do, and hopefully, those people do too.

And so, someone points out a criticism of the "local food" movement, full time farmers are just better at growing food than everyone in the whole damn neighborhood.

Of course, its not like that doesn't come with some tradeoffs. Personally, I don't really care for raw tomatoes, but you get the idea.

I think there are couple of things to think about. One is the there ARE efficiencies of scale, and they really do protect the environment more than we give credit. And there are diseconomies of scale as well, for instance, concentration of risk.

That last one is fascinating too. A few large corporate employers provide a lot of jobs. Which sounds great, except, it also means there's only a few pyramids to climb, and only a few approaches to problems tried. Smaller businesses give more people opportunities to contribute to society, and try more approaches to problems. Yes, that's "less efficient", efficiency is not the only damn goal to optimize for. Let a Thousand Flowers Bloom(yes, there's a multi-layered irony in that quote).

I can also apply it to the people who worship hiring at places like Google, Bill Joy once said that you can't hire all the smart people. I can promise you that there's not enough opportunities, even at Google, for those smart people, and they will quit(what, you're 20% time project is going nowhere, and you've just vested, and can sell enough stock to be a millionaire? Why work for someone else, no matter the perks, when you can prove your idea is so damn good...). Maslow is on my side there.

Anyway, I hope to be one of those smart people working in a small group(um... alone...) who changes the world.

So... that's enough rambling for now. Just thought you might find it interesting.

Jun. 5th, 2008

03:58 pm - More Thoughts On Configuration.

My friend Will posted a reply to my thoughts on configuration: Software Is Applied Philosophy.

So, in the interest of keeping this going, I figured I would respond here.

My interest in this is essentially engineering oriented, but that embraces a "programming languages/DSL/academic" element. Which is interesting, because, configuration is a topic that's probably as Enterprisey as it gets. I mean, there's even an Apache project to "solve" the problem: Commons Configuration.

My last post was about "what happened" to bring this topic to my attention. This one is more about what I want to do about it, and why things like Commons Configuration don't "solve" my problem.

Unfortunately, I think the problem with "configuration" solutions ultimately devolves to an example of the Expression Problem(i.e. a problem which needs a solution independently extensible in multiple dimensions).

One reason to support this is that "dependency injection" and "configuration" are very connected. After all, if you're program is structured into modules with well defined interfaces, and multiple "drivers" implementing those interfaces(perhaps this is my old-skool C background thinking here, I like to partially conceptualize "dependency injection" as about writing "drivers"), one aspect of configuration is selecting which driver to use, and then to configure it. Unfortunately, this almost certainly means you want to treat the configuration system itself as a "driver" and swap them out so you can use different "sources" of configuration.

Now let's look at dependency injection and the "java.util.Properties" style of configuration. Certainly, I like that java.util.Properties AND Commons Configuration really say, "Programming languages in the config source are beyond the scope of this solution". However, I have found in configurations that get quite big, I end up writing a "data structure" which, for instance, I pass a java.util.Properties too, and get an object with a set of fields that correspond to the types and values I need to configure the object. This "config object" is then passed to the constructor...

Which brings up a PLT topic. Static Typing... one thing I really want is the ability to statically specify what the values to the configuration are, so I can type check it, and, in the case of Java at least, generate this config object automatically, and use it within a dependency injection framework.

While this isn't exactly a response to Will's blog, its more of what drove me to this point. I will post more in the future, including what I'm working on as a solution.

Navigate: (Previous 20 Entries)