The Ideal framework

My last post mentioned 5 requirements my ideal framework would have, before falling off-track and turning into a rant that’s sure to draw unwanted attention and flames.

I write for myself, and have few pretensions, so any criticism is probably warranted, but not necessarily welcome. I’m too modest to think anyone reads my posts, except accidentally, probably looking for tips to install Magickwand, my customer service experience with Linode & VPSLand, or an intelligent review of some random framework or tool. All of which, I’m sure, are sadly disappointed, but Google doesn’t know that yet.

So, here is the list again in a (hopefully) less flammable post, in case someone wants to read it without reading my uninformed, out of context, flamebait.

The ideal framework should:

  1. Get out of the way
  2. Be obvious about what it’s doing
  3. Leverage existing knowledge and techniques
  4. Help write better code by:
    1. Making code simpler, less verbose
    2. Help me stay organized
    3. Help me avoid shooting myself in the foot
  5. Allow hacks when needed

To start off, I want to stress that I don’t want to let the ideal be the enemy of the good, as long as the good is good enough.

This is a personal blog, which means an unorganized record of my own thoughts, however incoherent or inaccurate. I’m not trying to sell anything or prove my brilliance, but if you want to hire me, request services from my company, or invest in my online petstore, because of what you’ve read on my blog, by all means don’t let my humility (or stupidity) deter you.

The first and most important requirement of a good framework to me is that it “Gets out of the way”, which I’ll cover next (actually, I wrote a good deal on it already, but prefacing and flaming have distracted me.)

Framework fetish and rants on SolarPHP, Django, and Python

I’ve been looking at more frameworks — I know, it’s a problem. Including an in depth look at Joomla and a peek at SolarPHP, including a look at YAWP, Savant, PDO.I’m not going to use Solar, but a day spent looking at it is a day wasted. A quick criticism: It’s too “magical”, requires too much memorization, has tons of errors in it’s documentation.

I wish there was an easy way to submit errata or make changes. The SolarPHP manual is a wiki (which supposedly gives them an excuse to prevent page navigation), but normal users can’t edit it (which is fine), but there should be a workflow to propose changes — that’s a problem with wikis in general, no workflow, but it goes counter to the wiki “philosophy” which is silly.

