I own a Blackberry Bold

After deciding that Sony Ericsson had made a terrible misstep with its k850i (poor plasticky construction, shockingly bad ‘touch screen’ buttons, etc) I was in the market for a new phone.

What better time to join the 3G smartphone revolution and finally have mobile internet with full email access? I am a huge Mac fan and have both a desktop and laptop Mac. I own several iPods including a touch. So, the logical thing to do would be to visit my nearest iPhone dealer and sign on the dotted line, right?

Rather surprisingly, that is not what I did. Instead, I went for the Blackberry Bold. Why did this self-proclaimed Mac fanatic purchase a be-suited road warrior’s device of choice?

The main reason was the keyboard, MMS, the ability to cut and paste and Bluetooth. I own an iPod touch and just cannot get on with the little touch-screen keyboard. It’s too fiddly and I spend too much time flicking between alphanumerics and symbols. I can jab a message out one finger at a time but the whole process is so laborious. To go back and edit text is a game of ‘place the cursor’ which gets increasingly frustrating.
The lack of MMS was another downside. I know there are many superior ways to transport information but occasionally I feel the need to ‘text’ a picture to a friends phone. Likewise, Bluetooth on the iPhone is fixed to handle headsets only. There’s no way I could pair that with my TomTom for traffic reports, etc.

The Bold, however, has full bluetooth, full MMS and a natty little keyboard. Despite its tiny size, the buttons are beveled perfectly and you miss-type infrequently after a few days with it. Also, it has a shift key, alt key and numlock allowing full use of the keyboard with minimal faffing around. The screen is very impressive with a great resolution and punchy colours. The device speakers do fairly well and it comes with a really nice pair of headphones.

Behind the exceptionally shiny exterior and new fancy icon set, designed to pull in a few would-be iPhone purchasers, beats the heart of a RIM device with all its corporate overtones. The iPhone might wear its baseball cap at a jaunty angle and its converse sneakers without laces but the Bold is buttoned up tightly. The interface lacks the sparkle of an Apple device with most menus being devoid of anything as presumptuous as colors or images preferring to rely on a simple black font on a plain white background.
There are no beveled buttons or rounded backgrounds here. Nothing so fancy to distract you while composing an email or sending a text message. But that’s OK with me.

The built in web browser does a perfectly fine job. This is, of course, an area where the iPhone excels and I’d be lying if I said the Bold does it just as well. For one, you miss the full-size screen (although not that much) and the raw speed of mobile Safari. When at home and using a wi-fi connection the browser is pretty fast. Out and about shows respectable 3G speeds. It’s not exactly instant but neither is it painstakingly slow. It’s still sensible to opt for mobile versions of sites where possible to save on bandwidth if nothing else. The mobile BBC news site opens in about a second or so whereas loading the Play.com website (110k+) can take around 15 seconds before it’s stopped loading and processing although you can interact with the page while it loads images and processes javascript.
The trackball does a fine job of pushing the cursor around the screen and the zoom button intelligently resizes to fit the content block you clicked much like the iPhone / Touch does.

There is a built in Blackberry messenger which offers a fairly simple way to IM other Blackberry owners. You can also download MSN, AIM and ICQ for it. All of which function well. There are many other apps and games to download although they are, on average, more expensive than iPhone apps.

Little touches impress; the nice graduated fade-out of the back-lit keyboard and trackball is a personal favourite. The built in light sensor to adjust the screen brightness is a nice little feature. The ‘bed side’ mode which turns the device into a little clock which progressively dims and cancels all alert tones amuses. “Holster” mode is another favourite. The device comes with a sleeve (aka holster) which not only protects the unit but also trigges ‘In Holster’ mode via a strategically placed magnet. This allows you to set up different ring tones and volumes. For example, you could choose to turn off all AIM alerts when the phone is ‘out of holster’ and turn them on to ‘loud’ when its ‘in holster’.

The Bold’s bread and butter is email and organization, all of which it does very well. Contacts, calendar, tasks, etc are all handled well. Email is ‘pushed’ to your device as soon as its received by your mail server which is great. Often, I hear my Blackberry ‘ping’ before my Mac’s Mail app does.

