and looking for work

After a month, I should be in pretty good shape, if I haven’t taken a job already if the pay and position is right.  I think I’d really like to help build a new and growing QA department up.  I don’t really have any management experience, but I’ve found in the last six months that I have a lot of ideas I’d like to put into action, and work on a lightweight but effective and thorough process using open source tools.

It’s a really exciting time for open source QA tools, and while Selenium shows the way technically, its things like FitNesse and the “wiki way” that are really exciting.  Not using wiki’s specifically, but the idea of leveraging hypertext (linking documents) — and the web (server-side applications) to create QA/PM/Development “mashups.”

I know it’s a silly web 2.0 type word, but the idea is great.  Chicago Crime was a perfect illustration for what you can do with online data, AJAX, web services, google maps, and an MVC framework.  It’s the killer app behind Django.

There are some great QA tools out there.  Bugzilla, Jira, Selenium, Watir, FitNesse, Ant, Luntbuild, etc. can all be put together into something more powerful than their parts.  Maybe the tools need re-written, but it’d suck to throw away the years of development, and especially all the experience and data that businesses alread have.

Whether businesses use a “QA site”, something else like it, or implement their own  solution doesn’t really matter.  The time is ripe for tools integration to make QA, Dev, and PM teams more productive, but especially to make the “work” part of their jobs more enjoyable.

That’s where I want to be.  The idea of marketing a QA site (0r PM site) as a product is really just the way to get the idea in the door.

Dev tools seem to be migrating towards IDE plugins (with bastard children like mylyn crossing over to QA and PM) — but I don’t really think developers really love eclipse that much that they would never want to leave it (but there was this think called emacs…)

The PM trend has been to lighten up and use hosted apps like basecamp and be nimble or agile or (if you prefer expensive products) LEAN.  I think PM has gone a little too far, or rather that PM is too much being relegated to the developers or managers.

QA is still a mishmash of tools.  There are a lot of new tools and some old ones that keep getting better.  The real excitement is in the fairly recent tools like Selenium, Fit, WATiR, Canoo, etc. that are now maturing and being accepted — though I worry about people losing interest in them, or not really seeing the potential as they go into maintenance mode like Bugzilla did for a long while.

I want to unlock the potential of these tools (and others) and now that we have the potential with open source, to realize the gains, do our jobs better, and make them less tedious.

Back in the U.S.A.

Up for 20 hours traveling from Quito to Seattle.  Dinner at a Las Marguerita’s Mexican restaurant with Kelsey’s dad and family.  Eden beating on me all through dinner, with my back killing me from traveling and moving and already in bad shape for a week before then.  Picked up Caelin after dinner and then to bed.

Today getting stuff straightened out, sending faxes, re-setting up interviews, and finding out one-shore.com is down (thanks VPSLand.)

But it’s good to be back in the U. S. A. and flush the paper down the toilet.

Now it’s time to focus on finding consulting work:

getting one-shore.com back up
resolving paypal and 1and1 “security” issues
renewing skype-in business number (again, a “security” issue with credit cards)
updating my resume and creating an interactive online resume
brushing up on QA, PM, Dev, SA skills
finishing one-shore.com site redesign
branding and filling out tools wiki
writing tutorials/reviews and putting up test tool demos
looking for putting together QA site as a product and marketing it
looking for consulting gigs and working with recruiters

I’ll have about 2 weeks in Seattle, and then 2 weeks in Montana, visiting my family.  Chris will be coming back from Iraq for a short leave, so most everyone will be getting together.

I’m going home

Today is (probably) the last day I’ll have internet in Ecuador. TV Cable should be coming to get the antenna and modem any time now. So I’ll be incommunicado until Wednesday, when I’ll be back in Seattle.

I don’t know if I’d really call it home, but it’s home for Kelsey. She’s been pretty sick the past month with her pregnancy and has hardly left the house. So she’s bored too. She’ll be glad to see her mom and friends and eat at Chipotle and a dozen other places she’s been craving.

I’m really going to miss Ecuador. We haven’t done as much as we thought, and due to circumstances, CuencaTravel.com has been put on hold, but I learned some good planning and design techniques from it. It’s been a great place to work and think and learn, though I haven’t learned Spanish yet. But I’ve got a pretty good idea for how to develop One Shore and the consulting business.

But going home probably means getting a job. I’ll be available for consulting, including on-site work. So if you’re looking for a tester, web developer, project manager I’m looking for something in the Seattle area, or maybe elsewhere for the right position. I’m open to relocate, since we don’t have anything tying us down besides Kelsey’s family.