Solar has a very obtuse system. While someone familiar with Rails-like applications can figure it out (with the help of the documentation and some guesswork — because the documentation includes things like mis-named files that cause opaque error messages. Every error you make will produce an exception with the exact same text:

“Exception encountered in the fetch() method. in Solar.php line 363″

and the stack trace doesn’t even mention your application code at all.

While Rails had an unusual configuration system, it had reasonable defaults, that were fairly easy to learn. Every framework that imitates Rails and adopts convention over configuration has the problem that it’s not Rails. The further you stray from Rails the more users will be frustrated when it diverges. Corollarily(?), the closer you hew to Rails, the more frustrated you’ll be when it (often unexpectedly — read: undocumentedly) diverges. I don’t want to learn a new “convention over configuration” for every framework.

SolarPHP’s ORM sucks, too. While I didn’t look into enough to say how much it sucks, it’s a rule that anything that copies hibernate sucks, and suffers the same problem as Rails imitators. The more it diverges from Hibernate’s syntax (even if it’s an improvement), the worse it is. And I’ve a hunch that Solar’s ORM isn’t nearly powerful or flexible enough to justify it. I categorically refuse to learn another ORM syntax.

SolarPHP’s templating is unimpressive, it’s MVC file layout is uninspired (and non-standard), it’s authentication is inadequate, it’s localization is simplistic (but works — on the otherhand, how hard is a string substitution?) In short, it didn’t really bring anything that appealed to me, while giving enough frustrations (mainly with the documentation) and annoyances (mainly because of differences with my knowledge of existing frameworks) to put me off.

I can’t believe it, but it seems to not even have a scaffolding script to help you learn (or not need to learn) it’s file layout structure.

Anyway, I’ve distilled some requirements out of the experience. I think a good framework should:

  1. Get out of the way
  2. Be obvious about what it’s doing
  3. Leverage existing knowledge and techniques
  4. Help write better code by:
    1. Making code simpler, less verbose
    2. Help me stay organized
    3. Help me avoid shooting myself in the foot
  5. Allow hacks when needed

I’ll post more on that later.

I’m not trying to hate on SolarPHP. It’s bearing the brunt of my accumulated dissatisfaction with frameworks. I mentioned before that the only ones that have really excited me (since Rails) are Wicket and CodeIgniter. The former runs on Java, which in my book makes it only suitable for intranets or large (read: managed by a full time sysadmin) sites. The latter is too simplistic by just a little bit. It could actually benefit from a bit more magic, and things like authentication and ajax left as an exercise for the user. Which is fine, especially if you were going to build everything from scratch (or from Zend / eZ) yourself anyway.

One framework I haven’t looked at, but (to spread the hate around) I’m sure I wouldn’t like is Django. That’s just from the general impression I’ve gotten by crowdsurfing the intermemeoshere. I’m sure Lawrence, Kansas is a nice town and all, but building a CMS for a small community newspaper isn’t exactly brain surgery. Chicago crime is way cool, but that’s just showing off Google web services with a neat idea. It could’ve been done in VBscript and it would have been just as cool.

My impression is that Django consists of the core team marketing it plus a bunch of people who thing Python is cooler than Ruby. The one thing python has over ruby is a halfway decent Apache module. And I do mean halfway. At that end of the spectrum (near the very bottom) speed, is not a deciding factor. I think python’s syntax is silly, though like almost everyone else, I thought tuples as a type were cool. You can get the practical benefits of that in PHP nowadays with list() — which I think is prettier syntax.

To all the PHP haters out there whose only arguments are “it’s possible to write code that has a SQL injection vulnerabily” and “I don’t like (or understand) some of the function names”, I don’t want to hear it. PHP isn’t the best language in the world, get over it. But it’s got a better syntax (and object model) than Python.

Do you know what “def” means? It means “define function”. Defining a function with part of the word “define” is empirically uglier than with the word “function” and less fun than abbreviating it “fun.” Mandatory underscores, bad keywords and yes that horrible white space delimiter are enough to make me not want to use python.

If you don’t like PHP function names, it’s probably because you never learned C. Hint: the 3 or so example functions that hurt people’s tender sensibilities in every “I hate PHP” rant are direct transcriptions of functions used to write your favorite scripting language, which was written in C and I almost guarantee it has the dreaded strpos(), strlen(), et al, buried in it’s source code.

The fact that every rant on PHP contains complaints about the same functions as a usenet post from 1997 shows that they don’t really have their own opinion on it.

And don’t get me started on “self”. Python’s bolted on objects may be better than Perl’s but that’s not saying anything at all. One thing that appealed to me about Python was that you could take more control of your request lifecyle — what I really liked about mod_perl, but it turns out that building it all into index.php is both faster and more stable.

But I’ll probably check out Django, and learn from it too. I’m sure I’ll find things I like and things I hate, and things I hadn’t thought of. Do I think it’ll have that “killer feature” that will make me want to switch? No, but I’ll still enjoy it. I enjoy Python, I just don’t like it’s syntax. And all other things being equal (which they practically are), I’d rather use PHP’s syntax, and put up with it’s shortcomings.

I did like my time studying SolarPHP, even if I don’t want to use it. I learned some interesting things with dependency injection in PHP that I could never pull off myself. And as much as I maligned it’s ORM, I could never build something like it — and even if I could, I’m sure someone would hate my API.

Whew! This turned out to be quite a rant, and with any luck, I’ll draw vultures, both for and against. Which is something I definitely don’t want. I’m well aware that your average script kiddie can kick techno-sand in my puny face, and the only reason I feel comfortable ranting is because I’m sure no one more nerd-savvy than my mom will read this post. But with the way search engines work these days, my little flicker of ill-informed self-commentary will probably draw moths and rangers with buckets of techno-water to douse my fragile ego.

Maybe I should get some adwords up before the bonfire starts.

I’ll post what I really wanted to, next.

Visitor tracking image

I wrote a script in PHP to track visitors to my blog. This is just a proof of concept. It generates an image using the GD graphics library that displays text showing the visitor info and saves to a database. It uses PDO to save the hits to a MySQL database. The contents of the image are unimportant, as is the storage method.

Anyway, here’s the image:

You can view the results here.

And here’s the code:

<?php
# image hit counter

ob_start();

// db config info
//…
// get visitor info from server
$ip_address = $_SERVER['REMOTE_ADDR'];
$referer = $_SERVER['HTTP_REFERER'];
$time_of_visit = time(); // not used — call NOW() in db insert because it’s already in MYSQL TIMESTAMP format

if (trim($referer) == “”)
{
$referer = “unknown”;
}

// use database to store visitor info
try
{
$pdo = new PDO(‘mysql:host=’ . $dbhost . ‘;dbname=’ . $dbname, $dbuser, $dbpass);

// add visitor info to database
$stmt = $pdo->prepare(“INSERT INTO visitors (ip_address, time_of_visit, referer) VALUES (:ip_address, NOW(), :referer)”);
$stmt->bindParam(“:ip_address”, $ip_address);
$stmt->bindParam(“:referer”, $referer);
$stmt->execute();

// get visitor number from database
$query = $pdo->prepare(“SELECT count(*) FROM visitors”);
$query->execute();
$count = $query->fetchColumn(0);
}
catch (Exception $e)
{
echo $e->getMessage();
exit (“db error, unable to create image”);
}

// create string with visitor info
$count_string = “You are visitor # ” . $count . “\r\n”;
$ip_string = “Your IP address is: ” . $ip_address . “\r\n”;
$referer_string = “You came from : ” . $referer . “\r\n”;

$visitor_info = $count_string . $ip_string . $referer_string;

// generate and dispay image to be included for tracking purposes
$img = imagecreate(1000, 300);
$bgcolor = imagecolorallocate($img, 255, 255, 255);
$fgcolor = imagecolorallocate($img, 0, 0, 0);

$r = imagestring($img, 5, 0, 0, $visitor_info, $fgcolor);
if ($img !== false)
{
header(“Content-type: image/jpeg”);
imagejpeg($img);
}
else
{
exit (“error creating image”);
}

ob_flush();
?>

I had 2 issues.

One is with GD createimagefromtext() — how can I create multiline text images? adding newline (\n) doesn’t work.

The other is with PDO — are you serious that there is on way to output the text of a prepared statement before (or after) executing for debugging purposes. I tried $stmt->debugDumpParams() but that just crashed my server.

Reconciling MVC with web pages

I’m trying to look at the way I write software simply — and trying in the same process to avoid rewriting infrastructure software (i.e., frameworks) from scratch.

So I know that MVC is a good pattern, and I know that DAO is a good pattern, and I know using a Domain Model/Business Objects is a good thing. But using all three of these systems, and combining caching, templating, and object-relational mapping is not simple. In fact, I can’t think of a single system I like to to use to do it.

My post yesterday about my enthusiasm for CodeIgniter in it’s simplicity showed that. It misses a few things I’m used to, but I’m willing to forgo that to get back to the joy of simplicity.

One constant disconnect I always run up against is how to reconcile MVC with web based template display. The obvious way is to put the MVC behind the page display, and you can see the subsuming of action based frameworks (like Struts, Webwork) to GUI component based frameworks (like Tapestry, Wicket, JSF, GWT, Echo2) as a symptom of that.

Actually, I think partially it’s emblematic that display logic is at least as complex as business logic in most cases. I don’t really understand the hiding of request/response that some like Echo aim for. There can’t be that many unemployed Swing programmers wanting to write JFrames, JPanels, and JButtons but refusing to think that the drawing might be done on a different computer. Surely anyone who could hand-code with a Swing layout manager can figure out HTML tables and CSS.

I believe HTML is the reason everyone creates web apps. After all, in 1996 applets could communicate over the internet, and they weren’t too slow, even then. Two things killed applets. First was the lack of (compatible) JVM deployments, but if anything, Microsofts 1.1 JVM was at least as close to Sun’s 1.4 JVM as IE has ever been to Netscape/Mozilla/Firefox and their various Javascript/DOM implementations. AJAX is way more complex (and slow) and yet it’s all the rage. Second is that layout in markup is so much easier and expressive than markup in code.

If compatibility were the real issue, I’d rather code with AWT and sockets over even the wildly divergent Mozilla DHTML platform. That’s why some people talk about flash or sliverlite or whatever. But c’mon, people that want to use flash just want to use flash designer, because it makes animation easier. It’s only recently that tools for building JSF GUIs or Instantiations’ cool GWT designer have come along. But the complexity makes even veteran EJB developers cringe.

So given that (in my mind, at least) HTML layout is a benefit to GUI design (at least until a better markup that renders natively, not XFORMS or XUL or XAML) how do we reconcile MVC with web development?

I had a minor epiphany recently using CodeIgnitor, which has a very weak framework MVC, particular M. But because it’s so lightweight, it’s up to you how much you want to take or leave. I’d go so far as to say CodeIgniter is really a URL mapper tied to a semi-ActiveRecord DB tool tied together with a bunch of suggestions and conventions. (I actually really like their ActiveRecord design, but can’t really speak for the implementation yet, having not looked inside or tested it under load or in production.)

Since the model is only a suggestion, and really, the view doesn’t even work with the model, it works with a multidimensional array–which is the actual model, it started me thinking. That’s the benefit (or curse) of simplicity.

I’ve been wanting to divorce business objects from the web layer and from the persistence layer. A recent article on theserverside.com had a limited concensus that the view should be tied to the web framework. There was a disconnect about how to display the view. Another article by Tony Marston about PHP data object, arguing that business objects should be tied to database tables (which the popularity of ActiveRecord implemations bears out.)

I’m aware that the two references in the above paragraph aren’t complete sentences.

The key problem I have is how to map the business objects to the persistence layer *and* the presentation layer. Tony Marston argues that you shouldn’t decouple, because you’re essentially duplicating data. I agree with this. Mapping is a waste of time and adds complexity. But it increases testability and helps scalability.

A cache is essentially a duplication of data, and no one argues that caches are a bad practice, and that hooks into the cache from the business object rather than direct DB integration are a necessary complexity. Lately caching has been pushed downward (when in truth, if you pay for a good DB, it has pretty good caching built in.) That’s really the #1 reason people like hibernate. It’s not because they think HQL is better than SQL.

I remember a good article on O’Reilly about a toy store from back in 1999, building a cache with a mod_perl cluster. It’s a great article, and one that convinced me that Apache + mod_perl can make a great appserver. If only it wasn’t for perl. I used to hope for a mod_php or mod_python that had some of that capability.

CodeIgniter and most templating systems want you to slurp up all your data into the template and display it. I agree with this. The value of separating layout design is too great, and as I said before, the major appeal of web development. The truth is, there wasn’t much thought to layout (except in games, which rolled their own everything) before web apps. At least not beyond horizontal alignment and resizing.

I want my MVC components to be testable. In fact, I think I actually want to think of MVC the way it used to be thought of. Not as smalltalk components, but as components with 3 parts. Not as Sun’s Model2 design of a framework split in three ways: display, request/response, and data. I want my business objects to be MVC.

Then I realized: the page is a business object. It’s the one users interact with most. It’s probably the most complex business object (except maybe a fancy transaction — thinking of transactions as objects might be a fruitful pursuit.) Maybe this is something everyone else already knew, and I’m just a slow thinker. But a lot of early frameworks that thought of a page in an object oriented way (thinking again of perl and things like HTML::Template) got it wrong trying to build an OOP hierarchy out of HTML tags. But it’s the tags that make HTML appealing, remember? How can we treat the page as an object then.

It’d be nice if we could think in terms of components. And if designers could build page “parts” in a specialized tool. I remember being excited by Tapestry the idea, but being confused trying to learn it. I’m interested in Wicket now, but until I’m back in an enterprise environment don’t want to deploy on Java, no matter how nice it is to develop in. If deployment weren’t an issue, Rails would be much more popular.

I also remember being excited about portals, but disgruntled that they didn’t offer anything except a login and a complex second servlet (portlet) layer.

One reason people keep going back to simple page-based systems like PHP is that they allow page control and you can just include a section. Remember SSI (server side includes) — people want to do that. And people want to have a page template.

Yesterday, I argued that people use a CMS like Joomla or Drupal because it offers a page template, not for it’s content management. But how do you use MVC with that? There are various hacks, and Joomla now has MVC (sort of) for writing components. But I don’t want to write a Joomla component. I want to write a business object. And I want to display it on a page. Not inside a CMS. I want data stored in my DB, not content. I want my content to be versioned.

So I’m suggesting that you write your business objects as business objects. Using MVC. Like you would if it was smalltalk, but without the annoying and useless smalltalk execution environment. And not as something like Naked Objects, though that’s a cool concept.

Create a model — you know, the data model for your object. And create a controller — you know, the thing that controls your model. And create your view — you know, a representation of the model. And maybe they’re the same class. But that’s an implementation deal.

Where the confusion comes in is thinking of the controller as the page controller. But it’s not the controller, it’s a controller. The controller of the page. And they think of the view as the page view. But it’s not the view, it’s a view. The view of the page.

And implement your page view as HTML markup. GUI layout designers since at least VB 5 have specified the GUI in a layout file. HTML is the layout file for a web page. It also happens to be the transport format that remote clients know how to render.

While a business object has a view, it isn’t normally exercised over the web. It’s exercised in the context of a request. A request – response cycle can be thought of as a transaction.

Take the idea of a shopping cart.

It has a controller for the following actions:

  • add item
  • remove item
  • list items
  • get item details
  • calculate quantity of items
  • calculate total price of items
  • expire cart

It has a model:

  • item list
  • perhaps quantity and price are attributes, and not only calculations
  • cart owner
  • cart created on
  • cart lifespan

One nice thing here is it manages it’s own session state, which can be decoupled from a HTTP session, a User session, or even an Order session.

It can have a test view, which returns simple data, or a web view, or mutliple web views. Or a web component can implement a view and interact directly with the cart via it’s controller. Finally, getters and setters will have a point.

cart.getItems() will have an implementation. And it will be testable. And you won’t need a big testing framework to test your big web framework. Of course, you will still need to do integration tests.

Have a page component that knows how to render a cart model. Or have a cart web_view that renders an HTML page component. Let it talk to the cart via the cart’s controller. The page has a template and a page model. The page model includes a copy of the cart model, and maybe a reference to the cart id (of the business object, not the database table row) for callbacks.

This has gotten confusing and too tangential. The main idea is that the page is a business object, just like the cart. The implementation detail of whether the page knows how to render the cart or the cart knows how to render html is still unresolved.

Carnival in Ecuador

This week is Carnival.  And here that means water ballons.  Actually, they’ve been celebrating practically since New Years.  Kelsey got hit by a water balloon from a fast moving car walking home the first week of January.  Today she “paid it forward” when she pegged a guy who was climbing on the back of his car for some unknown reason, with a water balloon from a fast moving car.  He flipped her off.

A couple weeks ago, my dad also got hit while we were taking a walk on Sunday afternoon.  Okay, we were coming back from Canibales with some rotisserie chicken. Oh yeah, my parents came to visit us in Ecuador.  We were going to go to Machu Picchu, but didn’t bother.  It was good.  Kelsey mentioned it.  Anyway, while he was in Tia, the same car came around again, actually a pickup with little girls 10-12 in the back.  They threw one at me and missed.  They threw another and I caught it.  I returned fire and avenged my dad.

Today is the first real day of Carnival, though all weekend was a bit of a warm up.  It rained yesterday evening and all night and was cold and cloudy this morning.  We went over to Roseros at 10, and proceeded to fill bags of water balloons.  Roseros had prepared a barbecue, and we went over to a park by the river.  After stopping at Abuelita’s and picking her up (and Roderigo lobbing a few) we caravanned to the park — with Kelsey pegging the guy on the way.

Waterfights, barbecue, and Uno in a tent with a light rain ensued.  Oh yeah, and there was an awesome zip line, about 75′ long.  It was a great gauntlet to run while balloons or spray foam was launched at you.   It took some work to get the charcoal working and tent set up.  We refilled a bunch of balloons from the dirty river with a squirt bottle and returned to Rosero’s house and proceeded to ambush the volunteers who came out to greet them.  I believe Jenna and Sara were the first targets.

Me and Kelsey took to the sidelines to fill balloons and egg them on.  I armed the maid, and anyone else who passed by.  Sammy refused to take a bomba. Eventually I had to go out join the fray.  Roderigo had the hose.  Lindsey had a pitcher and balloons from Kelsey from the balcony.  Ishi had spray foam.  I lured as many people into the battle as possible, getting Tanya and Whitney and Sarah soaked.  I took the hose and got Sammy, who actually seemed a good sport.  When Lorena or Abuela leaned too far out over the balcony I threatened them with a light spray.

Eventually everyone but Kelsey was soaked.  Two girls dragged Lorena out to be hosed down. I went inside to give Kelsey a wet hug and then created a diversion so she could slip out the back door unscathed.  The walk home was nervous for her, (I was looking for more trouble), but thanks to her menacing demeaner, nobody got us.  We armed some men in the street however.

Tomorrow will be the real deal, but I don’t know if we’ll go out.  I didn’t get any work done today.

And Josh is having a girl. Which means I can still have the first Evans boy.

Me on Marc Fleury on Sun purchase of MySQL

The last post was supposed to be this one, but I got distracted on how I found it. Needless to say, I’ll probably be haunting marcf.blogspot.com more, because he has some interesting commentary, as does Mark Shuttleworth of Thawte and Ubuntu.

Unlike Marc Andressen, who, while once genius, has become a trivial marketing guru and vaccuous political dilettante. Which I admit I’d probably become if I got rich too. Although, if Ning were better, judging by the postings on Guru.com, he’d be rich. Maybe its because Dolphin is eating his lunch. But if I had $100 (the typical asking rate on Guru for a MySpace or Facebook clone) for everyone who wants to build a social network site, I’d be pretty rich too.

I’m risking getting completely off track again, so here’s what I said about the purchase of MySQL:

Reward buyout.

Sun has already made a fortune off of MySQL. So has Oracle, so have Microsoft, Redhat, IBM, and Cisco.

Sun isn’t really trying to make money off of MySQL, they’re trying to make money off of the *next* MySQL. I don’t know what that is. But it will be open source, and it will increase productivity immensely. It will, as Bob Young says “grow the pie.”

Before MySQL there were two types of databases, Oracle and Access. Oracle was really good and Access had a lot of users. MySQL currently has *way* more users than Access did when MySQL came on the scene, and MySQL now is probably a better database than Oracle was then.

That’s not saying MySQL is so great, but that technology has come a long way. Did Oracle in 1995 have some features that MySQL doesn’t? Sure.

Whether you’re using Postgres, SQLite, Oracle, Microsoft SQL Server, HSQLD, Firebird, Derby, or whatever, you’re benefiting from the popularity of MySQL. If you’re still using Progress, dBase, or Sybase, maybe not.

My point is that MySQL did for databases what Netscape did for the internet, what Apache did for web servers, what Star Office did for alternate word processors, what Sendmail did for email servers, and what JBoss did for J2EE.

In the startup investment averse climate these days, acquisition is the way the market rewards innovation. You of all people should be aware of that, Marc. But perhaps you’re a little too close.

Despite the real value that JBoss brings to Redhat, (and perhaps MySQL will bring to Sun) the biggest reason for its acquisition is making you rich.

Because when the next Marc Fleury comes along with a silly idea to quit his job and move into his in-laws’ garage for a year to work on an idea he has for some open source application that will vastly increase the market size of technology X, the RedHats and Suns (and Ciscos and Dells) of the world want him to succeed. Or at least believe he’s got a shot.

Redhat itself was probably the biggest reward acquisition of all time. Only it was an IPO climate then. People wanted to reward Bob Young, and Alan Cox, and Linus Torvards, Tim O’reilly, and many open source folks they knew (or hoped) were in on the IPO.

That’s not to say the market always does what it wants or is always rational. Not everyone with a great (and successful) idea is always rewarded. Eric Allman, by all rights, should be almost as rich as Marc Andressen. While I doubt he’s doing too badly, I’d say email was as at least as big of a productivity gain as the browser. Maybe its because sendmail wasn’t as revolutionary as Netscape, or because it was open source, or because he had more modest ambitions, or greater risk aversion.

While I worry about JBoss “stagnating” at Redhat or MySQL “floundering” at Sun or Tangosol getting “buried” at Oracle, I’m not too worried. Because these products have already made huge productivity gains, and even if they died instantly on acquisition, they’ve already done the damage of 1) releasing their ideas and 2) showing other bright young entrepeneurs it can be done.