Synchronizing with my Mac is simple thanks to Missing Sync. It allows me to sync up my contacts and calendar as well as email, if desired and iTunes.

Overall, I’m impressed. It is a serious rival to the iPhone and one which you should consider before making Steve Jobs a little richer.

It has a mixed reaction to the folk at IPS. Josh Harris and Blake are Blackberry die-hards. Charles went out and got one to replace his iPhone only to take it back three hours later because it wasn’t “fun enough”. Lindy dropped his iPhone like a leprous lap dog for a Bold and hasn’t looked back.

My apologies for the overly verbose title of this blog entry. But it’s true. Embracing PHP 5 will make you a better programmer. At least, it has for me.

This minor epiphany revealed itself during yesterday’s Captcha Crisis over at IPS HeadQuarters. In a nut shell, some naughty spammer defeated our CAPTCHA and registered thousands of member accounts across hundreds of IP.Boards.

We had to react fast and release an update that not only fixes our CAPTCHA but also integrated reCAPTCHA which Brandon had already done for IP.Board 3.0.0.

Now, I’ve had my head stuck in IP.Board 3.0.0 since February. We made the decision to use PHP 5 so that we can take advantage of all the new “stuff” such as improved XML handling, public/private/protected methods and properties and magic methods to name a few. I started from scratch and wrote a brand new framework from the ground up using several PHP 5 tricks along the way. In short, it’s the classic MCV pattern using static utility classes and a singleton registery. I’ve blogged about it here although that’s a touch out-of-date but still fairly representative of the new framework.

So. With many customers asking us for a fix, the pressure was on. Josh, Brandon and I down-tooled and went to work on IP.Board 2.3.6. And what a minor shock that was! After nearly 8 months of using the new framework, it seemed backward to use $this->ipsclass for everything. Worse, I was limited to using PHP 4. Worse still was that all the captcha calls were de-centralized. Ouch.

Captcha code was copied through many files. This is a natural progression for stable code that gets developed over time. You start off with the captcha in one place. You then want to add it elsewhere, so you copy the code and paste it in place. Rinse and repeat. You do this because there is a real fear of changing too much code for minor releases. Even though you know it’s bad.

I decided to write a micro-framework to handle all captcha challenges; to centralize it into one public facing class which calls on little plug-in classes which provide the functionality. Performing this routine task is when it I discovered just how much better PHP 5 is.

Without the ability to set methods and properties to private, the code seemed harder to departmentalize. Without magic methods to offload method requests, I had to make do with pointless functions to do the same. Without the ability to chain functions together, I had to fudge something that does the same job. Any desire to write nice and tight code goes out of the window with PHP 4. It doesn’t try very hard to do things properly, so you don’t.

Once the mini-framework was complete, I set about updating IP.Board 3.0.0 to use the same methods. Thankfully, we had already decentralized CAPTCHA creation to a single class. The ability to drop in new plugins and have new CAPTCHA methods seemed useful, so I re-wrote the framework for PHP 5 and it was much more pleasurable experience!

To compare, here’s the mini-framework in PHP 4:

/**
	* Constructor bah to PHP 4
	*
	* @param	object		IPSClass object
	* @param	string		Captcha plug-in to use
	*/
	function class_captcha( $ipsclass, $plugin )
	{
		$this->ipsclass =& $ipsclass;
		$plugin         = $this->ipsclass->txt_alphanumerical_clean( $plugin );
		
		if ( ! file_exists( KERNEL_PATH . 'class_captcha_plugin/' . $plugin . '.php' ) )
		{
			$plugin = 'default';
		}
		
		require_once( KERNEL_PATH . 'class_captcha_plugin/' . $plugin . '.php' );
		$this->_plugInClass = new captchaPlugIn( $ipsclass );
	}
	
	/**
	* Returns template bit
	*
	* @return string	HTML Template bit
	*/
	function getTemplate()
	{
		return $this->_plugInClass->getTemplate();
	}

	/**
	* Validate challenge
	*
	* @return	boolean
	* @since	1.0
	*/

	function validate()
	{
		return $this->_plugInClass->validate();
	}

	/**
	* Fetch Plug In Class Handle
	*
	* If you need it...
	*/
	function fetchPlugInClassHandle()
	{
		return $this->_plugInClass;
	}

