I had a quick but interesting interview with Nate Abele and Garrett Woodworth from the Lithium project. Take a listen over at webdevradio. Subscribe to the podcast series via iTunes or RSS to hear more in the future.
The independent web developer blog
April 28th, 2010 by mgkimsal 2 comments »I’m launching a new blog over at http://www.webdevindie.com to focus more of my ‘web development’ topics over there. I’ll likely still post some here, but if you want more of my web-related stuff, I suggest that you subscribe to webdevindie.com. Yes, it’s the same theme as this blog for now, so it might be slightly confusing at first, but it is different. :)
Zend Framework starter kit interest?
March 30th, 2010 by mgkimsal 16 comments »I’m putting together a basic Zend Framework starter kit. Right now I’ve got basic Doctrine 1.2 integration with predefined directories for schema, models, etc. Also an init process to allow for automatic injection of specified objects on to front controllers (think $this->session available in your controllers, for example).
Any interest in getting a copy of this? What other things would you like to see preconfigured or preintegrated in a starter kit?
Palm on the ropes? Here’s what they can do to survive (and thrive)
March 19th, 2010 by mgkimsal 1 comment »
Just read some bad news for Palm over here.
The company shipped a total of 960,000 smartphones during the third quarter ended February 26, but sell-through — which reflects how many devices actually end up in consumers’ hands — totaled 408,000 units, lagging the 600,000 units or more many analysts expected.
Sounds bad. While I don’t have a Palm Pre myself (lack of GSM made me go to iPhone), I’ve loved the concept of webOS, and the freedom to write native apps using JavaScript. The problem as I see it is an ever-increasing one in the smartphone market – the carriers themselves.
Many people flocked to the iPhone *despite* the lock-in to AT&T. Personally, I’ve not found AT&T service to be any *worse* than Sprint or earlier Cingular or other companies I’ve been with in the past. They all are crappy in their own way, all have draconian lock-in contracts, and overcharge for basic services. That’s a given, and with only a handful of competitors, and service available in many regional areas by only one or two companies, there’s no effective competition.
BUT.. that’s not the reason for the post. I first owned a Palm VII back in 1999, and have been a moderate Palm user or follower on and off for years since then. Others in my family were avid Palm users for many years, and I’ve known other people who loved theirs. The internet functionality over the past several years was an added bonus, but people loved the functionality of the Palm first and foremost. So Palm, here’s what you can do to start making money.
Sell and Palm Pre Plus or Palm Pixi Plus *without phone functionality*. Sell it for $199, push your app store and start making money from that. For some reason you felt it was OK to launch the original Pixi *without wifi* but included phone support – you got it backwards. I’ve been dying to get a Palm Pre, but I’m not giving up my current phone. Sorry. I want the device for a PDA and developer device, not for a phone. Keep wifi in it and you’ve got a killer device to rival the iPod touch. Get out of your relationships with the carrier, get in to bed with Skype and start pushing the limits on wifi-enabled apps.
I’d get people low-end Pixis as gifts if it didn’t require getting people to sign up for phone service as well just to get a ‘discount’ on the outrageous ‘retail’ prices of several hundred dollars.
Yes, location-based stuff is pretty slick, and ‘go anywhere’ web service without wifi is nice too, but they’re not requirements. iPod Touch sales should show that. Get on the ball – get this device in to as many people’s hands as possible. You can’t go head to head with the iPhone – it just ain’t happening. But it also doesn’t need to happen.
- Cut the price to $99 for a Pixi Plus
- quit the phone service requirement
- get back to making killer PDAs first and foremost, with the ability to distribute via a first rate appstore experience.
In the short term this will get the inventory off the books, help spur demand for new inventory, and get more devices in people’s hands and get the experiencing a revitalized ‘new’ Palm. The phone stuff can come later. Or wifi-service will become more ubiquitous and Palm can take advantage of full-on VOIP without carriers demanding they disable this functionality consumers demand.
Get with it Palm. I’d like to see you around for a lot longer.
Thoughts on successful companies and their leaders
March 14th, 2010 by mgkimsal No comments »This is a response to a recent TechCrunch post on leadership qualities and my own experiences working with startups and small businesses.
Well, less of a response, and more just some observations. I’m no expert on the specific of the people involved – Jobs, Grove and Campbell – but I think they all shared something with respect to the businesses they founded or ran. The businesses were, in large part, self-directed. Obviously no company exists on its own. However, the companies and people listed here were more interested in creating a new area or field than in trying to build something which would put them in a position of reliance on other parties.
The obvious example here is the recent iPhone App Store changes. Being an iPhone developer means you’re totally reliant on Apple’s good graces to get your app to the public. You have no other way to reach that audience. Similar issues arise with the Kindle. However, I got to thinking about this not because of the Kindle or iPhone, but another startup I’m working with here in the area.
Actually, they’re not a startup as such – they’ve been around for almost a decade. But… they’re trying to break in to a new area, and that new area is largely controlled by hardware and network vendors (trying to not say too much here). We’ve looked at several players in this field (there aren’t *that* many, to be honest) and because there’s a limited number and the cost to entry is pretty high, we’re basically stuck with trying to choose the least bad option.
These guys have been able to succeed for the past several years by employing a very DIY approach to their business, which doesn’t have any reliance on hardware or existing networks or vendors or anything else – it’s completely self-built, and they’ve been pretty successful. Successful enough for me to spend time working with them. But this reliance on an external vendor hasn’t sit well with me thus far, and seeing this TechCrunch article really drove that home, by comparing the current situation with that of the examples in the article.
To a degree, yes, Apple has always been reliant on existing hardware manufacturers to be able to supply chips and such, but even from an early stage (or because it was done at an early stage), Apple’s managed to be able to call the shots. Few companies can do that, especially when coming in to an established market.
The article talks about being able to inspire and articulate a vision and execute. The guys I’ve been talking to have a vision, have been able to articulate it, and have a track record of execution. However, their execution has up to this point been on the ‘self-reliant’ side of things – rolling up the sleeves and getting things done. That approach doesn’t work when others are suddenly in charge and control access to the ultimate customer (again, see iPhone apps). All the ‘work’ in the world won’t get your iPhone app installed on someone’s iPhone if Apple doesn’t agree. Likewise, we’re in a similar situation and having to agree to play by the rules of others to use their network. I think the vision of this organization is solid, but I do question the reliance aspect – it just goes against my independent nature I guess.
Your thoughts?
UserFly Usability Checking via Screen Recording
March 9th, 2010 by mgkimsal 3 comments »
I recently found UserFly.com, a service which will record videos of the visitors to your site, allowing you to play them back and watch where users go (and how they move their mouse around on the screen).
I was flabbergasted at how easy this was to use – I tried the free version and had recordings going in 2 minutes. It was that easy. It has to be seen to be believed.
As a techie, I’d tried to build something similar 4 years ago. Owing to my own limitations, as well as the much more fractured browser landscape 4 years ago, I never got this working to the level that I liked. Having attempted just a small portion of what userfly is doing, I can truly appreciate the engineering that went in to this service.
If you’re interested in testing it out, please follow my referral link (yes, it’s an affiliate link). They offer a free version to get going, and paid versions start at $25/month $10/month. The $50/month plan would be what I’d recommend if you have any ecommerce or security, as it will handle SSL pages. But the free or $25/month packages might be fine for basic sites.
Zend Framework and Doctrine integration – autoloading of doctrine models
March 3rd, 2010 by mgkimsal 19 comments »I’m reinvestigating Doctrine and Zend Framework for a new project. I’d dismissed them last year as not meeting my needs, but am giving it another go this year. I have to say I’ve got mixed impressions at best, as there seems to be little in the way of documentation with real use cases.
I would have expected there to be some explicit reference to how to set this up, but the best I can find are general examples where the Doctrine models directories are appended to the include_path in a ZF index file. Shouldn’t there be a way to explicitly have the Doctrine subsystem react to requests for models as well?
I was expecting the Doctrine::autoload to look for the classes on the ‘models path’ set via Doctrine::setModelsDirectory() call, but it doesn’t.
Hrm… after more investigation, it seems there’s a ‘modelsAutoload’ method on the Doctrine_core which will automatically look at the models_path set via setModelsDirectory(). Almost what I need. Except…(!)
There’s no support for multiple directories. The standard Doctrine generation process creates a ‘BaseFoo’ object in a ‘generated’ directory below where the standard ‘Foo’ file is written. The ‘Foo’ file subclasses the BaseFoo, but there’s no support to have it autoloaded.
In my ‘_initDoctrine()’ in Bootstrap, I’ve got
$autoloader = Zend_Loader_Autoloader::getInstance(); $autoloader->pushAutoloader(array('Doctrine','modelsAutoload'));
I know what to do here! I thought to myself. I’ll subclass Doctrine’s Core (which is what’s referenced by the ‘Doctrine’ above) and have that be the autoloader to use. I’ll modify the modelsAutoload() method to deal with an array of $_modelsDirectory entries, and attempt to load from each of them. Except…(!)
$_modelsDirectory is *private*. I can’t modify it in a subclass, nor is there a get() method on the Core class to access it. There’s a *set* method (setModelsDirectory()) but no get! So, I’m rather forced to go through modifying the Doctrine Core to get the behaviour I want, in the simplest form. I’ve been trying to followup on some other postings about getting autoload to work with Doctrine-generated models, but they seem incomplete (to me anyway) or suggest to modify how Doctrine generates its class names (doesn’t seem simple or straightforward to me at all). Having Doctrine core be able to deal with an array of paths to check for models would be the simplest, especially given that Doctrine *forces* this issue on you by generating classes in different directories by default.
Crux of the code is:
Doctrine/Core.php line 1142
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | if(is_array(self::$_modelsDirectory)) { foreach(self::$_modelsDirectory as $dir) { $class = $dir . DIRECTORY_SEPARATOR . str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php'; if (file_exists($class)) { require $class; return true; } } } else { $class = self::$_modelsDirectory . DIRECTORY_SEPARATOR . str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php'; if (file_exists($class)) { require $class; return true; } } |
I don’t see Doctrine code on github – if it’s there I’ll fork it and create my own patched version for a pull.
So now in my code, I can say
Doctrine::setModelsDirectory(array("/app/doctrine/models/","/app/doctrine/models/generated/"));
FWIW, I can’t find the equivalent code section in Doctrine 2.0, though I suspect this might still be a design issue in 2.0 (would love to be proved wrong on that).
How have *you* dealt with autoloading of Doctrine-generated classes in ZF (or indeed, in general)?
Who I use for domain name registrations
January 21st, 2010 by mgkimsal 2 comments »I get asked this on a fairly regular basis, often by people new to the domain and hosting scene. I’ve got a lot of domains at GoDaddy that I’ve purchased over the years, but for most new domain purchases I’ve found omnis.com, and I’ve been very happy with them so far (just over a year). (yes, that’s an affiliate link, so I’ll make a bit o’ cash if you click that and purchase something from them).
I don’t recommend their hosting plan, nor godaddy’s, nor anyone else’s for that matter. I’ve managed my own dedicated servers for 10 years, and would have a hard time recommending any shared hosting plan for anyone, mostly because of the restrictions of freedoms I’ve found. Many people may not need it, but I do, so I can’t specifically tell you to use omnis.com for domain *hosting*. However, purchasing domains through them and pointing the name servers anywhere else (which they let you do easily) is fine (and what I do). To be fair, I’ve not tried their hosting plan, so I can’t comment on it, which is why I don’t recommend it.
Why do I like omnis? Price. GoDaddy has lower initial pricing, assuming you can find a coupon code (and they’re all over the place if you look for them). This can often get a .com domain name down to $7 from GoDaddy for the initial registration period. Yes, if you buy 5 years up front, you’ll get the $7 price for 5 years. However, most people don’t do that (I don’t – I try too many domain names every year). So, purchasing for one year at GoDaddy is $7 (with coupon) and $8.95 from omnis.com. Almost a $2 difference! However, come renewal time, GoDaddy has steadily gone *up* for me year after year, and omnis.com hasn’t (so far). Renewing that $7 .com for me at GoDaddy jumps to $10.69 plus some ICANN fee. So, for 2 years, I’m at almost $18 with GoDaddy, and pretty much the same at omnis.com. Following year, I’ll be saving money.
Is is worth it to try to save money on a 2-3 year time horizon? Strictly by the numbers, no. However, I’ve felt GoDaddy has become a bait/switch operation with respect to the higher domain name renewal fees. Coupons or special deals might help in some cases, but I’d prefer to give my domain business to someone who doesn’t bait/switch or need to rely on massive promotions. Yes, omnis are smaller, and yes, I might have problems with them at some point, but I haven’t in over a year, I don’t get upsold a huge amount of junk trying to check out, and the support I’ve had for the few questions I’ve sent in has been reasonable (typically answered by a human via email within a few hours max).
So, if you’re looking to help support a smaller domain registrar with decent service and decent prices, give omnis.com a spin.
Magazines targeting JRuby and Jython
January 17th, 2010 by mgkimsal No comments »Are you interested? I’m looking at bringing the same style product that we’ve been delivering to the Groovy community to the JRuby and Jython communities, respectively. If there’s enough interest, we’ll move forward. Care to register interest? Sign up at http://jrubymag.com and/or http://jythonmag.com and let me know what you’d like to see covered.
One sided agreements
January 9th, 2010 by mgkimsal No comments »I signed a business agreement with someone about 2 years ago, and was looking forward to the arrangement being smooth. It hasn’t been so far – the other party simply hasn’t fulfilled their end of the agreement. The more I looked at the original language, I realized it was fairly one-sided (probably typical in this case), and there’s very little the other party can do which would actually terminate the agreement (relative to the restrictions placed on me_).
The other day I had to take one of the few recourses left to me: I had to send a registered letter outlining the agreement violations. The other party now has *30 days* (from receipt of the letter!) to rectify the situation (which really shouldn’t be hard at all). I’m really sad it’s come to this, and would much rather the agreement simply be terminated at this point, but I suspect the letter of the agreement will be fulfilled and I’ll be ‘stuck’ continuing to carry on.
I’ve had another situation a couple years ago where I wasn’t paid. I was sorely tempted to “name and shame” that company I dealt with, but many blog readers here commented that I shouldn’t, as it was ‘unprofessional’ to do so (as if not paying your bills and continually screwing over a string of outside contractors and lying to clients and contractors alike *is* professional somehow). ”Take the high road, don’t name”, etc. I didn’t name names then, but I did file a lawsuit (which 18 months later is still not even on the docket yet!). Someone searching for me could put the 2 together and figure out who the other party is in that case, but I didn’t explicitly name. However, by not naming in that case, I feel like I’ve been complicit in allowing other contractors to potentially get duped by the same operation, and probably get bilked out of tens of thousands of dollars.
In this case, I faced the same question – “name and shame” or “take the high road”. I’ve found out that, again, I’m not the only one who is being treated the same way. From what I can tell, it’s almost as if the other party thinks of the business side of things as something that just happens by accident, instead of something that takes systemic, repeatable operations. However, as frustrated as I’ve been with missed deadlines and ignored emails, I’m not going to name names here either, at least yet. I do know that other people are continuing to be hurt by the lack of professionalism, but from my standpoint, I’ve not gone through the ‘official resolution’ procedure (the only one available to me short of a general lawsuit). So, if the matter is resolved, I may end up saying nothing more on the matter, albeit grudgingly so.
Do you have any horror stories you’d care to share (with or without naming names?)