3rd Party Comment System Roundup

We've all seen it. The classic tutorial on [insert popular web framework here] that has us building a blogging system in twenty minutes or less. It's actually getting kind of old and I'm growing sick of seeing what I'm able to create with only platform x,y and z. I'm more interested in how I can use a web framework that doesn't hold my hand by providing a bunch of "one size fits all" defaults. I like flexibility and choice. I like it when the web framework I'm using allows me to mix and match third party systems easily. One third party web framework component that is becoming more popular is commenting systems. Let's take a brief look at three of the most popular systems to see what each offers us.

Intense Debate

I first experienced using intense debate when reading a couple blog posts on John W. Longs wise heart design. Created by automattic of wordpress fame, Intense Debate (ID) is a hosted commenting system that utilizes some sexy javascript and social network integration to allow you to add comments to pretty much any page on the Internet. My experience with the sign up process for intense debate was actually pretty frustrating as the log in system didn't seem to recognize my OpenID and you can't create an account for the purposes of installation with anything except OpenID or their hand rolled registration.

I was expecting to be able to sign up using any of the social networks they allow you to sign into their commenting system with. Room for improvement for sure but at least it doesn't affect the actual commenting sign system sign in. On the plus side, once you do get an account created setup is pretty painless and involves pasting some simple javascript into the page that you want to add comments to.

Sample Code

How about the user experience when commenting on a site? This is where I really appreciate the power of third party commenting systems, with the value added by extra features I didn't have to code. Things like email notifications when someone replies to a thread, sign in using any of the social networks I'm a part of (ID supports Facebook, Twitter, and Open ID at the time of writing), automated threading, profile linking, upvote/downvote, comment history, and integration with popular blogging platforms like wordpress, blogger (hint hint Posterous, it would be nice if you added this!). 

I was also pleasantly surprised that a tweet about a bug in the email notification system yielded a really fast response from their technical support team. Did I mention it's free?

JS-Kit Echo

I haven't used JS-Kit (JSK) on any live blogs but my good buddy Nathan Heagy let me know of it's existence a few months ago and I was intrigued to see what it might offer. Some differences from other systems is that JSK allows you to publish comments from a larger variety of places and broadcast those comments out to more than just the web page the comment thread is embedded on (ie: google friend, yahoo friends and FriendFeed in addition to the regular social networks). JS-Kit also has image uploading, YouTube video embedding, a basic comment formatting interface and lots more. These features are nice, but I don't think they add as much value and here's the kicker: JS-Kit isn't free. They have a 30 day free trial available but after that pricing starts at $12/year but is based on the amount of traffic your site gets.
The code seems easy enough to understand:

Sample Code

JS-Kit is ok but Intense Debate being free and providing essentially the same core features without all the "bells and whistles" appeals to me much more. YMMV ;)

Disqus

The veteran in hosted commenting systems, Disqus has been around for a lot longer than either Intense Debate or JS-Kit and it shows. Disqus offers the most in terms of supported platforms for connecting to and rebroadcasting to as well as the media features that JSK offers (video and image publishing). Setup is slightly more involved; if you want to add things like Facebook Connect and Akismet (for spam protection) you need to provide API keys. Again the code is very easy to inject into any page, static or dynamic.

Sample Code

Disqus also gives you the power to control the look and feel of the commenting interface right inside their control panel. This is a pretty nice feature for people who aren't so technical that they want to hack away at the CSS manually. The fact that right out of the gate Disqus is free and offers just as much power as JS-Kit and Intense Debate makes it a pretty attractive option.

Conclusion

These are just a few of the options out there if you want to implement a commenting system and don't want to write it yourself. I hope you learned something reading this (I sure did writing it). I made sure to research all the facts as best I could before writing but in case I missed anything please feel free to let me know in the .... commenting system Posterous has built in :]

Filed under  //

Comments [3]

3 Characteristics of Good Programmers

A wise man once told me that the best way to get ahead in life is to learn lessons from the experiences and failures of others. That man was my dad. He didn't share often with me when I was growing up but when he did I listened carefully (for the most part..) because what he had to say carried the weight and experience of someone who had experienced far more in life than I had. Programming is a lot like learning this way. There are people and companies who have tried and failed, sometimes miserably, at coming up with solutions to problems. When compared to other disciplines, I suspect there are more failures in programming than there are successes. This puts us in a unique position as developers because it offers us a distinct advantage over other industries; we have more examples of what not to do ... if we choose to seek them out.

Passion