And here’s the same functionality, but in PHP 5:

/**
	* Constructor
	*/
	function __construct( ipsRegistry $registry )
	{
		$this->registry = $registry;
		$this->DB       = $this->registry->DB();
		$this->settings = $this->registry->settings();
		$this->request  = $this->registry->request();
		$this->lang     = $this->registry->getClass('class_localization');
		$this->member   = $this->registry->member();
		
		$plugin = $this->settings['bot_antispam_type'];
		
		if ( ! file_exists( IPS_KERNEL_PATH . 'classCaptchaPlugin/' . $plugin . '.php' ) )
		{
			$plugin = 'default';
		}
	
		require_once( IPS_KERNEL_PATH . 'classCaptchaPlugin/' . $plugin . '.php' );
		$this->_plugInClass = new captchaPlugIn( $registry );
	}
	
	/**
	* Magic Call method
	*
	* @param	string	Method Name
	* @param	mixed	Method arguments
	* @return   mixed
	*/
	public function __call( $method, $arguments )
	{
		if ( method_exists( $this->_plugInClass, $method ) )
		{
			return $this->_plugInClass->$method( $arguments );
		}
		else
		{
			trigger_error( $method . " does not exist", E_USER_ERROR );
		}
	}
	
	/**
	* Magic __get method
	*
	* @access	public
	* @param	mixed
	* @return	mixed
	*/
	public function __get( $name )
	{
		if ( property_exists( $this->_plugInClass, $name ) )
		{
			return $this->_plugInClass->$name;
		}
		else
		{
			trigger_error( $name . " does not exist", E_USER_ERROR );
		}
	}

Now, isn’t that much nicer!

Take advantage of all PHP 5 offers and your code will improve. Just looking at the difference between IP.Board 2.3’s and IP.Board 3.0.0 proves that PHP 5 has helped me become a much better programmer.

Social Networking And Forums

I’ve decided to come, blinking and yawning, out of blogging semi-retirement today for a very special reason. I’ve had my head buried in IP.Board 3.0.0 for months now and I’ve had little time to look at much else. Let alone talk at length about it. But today, that changed.

Before I begin. I must make it quite clear that I’m removing my “IPS, Inc.” hat for this blog entry. I’m not writing as the developer of IP.Board. I’m writing this blog entry as a guy who’s been churning out forum software for ten years.

To re-iterate: What follows does not represent the viewpoint of Invision Power Services, or the viewpoint of the lead Developer of IP.Board. It is purely a personal opinion. Personal. Not professional. Glad we got that settled.

I debated writing this blog entry using vague terms and beautiful metaphors, but I really don’t have the time so you’ll have to do with what follows:

There seems to be a growing trend for forum software developers to try and cram in “social networking” tools. Specially vBulletin as per a recent announcement. In my opinion, this is taking forum development in the wrong direction.

It’s a bit first base to look at Facebook and think “Wow, that would be awesome to have that on my forum”. And it would indeed be awesome to have that on your forum. But it’s never going to happen. And this is the point I think that these forum developers have missed entirely.

Facebook is a huge success because it’s a single website community. All Facebook users connect via one URL and that is the critical difference.

Forums are like little islands of content. Simply adding half-baked”networking” tools does not allow these islands to connect. In fact, with whom are you networking with on a forum? Other members? Isn’t that what topics, posts and private messages are for? I don’t see any value in allowing members to create Social Groups within that islander community. What purpose does it serve? It just fractures the community into smaller pieces. This is anti-social networking

I, contrary to belief, have friends. Some of whom I only converse with online. I enjoy nothing more than inventing hilarious status updates and uploading photos to my Facebook profile knowing that everyone I’m “networked” with can see them and reply to them.

I also belong to several forums. Now, I can go to Forum X and upload a few photos but only the members from Forum X can see them. This means I have to repeat the process for every community I belong to if I want all of my forum friends to see them. That is why it is stupid to invest any more time on these tools.