If only my in-laws had a garage.

Of course I’m spending 6 months off in Ecuador, but I haven’t made nearly the progress I’d like, due to lack of focus and perhaps biting off more than I can chew. I think QA Site is the way to go and CuencaTravel (somewhat of a social network site) is a good product to test it with.

I’m lacking in some areas of expertise, such as email server administration, graphic design, and sales.

Me on Marc Fleury on Mark Shuttleworth on the economy (and fed rate cuts)

I enjoyed reading Marc’s comments on Mark Shuttleworth’s blog post about the fed cuts.

It’s exciting to see such economic sense from successful open source celebrities. It’s as if actors making political proclamations could comment intelligently on the Federalist Papers and their relevance today. But of course, the difference is that Marc and Mark are real life millionaire entrepreneurs and Martin Sheen only plays the president on TV. I won’t comment on real politicians, because most of them, like most millionaires, got there the really hard way (for most of us.)

Of course, I couldn’t help myself and added my comments under marcf’s blog. My prediction, in brief: stagnant housing, stagnant dollar, low liquidity, long recession, high inflation, worse news almost everywhere outside the US. I wouldn’t be surprised to see dollar/euro near parity in the next two years, but a worse economy in the US than western Europe for the average joe, who will be paying off a mortgage he can’t afford that his European counterpart won’t have.