I love programming. It's the only job I've had where I feel energized by solving problems. Sometimes my solutions suck but I think that's ok because I'm willing to admit it and strive to improve wherever possible. This is what I believe constitutes passion as a programmer. Passion is different than zealotry. A passionate programmer seeks out solutions using the best tools and technologies he knows at the time with the willingness to admit that any solution at any given time is never perfect; it's merely the best at that moment in time. Zealots spend their time evangelizing solutions based on hype or buzz.

Passionate programmers use logic, prototypes and test cases to prove that what they think works will work. Zealots are always working hard to implement "the next big thing" in the hopes of scoring a knockout; they're like the blackjack player who constantly changes up his strategy in an attempt to influence the outcome of the game. Passionate programmers realize that perfection is unattainable but they still strive to attain it with care.

Perfection

It's been said before, "if we could only use solution [x] problem [y] would go away completely", "things will be all better if we just do this", "this is exactly what we need, let's implement it now!" I know that these things get said because I used to say them (and probably still do from time to time; stop me if you hear me). The problem with these "silver bullet" solutions is that they don't exist. The "one size fits all" mentality is the sign of an immature developer. Perfection is dangerous, however the pursuit of perfection can be an incredible motivator if it is tempered with pragmatism. Knowing when to implement a solution that is good enough for the task at hand avoids unnecessary refactoring and saves time.

Ask your business analyst or company owner what they think about perfection and the response will likely include the word "risk". Far too often the technical is all we think about. Our job as passionate programmers is to communicate early and often with our business owners to understand the business goals of any potential solution. By considering business goals we mitigate against the risk of building only the perfect technical solution.

Perseverance

I'm not an english major but I think that Shakespeare has some good things to say about perseverance.

"To be, or not to be: that is the question:
Whether 'tis nobler in the mind to suffer
The slings and arrows of outrageous fortune,
Or to take arms against a sea of troubles,
And by opposing end them?"
-- Hamlet

The answer to the question has to be: to be! Giving up is not an option! Passionate programmers arm themselves with all of the tools and knowledge they have in order to face problems. They also surround themselves with like minded people and thrive on failure. Failure affords us the chance to persevere and refine our process until we reach a solution that is "good enough".

"And thus the native hue of resolution
Is sicklied o'er with the pale cast of thought,
And enterprises of great pith and moment
With this regard their currents turn awry,
And lose the name of action."
-- Hamlet

Have you resolved in the past to persevere through difficult problems as a programmer only to find that you get trapped in over thinking how you're going to solve them? Startups with great ideas fail so often because of this. Passionate programmers are persistent in identifying this shift in focus that leads to a cyclical pursuit of perfection which steer's companies off course.

What type of programmer are you? that is the question.

Filed under  //

Comments [17]

Prototyping step 2: hallway tested to discover flaws. (10 minutes is all it took). Then refine paper prototype.

via tweetie

Filed under  //

Comments [0]

Prototyping adding some links to a profile. Stage 1: paper

via tweetie

Filed under  //

Comments [0]

3 Things I learned at Barcamp Saskatoon, 2009

I attended Bar Camp Saskatoon today and while I wasn't able to stay for the entire series of presentations what I did manage to see was great. I presented on SASS, Compass and CSS Frameworks. My presentation didn't go exactly as I'd planned but I learned things from that experience and from other peoples presentations.

1. Your presentation doesn't have to be long to be effective.

Nate Heagy's presentation on JavaScript was perfect, IMHO. It was about 15 minutes of airtime that offered about another 10 to 15 minutes of discussion. The time slot allotment is just about an hour (including time for questions) but I felt like given the open format of Bar Camp less talk and more group discussion works really well. Also, kudos to Nate for imbuing his presentation with a healthy dose of humour in addition to the excellent information. Engaging++

2. If you do live coding, be uber prepared for failure ... and recover gracefully if possible.

After last years presentation on using Yahoo Pipes for one of our corporate website projects I thought it might be nice to do some actual live coding for a bar camp presentation. Admittedly I had no idea how this would go over given the skill level of attendees, technical capabilities of the presentation environment, scope of my presentation and a whole bunch of other variables I hummed and haah'd over. My goal was to take a web page design from zilch to completion using the techniques I'd learned in with SASS and Compass while providing some tips / insight into tricks I've integrated into my development process along the way. It turned out to be more of a brief feature demonstration of SASS, some extended use of Firebug as an inspection tool, and some examples of what I feel is wrong with the way CSS frameworks are used these days. I think I could have condensed it to be shorter with less live coding and focused on the idea I opened with, that CSS Frameworks go against the very nature of what CSS was provided to do, but SASS and Compass fix this by allowing you to continue to use the frameworks without presentational class names.