I bet you’re probably thinking something like “Well, hold on Matt. Doesn’t IP.Board have some social networking tools, like Blog and Gallery? What about the friends list and updated profile view in IP.Board 2.2?”.

Yes. It is true that we were the first board to sell blog and gallery add-ons. But they were never an attempt to introduce real social networking. There is definitely value in having galleries and blogs within an walled community and that is how the products have been designed; to allow user’s to create and manage their own photo galleries that are relevant to that community.

The only way you can get away with using the term “social networking” is if all IP.Boards were networked allowing you to share content across multiple sites. Now that would be awesome.

Our main focus for IP.Board 3.0.0 hasn’t been to stuff it full of hastily thought out, zeitgeist inspired, additions. It has been to rewrite the code-base to make use of PHP 5. To improve code re-use to cut down on bugs. To create a stable framework. To re-write the interface to make it more appealing and user-friendly. To cement our feature set by making small but important changes.

In short, to make using forums better. That is where our time and energies have been invested and I think it’s a good investment for our future.

That is, of course, just my opinion. It’s winter and I’m cold. Bring on the flames!

If you were a fly on the wall in the US office, you would have witnessed the following:

svnX deleting two days worth of my work (classPost.php) with a single miss-click…
FileSalvage finding classPost.php enabling me to restore it…
Chicken and egg scenarios in ipsRegistry.php finally fixed. We hope…
Tweaking the IP.Board 3 template tag format to make it a little more universal…
Excitement over Rikki’s IP.Board 3 designs…
XSLT discussion… Shame not every PHP installation has the extension enabled…
Excitement over Rikki’s javascript…
Enjoying a lively debate in the customer only forum…

bipolar treatments
acai pills
zinc acne
aciphex drug
prescription diet pills
actonel medicine
actos plus
aleve tablets
buy allegra d
alli supplement
buy altace
antibiotic online
symptoms of alzheimer’s
arimidex
ashwagandha extract
astelin online
atacand for
atarax mg
augmentin generic
avandia drug
avapro medication
avodart side effects
bactrim side effects
benadryl coupons
benicar side effects
biaxin mg
information on buspar
cardizem purchase
celebrex
celadrin drug
cephalexin pill
viagra versus cialis
cipro price
cla diet supplement
buy clarinex
buy claritin wholesale
clomid information
clonidine medication
colchicine gout
coreg cr
coumadin information
cozaar dosage
creatine glutamine
crestor generic
antidepressant
cytotec abortion
depakote information
diclofenac price
differin acne treatment
buy diflucan
diovan generic
doxycycline what is
effects of effexor
purchase flagyl
flomax
glucophage 500mg
hair loss
prevent a hangover
where to buy hoodia
keppra generic
lamictal side effects
lamisil price
lasix pill
cheap levaquin
price levitra
generic lexapro
lipitor
lisinopril htcz
melatonin drug
metformin 500mg
methotrexate side effects
between micardis
mobic online
motrin pills
msm supplement
anxiety neurontin
nexium medicine
nizoral
nolvadex acne
omnicef antibiotic
paxil xr
penis extender
phentermine pill
phosphatidylserine side effects
plan b online
cheapest plavix
pravachol 20mg
prednisone side effect
premarin cream
prevacid
prometrium 100mg
cheap propecia
provera pill
prozac information
reglan 5 mg
alzheimers
buy rimonabant online
medication risperdal
rogaine
seroquel generic
asthma children
order skelaxin
stop smoking
strattera 60mg information
stress relief
buy synthroid online
tetracycline medication
topamax for weight loss
toprol xl side effects
toradol
tramadol hci
trazodone antidepressant
tricor medicine
oxcarbazepine
ultracet side effects
valtrex
cheapest viagra
voltaren cream
vytorin withdrawal
weight loss
wellbutrin withdrawal
yohimbe herb
cost of zantac

does zestoretic
zithromax dosage
zoloft information
discount zovirax
zyban smoking
zyprexa 10mg tablet
claritin zyrtec
zyvox 600 mg

About Me

Me
I'm a web developer (PHP / MySQL / DOM) based in the UK. I am the co-founder and C.S.A of Invision Power Services, Inc.

Last.fm Chart

XBox Live

Spam Monitor