Anyway, I think it’s time to go back. We’ll have 7 months till the baby comes. Maybe I’ll find the right boat, too.

Testing tutorials to write

Here are the testing tutorials I’m going to work on:

Selenium
Fit & Fitnesse
Watir
Customizing Bugzilla
Bugzilla features: web services and email_in
TestNG vs. Junit
PHP SimpleTest
Perl Test::Class & WWW::Mechanize
Test Planning, Test Cases & Defects

CMS that use a repository instead of database for content

For instance, this post is to list (and solicit additions) CMSes that use a version control repository (or at least RCS files) instead of a database:

The first one I’ve found is DaizuCMS

Daizu CMS looks to be a one-man project in the early stages.  It doesn’t even have a UI (which may actually be a good thing.)

Does Midgard?

I thought I saw it in a bullet point, but the way it uses the DB for everything else, I’d guess maybe not.  I haven’t had any luck with Midgard.  I was able to compile and install, but it chokes on DB population.  Something about languages.xml and libmidgard.so.9

I’d also like to link from my blog to the tools wiki and issues.

Blogs as bookmark tools

One of the reasons I (and I’m sure others) use a blog is to talk about a product and put a link to it so we can find it again later.  So in affect, I’m using my blog as a bookmark too (with summaries.)  Many popular blogs (like slashdot) are geared towards that.  In fact, that’s the eponymous idea of a “web log” as opposed to a journal or a series of articles (the other purposes for a blog.)  I also tend to use my blog as a task list, idea repository, reviews, and news.

I do use delicious, and my browser’s bookmarks, but they both have flaws.  I work from my blog/wiki/qa-site/etc.  So I want to see the functionality there.

How about this for a practical takeaway (maybe it already exists):