I made a few flubs and things didn't work out exactly how I thought, but the experience of presenting in front of a large group of people is very valuable and the more I do it the more I learn what works and what doesn't. (If you're interested in the very disorganized collection of assets I produced for the talk they are available here). If I could retool it I think I'd go back and stick to my script more (I generated a series of notes that I kind of "forgot" to use during the presentation -- nerves and all that), condense it significantly and offer more time for discussion.

3. Saskatoon has a vibrant, growing tech-community. This is awesome.

I've lived in Saskatoon since 1999. In the 10 years I've been here I have to say I don't think I've ever been as excited about living somewhere as I am right now (and I've lived coast to coast, north to south within Canada). There are so many people here with similar interests and it's great to see technology enthusiasts out at these events. It promotes the development of Saskatoon as even more of a western tech-mecca than people already perceive. It's great that people like Ginger Koolick and Ryan Lejbak have taken the initiative to develop this sort of community (and my apologies if I missed your name and you were a key part of the involvement of Bar Camp Saskatoon) and companies like zuPoint2YasTech (and more) are willing to spend time and effort sponsoring the events. (Wanted: VendAsta as a sponsor for next year!)

I'm stoked to connect more with people in the tech-community within Saskatoon and continue to learn from interesting people. Can't wait until Bar Camp Saskatoon 2010 :D

Filed under  //

Comments [2]

VendAsta, A Year in Review

It was almost a year ago that I posted on my experiences as a new employee at VendAsta Technologies, one of the newest technology companies in Saskatoon. I think it's a good idea to have a blog to look back on, it's a really good indication of the accomplishments you've made and gives you the ability to reflect on what your mindset was and how it's changed since then. In re-reading my blog post about work bliss, I've come to some conclusions about my experiences in the past year and decided it would be a good idea to reflect on my experiences with the company in that time and some of the struggles and accomplishments I've worked through.

Rose Colored Glasses

There's a certain glow about a person who's just been hired at a new workplace. It's the kind of thing that sometimes makes people see things the way they want to see them, instead of the way they really are. The first thing I think about when I re-read my post was "Geez, I sure went into this job with rose colored glasses on". I should clarify the preceding statement though; I don't feel that my impressions of the company then were wrong. In fact, having worked here for nearly a year I think I'd be accurate in still saying it's a great place to work that provides ample opportunity for self expression and improvement. I think the error of my ways in donning rose colored glasses in my outlook to the new job was really one of setting myself up for disappointment. It's almost impossible for anyone or anything to be perfect, and companies are no exception. I think initially I may have set my expectations a little too high regarding the company, corporate environment and sometimes the people I worked with. When you do this you create an environment that's setup to disappoint you. I'm not saying we should be pessimists as I think an optimistic outlook is important to the health and well being of employees, but it's easy to become disappointed (and sometimes even hurt) when you place things up on a pedestal expecting perfection.

VendAsta is still a great place to work, filled with ultra-talented individuals. I think in a year of working here I've just learned to not put people and the company in a place in my mind that's set to inevitably disappoint me. Or, in a manner of speaking, I've taken off the rose colored glasses and started looking at things through lenses of realism ;)

Struggles

There have been a number of things I've struggled with from a professional point of view in my year at VendAsta. I think examining ones weak-points is a beneficial exercise because it helps us to identify them in the future and come up with strategies for avoiding their pitfalls. Lack of confidence is a huge hurdle that I've had to overcome in my time here; a hurdle that I feel, for the most part, I've cleared. Perhaps it's just human nature to be intimidated when starting a new position and coming out of (relative) inexperience. If I look back at what I've accomplished even in my time before working at VendAsta I start to feel more confident; I think my problem initially was that I was too quick to compare my experiences to those of the people around me. This is dangerous because it can create a perceived disparity between what you've accomplished and the relative value of what you see other people have accomplished. It's easy to get into the comparison game and start to feel a lack of confidence because you inflate the value of other peoples accomplishments next to your own. I've learned to put aside direct comparisons with the accomplishments of others and, instead, started to focus on comparing my own accomplishments a year ago versus what I've accomplished now.

It's sometimes easy to get discouraged that despite your passion and desire to change processes you aren't ultimately having a positive effect on improving them. I have felt this way often in the past year and, at times, given one of two possible responses: apathy or determination. It's much easier to become apathetic when you feel like the things you're suggesting are falling on deaf ears, so to speak. The nobler (and harder) thing to do is to persevere despite this and continue to voice your opinions. I haven't quite mastered this yet but I think it's important to at least recognize these responses and choose for yourself on a daily basis which you are going to do. I've felt that sometimes it just isn't worth voicing my opinion and taken the apathetic route, but I always end up feeling like crap after doing this. Even though it's harder to be determined I think it's more rewarding and ultimately builds more character. Going forward I'm going to give it my personal best to stay determined and positive despite these setbacks.

As a software developer it's so easy to second guess the decisions we make when it comes to coding and design. Some of this is healthy, but it becomes destructive when we enter a mindset that causes us to feel like we must always rely on others to give us direction in order to proceed. Code Review, Peer Review and Pair Programming are all things that VendAsta promotes as part of its mandate to implement the Scrum process as closely as possible but I've realized that these tools in and of themselves don't make better programmers; it's really only the ability to learn from ones mistakes that produces a better programmer. Am I confident that I'm a good programmer? No, but I've moved away from being scared of making mistakes to embracing them as a learning opportunity. I'm not afraid to implement an algorithm I designed, see how it works in code, and then find out that there is an easier way to do things. I've learned that there will always be an easier, better way to do things than the solution I come up with. The work that I'm doing and the people that work here have enabled me to feel that I'm a better programmer than I was a year ago and that I'm heading in the right direction, and that's one of the most important parts of a satisfying work experience.

Accomplishments

When I started at VendAsta I thought my skill-set included a well rounded set of disciplines from my previous experience. Looking back at what I've accomplished in the last year I think it's safe to say that my toolbox has grown considerably. I didn't have much in the way of experience writing unit tests, which is a core philosophy at VendAsta. Writing tests and examining Test Driven Development has given me a new appreciation for efficient ways to tackle development. The "Red. Green. Refactor" mantra is something I've taken to heart, not just when writing unit tests but when writing my actual code as well. I've learned about things like Dependency Injection, how to refactor efficiently, and how abstraction can help achieve reusability. I've taken my knowledge of CSS and HTML to a new level, something I thought starting out last year that I had mastered. I've also learned that I haven't really mastered anything as a software developer/designer and I probably never will, but that's ok :)

I've written more JavaScript in the last year than I did in the previous 6 years combined. Being able to understand the language at it's lower levels has given me an appreciation for the abstractions available in current libraries like jQuery and YUI. Reading and learning from Douglas Crockford and the YUI Theatre have proved to be an invaluable tool in my JavaScript toolbox. Closures, Prototypal Inheritance, and Dependency Management are all things I've learned to deal with effectively. As much as I've learned about JS in the last year I still feel I've only touched the tip of the ice berg in terms of what's capable. JavaScript is truly an expressive and powerful language and I think many people in the software development community underestimate it as something that is the language of web hackers and script kiddies; they couldn't be more wrong.

I had dabbled with Django and Python at the beginning of last year, running through the most basic tutorials and building a basic blog with Django. When I started at VendAsta that experience proved to be valuable as we used the experience of building our corporate website in Django as a stepping stone to understanding what we'd need to do when building StepRep and MyFrontSteps. I participated in the development of both of our core products from the stages of infancy up to where they are today and I'm very proud of what we've accomplished in less than a year. I almost forgot to mention Google AppEngine which we use to host MFS and SREP. Learning about GAE has enabled me to expand my knowledge of so many other areas of development that I wouldn't have imagined. It's foundation is in Python and we run Django on it. Our applications are tied very tightly to JavaScript (almost to a fault) which has enabled me to learn so much about that language. I've learned how to create a project from scratch on AppEngine using alternate frameworks like WebPy, CherryPy and Google WebApp. I've deployed several websites on AppEngine for work and on my own as side projects to explore further uses of the platform when coupled with social network platforms like Twitter. In developing MFS I was able to learn how to build a social application on both Facebook and MySpace concurrently as well as supporting a standalone platform (not an easy task). Jeff Read and I customized an open source upload utility, the YUI Uploader, to do client side resizing of photos using the open source version of the Flex SDK.

The Future

No job is perfect, and I think it's safe to say that looking into the future I can't predict what's going to happen at VendAsta. However I think looking back has given me a new appreciation for the work I'm able to do here and the things I've been able to accomplish. I think VendAsta will succeed as long as we keep hiring exceptional people that strive to improve themselves on a daily basis. I'm trying to continue to do that myself ;)

Filed under  //

Comments [2]