<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5567509690677295215</id><updated>2012-01-05T07:54:41.754-08:00</updated><category term='alm'/><category term='99 percent'/><category term='scrum'/><category term='asshat republicans'/><category term='agile'/><category term='css html markup structure presentation'/><category term='user story'/><title type='text'>What The F?</title><subtitle type='html'>Web Design, Programming, and random ramblings.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>40</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-8850497425113372179</id><published>2012-01-05T07:54:00.000-08:00</published><updated>2012-01-05T07:54:41.765-08:00</updated><title type='text'>Northwood's Inn</title><content type='html'>I am not often inspired to write food reviews.&amp;nbsp; This is a typical case of a passive, unpasionate desire to do so.&amp;nbsp; I find I have so little enthusiasm that I don't even wish to expend the calories to lift a finger to the task.&amp;nbsp; Luckily I have Swype on my Android phone so in fact, I do not even need to lift a finger to write a word.&lt;br /&gt;&lt;br /&gt;And yet I am writing this review of my inexplicably not forgettable experience at Northwood Cafe.&lt;br /&gt;&lt;br /&gt;It was a long day, which began at 4 am as we loaded the kids into the car for our pre-planned trek out to Pasadena for the Rose Parade.&amp;nbsp; Aside from the slight delay due to my intestines playing a cruel joke on my colon causing me to make an emergency pitstop at Dennys for relief, it was a smooth get away.&lt;br /&gt;&lt;br /&gt;Arrival was painless despite warnings of draconian parking accommodations; we paid our $15 and parked half a block from the parade route.&amp;nbsp; We got the 4th row of seating and we brought fold out chairs, it was perfect!&amp;nbsp; We even saw that somebody we knew was in the front row.&amp;nbsp; A cafe on the corner provided hot cocoa and coffee and despite the apparent owner's slight gruffness, everyone else was super nice and accommodating.&amp;nbsp; Almost makes me want to move to Pasadena.&lt;br /&gt;&lt;br /&gt;The smell of bacon wrapped hotdogs throughout the parade set me up for some good eating which we were saving for lunch time.&amp;nbsp; We ended up waiting until getting to the park to see the floats up close, and I ended up with a pretty respectable mexican carnets taco plate which I wolfed down.&amp;nbsp; The only importance of this is to illustrate that my taste buds were working correctly.&lt;br /&gt;&lt;br /&gt;On the way home, after a nearly perfect day of family fun, we decided on one last hurrah: having dinner out.&amp;nbsp; Our first attempt, a random restaraunt spotted from the freeway, the San Antonio Winery, resulted in a conciliatory bottle of Moscato D'Asti because they told us on the phone they were open for dinner still.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Still high on the days events and armed with the joy of a free bottle of wine we settled on "that place with the snow covered roof next to the Elephant Bar that we've never been to".&amp;nbsp; Some things just remain better when you've never experienced them.&lt;br /&gt;&lt;br /&gt;On entering, we were greeted with a very pleasing faux log cabin style decor with tiffany styled lamps and still replete with almost garish christmas decor.&amp;nbsp; The kids loved throwing peanuts on the floor and took this simple pleasure to its logical ends.&lt;br /&gt;&lt;br /&gt;We ordered potato skins for an appetizer.&amp;nbsp; Unfortunately between these and the salad which consisted only of iceberg lettuce and ranch dressing, I was not appetizer.&amp;nbsp; Potato skins always seem like such a tasty proposition; what could be better than a slice of potato with skins that are covered with cheese and bacon and chives?&amp;nbsp; Yet I've never had a good potato skin at any restaurant.&amp;nbsp; On that account, they delivered exactly what I expected.&lt;br /&gt;&lt;br /&gt;Now, I love corned beef and pastrami sandwiches;&amp;nbsp; the classic ruben is my favorite. There's nothing better in this universe.&amp;nbsp; Not being super hungry I opted not for a steak or fried chicken but for what I thought might be a tasty sandwich.&lt;br /&gt;&lt;br /&gt;In terms of flavor, I would have to say, this is a case where the whole flavor is actually somehow less than the sum of its ingredient parts.&amp;nbsp; It is a sad day when corned beef on rye is this bland.&amp;nbsp; Oddly, there were not condiments on it, nor were any offered.&amp;nbsp; No mustard, no thousand island, no secret or public sauce of any kind.&amp;nbsp; Being tired I didn't consider this discrepancy until I'd eaten half of it.&lt;br /&gt;&lt;br /&gt;The bread was also curiously not toasted, which I had assumed it would be.&amp;nbsp; If it had been toasted, that would have made the tough crust a little crispy, but without it, the bread was too chewy to eat without tearing it apart in bigger than desired bites.&lt;br /&gt;&lt;br /&gt;I've had many sandwiches that approach having too much meat on them, but this is a logarithmic function.&amp;nbsp; You can never have too much corned beef.&amp;nbsp; This sandwich errs on the side of not having enough, combined with a third slice of bread to drive the point home.&lt;br /&gt;&lt;br /&gt;In bored desperation I tried a piece of cheesy bread, but it seemed more like a slice of wonder bread with a little bit of burned butter and maybe some kind of hint of cheese on it.&amp;nbsp; Even then, it didn't taste particularly burned, which would have at least added some kind of flavor, if not good.&lt;br /&gt;&lt;br /&gt;To sum up my experience, I would have to say, this was the best not bad place I've been to in a while.&amp;nbsp; I neither enjoyed nor hated my meal.&amp;nbsp; I am completely ambivalent.&amp;nbsp; So much so that I would be remiss in not reporting my lack of a strong opinion either way.&lt;br /&gt;&lt;br /&gt;Update:&amp;nbsp; the other half of the sandwich, after micro waving and adding mustard, was actually improved.&amp;nbsp; this is wrong in so many ways I can't even begin to explain.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-8850497425113372179?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/8850497425113372179/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=8850497425113372179' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/8850497425113372179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/8850497425113372179'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2012/01/northwoods-inn.html' title='Northwood&apos;s Inn'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-1321258452674078643</id><published>2011-11-10T10:22:00.000-08:00</published><updated>2011-11-10T10:24:26.064-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='99 percent'/><category scheme='http://www.blogger.com/atom/ns#' term='asshat republicans'/><title type='text'>Politics, shmolitics...</title><content type='html'>I know I shouldn't be spending time on this while at work, but, I cant take it anymore...&lt;br /&gt;&lt;br /&gt;Christmas tree tax? Really?&lt;br /&gt;&lt;br /&gt;I have to say, this is the most asshat thing I've heard in a long time.&lt;br /&gt;&lt;br /&gt;And by that I am referring to the asshats who are using this to make Obama look bad when he has NOTHING TO DO WITH IT.&lt;br /&gt;&lt;br /&gt;And by asshats I am referring to stupid republicans, whom I've about had it with (I prefaced that with stupid because I know there are smart, reasonable republicans out there, as well as ignorant democrats, to be fair)&lt;br /&gt;&lt;br /&gt;This is NOT a tax. Its not being imposed by the government. The government gets NOTHING from this. This is a voluntary charge created BY the christmas tree industry in order to raise money for their own marketing efforts. By comparison, the milk industry does the same thing so they can pay for all those "Got milk?" commercials. But nobody ever claimed the president was imposing a milk tax! They simply work with the government to collect the fee, but it is voluntary.&lt;br /&gt;&lt;br /&gt;And isn't this EXACTLY how things should work? The private sector decides to cooperatively do something to benefit themselves (even among competing suppliers) and has the government assist them in a minimal way.&lt;br /&gt;&lt;br /&gt;The people claiming this is another involuntary tax should know better - they are either IDIOTS or ASSHATS who are lying to us.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-1321258452674078643?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.politicususa.com/en/obama-christmas-tree-tax' title='Politics, shmolitics...'/><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/1321258452674078643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=1321258452674078643' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/1321258452674078643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/1321258452674078643'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2011/11/politics-shmolitics.html' title='Politics, shmolitics...'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-1798904668045102190</id><published>2011-08-22T16:52:00.000-07:00</published><updated>2011-08-22T16:52:13.932-07:00</updated><title type='text'>HP: "I want to be like Apple!  No, I want to be like IBM!  No, I mean.. like Google!</title><content type='html'>HP: what the hell is wrong with you?&lt;br /&gt;&lt;br /&gt;You spend a billion plus bailing out Palm and then a year later you toss it all way, blowing out a huge stock of devices for cheap after just a few months on the market, killing a couple devices just reaching the market, angering lots of people including HP executives who even had no idea they were about to get shanked by Leo...&lt;br /&gt;&lt;br /&gt;You wanted to be like Apple, which at first sounded far fetched but somewhat reasonable considering how big you were. &amp;nbsp;If you put in the dollars and stuck it out, and put WebOS into other devices (I had dreams of digital cameras running WebOS with installable apps for image processing..) you might have had a chance.&lt;br /&gt;&lt;br /&gt;But you decided to chuck it all, including your successful PC business. &amp;nbsp;I guess you wanted then to be like IBM when it sent its PC business away to Lenovo.&lt;br /&gt;&lt;br /&gt;Then you buy Autonomous and claim that WebOS isn't dead. &amp;nbsp;You want to be a software company now. &amp;nbsp;I guess that's served Google well (funny that they are now buying Motorola..).&lt;br /&gt;&lt;br /&gt;Maybe it was the right thing to do though. &amp;nbsp;Assuming you do the right things next.&lt;br /&gt;&lt;br /&gt;How about this. &amp;nbsp;Put WebOS into printers and cameras and then get developers to make interesting apps for these devices. &amp;nbsp;Get somebody, anybody, to take a chance and put WebOS onto a phone and/or tablet.&lt;br /&gt;&lt;br /&gt;Even better, "port" WebOS to run on top of Android so you can make a phone that runs Android apps as well as WebOS apps (particularly Synergy, the card UI, the notifications, etc) and get HTC or somebody to make a phone with it.&lt;br /&gt;&lt;br /&gt;Even better, make WebOS a cross platform development system where you can develop apps for WebOS and run them on Android, iPhone, Windows Phone, etc. &amp;nbsp;Heck, buy out Appcelerator or Phonegap or something. &amp;nbsp;You said you wanted to be a software company now..&lt;br /&gt;&lt;br /&gt;Please, do something. &amp;nbsp;I am not looking forward to abandoning my Palm Pre and getting and Android because its "the only viable option"...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-1798904668045102190?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/1798904668045102190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=1798904668045102190' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/1798904668045102190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/1798904668045102190'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2011/08/hp-i-want-to-be-like-apple-no-i-want-to.html' title='HP: &quot;I want to be like Apple!  No, I want to be like IBM!  No, I mean.. like Google!'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-991210218835909722</id><published>2011-08-12T00:12:00.000-07:00</published><updated>2011-08-12T00:12:57.810-07:00</updated><title type='text'>I'm going to lose it..</title><content type='html'>If I have to deal with another so called software developer who cannot handle the basics.&lt;br /&gt;&lt;br /&gt;Please, don't call yourself a developer if you cannot do the following (or, when told about it, go "hey wow thats great I never learned about that, I will start doing that, thanks!").&lt;br /&gt;&lt;br /&gt;* Use SVN (or Git, or Mercurial, or CVS, or something).&lt;br /&gt;&lt;br /&gt;If another developer wipes out my commits by committing his code over mine (not even sure how this can happen) and then when told about it has no idea what went wrong or how to fix it I swear I am going to napalm your house with marshmallow cream.&lt;br /&gt;&lt;br /&gt;* Say that you understand MVC and then proceed to make a single model with all the database queries for all tables in seemingly random order with random method names.&lt;br /&gt;&lt;br /&gt;* Give a daily simple update about what you going to work on, what you have completed, and if you have any issues you need help with.&lt;br /&gt;&lt;br /&gt;Look, I dont expect you to understand what Scrum is or Agile this or that, but all I'm asking is for a simple 5 minute update in the morning. &amp;nbsp;I'm trying to help, not micromanage. &amp;nbsp;I understand, you're a programmer and you think you are a virtuoso artiste and you cannot be tied down whatever. &amp;nbsp;Its just a simple informal update. &amp;nbsp;Would you rather I gantt chart out every task and put a due date on everything?&lt;br /&gt;&lt;br /&gt;* Estimate tasks.&lt;br /&gt;&lt;br /&gt;Ok, look, really, I understand. &amp;nbsp;This sort of thing strikes angst and apprehension in the souls of creative people. &amp;nbsp;But come on, any decent programmer can at least tell if a task is "an hour", or "half a day" or "A day" or "more than day". &amp;nbsp;If you can't tell me that much, then break down the task more. &amp;nbsp;Furthermore you don't have to kill yourself to meet the estimate. &amp;nbsp;The great thing here is that if you at least try to estimate, and then complete the task, you can go back and think about it and learn from it and compare your estimate to your actual time. &amp;nbsp;And then improve it for next time.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-991210218835909722?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/991210218835909722/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=991210218835909722' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/991210218835909722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/991210218835909722'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2011/08/im-going-to-lose-it.html' title='I&apos;m going to lose it..'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-7968010926822770629</id><published>2011-04-04T22:00:00.000-07:00</published><updated>2011-04-05T21:24:24.453-07:00</updated><title type='text'>Pretty Pictures</title><content type='html'>I've always known this, but probably most of my life I forget that its true, and that is the fact that I am first and foremost a builder.&amp;nbsp; Or perhaps more accurately, I'm a conceptual architect. &lt;br /&gt;&lt;br /&gt;But I waffle between being a low level builder and a high level architect.&amp;nbsp; Because I am good at and I appreciate the finer details of the lowest level constructions.&amp;nbsp; I could design the threads on a screw if needed.&amp;nbsp; I could engineer a simple Lego brick, and marvel at the tolerances they achieve with just plastic, and be blown away by the perfect set of ratios between bump size and spacing, thickness, etc - the things that are what make Lego bricks so much better than other kinds of bricks.&lt;br /&gt;&lt;br /&gt;But I wouldn't want to actually design and engineer bricks.&amp;nbsp; Instead I look at them and consider what could made with them.&lt;br /&gt;&lt;br /&gt;I like to invent new little constructs.&amp;nbsp; But, even before I can go through the sometimes mundane process of actually implementing said mechanism, I've forged ahead to conceptualizing an entire system built around this core idea.&amp;nbsp; And then I think about what that system might be used for.&amp;nbsp; Stars appear in my eyes.&lt;br /&gt;&lt;br /&gt;Because I am torn between the low level and the high level, sometimes I get nothing done, because I know I don't&amp;nbsp; have the time to engineer all the lowest level stuff and therefore I cannot get to the higher level stuff.&lt;br /&gt;&lt;br /&gt;Now of course, most people fantasize about being "at the top".. being a rock star, but not a studio musician; being an Architect of buildings but not a construction worker; or a Novelist over a columnist of a small newspaper.&amp;nbsp; And they think they can go right to the top.&amp;nbsp; I'll admit, I've thought this as well, with all of the above.&lt;br /&gt;&lt;br /&gt;I never spent the time to master the guitar, or culinary arts, or creative writing, though I've dabbled in all these things.&amp;nbsp; But I have spent excessive amounts of time studying computers, programming and hardware design, over a good percentage of my life.&amp;nbsp; Because that is my passion.&lt;br /&gt;&lt;br /&gt;I've learned that my ultimate job is not as a programmer, but as an architect of systems, with the knowledge of how it all works at a low level.&amp;nbsp; Knowing that I could, if needed, implement every part of it, given unlimited time and resources.&lt;br /&gt;&lt;br /&gt;Unfortunately, a lot of this work looks like you are just drawing pretty diagrams and charts.&amp;nbsp; Which I've been doing since I was a child.&amp;nbsp; And nobody understood what I was doing then, either.&amp;nbsp; Here's to hoping I can find my calling of conceptualizing and producing complex systems, IE, making pretty pictures.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-7968010926822770629?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/7968010926822770629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=7968010926822770629' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/7968010926822770629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/7968010926822770629'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2011/04/ive-always-known-this-but-probably-most.html' title='Pretty Pictures'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-1706455661022830520</id><published>2011-04-01T10:00:00.000-07:00</published><updated>2011-04-01T10:00:04.003-07:00</updated><title type='text'>Its all in the technique</title><content type='html'>I've found the secret to making fantastic bread at home. &amp;nbsp;Specifically, those oh so just right baguettes with a crispy outside and a tender, airy inside.&lt;br /&gt;&lt;br /&gt;Let me tell you. &amp;nbsp;Its not about the ingredients. &amp;nbsp;Because the ingredients are simple: flour, water, yeast and salt. &amp;nbsp;But you can't just throw it all together and mix it up. &amp;nbsp;Of course, everybody knows this, right? &amp;nbsp;You have to knead the dough, let it rise, etc.&lt;br /&gt;&lt;br /&gt;But even thats not enough. &amp;nbsp;After all the research I've done, I found the best technique is the one I developed on my own after doing it over and over. &amp;nbsp;And its based on the experience of how the dough feels as I work it.&lt;br /&gt;&lt;br /&gt;What I find works is that you first of all need to understand that its going to be sticky. &amp;nbsp;I keep the dough in the bowl and just keep mixing it, with a spoon. &amp;nbsp;As it comes together I start to knead it, still with the spoon (I tried once with my hands at this point and wound up coating my hands with hard to remove goo), starting to fold it over more than mixing. &amp;nbsp;It will start looking less sticky and more dough-ball like, and then you can start hand kneading still in the bowl. &amp;nbsp;It gets less sticky as you knead.&lt;br /&gt;&lt;br /&gt;Then something else happens, as you knead the ball.. it gets harder. &amp;nbsp;Soon the surface will start to look like its tearing instead of being smooth. &amp;nbsp;So, let it rest for 10 minutes. &amp;nbsp;Then start again. &amp;nbsp;I found I could never get a good kneading all in one go like recipes usually say. &amp;nbsp;So I knead for a few minutes, then let it rest. &amp;nbsp;Do this 2 or 3 times until you really get a smooth ball.&lt;br /&gt;&lt;br /&gt;Then let it rise until doubled. &amp;nbsp;Knead it a couple times and let it rise again.&lt;br /&gt;&lt;br /&gt;Then, split into pieces. &amp;nbsp;With each piece, flatten it, then roll it up, and pinch the seam together. &amp;nbsp;Stretch it out long as you do this. &amp;nbsp;Then flatten again, and roll up again. &amp;nbsp;By now it should be a long baguette shape. &amp;nbsp;I like to do the slashes at this time, and then let them rise in the pan until pretty puffy.&lt;br /&gt;&lt;br /&gt;To bake, get the oven really hot. &amp;nbsp;Spray the loaves with warm water. &amp;nbsp;Spray some in the oven too. &amp;nbsp;Pop those suckers in and cook, spraying occasionally, until good and brown.&lt;br /&gt;&lt;br /&gt;So anyway, whats the point of all this?&lt;br /&gt;&lt;br /&gt;Because you can't program all day. &amp;nbsp;And a good baked bread is F*cking amazing.&lt;br /&gt;&lt;br /&gt;And because programming is the same way. &amp;nbsp;You may think you know all about object oriented programming or the latest framework or fad language or whatever, but without good technique you're still going to produce crap. &amp;nbsp;And sometimes, good technique can only come with experience and from making mistakes and learning from it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-1706455661022830520?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.kingarthurflour.com/recipes/baguettes-recipe' title='Its all in the technique'/><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/1706455661022830520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=1706455661022830520' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/1706455661022830520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/1706455661022830520'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2011/04/its-all-in-technique.html' title='Its all in the technique'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-2990567659030903279</id><published>2011-03-24T14:46:00.000-07:00</published><updated>2011-03-24T14:46:28.298-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='user story'/><category scheme='http://www.blogger.com/atom/ns#' term='alm'/><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><title type='text'>Facts vs Fiction</title><content type='html'>I don't think I've done a blog before with a picture.  So here goes.  This could be titled "Lifecycle of a software feature"  or "User Stories, what are they good for?"&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Ur5Kb8ja_bU/TYu6yEOgWkI/AAAAAAAAAGE/Hzf6PZv99m8/s1600/alm.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="281" src="http://2.bp.blogspot.com/-Ur5Kb8ja_bU/TYu6yEOgWkI/AAAAAAAAAGE/Hzf6PZv99m8/s400/alm.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-2990567659030903279?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/2990567659030903279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=2990567659030903279' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/2990567659030903279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/2990567659030903279'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2011/03/facts-vs-fiction.html' title='Facts vs Fiction'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-Ur5Kb8ja_bU/TYu6yEOgWkI/AAAAAAAAAGE/Hzf6PZv99m8/s72-c/alm.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-7021257095699402125</id><published>2011-03-11T09:11:00.001-08:00</published><updated>2011-03-11T09:52:10.089-08:00</updated><title type='text'>HP to WebOS: go forth and multiply</title><content type='html'>So HP buys Palm.&lt;br /&gt;&lt;br /&gt;Then HP announces, finally, new phones and a tablet with WebOS.&lt;br /&gt;&lt;br /&gt;Then they say they're going to put WebOS onto all their computers.&lt;br /&gt;&lt;br /&gt;Now, people are saying they are being copy cats and this is a dumb move.  Now I don't know about anyone else but I have no idea what they really have planned.  Its way to soon to say if this is a bad idea or anything.&lt;br /&gt;&lt;br /&gt;I've seen this idea compared to Apple with their bootcamp for running Windows on their machines.  On a technical level they will probably achieve this in much the same way.  But they'd be doing it for totally different reasons.  Its not a copy cat idea at all.  They're not doing it to sell more computers because they have a niche product and their trying to get it into markets it wouldn't sell to.  HP sells plenty of pc's with the most popular OS already.&lt;br /&gt;&lt;br /&gt;There's two ways I see them implementing this.  One, is dual booting.  And this would be done so that you would have the option of a fast, lean, simple system you could boot into for getting on the net or media applications or whatever.  It would be interesting to see this as embedded into flash ram, allowing you to start up your machine in a low power mode needing no hardrive etc.  Every laptop they sell could also be like a TouchPad.&lt;br /&gt;&lt;br /&gt;The other is as an application running under windows, which could allow again simple media display and sync options to your phone, Touchpad etc.&lt;br /&gt;&lt;br /&gt;Yes, this has all been tried or announced before by other companies but nobody's really pulled it off well.  But HP has the ability to do it, mostly because they sell an assload of PC's already, and printers, and cameras, etc.  If they put WebOS onto all these devices and integrate a seamless experience.. wow!  That could make Apple look pretty stupid.&lt;br /&gt;&lt;br /&gt;And they've already pretty much said they want to copy Apple's success, and why not?  But thats not the same as being a copy-cat.  Thats just good business sense.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-7021257095699402125?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/7021257095699402125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=7021257095699402125' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/7021257095699402125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/7021257095699402125'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2011/03/hp-to-webos-go-forth-and-multiply.html' title='HP to WebOS: go forth and multiply'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-4359517637597081908</id><published>2011-01-31T13:00:00.000-08:00</published><updated>2011-01-31T13:00:12.866-08:00</updated><title type='text'>O Schema, Schema, wherefore art thou Schema</title><content type='html'>I have been grappling with this issue for years now.  And it is this: how to unify data representations across display (you know, the part the user gets to see), code (the fun part we deal with) and the storage (cumbersome things like databases, files, etc).  Or in other words, Views, Controllers and Models.&lt;br /&gt;&lt;br /&gt;One of the issues here is where do you define the data?  Sure you can transform the data from one place to another, but where is the canonical definition of the data?  DBA's want this to be in the Schema of a SQL database.  Programmers have a different idea: it should be embodied in code objects which are then propagated to the database.  That seems wonderful at first (unless you are a DBA) because then the code can convert both ways; it can generate/update the DB Schema and it could generate Views for display.  I had toyed ways of defining the schema in code...&lt;br /&gt;&lt;br /&gt;But the problem here is that SQL databases are very egotistical.  They know exactly what they are, what they can do, and where, and don't really like that being changed on a programmer's whim.  And they already have this very thorough mechanism for defining that data and the relationships therein.  Why try to duplicate that in code and go through the contortions necessary to convert object definitions into schema definitions (never mind the subsequent object to data remapping needed)?&lt;br /&gt;&lt;br /&gt;If you're working with a SQL database, then you should just accept that the database is the owner of the data schema.  You should make your changes there, and have it propagate "upward" to the code.&lt;br /&gt;&lt;br /&gt;If you want your code to be the boss of the schema, then consider using a schema-less (NoSQL) database.  These are like the savants of databases: they dont know what they are storing and don't care, they just do it fast.  That leaves the schema definition to the code.&lt;br /&gt;&lt;br /&gt;So what's the point?  Just that you should know and accept where your schema is.  Use the right tool for the job.  yadda yadda.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-4359517637597081908?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/4359517637597081908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=4359517637597081908' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/4359517637597081908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/4359517637597081908'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2011/01/o-schema-schema-wherefore-art-thou.html' title='O Schema, Schema, wherefore art thou Schema'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-3037160200642791837</id><published>2010-12-28T11:47:00.000-08:00</published><updated>2010-12-28T11:48:25.653-08:00</updated><title type='text'>Apps, schmapps!</title><content type='html'>I keep hearing about how the poor Palm WebOS phone doesn't have many apps.  People got excited when they hit 1000 apps, and now 5000 apps (which they hit before, but that was including apps not on the official app store, like it matters.. at least you can get apps without having to have them blessed by an egomaniacal parent company).&lt;br /&gt;&lt;br /&gt;Then I hear about Windows Phone 7 already reaching 5000 apps in just a few months, as if that somehow really means something about the quality of the phone or apps.  And of course, iPhones have like a billion apps now (I know its not really a billion but the way the Apple people sling around the hyperbole you'd think it was).&lt;br /&gt;&lt;br /&gt;And as we all know, quantity is directly related to quality...&lt;br /&gt;&lt;br /&gt;So, yeah.  Look at all those apps.  How many fart soundboards do we need?  If you actually went through all these apps on all these phones and removed the stupid and pointless ones, and then picked maybe the 1 or 2 best examples of the numerous apps that do the exact same thing, how many actual useful unique apps would you end up with on each platform?  Would the ratio remain the same between platforms?&lt;br /&gt;&lt;br /&gt;I have an iPod touch and a Palm Pre phone, and I have maybe 10 apps installed on each.  You would think with the number of apps available on each that I would have maybe 10 on the Palm and 500 on the iPod.  Or 1 on the Palm and 50 on the iPod since everybody knows the Palm has no good apps.  And yet, thats not the case.&lt;br /&gt;&lt;br /&gt;So I say, Apps, Schmapps!  Its not all about apps.  Now excuse me while I download the 11th different fart app for my Palm.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-3037160200642791837?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/3037160200642791837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=3037160200642791837' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/3037160200642791837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/3037160200642791837'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2010/12/apps-schmapps.html' title='Apps, schmapps!'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-2027547356574038830</id><published>2010-12-15T22:55:00.000-08:00</published><updated>2010-12-15T22:55:16.562-08:00</updated><title type='text'>ORM, ODM, Nom nom!</title><content type='html'>So there's Object Relational Mapping, which I've already discussed and decided is just not the right way to do things.  Recently when looking into NoSQL systems (particularly, MongoDB) it occurred to me to wonder what the ORM equivalent was?  Turns out its ODM... Object Document Mapping, since MongoDB deals with documents rather than tables and relations.&lt;br /&gt;&lt;br /&gt;Which made me think some more.  What do ORM and ODM have in common?  What are we really doing here?  Maybe there is something more generic going on, that transcends objects and relations and documents.&lt;br /&gt;&lt;br /&gt;In typical MVC frameworks, the Model uses ORM to do its thing... the ORM pretty much IS the Model.  &lt;br /&gt;&lt;br /&gt;So really we are talking about Model being mapped to a Data Store.  A model is an object usually, but couldn't a model just as rightfully be just an array?  Couldn't it be a set of objects and/or arrays? Could a model be an arrangement of bits on a disk platter? And the data store, that could a relational database, a document database, a flat file, or just an object or array, etc.  See where this is going?&lt;br /&gt;&lt;br /&gt;The ultimate simplification here is just a Model to Model Mapping.  Where the model can be an array, an object, a data store, a remote api call, etc.  And a Model is just one way of looking at some data.  It is what its name says.  Its not data, its a model of data.&lt;br /&gt;&lt;br /&gt;When you use ORM, or ODM, what you are doing is transforming data from one form into another.  And there's a lot of places where data is being transformed, not only just when you go to persist the data.  When your system accepts data from a web form, its transforming it (which includes validation and filtering, requirements checking, etc).  When you make an API call you might transform that data into multiple chunks of data which are passed to objects which then further transform that into a form persistable in a database.  And so on.&lt;br /&gt;&lt;br /&gt;This I think really is much more in the spirit of what a model was supposed to be in the original MVC concept.  Its not supposed to be (just) a wrapper around a database.  Its meant to present a conceptual data construct to the user, something that makes sense to the user, not something dictated by the requirements of some (to the user) arcane internal representation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-2027547356574038830?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/2027547356574038830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=2027547356574038830' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/2027547356574038830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/2027547356574038830'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2010/12/orm-odm-nom-nom.html' title='ORM, ODM, Nom nom!'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-7829965256912155587</id><published>2010-09-11T22:09:00.000-07:00</published><updated>2010-09-11T22:09:39.674-07:00</updated><title type='text'>Project Management sucks</title><content type='html'>Why does every project management system suck?&lt;br /&gt;&lt;br /&gt;Clearly, something is wrong.  There are so many of these bug trackers and project management systems and such and they all suck.  And people keep making more of them all the time, and they all suck, in more or less the same ways.  Why?  Because none of them are really that much different.  So everybody thinks they can invent something better.  Including me.&lt;br /&gt;&lt;br /&gt;So here's my take on how it should work.  Lets keep it as simple as possible.  First of all, whats the main goal here?  I'll tell you.  The main goal is to Get Stuff Done.  The main goal is not to spend all your time shuffling around tasks, doling them out to your underlings, revising estimates, making pretty diagrams, and getting all pissed off at everyone when a milestone is missed.  No, the main goal, the only important goal, is to Get Stuff Done.  And your client doesn't give a monkey's ass how you do it, he just wants you to Get Stuff Done.&lt;br /&gt;&lt;br /&gt;So, the first and primary purpose of a good project management system is to help you Get Stuff Done.  Its a Stuff That Needs To Get Done manager.  So why the need to create artificial walls around the Stuff?  You've got projects, tasks, bugs, task lists, milestones, etc.  No!  Its just Stuff.  A project (and you probably have several) is your top level Stuff.  Under that is more Stuff (tasks).  You might let the client enter Stuff (bugs).  You'll probably want to group Stuff with other Stuff its related to (tasks lists).  And you'll want to Get Stuff Done in a timely manner so you might group Stuff and put a deadline on it (milestone).&lt;br /&gt;&lt;br /&gt;Here's the important part of what I am getting at.  You may want to move things around, and arrange them in different ways for different purposes.  So, you may enter in all this general stuff you need to do, and then later break down each of those into more detailed lists of stuff.   Or not.  In every system I've seen you need to decide which Stuff needs to be a list of more items (a task list) and which are the lowest level tasks.  And then you are stuck with that.  Same for bugs.  You can't say hey, this task here, its really 4 other things that need to be done.  And this bug, its going to need to be turned into 3 tasks, one of which goes into milestone whatever, and 2 into this other task list.&lt;br /&gt;&lt;br /&gt;You shouldn't have to add the whole task list to a milestone, you should be able to assign whatever sub tasks you want to whatever milestone you want.  You should be able to group your Stuff by multiple other Stuff (milestone, similar tasks, section of website, etc).&lt;br /&gt;&lt;br /&gt;Then there's the second fundamental purpose.  Now here's a concept that may be alien to many people.  It's a quantifiable unit known by most people by the common and usually pejorative term "work".  A project management system needs to keep track of Stuff That's Been Done, IE "work", or more importantly, Stuff That's Going To Be Done.  You know, that thing which causes angst and annoyance in every programmer.. the dreaded Time Estimate.  The evil overlord Project Manager needs to have some idea how long its going to take to Get Stuff Done, and he needs to know When Stuff Is Done.  You know, Estimates and Work Completed.&lt;br /&gt;&lt;br /&gt;And that, really, is all the Project Management System needs to do.  Keep track of Stuff, Stuff To Be Done, and Stuff That's Done.  Stuff, Estimates, and Work.&lt;br /&gt;&lt;br /&gt;I'm making it moronically simple because let me tell you, people dont use the project management systems because they suck.  Or if they do, it gets in the way and slows them down and doesn't really help.  I've tried a dozen different systems in the last year and they all suck, nobody uses them correctly, nobody *wants* to use them, and we all do most of our collaborative work through fucking email!  All the really  important Stuff about the projects I am working on is in my email!  The client's expectations, the 'user stories' that develop when I have to ask the client what the fuck is this supposed to do, estimated times from other programmers that I then have to painstakingly transcribe into the project management system (which doesn't take less than a day for the estimated time... duh?).&lt;br /&gt;&lt;br /&gt;So a project management system that doesn't suck has to be braindead simple to use, and completely unrestrictedly flexible.  Because programmers don't have time to fuck around with it, and the project managers need to be thinking at a much higher level than dicking around with every little detail of every little task.  It needs to somehow integrate with email and even messaging systems because realistically thats where we all do the most collaborative work.  It should probably be open source, or at least have a completely robust and simple API that you can plug into so you can integrate it with whatever other systems you are using (source control, build systems, etc).&lt;br /&gt;&lt;br /&gt;So that's my beef for today.&lt;br /&gt;&lt;br /&gt;Now if I wasn't so busy bashing my head against our current project management system and trying to coordinate several projects and developers, I might try to develop this myself.&lt;br /&gt;&lt;br /&gt;And that's probably the real reason for the suckage.  Those of us that really need it and know how it ought to work are just too busy to do anything about it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-7829965256912155587?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/7829965256912155587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=7829965256912155587' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/7829965256912155587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/7829965256912155587'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2010/09/project-management-sucks.html' title='Project Management sucks'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-1953786216693902580</id><published>2010-07-04T12:14:00.000-07:00</published><updated>2010-07-04T12:14:44.720-07:00</updated><title type='text'>Palm + HP = world domination</title><content type='html'>Palm: "Hey HP, what do you want to do today?"&lt;br /&gt;HP: "Try to take over the world.."&lt;br /&gt;&lt;br /&gt;HP: "Palm, you are pondering what I'm pondering?"&lt;br /&gt;Palm: "Uh, I think so, HP, but where will we find a duck and a hose at this hour?"&lt;br /&gt;&lt;br /&gt;So its done deal, Palm is now HP.  And I think its great.  I think its more than great, I think its a brilliant move on HP's part and the best possible outcome for Palm given its situation (and maybe even if they hadn't been on a downward slide).&lt;br /&gt;&lt;br /&gt;HP has confirmed continuing WebOS on multiple devices, like tablets and netbooks, and we're assuming new handsets.  HP hasn't been super successful with its PDA's and smartphones, WebOS will allow them to truly differentiate themselves, as well as possibly offering a superior product.&lt;br /&gt;&lt;br /&gt;But that's boring.&lt;br /&gt;&lt;br /&gt;What I think is truly interesting is the idea of integrating WebOS across other devices beyond what Apple or Android are doing.  Like printers.  Or digital cameras.  Particularly interesting to me is the idea of apps for these devices.  As far as I know, there are no printers or cameras that support apps. &lt;br /&gt;&lt;br /&gt;I can imagine all sorts of apps you could have on a digital camera, for image manipulation, photo album management, etc.  Same thing on a printer.  How many times have you wanted your printer to do something it couldn't?  We'll maybe there's an app for that!&lt;br /&gt;&lt;br /&gt;I imagine a whole range of devices, all with standard UI's and web accessible from each other (how many absolute shit web management screens have you had to deal with from printers, routers, etc?).  If they play this right it could be fantastic. &lt;br /&gt;&lt;br /&gt;I'd buy a WebOS based digital camera.  Especially if had a facebook app to upload and manage my photos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-1953786216693902580?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/1953786216693902580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=1953786216693902580' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/1953786216693902580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/1953786216693902580'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2010/07/palm-hp-world-domination.html' title='Palm + HP = world domination'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-6288636080064038155</id><published>2010-04-28T19:30:00.000-07:00</published><updated>2010-04-28T19:30:36.570-07:00</updated><title type='text'>Why are people dumb?</title><content type='html'>I was going to title my previous entry "why are people dumb?" but I thought I might give some sort of benefit of the doubt to the client, taking their reasons at face value and assuming it made some sort of sense on some level even if I disagreed with it.&lt;br /&gt;&lt;br /&gt;So, I thought I'd look into it.  Maybe I am missing something obvious.&lt;br /&gt;&lt;br /&gt;They had gotten the idea for the return data format from the Bing maps API.  They told me that's how Microsoft does it, so that's how we're going to do it.  Ostensibly this was to keep things consistent, to somehow make things simpler for the front end designer;though as he explained further he seemed to believe it was somehow necessary to define Javascript variables in this fashion in order to find the data.&lt;br /&gt;&lt;br /&gt;I let it go.  The customer is always right, or something like that.&lt;br /&gt;&lt;br /&gt;But after looking at the data returned from Bing, using the wonderful Firebug extension, and comparing it to the JSON data we're now returning, I noticed two small problems.  First, our data does NOT look like the Bing data; and two our data does NOT look like the Bing data.  I realize that technically speaking that's only one problem, but it's such a big one that I thought it was worth mentioning twice.&lt;br /&gt;&lt;br /&gt;And by big I mean, its not a big deal to format the data this way (its just redundant and less efficient); its a big deal because they are trying to emulate something they clearly do not understand but think they do.  They also clearly do not understand JSON or Javascript.  &lt;br /&gt;&lt;br /&gt;We're returning strict JSON data, while Bing is returning Javascript code.  So now, what we have as JSON data: {"Return" : ... } is their interpretation of the Bing API: function 123456778() {return: }.&lt;br /&gt;&lt;br /&gt;Now, I don't know exactly why Bing is doing what they are doing.  Perhaps they have good reasons.  It seems bad to me, but what do I know?  Well I do know that we are now implementing something dumb, based on a wrong interpretation of something that very well might be badly implemented itself (do we really want to emulate a Microsoft way of doing things?).  Thats just dumb.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-6288636080064038155?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/6288636080064038155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=6288636080064038155' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/6288636080064038155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/6288636080064038155'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2010/04/why-are-people-dumb.html' title='Why are people dumb?'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-8541497157127592875</id><published>2010-04-21T15:20:00.000-07:00</published><updated>2010-04-22T09:00:51.053-07:00</updated><title type='text'>Why do people complicate things?</title><content type='html'>So I am developing this backend code API using REST principles.  I had defined a standard format for the JSON return data and documented it on our Wiki.  It looked something like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;{&lt;br /&gt;  "Error" : 4,&lt;br /&gt;  "ErrorText" : "Failed Validation",&lt;br /&gt;  "ValidateError": {&lt;br /&gt;      "Field 1" : false,&lt;br /&gt;      "Field 2" : false&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This clearly is an error response, which I would have returned with an HTTP 400 status code.  Its a validation error, and its listing the fields that failed validation.  Simple, direct, to the point.&lt;br /&gt;&lt;br /&gt;A success response might look like this:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;{&lt;br /&gt;  "Devices" :&lt;br /&gt;  [&lt;br /&gt;    {"Id: 42, "Name" : "Nissan"},&lt;br /&gt;    {"Id: 2, "Name" : "Volvo"}&lt;br /&gt;  ],&lt;br /&gt;  "Page" :&lt;br /&gt;  {&lt;br /&gt;    "Count" : 2, "Offset" : 0, "Total" : 2&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And its returned with an HTTP 200 status so I know without parsing anything that it was successful (See REST).  It contains a list of devices, and paging information so I know that I got everything and don't need to request additional pages (not strictly needed in this example, but you get the idea).&lt;br /&gt;&lt;br /&gt;So far, so good, I implemented this in all my methods.&lt;br /&gt;&lt;br /&gt;Then they come at me with "we need to standardize the API signatures".  Oh, you mean the response data from the methods?  Yeah I already did that, its in the Wiki.  Then I get an email with their proposed changes.  It looks something like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;{&lt;br /&gt;  "Return":&lt;br /&gt;  {&lt;br /&gt;    "Type" : "device.list API 2.0",&lt;br /&gt;    "ResponseSummary" :&lt;br /&gt;    {&lt;br /&gt;      "StatusCode" : 0,&lt;br /&gt;      "ErrorMessage" : "Everything is hunky-dory!"&lt;br /&gt;    },&lt;br /&gt;    "Results" :&lt;br /&gt;    {&lt;br /&gt;      "Devices" :&lt;br /&gt;      [&lt;br /&gt;        {"Id: 42, "Name" : "Nissan"},&lt;br /&gt;        {"Id: 2, "Name" : "Volvo"}&lt;br /&gt;      ]&lt;br /&gt;    },&lt;br /&gt;    "Page" :&lt;br /&gt;    {&lt;br /&gt;      "Count" : 2, "Offset" : 0, "Total" : 2&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I guess I should be lucky they at least used my Page format.  So, I respond back.  I ask them what the point is of having the initial "Return" element.  Is it ever going to be something else? No? Then why? "Oh we want to be able to always reference it the same way, you have to have something in the root of the response to look for.."  Er.. ok.  Why then do you need "ResponseSummary" and "Results" if those are *always* going to be in the returned data?  Oh, we want them grouped together for easier reading, its cleaner and simpler.&lt;br /&gt;&lt;br /&gt;Duh?&lt;br /&gt;&lt;br /&gt;Well maybe its a good thing.  I mean, its good that I can see in the JSON data it has a ResponseSummary and a "Results" all wrapped in a "Return".. now I can see that this totally random blob of data is actually a Return from something, and within that are Results, because otherwise I might not know what it is!  And the Type is good because now I know what resource this is coming from.  I mean, its not like I know what resource I was accessing when I get this data, right?  And there are so many other things besides a Return I could be getting.  And not all Returns have Results, right?  And ResponseSummary, what a work of art this is!  This lets me know what StatusCode and ErrorMessage are!  I would be completely lost without this organization!&lt;br /&gt;&lt;br /&gt;Oh, wait.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-8541497157127592875?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/8541497157127592875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=8541497157127592875' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/8541497157127592875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/8541497157127592875'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2010/04/why-do-people-complicate-things.html' title='Why do people complicate things?'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-4250943993925904291</id><published>2010-04-11T16:42:00.000-07:00</published><updated>2010-04-11T17:34:13.759-07:00</updated><title type='text'>Lets be honest..</title><content type='html'>So.&lt;br /&gt;&lt;br /&gt;Everybody is having a collective orgasm over the iPad.  Not sure why, really.&lt;br /&gt;&lt;br /&gt;And then they announce iPhone OS 4.0.  This is cool because it finally gives people multitasking, which other phones (Palm, Android) have had for a while now.  And why did it take so long to implement?  It didn't.  Its just that now they are going to allow it for all apps, and not just their own (Apple) apps.  This is under the guise that multitasking might have made the iPhone seem unresponsive or somehow muddy the experience of the iPhone before, and only now is it good enough to be allowed (we all presume this means an even faster iteration of iPhones to be released with it, and blocking usage of multitasking on older devices).&lt;br /&gt;&lt;br /&gt;Now, think about the above.  There was no technical reason for multitasking not to be there -- because their own apps used it.  They simply disabled it for third party apps.  Why?  Essentialy because they didn't trust developers to use it well.  OK, I get that not every developer is that great, and a bad app would make the iPhone look bad because people can't separate the experience.  But apple reviews all the apps before allowing them on the store, right?  So couldn't they just reject the ones that don't multitask well?&lt;br /&gt;&lt;br /&gt;So anyway, reading the new apple license agreement you get the part about how you can't use any other framework or language on top of what apple provides.  And people complain.  And some people defend the action.  And Steve responds.  And supposedly the reason is the same as for the multitasking; that such alternate frameworks would result in bad quality software.  OK, granted, such frameworks and languages probably aren't as efficient at run time as coding directly in objective-c using the Apple APIs (though that could probably be debated), and for the users of those frameworks they would possibly be limited in using any new Apple APIs until their framework supported it.  But again, why is this a problem?  If the apps are all reviewed before being released to the app store, why the draconian limitation?  If the app sucks, they can just reject it.  If the app doesn't use a new iPhone feature but another one does, competition will ensue.&lt;br /&gt;&lt;br /&gt;So that doesn't leave a lot of logical reasons for the limitation.  Except the obvious one.  Apple doesn't want competition, period.  The real thing these frameworks enable that Apple doesn't like is cross platform development.  They don't want people making an app for the iPhone, no matter how good it is, and then pushing a button and having an Android version too.  No sir, that wouldn't make the iPhone look good (well, it wouldn't make it look *better*).&lt;br /&gt;&lt;br /&gt;I'm sure they've put up with these frameworks for as long as they cared to, and are now just figuring they are big enough to be able to tell them all to go fuck themselves because they don't need the help anymore.  Mostly, it seems like they want to give a big huge middle finger to Adobe, and all the little guys are going down with them.&lt;br /&gt;&lt;br /&gt;Come on Apple.  Are you really scared?  Is this really necessary?  Seriously?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-4250943993925904291?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://daringfireball.net/2010/04/why_apple_changed_section_331' title='Lets be honest..'/><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/4250943993925904291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=4250943993925904291' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/4250943993925904291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/4250943993925904291'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2010/04/lets-be-honest.html' title='Lets be honest..'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-2352516607963389911</id><published>2010-03-22T08:00:00.000-07:00</published><updated>2010-03-22T08:00:04.778-07:00</updated><title type='text'>Intellectual High</title><content type='html'>I will admit that I am addicted to intellectual pursuits.&lt;br /&gt;&lt;br /&gt;And as they say, the first step is admitting you have a problem.&lt;br /&gt;&lt;br /&gt;I love to learn new things.  I also love to figure things out and come up with novel solutions to problems.  Not to mention constructing things after I've done all the learning and the figuring.&lt;br /&gt;&lt;br /&gt;And the reason is probably rooted in the actual physical sensations that I feel each time I reach a goal or a new plateau in my understanding of something.  I am totally addicted.  It may be the only thing I am actually addicted to.&lt;br /&gt;&lt;br /&gt;I've done my share of other physical pursuits, from riding motorcycles to experimenting with certain substances; and I have my daily rituals which I prefer not to do without, like drinking coffee.  But none of these things are addictive.  I can do without them, and have for periods of time.  Including quiting smoking, one of the most addictive habits you can have.  And of the things I've stopped doing, it was never hard to do.  I just simply decided to stop (smoking).&lt;br /&gt;&lt;br /&gt;If I wanted to, if for some reason I had to, I could give up coffee.  Or sugar.  Or whatever.  But I could never give up learning new things.  I could never stop identifying problems and searching for the solution.  I could never stop constructing things, whether they were physical machines or data models.&lt;br /&gt;&lt;br /&gt;And you know why?  Because of that physical feeling you get when you've accomplished something.  If you've experienced it, then you know what I am talking about.  That little twinge, in the back of your neck that travels down your spine and gives you butterflies in your stomach.  That euphoric feeling, that epiphanic moment that just sends a delightful little chill down your body, that warm and fuzzy feeling.&lt;br /&gt;&lt;br /&gt;Its the best drug there is.  Its what keeps all the creative people going, I think.  I know it does it for me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-2352516607963389911?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/2352516607963389911/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=2352516607963389911' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/2352516607963389911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/2352516607963389911'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2010/03/intellectual-high.html' title='Intellectual High'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-1375860632041838294</id><published>2010-03-17T23:20:00.000-07:00</published><updated>2010-03-17T23:37:11.324-07:00</updated><title type='text'>Pass the margarine, please.</title><content type='html'>Has someone sent you this email recently?  That one with the scary stuff about margarine being bad for you and you might as well eat plastic?  Well here's a great response to send your well meaning friends:&lt;br /&gt;&lt;br /&gt;Ya know, a simple Google search and about 10 minutes of researching the  results and you will find that a lot of this is not true and this email  has been circulating for 7 years.  When it was written, it was not known  that the thing that made margarine bad was the trans fatty acids  contained in it.  Since that time, most margarines and other food items  (like french fries) have been reformulated to not contain trans fats.   Margarine today can actually have much less fat than butter, containing  no bad trans fats, and never did contain bad cholesterols; in fact some margarines made from healthy oils can actually reduce your cholesterol!  A good margarine by all accounts is probably much healthier than butter (and you can find actual scientific studies to support this).&lt;br /&gt;&lt;br /&gt;Also, its simply not true that margarine was invented to fatten  turkeys.  Its also older than 100 years.. in fact it was invented  expressly as a butter substitute over 140 years ago.  In fact pretty much every statement in this email is just plain false.&lt;br /&gt;&lt;br /&gt;And comparing it to plastic because its one molecule different..  come  on.  Learn some basic chemistry and you will discover all kinds of  things that have very similar molecular structures but are completely  different in practice.  This means nothing!  Hell, Water is only one  *atom* away from being Hydrogen Peroxide, should we stop drinking water?&lt;br /&gt;&lt;br /&gt;A much more useful thing is not be irrationally afraid of any one  particular thing, but to understand that as with all things in life,  moderation is key!  Too much of anything is bad.  If you are eating so  much margarine and other fats, sugars, and such things that we all know  aren't particularly good for you, then your not saving yourself by  switching from margarine to butter; your real problem is that you are  simply eating too much bad stuff!  Moderate it.&lt;br /&gt;&lt;br /&gt;This seems like a really great example of the common phrase "a little  knowledge is a dangerous thing" -- which itself is a very misunderstood  quote which is paraphrased from the following:&lt;br /&gt;&lt;br /&gt;"A little learning is a dangerous thing&lt;br /&gt;Drink deep, or taste not the Pierian spring&lt;br /&gt;There shallow draughts intoxicate the brain&lt;br /&gt;And drinking largely sobers us again"&lt;br /&gt;&lt;br /&gt;So the next time you get one of these scary sounding reactionary emails,  do yourself a favor and spend a few minutes to research it, learn a bit  more, don't just accept everything you read, and don't just forward it  along and propagate nonsense.&lt;br /&gt;&lt;br /&gt;Personally, I just learned a few things about margarine that I didn't  know before.  And I will continue eating small amounts of it because,  frankly, I like margarine!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-1375860632041838294?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.snopes.com/food/warnings/butter.asp' title='Pass the margarine, please.'/><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/1375860632041838294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=1375860632041838294' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/1375860632041838294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/1375860632041838294'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2010/03/pass-margarine-please.html' title='Pass the margarine, please.'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-94124450352297316</id><published>2009-09-24T23:30:00.000-07:00</published><updated>2009-09-25T00:15:20.205-07:00</updated><title type='text'>Hey look, Now I AM different!  Just like you!</title><content type='html'>So, I went and bought a Macbook Pro.&lt;br /&gt;&lt;br /&gt;Yes, after everything I said previously, I am now a Mac user.&lt;br /&gt;&lt;br /&gt;But I didn't do it to be cool.  Or because Macs are any easier to use.&lt;br /&gt;&lt;br /&gt;Here are some reasons why:&lt;br /&gt;&lt;br /&gt;Instant sleep and resume.  I can close the lid, and it sleeps.. for days!  And when I open the lid, its on.  Instantly.  Every time.  I've never seen a windows notebook do that.&lt;br /&gt;&lt;br /&gt;Great battery life, without sacrificing performance.  Is it 7 hours like they claim?  I don't think so.  But I still average 4 to 5 hours and thats way more than any windows notebook I've ever heard of.&lt;br /&gt;&lt;br /&gt;Unix-ish.  Its got a unix derivative (mach) core, which makes it great for a developer person like myself.   I use the shell and I use ssh and other command line tools.  And its rock solid.  Are there any viruses that infect unix?  I dont know of any.  I am so sick and tired of constantly battling against virus infection on my pc's.&lt;br /&gt;&lt;br /&gt;Amazing engineering.  As a former engineer, I just appreciate the precision design and manufacturing.  Its perfect.&lt;br /&gt;&lt;br /&gt;I can run windows in a vm nearly seamlessly.&lt;br /&gt;&lt;br /&gt;Installing apps is rarely more than just copying the file into the applications folder.&lt;br /&gt;&lt;br /&gt;The expose feature as well as the 2,3 and 4 figure gesture features on the mousepad.  Not to mention the huge mousepad.&lt;br /&gt;&lt;br /&gt;The sucker just feels and looks good.   And that makes me feel good.  And that counts for something.&lt;br /&gt;&lt;br /&gt;OK, so, here's what I don't like:&lt;br /&gt;&lt;br /&gt;Finder: it sucks.  To be fair, window's explorer also sucks.  But you can replace it with Directory Opus, for which there is no MacOS equivalent.  This is probably my single biggest complaint.&lt;br /&gt;&lt;br /&gt;The dock:  it also sucks.  I like the Windows task manager.&lt;br /&gt;&lt;br /&gt;There doesn't seem to be as much free software.&lt;br /&gt;&lt;br /&gt;I don't like how almost everything is too simplistic, like you can't be trusted to mess with the finer adjustments and options.  Then again, now I don't have to worry about all that.  Sometimes I feel like the system is treating me like an idiot.  But then I've got that nice shell and a unix kernel..&lt;br /&gt;&lt;br /&gt;iTunes no longer syncs with my Palm Pre for no other reason than Apple sucks and doesn't want it to work.  You know what, I don't give a flying f*ck about the USB consortium or who can use what USB id's and whatever bullshit reason they are giving.  I have the right to sync my hardware and there is no technical reason for not being able to do so.  Apple, take your head out of your ass.  Palm: find another way, please.&lt;br /&gt;&lt;br /&gt;So yeah, I am a Mac user now.  But I will never have that smug, I'm better than you attitude just because I use a Mac.  I have plenty of other reasons already...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-94124450352297316?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/94124450352297316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=94124450352297316' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/94124450352297316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/94124450352297316'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2009/09/hey-look-now-i-am-different-just-like.html' title='Hey look, Now I AM different!  Just like you!'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-2660304940890302017</id><published>2009-07-06T15:23:00.000-07:00</published><updated>2009-07-06T15:32:52.569-07:00</updated><title type='text'>Programming is like Cooking</title><content type='html'>I like to cook.  And I like to program.  I dont know if this is a common thing or not but I know at least one other person like myself.  There must be something to it.  Particularly because of the common phrase "spaghetti programing".  And now I come to find that's not the only food analogy that's been coined.  I've been missing out!&lt;br /&gt;&lt;br /&gt;So, spaghetti code is what you'd expect: meandering code that loops in on itself and becomes a tangled unsortable mess.&lt;br /&gt;&lt;br /&gt;But what about ravioli code?  Well that's an analogy to object oriented programming, of course!&lt;br /&gt;&lt;br /&gt;Then there's lasagna code.  This is code that is structured into, you guessed it, layers!  Each layer (or tier) is separated by a well defined interface (a noodle).&lt;br /&gt;&lt;br /&gt;But the one I like best of all is the Spaghetti with Meatballs coding style.  I see this a lot, especially with PHP programming.  This is messy, tangled procedural code with a sprinkling of objects thrown in!  Because like meatballs, objects make everything better!&lt;br /&gt;&lt;br /&gt;Now I'm hungry.  I think I want a meatball lasagna with raviolis on top.  mmm.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-2660304940890302017?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://en.wikipedia.org/wiki/Lasagna_code#Lasagna_code' title='Programming is like Cooking'/><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/2660304940890302017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=2660304940890302017' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/2660304940890302017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/2660304940890302017'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2009/07/programming-is-like-cooking.html' title='Programming is like Cooking'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-2797001981552804441</id><published>2009-07-01T12:41:00.000-07:00</published><updated>2009-06-01T13:06:24.279-07:00</updated><title type='text'>I want to be different!  (just like all the other different people)</title><content type='html'>Don't get me wrong.  I really admire Apple and I think their computers and operating system are pretty cool.  Maybe even superior in many ways.  And their TV commercials are hilarious.&lt;br /&gt;&lt;br /&gt;But I am really getting tired of being looked down on by the Elite Uber-Geeks who think anyone who doesn't use a Mac is a caveman.&lt;br /&gt;&lt;br /&gt;And this is from someone who used to be Mr. Alternative Computer guy, in a way much worse than a Mac user (anybody remember Amiga?).&lt;br /&gt;&lt;br /&gt;Granted, I do miss my Macbook Pro.  I miss the near instant sleep mode and how it can stay in that mode for days before running out of juice.  I miss the lighted keyboard at night.  I miss how applications are installed just by copying them into the applications folder.  And the physical design -- well its a marvel of engineering and design.&lt;br /&gt;&lt;br /&gt;And Parallels comes close to making a Mac perfect.&lt;br /&gt;&lt;br /&gt;But that's just not enough to make switching worthwhile.  Not when a Mac costs so much more than comparable PC hardware (and much more than budget PC's).  Not to mention there seems to be a lot less free software.  You are apparently expected to be nickeled and dimed (the phrase should be adjusted to account for the premium prices all Apple stuff seems to command over the equivalent non Apple alternative..) for every little application you might want, however small and transient it may be (hello AppStore!).&lt;br /&gt;&lt;br /&gt;Apple may be the only practical, real alternative to Windows (the hardware no longer is, since its just a PC in fancy clothes these days) for most people.  But if you really want the alternative, something that's truly open and free, the real underdog of the computing world, try Linux or even one of the other really obscure OS's out there.&lt;br /&gt;&lt;br /&gt;But if you just want to look like you are hip and alternative, get a Mac, and keep listening to KROQ.  The rest of us will be using stuff that makes your Mac look like a bike with training wheels and listening to music that would probably make you cry.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-2797001981552804441?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/2797001981552804441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=2797001981552804441' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/2797001981552804441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/2797001981552804441'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2008/01/i-want-to-be-different-just-like-all.html' title='I want to be different!  (just like all the other different people)'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-6748662585935431549</id><published>2009-05-06T14:34:00.000-07:00</published><updated>2009-05-06T14:47:24.698-07:00</updated><title type='text'>Cheeseburger, fries, and a large orange drink...</title><content type='html'>PHP: its like fast food..&lt;br /&gt;&lt;br /&gt;You know its bad for you...&lt;br /&gt;&lt;br /&gt;You feel like crap after eating it...&lt;br /&gt;&lt;br /&gt;But damnit, its right there, oh so conveniently located on the way to work, and sometimes a greasy cheeseburger just hits the spot, even though you know you'll pay for it later in heartburn and much later in high cholesterol and love handles, though right now its really cheap on the wallet.&lt;br /&gt;&lt;br /&gt;Its a guilty pleasure.&lt;br /&gt;&lt;br /&gt;And while you're sucking down that grease ball burger, you see the local soup and salad restaurant and think "next time, I'll eat right.."&lt;br /&gt;&lt;br /&gt;But come the next day and you see that taco joint and...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-6748662585935431549?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/6748662585935431549/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=6748662585935431549' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/6748662585935431549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/6748662585935431549'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2009/05/cheeseburger-fries-and-large-orange.html' title='Cheeseburger, fries, and a large orange drink...'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-1917477394630996861</id><published>2008-12-18T12:38:00.000-08:00</published><updated>2008-12-18T13:36:45.141-08:00</updated><title type='text'>Egads!  Monads!</title><content type='html'>There's a whole class of languages you may never have heard of, or at least, you don't know what makes them different.  Most of us have been using the "practical", popular languages, like C or PHP or Java or Ruby etc.  These are all "imperative" languages.  IE, they are nothing more than a sequence of one "do this" after another.  They are simple to understand, relatively.  But there's a class of languages called  "Functional languages".  You might think, well, all languages have functions, right?&lt;br /&gt;&lt;br /&gt;Imperative languages have a lot of limitations you may not be aware of.  One obvious limit is that they are a sequence of actions that have to be run more or less in order.  That's a problem when you've got a computer with 2 or 4 or more separate "cores", and you can't easily split that program into 2 or 4 or more separate parts to run at the same time.  Another is error handling.  Do you output an error?  Does your function fail?  Do you return an error value?  And what about those unit tests you are supposed to be doing.   How easy are those to do, when you have to set up a test situation for each function or method you want to test, trying to simulate what might actually exist when the program is really running?  Or how about debugging, when you have to track down a problem and there are many places where data is changed and used and you don't know which of those are the problem, or if its something else you don't even remember?&lt;br /&gt;&lt;br /&gt;A lot of the problems of imperative languages is due to the fact that their functions (and methods in OO programing) are not deterministic.  IE, they do not act like the functions in mathematics.  They take arguments and return a value, of course, but they can also do any number of things outside their own scope.  Like output text for display.  Or change a database record.  Or flip a pixel on.  Or send a signal down a wire that goes somewhere..  That means that you cannot call the function with the same arguments and expect to get the same result.  You also cannot assume that the rest of your program or data hasn't changed.  That makes testing hard, and debugging hard.  And you have to constantly check for errors and decide if you can go on or not to the next function.&lt;br /&gt;&lt;br /&gt;Functional languages do away with that because functions are not allowed to do anything other than return something.  They are deterministic.  You always know that with a certain input you will get the same output.  That makes testing really easy.  It also makes debugging much easier because you only have to follow the flow, and no need to worry about what might have been changed somewhere else not in that flow.  It also makes it much easier to split a program up into different parts that can be run at the same time (or in a different order)  because you can easily tell what functions are dependant on others (or not).&lt;br /&gt;&lt;br /&gt;Of course, the only problem is, how the hell do you actually do anything if you can't input or output things?  For that matter, how do you make sure things happen in the order you want them to (like outputting words in the right order for a grammatically correct sentence). &lt;br /&gt;&lt;br /&gt;Monads!&lt;br /&gt;&lt;br /&gt;Just to be annoying, stay tuned for the rest of my thought... as soon as I am finished thinking it..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-1917477394630996861?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/1917477394630996861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=1917477394630996861' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/1917477394630996861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/1917477394630996861'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2008/12/egads-monads.html' title='Egads!  Monads!'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-6809696028034343919</id><published>2008-08-29T15:57:00.000-07:00</published><updated>2008-08-29T16:16:51.297-07:00</updated><title type='text'>[language du jour] ON [training wheels]</title><content type='html'>Seems like everybody's having a collective orgasm over frameworks like Ruby On Rails and all the countless knockoffs.&lt;br /&gt;&lt;br /&gt;I certainly appreciate these systems, they are definitely filling a niche need and are bringing new ideas to the programming table.&lt;br /&gt;&lt;br /&gt;The language du jour doesn't bother me.  I like to study new languages and see where they can improve things.  What bothers me is the near religious followers of each language, going around stating that their language is The Way to nirvana (which reminds me of the song I Am The Way by Loudon Wainright III).&lt;br /&gt;&lt;br /&gt;And frameworks don't bother me either.  Except for the same religious adherants as above.&lt;br /&gt;&lt;br /&gt;Oh, and the fact that frameworks are so limiting.  I suppose frameworks have to be, in order to do what they do.  You are expected to work within what they've defined - using their design patterns (almost universally using MVC, etc),  class heirarchies, etc.  The Rails monicker makes sense, because it is pretty rigid.&lt;br /&gt;&lt;br /&gt;But I don't want rails.  I don't want the programming equivalent of training wheels (which metaforicaly speaking would be better than being on rails..).  Because what happens when you grow beyond the training wheels?&lt;br /&gt;&lt;br /&gt;I want tools so I can easily build my own vehicle with my own kind of wheels on my own kind of travel surface.&lt;br /&gt;&lt;br /&gt;Actually I am thinking something less like rails and wheels, and more like an amphibious multi-legged critter with a jet pack.&lt;br /&gt;&lt;br /&gt;Not sure what that is, though, in language terms...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-6809696028034343919?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/6809696028034343919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=6809696028034343919' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/6809696028034343919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/6809696028034343919'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2008/08/language-du-jour-on-training-wheels.html' title='[language du jour] ON [training wheels]'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-821285827887101350</id><published>2008-07-10T12:45:00.000-07:00</published><updated>2008-07-10T13:28:26.866-07:00</updated><title type='text'>You young whipper snappers...</title><content type='html'>You know, I'm really getting tired of the generation of kids today who think they're on to something new with their cutesy abbreviated asynchronous stateless communication methods.&lt;br /&gt;&lt;br /&gt;Yes, I am talking about you.&lt;br /&gt;&lt;br /&gt;The one with the cell phone tapping out messages in T9 text.&lt;br /&gt;&lt;br /&gt;You didn't really think you invented the (or any variation of the) "emoticon", did you?&lt;br /&gt;&lt;br /&gt;Maybe you think you are something big because of &lt;a href="http://www.nytimes.com/2008/03/09/business/09cell.html?ref=business"&gt;news&lt;/a&gt; stories about  how you communicate?&lt;br /&gt;&lt;br /&gt;Well, you're not.  I have half a mind to beat you over the head with this here 300 baud modem...&lt;br /&gt;&lt;br /&gt;You see, back before you were born, even before most of your parents were even able to have a chance at getting laid, we were inventing this stuff.&lt;br /&gt;&lt;br /&gt;No, we didn't have computers in our pockets.  Back in those days, our computers sat on top of desks, or took up whole cabinets.  And our screens were these huge things called CRT's, only we usually called them monitors since there was only one kind.  And instead of the internet, we had modems and phone hookups.&lt;br /&gt;&lt;br /&gt;We did have that in common, I suppose.. the phone.   We weren't limited by tiny keyboards and tiny screens, and we weren't mobile and in a hurry all the time.  But we did have to deal with our modems, which were slow.   They were measured in 'baud' which came in quantities as small as a few hundred.  It took quite a few of them to encode a single letter.  It was so slow that most people could read it as fast or faster than it came in.&lt;br /&gt;&lt;br /&gt;So we invented abbreviations.  We invented "smilies" to denote general disposition... happy, sad, angry, etc.  These are the things you call "emoticons" today.  We didn't even have icons on our computers at the time.  Just text.  Sometimes in just one color.  Yeah!  I know, its hard to imagine.&lt;br /&gt;&lt;br /&gt;I remember at the time some people even thinking that we were going to be somehow all emotionally and socially stunted or at least totally disconnected from the rest of society.  Granted some of us were (are).  But that's no different than the dumb football jock that never grows up and never learns how to be socialy acceptable outside of a group of beer bonging idiots (and I am sure this is the exception among people in sports, as is the uber-nerd that can't get laid to save his life).&lt;br /&gt;&lt;br /&gt;But here we are, all grown up.  Some of us are billionaires (can you say Bill Gates or Steve Jobs?).  Some of us are just relatively normalish folk with normal kids and lives.&lt;br /&gt;&lt;br /&gt;So you young whipper snappers out there... don't be so full of yourselves.  And don't worry about the old folks who worry about you rotting your brains with texting and mobile video watching.  Sure, you are probably letting your brains lay fallow while you f*ck around with technology.  But eventualy, out of that, a few of you are going to get your shit together and actually invent something that your kids will take to some extreme level which will cause you to wonder if your kids are going to turn out ok.&lt;br /&gt;&lt;br /&gt;Ah, sweet, sweet payback...  I can't wait.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-821285827887101350?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/821285827887101350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=821285827887101350' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/821285827887101350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/821285827887101350'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2008/07/you-young-whipper-snappers.html' title='You young whipper snappers...'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-917466963732540572</id><published>2008-06-30T12:28:00.000-07:00</published><updated>2008-06-30T13:32:15.085-07:00</updated><title type='text'>A brief history of web design.</title><content type='html'>So anyway, I was trying to explain to someone the pitfalls of MVC, and how this design methodology for web development came to be popular, and finally how the modern implementations of MVC are really kinda different than what the inventor of MVC was really shooting for.&lt;br /&gt;&lt;br /&gt;Lets start with a brief history:&lt;br /&gt;&lt;br /&gt;First, there was HTML and the Mosaic browser to render it (and lynx for command line viewing).  Ah, those were the days.  It was all static and things were good.&lt;br /&gt;&lt;br /&gt;Then somebody got the bright idea that, hey, wouldn't it be nice if we could include other HTML files into an HTML file, output a few interesting system variables like dates, and execute other programs passing their output along?  Thus Server Side Includes were born.  This evolved, and soon SSI had language contructs like if/then, etc.  Much more advanced languages were invented using this style, like PHP and ASP.  These "template" languages were designed to be "HTML with embeded code"&lt;br /&gt;&lt;br /&gt;Of course, other options were to go the other way around and just run a program that generated HTML.  Perl was a natural here.   To make things easier, these languages created templating systems where HTML code files could be loaded, and special markers within them could be replaced by content generated by the code.  This created a nice separation between the code and the presentation so that visual designers could work on the presentation without so much messing around with the code.&lt;br /&gt;&lt;br /&gt;This separation was then emulated by all the other languages, even though they already were essentially implentations of template systems.  Why?  Because they didn't force this separation.  So template libraries were designed that did force the separation.&lt;br /&gt;&lt;br /&gt;At the same time, using a database to store your dynamic information and using code to format it into something presentable came into wide use.  Now you've got a three tier system... data, code, and presentation.&lt;br /&gt;&lt;br /&gt;MVC was a design pattern already in wide use for application development with standard GUI's.  It was natural to apply this to web sites... the Model was the database, the View was the presentation, and the Controler was the code that tied it all together.&lt;br /&gt;&lt;br /&gt;Instead of a procedural stream of commands to query the database, massage the data, and format it into HTML, you now have a trio of Objects talking to each other:  Controler figures out what to do based on the url called, it asks the Model for some data, and then it tells the View to display it. &lt;br /&gt;&lt;br /&gt;Now, in theory, you can have one guy design a kick-ass database and a Model to access it, while somebody else does the Controlers and your design guy can create the views (or at least the templates used by the view object). &lt;br /&gt;&lt;br /&gt;Except that web applications are not the same as conventional desktop apps. &lt;br /&gt;&lt;br /&gt;The first generations of MVC based web apps simply sent the resulting static HTML to the browser for display.  Then some jerk had to invent a way to update portions of the HTML being displayed, using javascript, on the browser.  And those finicky users wanted things to be faster, so they wanted things like form validation to happen in the browser, and they just loved the speed of only updating parts of the HTML instead of refreshing the whole page.&lt;br /&gt;&lt;br /&gt;So now, on the browser, you have MVC again:  the asynchronous data requests to the server (Model), the HTML which can be accessed through a series of objects (the View) and the javascript making it all happen (Controler).   So now you have to implement parts of your application's Controlers in two places (the models and views on the browser side can be relatively dumb and just ask for stuff from the server).  Like form validation - on the browser for speed and convenience, but also again on the server to prevent hackers from F'ing things up.&lt;br /&gt;&lt;br /&gt;All of this is leading up to the fact that the modern MVC methodology is not exactly what its inventer had in mind in the first place.&lt;br /&gt;&lt;br /&gt;Like a lot of those early computer pioneers, he was really looking at how can we make computers easier to use, and not necessarily how can we make them easier to program.&lt;br /&gt;&lt;br /&gt;Originaly, the Model was not supposed to be some abstract mathematical construct that was designed to be efficient for a computer to store and index (ie, a relational database).  It was supposed to be an intermediary between how a person thought of the data and how it actually needed to be stored.  The View was supposed to be a user maleable canvas on which to inspect and modify that data.  The Controler is largely the same, and just coordinated between views.&lt;br /&gt;&lt;br /&gt;It may seem like a minor difference, but its actualy significant:  the modern model is an attempt at an object oriented abstraction to a database.  The original idea of a model was an attempt at an abstraction to a person's mental idea of the data.  Instead of the database leading the way, it should be the human leading the way and the computer bending to his way of thinking.&lt;br /&gt;&lt;br /&gt;I dont know exactly yet how to do it.  But a new method needs to be developed that handles both problems -- making it easier to program, and making it easier for users to use.&lt;br /&gt;&lt;br /&gt;In this fanciful system, you would write one bit of code that would generate resulting code to run on both the client and the server so you don't have to duplicate things.  It would also let you easily model things the way people expect them to be and translate that into something efficient for the computer to handle internaly.&lt;br /&gt;&lt;br /&gt;Instead of the current state of affairs, where the programmer is forced to write largely duplicated code in perhaps different languages to do the same thing over and over, and the user is forced to jump through unintuitive hoops while using the software - mainly because the programmer is too busy with grunt work to be bothered with making anything more than just barely usable (or very usable to him, or anyone with a brain like his, which is very few people)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-917466963732540572?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/917466963732540572/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=917466963732540572' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/917466963732540572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/917466963732540572'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2008/06/brief-history-of-web-design.html' title='A brief history of web design.'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-7572552973304221387</id><published>2008-06-24T13:43:00.000-07:00</published><updated>2008-06-24T14:18:59.956-07:00</updated><title type='text'>My god, its full of lines...</title><content type='html'>I love graph paper.&lt;br /&gt;&lt;br /&gt;I like computers and make a living off programming them.  But they infuriate me.  They are cantankerous machines that for all their uses have so many faults.  Its a love hate relationship.&lt;br /&gt;&lt;br /&gt;But graph paper is, well, perfect.&lt;br /&gt;&lt;br /&gt;Thats not to say that other papers aren't great too.  I am fond of tracing paper (or onion skin for you hardcore users).  Parchment is cool too.  I don't know if velum really counts.&lt;br /&gt;&lt;br /&gt;But graph paper is the ultimate surface for thinking on.  It doesn't matter if you are creating a diagram or schematic, a mechanical illustration, a chart or table, a website prototype, or even just code snippets.  The occasional purely artistic cartoon (I've mastered Bill The Cat) is even at home.&lt;br /&gt;&lt;br /&gt;Of course graph paper requires its mate, a fine pencil, which are hard to come by.&lt;br /&gt;&lt;br /&gt;I grew up with graph paper.  I have pads that are more than 20 years old.  I have some of scribblings by my  late father.   I know there are some that have been lost over the years but I could probably duplicate them from memory, so clear the images are in my head.&lt;br /&gt;&lt;br /&gt;I don't plan to ever stop using graph paper, unless they stop making it.  But there are times when I wish I had something even remotely close to the utility of graph paper on my computer.  But as far as I know, there isn't anything.  Sure, there are lots of applications for creating various sorts of graphs and tables and diagrams, even whole standards for such things like UML.  And there are word processors, and desktop publishing programs, and everything in between, and programs to make rapid website development, and drawing programs and collaborative 'whiteboarding' tools ad nauseum.&lt;br /&gt;&lt;br /&gt;But nothing that comes close to the simple flexibility of graph paper.  Never mind such old school technologies like post it notes, 3 x 5 cards, etc.&lt;br /&gt;&lt;br /&gt;Is it that it can't be done?  Or is it that its such a simple concept that when people set down to do it, they get carried away with feature creep and "overcomplexification"?&lt;br /&gt;&lt;br /&gt;When I first started programming on my Amiga way back in the day, I wanted to create such a program.  It would have had basic tools for drawing, text, tables (spreadsheets) etc and would organize documents.  I didn't want to have to fire up a paint program just to draw a little picture and then try to import that into a wordprocessor just to add some text to it and then import that into a database so I could find what I was looking for later.&lt;br /&gt;&lt;br /&gt;Turns out 20 years later there still isn't anything quite like what I envisioned then.  Unless I've missed it.&lt;br /&gt;&lt;br /&gt;Now, where's my graph paper..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-7572552973304221387?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/7572552973304221387/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=7572552973304221387' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/7572552973304221387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/7572552973304221387'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2008/06/my-god-its-full-of-lines.html' title='My god, its full of lines...'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-3841533969859898081</id><published>2008-06-19T13:33:00.000-07:00</published><updated>2008-06-19T13:56:35.982-07:00</updated><title type='text'>Steampunk'd...</title><content type='html'>Think I have a new interest and hobby:  steam punk.&lt;br /&gt;&lt;br /&gt;What, you haven't heard of this?&lt;br /&gt;&lt;br /&gt;Then you must turn in your nerd card and go hang out with the jocks.&lt;br /&gt;&lt;br /&gt;Steam Punk is basically an alternate history fantasy:  go back to the 19th century when steam locomotives were hip and everything was made from wood and brass, and then extrapolate modern technology based on that (instead of silicon, plastic, petroleum and nuclear).&lt;br /&gt;&lt;br /&gt;If you've got a fascination for turn of the century stuff, this is for you.  Old mechanical typewriters instead of computer keyboards.  Brass knobs and dials instead of boring plastic buttons and lcd screens.  Roll top desks.  Tubing, valves, and mechanical marvels.&lt;br /&gt;&lt;br /&gt;I've always looked upon this time in history with fascination and feeling like I should have been born a hundred years earlier.  I read Jules Verne.  I loved the Wild Wild West.&lt;br /&gt;&lt;br /&gt;Now imagine blending Steam Punk with:  &lt;a href="http://blog.wired.com/geekdad/2008/01/the-steam-wars.html"&gt;LEGO And Star Wars&lt;/a&gt;.  I think I just died and went to nerd heaven.  If I believed in such things.  And if I did, it would be something like that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-3841533969859898081?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/3841533969859898081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=3841533969859898081' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/3841533969859898081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/3841533969859898081'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2008/06/steampunkd.html' title='Steampunk&apos;d...'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-4095514422096157875</id><published>2008-04-17T22:17:00.000-07:00</published><updated>2008-05-12T08:33:20.506-07:00</updated><title type='text'>MVC is dead!  Long live MVC!</title><content type='html'>It happens.  A TLA (Three Letter Acronym) becomes popular for a time, but eventually, a new TLA rises up and overthrows the previous TLA ruler.&lt;br /&gt;&lt;br /&gt;Just like with political leaders and revolutions.  But as we all know, the more things change, the more they stay the same.&lt;br /&gt;&lt;br /&gt;So the latest TLAs, among others, are RIA and SOA.  These are, respectively, Rich Internet Application and Service Oriented Architecture.&lt;br /&gt;&lt;br /&gt;What?&lt;br /&gt;&lt;br /&gt;OK, an RIA is a web-based application that uses more than just your basic HTML (on the "front end").  Mostly, this means AJAX (ah, an FLA!).  Which means more work is being done in your browser, thus speeding things up and making lots of visual flash more doable.&lt;br /&gt;&lt;br /&gt;SOA just means a web-application that doesn't just spit out HTML (on the "back end"), but instead spits out some more easily parseable format like XML or JSON and is (hopefully) clearly documented.   This lets multiple different other applications make use it, instead of just being displayed by one built in HTML gui.&lt;br /&gt;&lt;br /&gt;So what am I getting at?  You already know these things?  Well, a recent article claimed that MVC was dead because of the advent of RIA-SOA.   Model View Controler is a design pattern that goes all the way back to the days of Smalltalk in the 1970's.  More recently is has become pretty standard in the design of web-applications.&lt;br /&gt;&lt;br /&gt;In the typical implementation of MVC, the Model is generally a class that handles saving/loading information from a database.  The View is another class that creates the HTML, and finally the Controler is what glues it all together.&lt;br /&gt;&lt;br /&gt;So how does this contrast with RIA-SOA?  Well lets see.  The RIA part contains code to display HTML (the View), code to get/save information (the Model) which it does by consuming services provided by the SOA, and most likely some more code to handle the interaction (Controler) as you click on things.  That's on the front end.  On the back end, you have the code that loads and saves from a database (Model),  spits back formatted data (View),  and defines what you can do (Controler).&lt;br /&gt;&lt;br /&gt;It seems to me that, really, RIA-SOA is just MVC-MVC.  Yeah, its a higher level concept built on top of MVC because it takes what would normally just run on the back end, and splits it into two parts to put more of the work onto the front end.  But to say it kills MVC is, really, kinda silly.&lt;br /&gt;&lt;br /&gt;And you can't really simplify it to be M-VC, either.  That is, you can't just implement all of the View and Controler on the front end and the Model on the back end.  Why?  Security, for one.  You have to maintain all logic on the back end as well as the front end to prevent somebody doing something bad.  Having the logic on the front end is, well, candy to make it look nice.&lt;br /&gt;&lt;br /&gt;Now, all of this ignores the fact that the typical, modern implementation of MVC really is not at all what the inventor intended for it to be (see &lt;a href="http://www.nakedobjects.org/downloads/Pawson%20thesis.pdf"&gt;Naked Objects,&lt;/a&gt; particularly the forward by Trygve Reenskaug [yes, that is spelled correctly..]).&lt;br /&gt;&lt;br /&gt;So, yes, in a way, MVC is dead, long live MVC...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-4095514422096157875?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.sdtimes.com/content/article.aspx?ArticleID=31916&amp;AspxAutoDetectCookieSupport=1' title='MVC is dead!  Long live MVC!'/><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/4095514422096157875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=4095514422096157875' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/4095514422096157875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/4095514422096157875'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2008/04/mvc-is-dead-long-live-mvc.html' title='MVC is dead!  Long live MVC!'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-1729175203238735975</id><published>2008-03-27T19:00:00.000-07:00</published><updated>2008-05-12T08:34:13.322-07:00</updated><title type='text'>I for one welcome our new OS overlords</title><content type='html'>I've been saying it for years now.  My first thoughts on the situation was the idea that there could be universal hardware drivers that any OS could use, coupled with a universal binary format that would run on any cpu.  With those in place you could have OS's that could run on any computer, and software that could run on any OS.&lt;br /&gt;&lt;br /&gt;Mind you, I had this idea back when I was programming my Amiga (and they were still being made...).  So this was pre Java, before Linux and before any kind of reasonable emulation or virtual machines.&lt;br /&gt;&lt;br /&gt;So here we are today.  We have things like Java where you can, in theory, write code that will run on almost anything.  We also have lots of interpreted languages that run effectively on almost anything, like PHP, perl, python, Javascript, etc etc.&lt;br /&gt;&lt;br /&gt;But what about the os part?  Well, we have Linux which does run on almost anything, and we have Windows which runs on only x86 hardware.  But Linux lacks the driver support of Windows and Windows lacks the universality of Linux.&lt;br /&gt;&lt;br /&gt;Microsoft doesn't seem to be interested in decoupling Windows from the hardware (not that it would be easy, of course, but why bother?) and Linux as popular as it has become may never get to where Windows is.&lt;br /&gt;&lt;br /&gt;Never mind other OS's.&lt;br /&gt;&lt;br /&gt;Except for one thing.  Virtual Machines.  This software lets you virtually split up your hardware into multiple simulated machines.  Thus, you can run Windows and Linux at the same time.  You can run Linux on top of Windows and in theory take advantage of hardware drivers in Windows that arent in Linux.&lt;br /&gt;&lt;br /&gt;You are less restricted by having to choose an OS, since you can run many of them at once.  At some point, your OS just wont matter any more.  What will matter is your Virtual Machine, which will become the new OS.  Which is as it should have been all along, because a Virtual Machine is the bare minimum of software required to make the hardware accessible from the software.&lt;br /&gt;&lt;br /&gt;Windows may not be taken down by another, superior OS like Linux or MacOS or whatever comes along.  It will be taken down by some Virtual Machine OS that lets you use any other OS's you want to use.&lt;br /&gt;&lt;br /&gt;And Intel will be taken down when enough software is written in some portable binary format (java?  .net?  something else?) that makes choice of CPU irrelevant.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-1729175203238735975?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/1729175203238735975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=1729175203238735975' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/1729175203238735975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/1729175203238735975'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2007/08/i-for-one-welcome-our-new-os-overlords.html' title='I for one welcome our new OS overlords'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-8414881095100412361</id><published>2008-03-17T19:05:00.001-07:00</published><updated>2008-03-17T19:05:17.058-07:00</updated><title type='text'>Wifi:  I'm not dead!  'Ere. He says he's not dead!  Yes he is!</title><content type='html'>So now people are saying that WiFi, or 802.11a/b/g/n wireless hotspots, is going to die.  Why?  Because we'll all switch over to using cellular broadband (3.5 or 4G) networks.&lt;br /&gt;&lt;br /&gt;Hogwash.&lt;br /&gt;&lt;br /&gt;That's like saying we'll all switch to WiFi and that Ethernet will die.  And that didn't exactly happen.&lt;br /&gt;&lt;br /&gt;Granted, WiFi's explosive growth will probably slow down.  But will cellular broadband ever be as cheap as WiFi?  Will I be able to have my own cellular hotspot in my home for my own network?&lt;br /&gt;&lt;br /&gt;WiFi won't die.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-8414881095100412361?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.infoworld.com/article/08/03/10/Ericsson-predicts-demise-of-hotspots_1.html' title='Wifi:  I&apos;m not dead!  &apos;Ere. He says he&apos;s not dead!  Yes he is!'/><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/8414881095100412361/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=8414881095100412361' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/8414881095100412361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/8414881095100412361'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2008/03/wifi-im-not-dead-ere-he-says-hes-not.html' title='Wifi:  I&apos;m not dead!  &apos;Ere. He says he&apos;s not dead!  Yes he is!'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-6263489630591532148</id><published>2007-10-16T10:54:00.000-07:00</published><updated>2007-10-16T11:17:18.734-07:00</updated><title type='text'>Grand UNIfied Bulletin Board System</title><content type='html'>Lately I've been mulling this idea in my head and trying to visualize how it would look. &lt;br /&gt;&lt;br /&gt;The issue(s) are thus:  I have this blog here.  Its cool.  It lets people make comments to my blog entries.  But it sucks, because nobody (well, hardly anybody) knows its here.  Meanwhile all my friends are on MySpace, which IMHO sucks donkey balls.  It would be nice if my blogs here could also be automatically blogs on MySpace, because I am not going to take the time to repost them there.&lt;br /&gt;&lt;br /&gt;There are other times I may post something onto a message board, when I want to strike up a discussion (as opposed to just barfing my thoughts onto a blog with no real expectation of a discussion about it).  Sometimes I may want that to also be a blog entry, but I'm too lazy to cross post it to my blog.  And what happens if I did, and then people make comments to both the blog and the message board posting?&lt;br /&gt;&lt;br /&gt;Recently there was a thread on the &lt;a href="http://www.mysettopbox.tv/phpBB2/"&gt;Knoppmyth&lt;/a&gt; message board about a problem I and others were having.  The solution was found after a while but it was not clear how to apply it, so I helpfully went through the thread and some other threads and compiled a &lt;a href="http://knoppmythwiki.org/index.php?page=NVidiaDriversR5F27"&gt;how-to&lt;/a&gt; which I posted onto the knoppmyth wiki.&lt;br /&gt;&lt;br /&gt;In my previous blog entry, I mentioned a wiki that had become a rather cluttered looking discussion -- it was more like a message thread, but one that could be edited.  It was a mess.&lt;br /&gt;&lt;br /&gt;On &lt;a href="http://slashdot.org"&gt;Slashdot&lt;/a&gt;, it occurred to me one day while reading a particularly funny comment to an article that this comment will probably be largely lost to obscurity because you would only ever see it if you read through all the comments for that article.&lt;br /&gt;&lt;br /&gt;So taking all these thoughts and putting them together I am lead to the idea of a Grand Unified Bulletin Board System.  This would embody all the concepts of message boards (which are the web incarnation of the original BBS's from days gone by..), blogs, wiki's, CMS's, Social Networking, and commentary into a unified mashup.&lt;br /&gt;&lt;br /&gt;I haven't figured out how it's all going to work, but trust me, it's going to be cool.  And if I don't do it, somebody else will.  Hopefully this will be a little easier to do than what scientists face with the &lt;a href="http://en.wikipedia.org/wiki/Grand_unification_theory"&gt;Grand Unification Theory&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-6263489630591532148?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/6263489630591532148/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=6263489630591532148' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/6263489630591532148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/6263489630591532148'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2007/10/grand-unified-bulletin-board-system.html' title='Grand UNIfied Bulletin Board System'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-2294900929199953653</id><published>2007-10-10T22:19:00.000-07:00</published><updated>2007-10-10T22:44:41.622-07:00</updated><title type='text'>Smells like Code Generation</title><content type='html'>Recently I came across a &lt;a href="http://c2.com/cgi/wiki?CodeGenerationIsaDesignSmell"&gt;wiki&lt;/a&gt; that attempted to discuss the merits of code generation, with the initial postulation that Code Generation is a "Design Smell"...  IE, that if you have to do code generation, then there is something wrong with the design of the language you are using.&lt;br /&gt;&lt;br /&gt;Code generation is really just another name for a compiler.  And we've been using compilers for a long time.  A C++ compiler is just a code generator that creates lower level code (C or directly to assembler/machine code) from a description you give it (the C++ code).   That's really not so much different than, say, CodeCharge which lets you design visually but stores the definition as an XML file which is then "compiled", IE code is generated on demand.&lt;br /&gt;&lt;br /&gt;I don't think anybody that is against Code Generation could possibly say that a C++ compiler is bad.&lt;br /&gt;&lt;br /&gt;But look at the progression of compilers.  The first compilers were made because people realized that a lot of the machine code they were writing was similar.  So they created higher-level languages to represent these similarities as language features that could be compiled to the lower level machine code.  IE, a code generator.&lt;br /&gt;&lt;br /&gt;So the concept of Object Oriented Programming comes along.  Languages like C had no way of expressing this natively.  But you could do OOP with C by coding it by hand.  And so once again you have these similar bits of code being written all the time.  And one day somebody decided, lets represent those patterns with an even higher level language, and C++ was born.  Initially, C++ compiled into C which was then compiled in machine code.  You would think the anti code generation people's heads would explode at the thought.&lt;br /&gt;&lt;br /&gt;Right now we have a generation of web applications being written with just tons of similar code being written.  Design patterns like MVC and CRUD and boring but necessary security checks in data forms etc etc.  So we have all sorts of code generators, some compiler like, some on the fly, some using frameworks.&lt;br /&gt;&lt;br /&gt;What we really need, it seems, is the next generation of languages that expresses these web application requirements as part of the language.  Then we can make interpreters and/or compilers.  And make that language a standard instead of having dozens of different incompatible frameworks and code generators.&lt;br /&gt;&lt;br /&gt;Let the cycle begin again!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-2294900929199953653?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/2294900929199953653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=2294900929199953653' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/2294900929199953653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/2294900929199953653'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2007/10/smells-like-code-generation.html' title='Smells like Code Generation'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-3032813901966910794</id><published>2007-09-24T16:01:00.000-07:00</published><updated>2007-09-24T16:31:59.016-07:00</updated><title type='text'>Hey homey, I can see your doodle...</title><content type='html'>Here's another design pattern/framework idea I hadn't come across before.  Its called &lt;a href="http://en.wikipedia.org/wiki/Naked_objects"&gt;Naked Objects&lt;/a&gt;.  Not sure why they call it that, but here it is in a nutshell:&lt;br /&gt;&lt;br /&gt;1.  All your business logic should be strictly encapsulated.&lt;br /&gt;2. Your user interface should be a direct representation of these objects.  IE the GUI should only call upon those objects.&lt;br /&gt;3. The GUI should be generated from the definition of those objects, using code generation techniques or reflection (preferred).&lt;br /&gt;&lt;br /&gt;This could be combined with ORM such that you would only define the domain objects and the GUI and Database layers would be generated from that, though this is not part of the definition.&lt;br /&gt;&lt;br /&gt;I am not sure how well this would work.  It almost sounds like it could lead to the same sort of mis-match that occurs with ORM.  What if your objects have much more functionality (say, to support a very robust API) than you want to expose in a default GUI?  How would you enable a graphic designer to make cosmetic changes to this auto-generated GUI?&lt;br /&gt;&lt;br /&gt;At any rate, it's another interesting concept.  And frankly, I like the name.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-3032813901966910794?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/3032813901966910794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=3032813901966910794' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/3032813901966910794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/3032813901966910794'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2007/09/hey-homey-i-can-see-your-doodle.html' title='Hey homey, I can see your doodle...'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-2650075263676878516</id><published>2007-09-10T14:20:00.000-07:00</published><updated>2007-09-11T11:54:14.105-07:00</updated><title type='text'>With a span span here, and a span span there, here a span, there a span, everywhere a ...</title><content type='html'>I said it before but I will say it again, because you are all still doing it:&lt;br /&gt;&lt;br /&gt;STOP FUCKING using SPAN and DIV tags for EVERYTHING!&lt;br /&gt;&lt;br /&gt;Its amazing to me how whenever something new and "better" comes along, that we all just completely stop doing things the "old" way, even to the point of shunning the old ways and ostracizing anyone who still does.&lt;br /&gt;&lt;br /&gt;Case in point:  the much maligned table tag in HTML.  Once the darling of HTML layout and design, its use as such has been replaced by CSS positioning.  This is because HTML is supposed to be for representing the structure of your data, and not the layout and display of that data.&lt;br /&gt;&lt;br /&gt;So now, like Salt and Eggs before it, the poor table is considered evil.&lt;br /&gt;&lt;br /&gt;Have we all forgotten that a table is more than just a display technique, but also a very important form of data structure?  Its OK to use a table tag to represent - hey! - a TABLE of data.&lt;br /&gt;&lt;br /&gt;Oh, and this goes for you people who want to make everything into an Object!  This means languages that are purely object oriented, and trying to force relational databases into object oriented paradigms.  Stop it!  Sometimes, arrays are good.  Sometimes, set theory is appropriate.  Procedural programing just hits the spot sometimes (and I'm sorry to break it to you, but even Objects contain procedural code!).&lt;br /&gt;&lt;br /&gt;I'm not saying I don't love and use object oriented programming.  Its just that I have not forgotten how we got here, and how all the old methodologies are still useful tools.  I like my arrays and integers and strings and procedural code as well as my objects.&lt;br /&gt;&lt;br /&gt;Now, I am going to eat some &lt;a href="http://health.ninemsn.com.au/article.aspx?id=108677"&gt;eggs&lt;/a&gt; with &lt;a href="http://www.rense.com/general65/salt.htm"&gt;salt&lt;/a&gt; on them, cooked in oil, without worrying about my heart exploding...  oh yeah, and &lt;a href="http://health.usnews.com/usnews/health/articles/051219/19coffee.htm"&gt;coffee&lt;/a&gt; too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-2650075263676878516?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/2650075263676878516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=2650075263676878516' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/2650075263676878516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/2650075263676878516'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2007/09/with-span-span-here-and-span-span-there.html' title='With a span span here, and a span span there, here a span, there a span, everywhere a ...'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-4998105803871167609</id><published>2007-08-30T16:50:00.000-07:00</published><updated>2007-08-31T22:53:07.380-07:00</updated><title type='text'>To generate, or not to generate, that is the question</title><content type='html'>I've already admitted to being a lazy programmer, because I use a code generator application.  I've already said I am looking for alternatives, looking at open source PHP frameworks like Kohana.  But I don't wish to give up the time savings from the code generator.&lt;br /&gt;&lt;br /&gt;I wish to be able to create my application with both HTML frontend as well as an API that can be used  by  AJAX methods as well as external appliacations.  I've long ago dissed the SOAP methodology in favor of REST.   I'm also giving the finger to the typical ORM solutions.  This isn't leaving me with a lot of options.&lt;br /&gt;&lt;br /&gt;My current code generator assumes you are starting with an already defined database.   This is good from the perspective that the database should be designed first by someone who knows what they are doing, and not by a designer or even a mere progammer.&lt;br /&gt;&lt;br /&gt;The problem with every framework or code generation system I have seen is that they start from one point and expand from there.  This could be to start from the database and then extrapolate out from that to generate the code and the presentation.  Or they might start from the code and then generate a schema to map code data/objects to. &lt;br /&gt;&lt;br /&gt;The purpose of all this of course is to reduce the tedium of coding:&lt;br /&gt;&lt;br /&gt;Database:  CRUD operations, validating and filtering data going in/out of the db, help constructing more complex SQL queries.&lt;br /&gt;&lt;br /&gt;Code: validating and filtering external data from forms, external API's, etc, coordinating among many different data sources and assembling them together for output.&lt;br /&gt;&lt;br /&gt;Presentation: formatting into HTML, or JSON, or XML, or whatever; consistent look and feel forms connected to the code, validating and filtering data.&lt;br /&gt;&lt;br /&gt;Instead of one of these tiers driving the others, it should be instead possible to have them all done independently with some easy streamlined method for connecting them together.  This way, the DBA can design his lovely normalized database schema while the designers can create a slick, end-user intuitive GUI.  And the poor programmer caught in the middle doesn't have to deal with the impossible disconnect between the presentation and the data abstraction, he can just connect it all up easily and write his business logic to make it all work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-4998105803871167609?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/4998105803871167609/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=4998105803871167609' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/4998105803871167609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/4998105803871167609'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2007/08/to-generate-or-not-to-generate-that-is.html' title='To generate, or not to generate, that is the question'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-5068096135302317454</id><published>2007-07-27T16:00:00.000-07:00</published><updated>2007-07-28T00:40:42.357-07:00</updated><title type='text'>ORM BAD!  ARGGHH!!!</title><content type='html'>The more I think about it the more I realize two things:&lt;br /&gt;&lt;br /&gt;1.  True Object Relational Mapping is inherently flawed.  Database tables are not objects, nor are records.  They cannot inherit from another.  They do not encapsulate data with access methods.&lt;br /&gt;&lt;br /&gt;2.  Lots of systems calling themselves ORM really are not by the strictest definition of ORM.  They are Object Oriented Database Abstractions... but that just doesn't have as nice a ring to it.  It also doesn't fit in with the politically correct "Everything should be an object" doctrine.&lt;br /&gt;&lt;br /&gt;Look, people:  Object Orientation is great.  But so is procedural programing, arrays and set theory, aspect oriented programing, etc.&lt;br /&gt;&lt;br /&gt;What is it that these ORM systems are often trying to solve?  In many cases its not "I have a ton of objects I need persisted to a storage medium".  I think more often than not, its "I don't want to have to write an assload of code to do basically the same stuff over and over again when accessing my database".  They are not so much concerned with what form the data is in, just that they can Create it, Read it, Update it or Delete it.  Yes folks, its CRUD.   And I think CRUD is set to whip ORM's ass just like REST is beating SOAP and JSON vs XML.&lt;br /&gt;&lt;br /&gt;That's not to say that we can't or shouldn't use OO design to create our CRUD code.  We just shouldn't be trying to directly map our objects into data.&lt;br /&gt;&lt;br /&gt;So, now that we have that out of the way, lets look at the two common perspectives on how this should work:&lt;br /&gt;&lt;br /&gt;1.   Define the Code first, then generate a database schema to match.&lt;br /&gt;2.  Define the database schema first and then generate the code to access it.&lt;br /&gt;&lt;br /&gt;A sub part of method 2 is whether to go strictly by the schema itself, or to add a config file of some sort.&lt;br /&gt;&lt;br /&gt;The main idea here is be further lazy (ok, its supposed to be to keep the code and schema in sync; in database terms, normalized..) and define the data structure only once.   Going with the code first method is excelent if you don't have a database already created.  But what if you have an existing DB?  What if you have a DBA who makes changes to the database but is not a programmer?  What if you have another part your application written in another language and framework?  What if you just want to go into phpMyAdmin and tweek the database that way?&lt;br /&gt;&lt;br /&gt;Using the schema first method eliminates all those issues, but has some of its own.  What if you want to switch to another type of database backend?  With the previous method, it could be as easy as plugging in the new database adapter and regenerating the schema.  What if your database design (or your database system) doesn't provide enough or the right kind of meta-data to be able to create usable code from?  This is where the config file comes in, covering what's missing or non-standard.&lt;br /&gt;&lt;br /&gt;A third option is actually possible, wherein the config file takes full control and defines the schema in a code and database neutral form, from which both the code and schema are generated from.&lt;br /&gt;&lt;br /&gt;I definitely am ruling out the code first option.  I think there are too many problems with this, and databases should really be designed by a database expert.  I think bad code is much easier to fix later on than a badly designed database.  Especially if you can regenerate much of the code from the database.  The third option is great if you intend to target more than one database backend.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-5068096135302317454?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/5068096135302317454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=5068096135302317454' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/5068096135302317454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/5068096135302317454'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2007/07/orm-bad-argghh.html' title='ORM BAD!  ARGGHH!!!'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-1446025594402184767</id><published>2007-07-27T12:48:00.000-07:00</published><updated>2007-08-30T16:50:02.939-07:00</updated><title type='text'>Suitable for framing</title><content type='html'>I have been looking for a framework to adopt for an existing large project.  I have been using a RAD tool (Codecharge Studio, CCS) since the project's inception some years ago.  It has treated me relatively well, allowing me to rapidly get the thing working, where it would probably have taken too long any other way.&lt;br /&gt;&lt;br /&gt;But over that time I have come up against the limitations of this tool.  It works great for what it does.&lt;br /&gt;&lt;br /&gt;Which is this:  it creates your CRUD pages from an existing database.  This is somewhat ORM-ish, as it creates a set of classes that loosly match the MVC concept.  And that works great for a lot of things, and its fast.&lt;br /&gt;&lt;br /&gt;But these classes are not interoperable.  You can't have one interact with another and have them create a SQL JOIN for instance, or even just embed one inside another (say updating one table requires inserting something in another).  You also can't easy swap out parts of the MVC structure, like say having a choice of views for HTML or JSON output, or changing the model to one that doesn't interact with the database (lets say the data came from a remote call to another application). Its also hard to make the view more flexible, like having a variable number of columns.&lt;br /&gt;&lt;br /&gt;So I've wound up hand coding some of the parts of my app.&lt;br /&gt;&lt;br /&gt;Now I will probably still use CCS for some things, like the admin pages, were it works well.  But the core of my app needs reworking to support more advanced AJAX style features, more modularity, etc.&lt;br /&gt;&lt;br /&gt;But enough background.&lt;br /&gt;&lt;br /&gt;What interests me in particular is the database layer, and the MVC structure.  The ORM concept (be it model-creates-schema, schema-creates-model, or external tool creates both) is somewhat flawed, at least when it becomes "the end all solution" (see &lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=41114"&gt;this&lt;/a&gt;), but I see it as similar to CCS -- a rapid dev tool that covers maybe 80% of the mundane stuff.  The only thing that seems to be lacking really is that the ORM tools only cover the model and database, they don't help you with the view, where CCS does all three.&lt;br /&gt;&lt;br /&gt;I would like to see the database layer have multiple options.  I see no reason you can't have it support both defining the model first and then asking it to generate a schema, or having it be able to look at the schema and generate the model.  Either way, when the application is done, the code should be largely the same.  That is to say, the only time code or schema generation takes place is when you as a developer tell it to do so.&lt;br /&gt;&lt;br /&gt;Now, on to MVC.  From what I can see, it seems like all the PHP frameworks use MVC.  Which is to say, that none of them use &lt;a href="http://en.wikipedia.org/wiki/Presentation-abstraction-control"&gt;PAC or HMVC.&lt;/a&gt;  The main thing here, for me, is that I want flexibility in the layout.  I want to put multiple components (MVC/PAC/HMVC triads) on a web page, some of which may be collections of components, and I want a method of specifying arguments to each of them from the URL.  The only framework I saw that did this was &lt;a href="http://www.phpclasses.org/browse/package/3199.html"&gt;Claw,&lt;/a&gt; which seems to have been abandoned.&lt;br /&gt;&lt;br /&gt;So what's the PHP framework for me?  I don't know yet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-1446025594402184767?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/1446025594402184767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=1446025594402184767' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/1446025594402184767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/1446025594402184767'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2007/07/i-have-been-looking-for-framework-to.html' title='Suitable for framing'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-7602006543335674890</id><published>2007-05-22T15:43:00.000-07:00</published><updated>2007-11-01T16:14:59.321-07:00</updated><title type='text'>Take your templates and shove 'em...</title><content type='html'>When I first started programing web pages, I used what was and is generally perceived as bad design... I mixed my HTML and code together.  Oh, horror of horrors!  I quickly learned that this was bad, even though it was oh so convenient at first:  what if you have to change all the HTML?  This might happen if you wanted to redesign the look of the site, and it would be much worse if you wanted some non-programmer type to do it.&lt;br /&gt;&lt;br /&gt;The solution, of course, was (is) templates.  The idea here is to separate your logic (the code) from the presentation (html).  Never mind that there is already CSS which is meant to separate your html into presentation (css) and structure (html).  HTML and CSS belong to the designers and code to the programmers, right?  Hence templates.&lt;br /&gt;&lt;br /&gt;So.  Templates.  At first they were simple.   Just do your HTML and put in names surrounded by brackets (ex: {page_title}).  The code then loads the template, replaces the bracketed items with data, and spits it out to the browser.  Simple enough for the idiot designers to not mess up.  A little more anoying for the programmer though.&lt;br /&gt;&lt;br /&gt;Then somebody realized that, often, there are parts of the page that get repeated, or are enabled or disabled.  How do you do that?  Well, you come up with another thing called a block, often this is defined as an HTML comment:  &lt;!-- blockstart myblock --&gt; followed by &lt;!-- blockend myblock --&gt;.  This surrounds the part of HTML you want to repeat, or remove.  The code looks for these, removes them, and then lets the code decide to put them back in, possibly multiple times.  And the designers were able to understand this concept too, and work around it.  The programmers got a little more buggered, but figured it was worth the functionality.&lt;br /&gt;&lt;br /&gt;Then some designer (and the moron probably thought he was being really clever) asked why he can't somehow determine how many times a block gets repeated, or whether it showed up at all.  So some overly enterprising programmer gave him a way to do it:  by implementing blocks that could have a condition or loop construct.&lt;br /&gt;&lt;br /&gt;Now wait a minute.  Conditions and looping?  That's programming talk!  Then they started implementing functions.  Yes, I'm looking at you, Smarty.  What the hell?  So now the designers are becoming programmers, and the programmers are just getting really pissed off, but they are told it has to be this way, don't you remember how it used to be?&lt;br /&gt;&lt;br /&gt;Yeah, I do.  I remember when I didn't need an extra layer of crap that forces me to separate things when I could have done it myself, and slows things down.  Granted this makes sense if you are doing web pages in C or Java or something, but in PHP?&lt;br /&gt;&lt;br /&gt;PHP was originaly designed to do what template systems do today.. make it easy to embed code and HTML.   PHP *is* a template language (and you can do the same thing with ASP and other languages).  And now we implement another template language inside of it?  DUH?&lt;br /&gt;&lt;br /&gt;So, lets summarize the differences:&lt;br /&gt;&lt;br /&gt;Templates: {variabletobereplaced}&lt;br /&gt;PHP: &amp;lt;?php echo $variable ?&amp;gt;&lt;br /&gt; or using short tags: &amp;lt;?=$variable ?&amp;gt;&lt;br /&gt;&lt;br /&gt;Is that really to much harder?  And its SO much easier in the code, no loading a template, no setting the variables with some function call.  Just assign the variable, and done.  If you want to keep your "template" in a separate file, just include it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-7602006543335674890?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/7602006543335674890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/7602006543335674890'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2007/05/take-your-templates-and-shove-em.html' title='Take your templates and shove &apos;em...'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author></entry><entry><id>tag:blogger.com,1999:blog-5567509690677295215.post-1884489720957232455</id><published>2007-05-18T15:14:00.000-07:00</published><updated>2007-05-18T15:24:36.092-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='css html markup structure presentation'/><title type='text'>Why use anything else when you have DIV tags?</title><content type='html'>So I am looking at other people's HTML, CSS and JavaScript at my new job.&lt;br /&gt;&lt;br /&gt;And I am noticing cool things, like lots of use of CSS positioning, AJAX, and all that Web 2.0 style stuff.&lt;br /&gt;&lt;br /&gt;Only problem is, people seem to have forgotten that there are other tags in HTML besides DIV tags.  Its great that we are using lots of CSS to place elements and style them, but have we all forgotten that HTML tags actually serve a purpose?&lt;br /&gt;&lt;br /&gt;Tags are meant to give structural information to your data, and CSS is meant to give it a visual look.&lt;br /&gt;&lt;br /&gt;So if you've got a table of data to display, why are you using a bunch of nested (or even not nested) div tags instead of, gee, the TABLE element?  If you have a list of items, why are you using div tags instead of the UL and LI elements?&lt;br /&gt;&lt;br /&gt;Since the catching on of CSS positioning, it seems like everybody thinks tables are evil, because for a long time people used them for getting a visual look and not for tabular data display.  But they are not evil.  They're just tables.  That's like saying hammers are evil because the screw driver was invented and now we don't have to hammer our screws in.&lt;br /&gt;&lt;br /&gt;Duh?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5567509690677295215-1884489720957232455?l=wtf.peoplecatcher.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wtf.peoplecatcher.net/feeds/1884489720957232455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5567509690677295215&amp;postID=1884489720957232455' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/1884489720957232455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5567509690677295215/posts/default/1884489720957232455'/><link rel='alternate' type='text/html' href='http://wtf.peoplecatcher.net/2007/05/why-use-anything-else-when-you-have-div.html' title='Why use anything else when you have DIV tags?'/><author><name>Aric Caley</name><uri>http://www.blogger.com/profile/15839646601757409710</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_GZBDg_koSW0/SLh0XEAkbhI/AAAAAAAAAA8/4HRXQjk8dtA/S220/greywire%27s+Webcam+2.png'/></author><thr:total>0</thr:total></entry></feed>