Eventually once debts are repaid, in part thanks to inflation, slow equity buildup will make the US economy stronger. Especially US financial institutions will benefit once people can start reinvesting in stocks and real estate (which has practically become a stock, with all the realty investment companies) thanks to the bailout, the inflation writeoff, and the lack of government management that European and Asian banks have.

I’m not sure how England will fare, considering they’re (as usual) split between the US- and Euro- centric spheres. The pound will probably tank, but that might actually help investment there. Alternately, the pound stays strong and third world investments shift to London, as they’ve been doing recently. But I think British banks are on shakier ground. RBS after the acquisitions is strapped, HSBC has way more exposure than Citi to subprimes, and Northern Rock is a scary foreshadow of many others, the surface of which, no one wants to scratch too deeply.

Like the “corporate corruption” scandals of a few years ago, where Tyco was the last political scapegoat taken down, and then Democrats realized that their big corporate donors were just as vulnerable to “accounting irregularities” as Republicans.

I think banks are treading on eggshells, and no one wants to start the domino chain. That applies both to the US and England, but I think moreso in England. Especially thanks to it being a small island and having more investment overseas, particularly in emerging markets. Maybe the diversification will help it though.

Okay here’s my (slightly edited) Marc’s blog. Blogs could really use some improvement. And I hate pingbacks, trackbacks, besides not knowing how to do them. Cut and paste is my thing:


