I ran into an interesting bug this morning in Microsoft Excel for OS X. It appears repeatable. When saving a worksheet to CSV format preparatory to importing the data into a MySQL database, trailing blank fields which should generate commas stop doing so after (in this case at least) 16 records. Thereafter, the three trailing empty fields are ignored. This results in making the data unable to import. Bummer.

I spent a while rummaging around the Web looking for reports of this bug. Nothing. I downloaded the latest OS X Office upgrade (10.1.9) but it is too stupid to know that it should upate my copy (which I successfully upgraded to 10.1.8 some time ago with no hassle), so even if MS fixed this bug, I’ll never know.

Just for grins, I figured I’d open the Excel worksheet in NeoOffice, the OSX equivalent version of OpenOffice. I prefer NeoO and OO to MS anyway and use only the open source product on my Vaio.

Guess what? NeoOffice loaded the file and spit out a perfectly formatted CSV file that imported slickly into MySQL. So I guess NeoOffice is more “compatible” with standard file formats than MS Office, huh?

May 31, 2007 · Posted in Business, Software, Technology  
    

Livescribe popped up on my radar screen this morning. Wow. Way cool. A pen that records audio and synchs it with the ink you’re writing with. The whole thing links up to your PC and uses smart paper technology. Rumor says it’ll be available by fall for about $200. I’m so there.

The company further endeared itself to me with this observation: “Livescribe provides easy web-based development and printing tools for all skill levels, similar to Hyper Card for the Mac. These tools require no programming skills and come with convenient templates to create live maps, games, interactive books or study guides.”

It’s a pen. It’s a recorder. It’s an interface. It’s a platform.

It’s #2 on my must-have list right behind the iPhone.

May 30, 2007 · Posted in Technology  
    

One of the cool things I found rummaging about in the CodeIgniter docs tonight is the ability to use “hooks” to to override core functionality in the system.

This is a very clean way of handling this issue and I’m not sure if other frameworks have any way to do this nearly as simply and directly.

May 28, 2007 · Posted in Web technology  
    

I’ve spent a good bit of time in the last few days evaluating PHP Web application frameworks on behalf of my main client. We’ve finished the first phase of a planned large, long-term project without much thought to architecture (because it was a pilot beta and there was no guarantee it would be continued and because we had no idea where we were going at the start). Now it’s time to introduce a real architecture and growth strategy as well as content management support.

As a Python guy, I’d love to choose a Python framework but the client is unwilling to allow this because of the (correct, I suspect) perception that the universe of PHP programmers is much larger than that of Python coders. So Django and Plone are off the table.

In the world of PHP frameworks, I’ve uncovered and done some broad (but not deep) assessments of the following:

(Read more if you want to read a pretty long article outlining my research and my conclusions.)

There are far more similarities among these tools than there are differences from what I can tell after 20 or so hours of investigation during which I’ve read documentation, looked at sample code, Googled to get an idea of community size, and read blog posts and discussion board conversations about the tools, individually and comparatively.

I knew I wanted a framework that implemented MVC (Model-View-Controller) architecture. That implies object orientation, but it doesn’t demand full OO, which in any case is, from a purist’s perspective, not really implemented in PHP any more than it is in C++. Still, the object overlay is adequate and usable.

At the outset, I only knew about symfony. I dug up the others in the course of my evaluation. All but LAMPShade are open source projects. LAMPShade is a commercial undertaking. (CodeIgniter is free and open source but has a company called EllisLabs behind it and features a great-looking CMS tool called ExpressionEngine that is commercial, though reasonably priced).

Nothing I saw in my initial pass through each of these frameworks made one of them stand out as an obvious winner or loser. It seemed like, as is so often the case with these kinds of technologies, the question of personal taste was an overriding factor and that it would be hard to go completely wrong by choosing any of them. So I distilled out of the discussions and articles some questions that are pertinent to my personal taste when it comes to frameworks. Here are those questions and how I ended up answering each one. (And let me say I am eager for folks who know more about these things than I do to challenge my conclusions.)

How Steep is the Initial Learning Curve?

There seemed to be very little argument here. Ranked in increasing order of complexity, the Open Source products ranked:

  1. Codeigniter
  2. CakePHP
  3. symfony

How Good is Documentation?

Documentation has a great many aspects to it, including:

  • Published (hard or soft) complete manuals or books
  • Searchable online API reference
  • User-generated docs such as code snippets, add-ins, etc.
  • Tutorials (screencasts and written)
  • Sample Sites