I’d like to have everything I link to in my blog added to my delicious bookmarks (or if not everything, everthing I tag specifically to do that.  There could also be some coordination between blog categories and bookmark tags.

The trouble with ORM frameworks

I won’t go into too much detail here, but learning a new syntax to have less of the expressiveness of SQL isn’t my cup of tea.  Sure you can go down to SQL on them, but why not just include select statements in your HTML template if you get to that.

  • They’re too heavyweight for what they do
  • The syntax is always one off and invariably ugly
    (see this post)
  • Difficult to debug
    (and fills up log files fast, even on warn)
  • caching is better off implemented in a cache
    (caching is the real reason I think people use tools like Hibernate)
  • Business code ends up getting written in the ORM layer
    (again, might as put it in the presentation layer)
    (annotations are code, you just can’t see them and don’t know how they work)

The trouble with Blogs, Wikis, and Forums

There are a lot of great tools out there for blogging, wikis, and forums. Some of them even look nice and are (somewhat) friendly to use. I like wordpress, I like blogger, I like phpBB (except for the appearance), punBB, and others forum tools. I like wikis quite a lot. I’ve tried a lot of them recently.

But they’re all standalone. I got a googlewhack when I typed in “embeddable wiki” (not really, but practically the same.) It was a forum where someone was asking if there was an embeddable wiki. My definitive answer is “I guess not.”

That’s shocking. Does anyone not see the value in being able to create areas of content that are easily editable but are not the whole application?

Similarly, blogs and forums have this same problem. The prevailing philosophy tends to be to make your blog, wiki, or forum your whole site (you can usually make a theme for it) or build your site using an overarching product.

I was actually shocked that CMS apps don’t seem to have the idea of wiki, blog, forum, (and article) at the core.

The one exception is TikiWiki, which is quite cool, except for the code, presentation, and admin interface. It seems to have the right idea of what users want, but I couldn’t get past their admin interface, and didn’t really want to learn yet another templating and component mechanism (which by the way, seems to be done through their admin interface.) And it stores everything in the database! The clincher was that it’s hard to do pretty URLs (their rewrite setup is better than nothing, but not actually pretty) and the wiki editor isn’t actually that nice.

I may still end up using it for One Shore, but I really want the best wiki available, because I spend a lot of time in it.

Pivot seems interesting, in that it has a framework for file based blogging. That’s wordpress’s weakness. I want versioned files, not DB BLOBs.

Pluggable authentication is sometimes doable, but it’s always on some forum where a guy cut and pasted some code to get wiki X to use the same password database as blog Y or forum Z.

Like I said, the good ones are themeable (to a degree) and they have some of their own components, but what about my MVC or CMS components. Or how do I reference a blog post in a CMS?

Theming a blog is usually nicer than theming a CMS, but that might be because it does less. Theming forums is usually pretty limited. And theming a wiki is often a hack.

Most blogs (and some wikis) have comments, but not as fancy as forums. Thats okay, I think comments should be fairly simple.

Blogs, wikis, and forums all have in common that they’re web-editable blocks of text (preferably with limited markup). That means they’re files in my book. That also means that they should be components.

I want to include this valuable content on my site (not as my site). Something as simple as:

blogcomponent.display_post(blog_id, post_id, display_comments=no);

or

blogcomponent.standard_blog_layout(blog_id) or blogcomponent.rss_layout(current_month);

And files that can cross reference each other like this blog post:

[@title = You should see my wiki]
[@date = 20080303 094700 EST]
[@revision = 1.0]

Today I added a bunch of details about [this great tool | wiki:SuperFramework] in the wiki.

[Comments | forum:myblog:200803003-1_comments]

[@display_comments=no]

Of course, display comments should be in a configuration somewhere, and the comments link should probably be auto-generated.

And this should appear inside my site, without having to theme my blog (other than basic layout) or having to specify which menus or other components are displayed. The request would be something like:

http://my-site/blog/you-should-see-my-wiki

To edit or create a blog entry:

http://my-site/blog/new-post
http://my-site/blog/edit?post=20080303-1

The code for the blog page should be something like:

response.layout = site.content_layout #this includes all the menus, components, etc. in a normal content page

if ( request.inActions (“display_blog_post”) )

response.layout.add_component(components.content_component = blog.display_post(id, etc))

Of course this is bad pseudocode and the request processing should be done outside.

Optionally, if permissions allow it, I should be able to go directly to the file, and something like a raw content viewer would do:

fw.getComponentFile(blog_post_id)

and

components = fw.searchComponents(categories={‘blog’, ‘wiki’, ‘forum’}, regex=’/superframework/i’)

Anyway, the point is that I want components to work via code, not an admin interface.  I want all my content to be file  based and versioned, and I want components to access my content, and I want to do it via a MVC framework.  I want (pluggable/interchangable) hooks for things like authentication and persistence and helpers for things like session handling and database connections.  I want themes and layouts to be separate, and again code (file) based, though there’s nothing wrong with having an admin interface for selecting themes and layouts and components, and managing users, and publishing articles and other such workflow, though it’d be nice to have a nice UI for that admin interface.

The trouble with CMS frameworks

My last post was about the trouble with MVC frameworks, in my view, which briefly is:

Multiple action handling
Component/Template processing (related to the above)
Front controller/Back controller, helpers and the associated bloat or complexity and code duplication.

I noted that CMS frameworks attempt to handle some of this, most especially the component/template paradigm — usually by using the response wrapper paradigm.

I have two main issues with CMS frameworks:

  1. Working with them sucks and requires too much relearning and enforces a too rigid development process (see my post about leveraging existing knowledge and techniques.
  2. They usually have a very poor implementation philosophy, and don’t allow much reusability.

While I love looking at new MVC frameworks and learning their philosophy and coding styles, even if I don’t particularly like the framework, I usually walk away learning something (maybe that has to do with their code-centricness), I dread and hate the idea of looking at CMS frameworks.

That’s because it usually involves learning a truly awful administration interface, yet another template language, and possibly even a one off scripting language, and puzzling my way through an obscure (and often undocumented) series of conventions including file naming, manifests, api, and hacks for module building and using.  And they don’t make it easy to learn, because hey- they’ve got this cool, counter-intuitive, complex admin tool (website) that is their pride and joy that you should use instead.  Which works fine, if all you want to do is click “approve” on articles, add a menu or a weather widget on the right (or left!) side of the page, and have comments like slashdot (and a custom logo!)

So almost all CMS based sites end up looking almost exactly the same (depending on the CMS) but hey, you’ve got a lot of widgets you can include.  If your content is your main attraction, that’s probably okay.  You can find a whiz at making templates for your CMS to customize it if you really want.

But I truly do hate all the CMS admin interfaces in the world.  You spend as much time learning them as you do learning to code for an MVC framework.  Someone  said Django has a nice admin interface, but I’m skeptical.  Yes I’m going to look at it (someday.)

So you’ve got a lot of widgets, and you can even learn how to write them yourself, but because most of them were developed without OOP in mind, they’ve got weird, arbitrary rules and conventions that you need to learn to code them and load them.  The registering and loading of CMS components reminds me of the work set up EJBs (but hey, you’ve got a nice admin interface!)   But outside of self-contained widgets, there isn’t much flexibility.  Getting components to talk to one another is usually not worth the effort.

The other problem is the horrible implementation ideas.  I’ve already mentioned the non -OOP design.  You do not want to take a look inside most CMSes.  One of my favorites, TYPO3, is pretty scary.  A CMS is not meant to be tweaked (except through their handy admin interface!)

But my main source of frustration is that they almost universally cram all your content into a database.  That’s bad bad bad.  I do not want to author my site via a textarea (even if it’s TinyMCE) and I don’t want to lay it out via the amazing admin interface!

And I don’t want my templates to be one off monstrosities.  (Using one-off markup and scripting, no doubt.) And chances are that cool widget you want to include does:

printf(“<td border=2><font color=”red”><b>widget content</font></b></td>”);

instead of actually working with your theme.  Which you probably don’t want to touch to customize anyway.

This screams MVC separation.  I want widget content to be the widget.  And I want my controller to specifiy the parameters for the widget.

But how do you do that in the URL when you’ve got multiple widgets?  That harks back to my problem with MVC frameworks.  And you know what?  An admin interface(!) for an MVC framework would be nice.  I shudder to think of it, but the best idea (if not user interface) for that admin interface I saw was ATG Dynamo.

I’d like to leverage the content-centricness (and components) of CMS framworks, but I don’t want to deal with authoring all my content in a textarea and saving it to a database BLOB (and deploying it via their cool admin interface!)   I want to use components, but I want them to be simple STDIN, STDOUT type components.

This is where frameworks like CakePHP fall down I think.  The component development process for Cake is (I admit mostly ignorance) is as convoluted as it is for Drupal.  I think Zend does a better job, but I haven’t really seen a component market for Rails (again, I’m fairly ignorant), apart from things like the AJAX HTML component wrappers.  I think I actually prefer the CMS way of building a template via (bastardized) HTML than the HTML::Template / Struts style that Rails has adopted.

What I really want is a front controller that does a good job of setting up my resources (such as sessions, db handlers, etc.) as plain objects(!) and provides wrappers for things like authentication and action mapping, and then passing it off to my response handler after running my action chain (which uses simple MVC components) which then builds the page accessing the views, selecting the template, theme, passes in pure data to components (which pass back pure data) and uses my content objects — which are versioned files, not database BLOBs, and lays them out according to my specified layout and theme (separate objects) which are probably handled through my nifty admin interface!

It’s okay to generate content via a textarea – like for a wiki or blog  (or even a form) but it should be just as easy to upload manually.  As a matter of fact, that leads me to my next one:

The trouble with Blogs, Wikis, and Forums.

The trouble with MVC frameworks

Here’s the problem I have with so-called Model-View-Controller frameworks like Rails.

They seem geared towards a single application per implementation.

What do you do with a request that wants to work with multiple components? Or perform multiple actions.

Then a REST-style request such as

http://my-site/component/actionX?params=123

falls flat on it’s face, because you’ve either got a bunch of complex logic, or actions loaded as parameters:

http://my-site/component/actionX?X_params=123&doY=true&Y_params=456

You could get it from the session, configuration, or whatever, but then you end up coding in XML or whatever.

if (session.Y=true)
{…}

Or

<component name=X>

<action=”doX”>

<result condition=”success” action=”doY”>

And then you’ve got to worry about templating, localization, etc.

And you still need a front controller to handle things like user authentication, session management, request routing, etc.

You could have a page (request) controller extend a base controller, but it’d be nice to take things like authentication a la cart, and not need to load it on every request. Appservers handle this by loading everything and holding onto it, but this is resource intensive. You think a mod_perl app can get ugly, but pushing everything to tomcat, websphere, or mongrel gets just as ugly, though the separation is sometimes cleaner. FCGI forces you to separate your ruby out, but the temptation with mod_perl to put it all in the front end is dangerous. Or you end up on the other end, like so many java apps, duplicating stuff over and over in multiple layers of abstraction on multiple servers. You could just as easily mod_proxy to your mod_perl appserver just as easily as you mod_jk to tomcat or FCGI to mongrel though.

But back to MVC frameworks. How do you handle multiple action requests without getting ugly? And how do you provide helpers and components and templating without forcing one way to do things?

One answer is CMS frameworks: CMS being short for “admin user interface, layout template, and component library”. And that leads to my next post:

The problem with CMS frameworks.