Inflation has been the endgame strategy since LTCM. Inflation was to finance the war on terror, (if you didn’t see it that’s because you didn’t look at housing or oil prices — or other “volatiles” like food that were dropped from the CPI long ago) and inflation will bail out the lenders and the housing speculators.

And there were a lot of secretaries and soccer moms speculating. I happen to know a physician’s assistant who quit her job, dropped out of nursing school, and lived the high life off of the gift of one rental from her parents, became a realtor, increased her holdings to three rentals and a place in a good school district for her and her newlywed husband. I feel sorry for her now.

It’s people like her that the government are going to bail out, because they want her vote.

And it’s people like me who didn’t get into the housing market in 2004 because it looked risky, watched it inflate beyond our ability to enter by 2006, enduring told-you-sos while we watched the purchasing power of our savings reduce by half, relished our “you were rights” in 2007, and now feel an ominous sinking knowing that the masses of people who bought at 25% above value and expected another 25% return, won’t be disappointed, and it’ll be the lunch money, retirement money, and savings of the rest of us that will have to pay for it.

The price of housing won’t go down, and the value of the dollar won’t go up.

Of course, this is all just guessing by some kid in his metaphorical parents’ garage, and I don’t pretend to understand the “dismal science” better than anyone else, but I think Mark is closer to the truth than Marc. That’s all I’m trying to say.