In this respect, strangely enough, the newest entrant of the bunch, symfony, scores highest. It has a printed and online full book available. I read six chapters and was pretty impressed with the quality of writing and the coverage. symfony also has a fairly large number of user-contributed plugins and code snippets.

CodeIgniter’s docs are decent but pretty lightweight (just like the framework) and the number of tutorials is pretty limited. In addition the majority of its sample sites (“Projects”) are in non-English languages. Not a knock, but it makes it hard to evaluate what they have and how deep they are.

CakePHP’s documentation is more than adequate and, from the reading I did (six or seven chapters or parts thereof) is quite readable. I loved the API documentation, which not only did a good job of explaining where each object/class fit into the scheme but also identified the line of code on which the object/class definition appears in the CakePHP core source. That feature was missing in the other products’ documentation (or at least wasn’t easy to find).

So I rank the docs as follows, from best to worst (noting that none of them is bad):

  1. symfony
  2. CakePHP
  3. CodeIgniter

(It’s worth noting, too, that you’d probably need fewer docs with CodeIgniter anyway since it is far more lightweight than the others.

How Warm, Welcoming, Helpful & Responsive is the User Community?

I did not join any of the groups. I purused forums and Wikis where they were available, I eavesdropped, I sniffed, and I listened to what people said off-list about the helpfulness of the community to them. My conclusion based on those admittedly limited and unscientific probes ranks these tools from best to worst as follows:

  1. symfony
  2. CodeIgniter
  3. CakePHP

It is perhaps worth noting that I saw a few comments about the relatively unhelpful, RTFM attitude of the CakePHP list and observed some of that myself but I’m not sure the differences between these tools on this point are really all that great in the final analysis. So much of one’s experience with a user community is a function of how one shows up in it.

How Much Code is Automagically Generated?

Stated differently, “How much do I have to know or learn about the framework’s code internals to make my application work?” There are two extremes. At one extreme, the framework auto-generates directory structure and gobs of starting code that give you a big leg up on getting the app working but that later can prove to be a serious obstacle to doing anything outside the box. (This was my experience with Ruby on Rails.) At the other extreme, the framework generates a simple starting point with little or none of its code intertwingled with yours, giving you greater flexibility but perhaps making you work harder to get your app started down the right path.

There’s a lot of debate in this area. My preference, however, is for a framework that leans at least somewhat in the direction of giving me a good start without building a wall I’ll have to climb down the road when I want to do something beyond what the framework (and scaffolding where that’s part of the mix) has envisioned.

My assessment of the frameworks on this issue, from most to least desirable for my purposes turned out to be:

  1. CodeIgniter
  2. CakePHP
  3. symfony

How Complex is the Directory Structure?

This may seem like a replication of the previous point but it’s subtly different, at least in my view. If a framework generated a lot of code and intermixed it with my app code but did so in a way that was clean, elegant and easy to understand, I’d see it as less problematic than one that generated less code but buried it so that simply exploring and understanding it was a major undertaking.

On this basis, I ranked these frameworks as follows:

  1. CodeIgniter
  2. CakePHP
  3. symfony

How Strong and Deep is Template Support?

Interestingly, CodeIgniter includes an extremely lightweight, largely unhelpful templating system and ballyoos the fact that it doesn’t require you to learn a templating language. I don’t consider that a Good Thing; templates make design consistent and easier for folks like myself.

CakePHP, on the other hand, doesn’t include any templating by default at all as far as I can tell. It does, however, have good support for plugging in third-party libraries, presumably including a templating architecture like smarty. But then, presumably, so does CodeIgniter.

Symfony by contrast, includes a full-blown and well-thought-out templating support system.

I rely heavily on templates, particularly in the CMS aspects of my designs. I want users to be able to create new pages from templates which have locked and editable regions defined. It’s not clear to me how hard this will be in CI or in CakePHP.

On this point, then, I’d rank them:

  1. symfony
  2. CakePHP
  3. CodeIgniter

Conclusion

It seems to me that my brief analysis of these three tools has confirmed a long-standing teaching in the world of technology: power is inextricably linked to complexity. The more raw power a framework has — the more it does for you and the more open it is to you manipulating it — the more complex it is. The more complex it is, the steeper the learning curve.

Clearly among these three tools, symfony is the most powerful and complex while CodeIgniter is the most accessible and (apparently at least) less powerful (at least out of the box), while CakePHP is between those extremes, though perhaps closer to symfony than to CodeIgniter.

if I were a first-rate PHP coder, I’d probably be inclined to adopt symfony. But I’m not and I suspect I’d encounter a lot of the same frustration with it that I did with Ruby on Rails when I made a serious run at learning it a year or so ago.

So for me it comes down to a choice between CakePHP and CodeIgniter. As I look back over my ratings above, I conclude:

  • CodeIgniter is less complex than CakePHP
  • CakePHP has somewhat better documentation than CodeIgniter
  • CodeIgniter’s community is slightly more responsive and helpful than CakePHP’s
  • The automatic code produced by CodeIgniter is more easily understandable than that generated by CakePHP
  • CodeIgniter’s file structure/architecture is more straightforward and simpler than CakePHP’s
  • CakePHP’s templating support seems slightly better than CodeIgniter’s, though neither is particularly obviously strong.

On four of six criteria, then, CodeIgniter is superior to CakePHP for my purposes. The facts that:

  1. It has a company behind it (as does symfony)
  2. That company offers a CMS solution that looks good and is quite affordable
  3. Despite its lightweight size, CI comes with a fairly impressive and interesting-sounding set of built-in classes for email, FTP, CAPTCHA and a few other things I know I’ll need.

add to the emerging feeling that I should be leaning toward CodeIgniter.

As I was nearing the end of my evaluation, a strange thing happened. The CodeIgniter Web site went down. In fact, the parent organization’s Web site went out of commission. That didn’t make me feel very good!

My progress toward a final decision is now being held up by codeigniter’s Web site issues, so I’m going to post this tentative conclusion and then focus on CI stuff in subsequent posts. This one’s far too long already!

May 28, 2007 · Posted in Web technology  
    

The Washington Post ran a piece yesterday by Mike Musgrave about a disturbing trend called “email bankruptcy.” People who have allowed so much email to accumulate in their in boxes that they no longer have any hope of reviewing and answering all of them are deciding to cop out.

These folks either delete all the mail in their in box and start over or they announce piously to the world that they are no longer available by email, that they’re dropping out of the most widely used communications medium in the Western world.

I think they’re just rude. Particularly those who are choosing the first route of just deleting all pending email and “starting clean.” There are solutions to this email glut that don’t require a rocket scientist to use.

They remind me of an arrogant jerk from Apple Computer’s developer relations team I saw at a conference many years ago when email was just beginning to emerge into daylight. This guy stood at the podium and held up a thick sheaf of pink phone message slips. “If you want to talk to me,” he said, “don’t call. I don’t return phone calls.” With that, he tossed the pink slips into the air and went on to tout Apple’s then-brand-new idea of using email to communicate with developers.

He got a big laugh. But not from me. I figured I had two or three messages in that stack. Messages about problems that were keeping my company from succeeding in developing new software for Apple’s hardware. Messages that I now knew were being deliberately ignored. How do you suppose that made me feel?

Now guys like venture capitalist Fred Wilson are throwing up their arms and waving a white flag. “I am so far behind on email that I am declaring bankruptcy,” he wrote on his technology blog. “If you’ve sent me an email (and you aren’t my wife, partner or colleague), you might want to send it again. I’m starting over.” Seems rude to me. Also risky. There may be a great VC idea in that slush pile. Fred, I think you just need a better way of dealing with email. And I know what it is.

Email me and I’ll let you in on it. It’s a new technology solution.

I’ll have more thoughts later today.

May 26, 2007 · Posted in Technology, Web technology  
    

Keith Olbermann of MSNBC Countdown tonight spoke for me when he excoriated the Democratic “leadership” for its “bipartisan compromise” that was in truth a bald-faced give-away and cave-in of monumental proportions. As the party gave President Bush everything he demanded as he held his breath and threatened that the troops would suffer before his policy would change, before Halliburton would be required to relinquish one penny of war profiteering, that he be given whatever he wanted, without strings, those leaders failed and betrayed us.

Let’s see who the real Democrats are now. John Edwards has spoken out against this moronic move. I’m confident Dennis Kucinich will be in the forefront. But where are Sens. Hillary Clinton and Barak Obama tonight? They’d better get off the dime and oppose this ludicrous piece of chicanery before the public wakes up and decides to hold them accountable by ending their candidacies now.

May 23, 2007 · Posted in Politics  
    

Thanks to my good friend Tony Seton of QNN, I just finished reading absolutely the best piece on the Barry Bonds phenomenon and its meaning for baseball that I’ve seen.

In an essay for TomDispatch, veteran baseball writer Robert Lipsyte offers reminiscence, insight and thoughtful reflection as he compares and contrasts Mickey Mantle and Bonds in some important and intriguing ways.

At the conclusion of this eminently readable piece, Lipsyte suggests a rule change: any ball hit out of the park is an out. Ban the bomb. Heck of an idea.

I wouldn’t go that far. But here’s a compromise I think might fly. Any ball hit out of the park on the fly is a ground-rule single and all runners advance one base.

I dunno. Seems like it might be worth considering, eh?

May 23, 2007 · Posted in Baseball  
    

As you may notice if you’ve been here before, I’ve changed the default template so the site looks, by default, a good bit different than it did earlier today.

You may or may not be aware of it, but Drupal (which is the software I use here) lets you choose your own template from those made available by the site owner. Assuming you’re registered here, you can go to “My account” and select one of the alternative views if you like.

I’m always interested in your feedback. If you love or hate this new look, let me know!

May 20, 2007 · Posted in Uncategorized  
    

I just spent an hour trying to figure out this basic issue in Adobe (aka Dreamweaver) Contribute. Not only can I not find an answer, but I can’t find a place to ask the freaking question. My impression over the years that Adobe had the poorest and worst-designed online support mechanisms on the planet seems to be bearing up.

I create a new template. I create a page from that template. I upload the new page and the Template folder with the newly created tempalte to the server in the same location as they are in my local copy of the site. So the page is in the publc_html folder of my site and in that same folder is the folder Templates with the newly created template in it. I visit the page in my browser. It is there. The contents appear as expected.

When I open the page in Contribute I get the expected MUI on the repeating object in the template-driven page. But when I click on the “+” to add another instance of the repeatable object, I get a message that says, “You can’t add items to repeating regions because the draft’s parent template is missing or not available to users in your role. Pleae contact the website administrator.” I AM the administrator.

When I look at the site structure in Dreamweaver, the site top level contains no HTML files; they are all in a sub-folder called public_html, which is where I’ve built my site. I’e tried creating the template both at the top level and in the public_html folder but the outcome is always the same.

So two questions if anyone out there has any expertise in this area:

1. What in the world am I doing wrong or not understanding?

Followup. It turns out if I edit the templated file to point to the actual location of the Templates folder on the server, I can get this to work. Of course, I can’t do that edit in DW (because it locks that part of the file from editing even by the owner) but I made the change in BBEdit and then uploaded the file and it worked. Not an ideal solution and not one I can use on a complex site, but perhaps this will find another solution at some point. For now, at least, I can experiment with my real purpose here.

Still Later Update. My son-in-law and sysadmin extraordinare Jeff Soule figured out what was going on. Because this site is working as a virtual server on the hosting side, I needed to set an explicit full path to the default directory of the site before this stuff would work. We did that and now all is in order! So a misunderstanding on my part was at the root of this whole thing.

2. Is there a decent user forum for Dreamweaver/Contribute users/developers that might be a good place to look for help on this kind of thing?

Adobe’s forums apparently cost $25/mo. to join and you can’t even read them without ponying up. Unadulterated crap. Never had that problem when it was Macromedia.

I’ll appreciate any pointers. Otherwise, I’m stuck.

May 18, 2007 · Posted in Web technology  
    

Though client requirements and a re-focusing of energy on Web applications have taken me away from my favorite development environment, Revolution, of late, I try to keep up with what’s going on in that world.

The company’s new newsletter, released today, has a lengthy article by Jacqueline Landman-Gay describing how she converted one of my favorite old HyperCard games to Windows using Revolution.

Cosmic Osmo, a whimsically delightful and eminently playable adventure-style game by the folks who created Myst, will soon be released on Windows via GameTap. Unfortunately, the company apparently does not plan to re-release on the Mac, even though doing so with the same code base would be relatively trivial in Revolution.

Still, a good reminder of the real power of Revolution. I’m sure I’ll be getting back to using it at some point in the future.

May 18, 2007 · Posted in Software, Technology  
    

Next Page »

Bad Behavior has blocked 248 access attempts in the last 7 days.