If I’m right on all accounts, as I expect to be –doesn’t everyone– I still doubt anyone will pay attention. Which is as it should be. I’d probably be wrong the next time.

I’m going to be a dad

Yesterday Lois sent an instant message to Kelsey saying “Are you pregnant?” Kelsey replied “maybe” and promptly went to take a home pregnancy test that she’d brought with her to Ecuador from a $1 store in Auburn. It gave what Kelsey said was “a faint line” which she said means “yes.” Since the illustration on the box was anything but faint, I had my doubts.

Every month or so Kelsey convinces herself that she’s pregnant. I get hopeful but try not to lead her on too much. This month, same thing, and I figured, we’ll know for sure (or pretty likely) in a week or so. Kelsey doesn’t like waiting. If you have a secret, even if it’s a gift for her, she’d rather spoil it than wait for Christmas.

So today we went to a medical clinic, the same one that gave me diarrhea pills last year when we spent Christmas in Cuenca, and she took a blood test. It cost $7 and took twenty minutes. They stuck a needle in her and drew her blood. We went to the English bookstore. I bought Marcus Aurelius’ Meditations. Kelsey had hot flashes. We walked the streets in trepidation; Carnival starts next week and there were water balloons about. We came back and the doctor lady handed Kelsey an envelope. Inside was a sealed home pregnancy test and a slip of paper that read:

LABORATORIO CLINICO
MICROBIOLOGIA – INMUNOLOGIA – HOROMONAS
Dra. Catalina Vera de Chacón

Cuenca, 2 de Febrero de 2008
NOMBRE DEL PACIENTE: Sra. Kelsey Evans
MEDICO SOLICITANTE:


INMUNOLOGIA

Prueba de Embarazo

BHCG: POSITIVO

 

CuencaTravel.com

I’ve started working on CuencaTravel.com, and am creating a qa-site for it. CuencaTravel will be the initial QA Site test platform. I expect to have more features and work on the dashboard. I’ve already got a basic time line widget. I also started a blog for Cuenca Travel, borrowing the theme and image from this one. I might change this sometime soon. I’m also using wordpress-mu for the cuencatravel.qa-site.com/blogs — I’ll use it as kind a project management, qa status, planning blog. I’ll be putting down design, development, and configuration details in that blog (and on the trac wiki), so it may not stay public. I’ll post progress and announcements on cuencatravel.wordpress.com and a daily work summary on cuencatravelqa-site.com/blogs/aaron.

Basically, I’m a bit spread out and just need to have discipline and organization on my blogs, wikis, pm tools, documentation, etc. Of course what I really need is the perfect tool, and this development should help drive requirements.