Showing posts with label Software Development. Show all posts
Showing posts with label Software Development. Show all posts

Thursday, August 26, 2010

Technical Debt: If You Can't Handle Change, It's Time To Change Careers

Change happens every moment. Right now things have changed just from the second before. This means all things in life are fleeting. Not changing is like trying to hold on to the present as it becomes the past. Why should we hold on to the past? We should not. Nobody has every succeeded at this and you should not think that you're special enough to think you will be the first.


Change is good. It should not have negative thoughts connected with it. Change will happen whether we like it or not.  We might as well learn something new so we can adapt to change in ways that do not cause us suffering.  The scariness of change can be counteracted with learning. Learning something will lessen any suffering that occurs from change.  In the terms of IT, you'll live a happier IT existence because you will not accumulate massive amounts of "technical debt" by not changing and therfore not learning.  Doing things in the "tried and true" methods don't always mean you're doing it right.


So take the plunge and make a nice down payment on the change that inevitably comes. Learn something new every day.  Or if you want a different explanation in clearer wording: How can you be in IT if you don't want to learn new stuff? If you don't want to learn, you're in the wrong business.

Saturday, July 24, 2010

CFML Advisory Committee -- My Thoughts

As for the narrative of what happened to the demise of the committee, it isn't worth my time to comment on it.  It is what it was and I have nothing if any real interest to add to what has already been said by Adam, Matt and Sean.  My resignation letter clearly explains my resignation:

http://blog.maestropublishing.com/open-cfml-advisory-committee-resignation-lett

In his blog post, Adam alludes to some inside knowledge on my life and the demands on my time.  Adam has absolutely no understanding or knowledge of my daily life and demands. It is rather imprudent and extremely rude to make assumptions and presume some alternate agenda.  This is the issue I take with Adam's post.  Straight from my resignation letter: "it has become increasingly difficult for me to contribute sufficiently to the CFML specification process".  I spent a lot of time over a period of a couple months debating my resignation.  In the end, I felt I did not have the time to serve the CFML community in a manner that did justice to the committee as a CFML *community* representative.

Monday, April 19, 2010

Are Software Development Practices Killing Our Creativity?

Let us consider this statement:


All children play.

Without question, I believe that most people would consider the practice of "play" to be a significant and important part of the development of a child.  Play inspires imagination and creativity which brings development of concepts, ideals and beliefs.  Another important aspect of this is the lesson of playing with others and learning the value of sharing.  Let us not forget that it's just good old fun.

Before we continue, let's decide a concrete meaning of "play" in the way I see it.  Yes, we all play games as adults whether it's the dating game or the latest and greatest console game.  However, I would be better to agree that those kind of activities are more inline with process of finding love and enjoying entertainment mediums.  It is not the kind of "play" that inspires creativity, new thoughts and imagination.  For the sake of this blog post, let's define "play" as follows:


Play (noun): A process that inspires imagination and creativity while teaching the value of sharing and collaboration with others.


As we get older the practice of play, as defined above, typically ends as we enter into adolescence and adulthood.  Maybe it morphs into other things, but the concept of a 20-something still playing with G.I. Joe's (sorry fans and collectors) or playing house (in a house of our very own) becomes something that most adults would not want the world to know about them.  Where do we find inspiration for our imagination and creativity as a programmer?

Let us dive into software development. In a consumer based internet, everything is about data sharing, mashing that data into new data streams and sharing that knowledge with others. But developing software there are legal matters that stop us from sharing knowledge. We've all been subject to NDAs (non-disclosure agreements) for a variety of reasons from trade secrets or patented processes.  I'm not advocating that NDAs are not necessary however, it does provide an additional barrier leap over when it comes to developing that killer new feature.

Applying it to software that is widespread and common this stifles the creativity and inspiration drives the development of the next new world changing feature or application.  There are two groups of software which can be divided into:



  • Commodity

  • Specialized


Commodity software are areas where the type of software is widely used in the world across the general public and enterprise.  It would easy lump in things such as operating systems, word processing and web browsers.  Unless you are already a major player in the market, it's very hard to make money on commodity software.  When was the last time you paid for a web browser?

Most software starts off in the specialized software group as proprietary software.  You can only be unique for so long until you get competitors that offer alternative options to your product.  There a variety of factors that make alternate products attractive to decision makers.  It might be cost / licensing, different features or support options.

An alternative may not need to be better to begin winning market share.  Most alternatives compete on price and some what on features.  Suddenly, your product needs feature X and be $1,000 cheaper to remain competitive and continue being "specialized".  As time goes by and alternatives continue to erode your specialized market.

You may have not noticed yet that I have not mentioned whether or not the alternatives are proprietary or open-source.  There may not be an open-source alternative, but in most cases people start asking the question:


Why do I have to pay for this? I could write my own that only does what I need it to. It would be a creative challenge and I would get to use my imagination to solve problem X.


I believe this is how most open-source project start.  Whether it competing against a proprietary product or it's free reign, open-source projects usually start to fill a gap.  I believe it's not filling the "free" gap, but fills the creativity programming gap that is so often overlooked by employers.  In lots of cases, open-source bridges a particular type of software from the "specialized" to "commodity" software group.  Companies that fail to see a bridge being built will only suffer the punishment of seeing their once "specialized" software become a "commodity".

Why is open-source becoming increasingly popular?  I pose this thought:


Open-source is an adult programmer's playground where creativity and imagination can be shared with the rest of the world.


As programmers, I believe that some of us are looking to fill the hole left behind by childhood "play" and open-source offers a new paradise -- a digital playground in code.  Our primary purpose is to have fun; not to make boat loads of money.  Considering this...


Does proprietary software kill our creativity?

 


The short answer is "yes" when applied to commodity software because the method of participation is restricted by NDAs and the inability to share with others that may have useful contributions.



Like any other sort of fringe activity, you find that people are attracted to it because there's something that it fulfills that their daily life doesn't. - Paul Jennings



You're free to continue this discussion as comments, but I would appreciate it if you keep the flame wars / baits to a minimum.

Thursday, February 18, 2010

Why I'm Proud To Be A Dirty GNU Hippy (GoingWare)


By earning my bread through writing software, I made a pact with the Devil. In seventeen years spent working as a software engineer, I have been required to sign a non-disclosure agreement by everyone I have ever worked for. I have never been allowed to write Free Software. All but a tiny bit of the source code I have written in seventeen years of hard labor is now kept a jealously guarded trade secret by those who paid me to write it. Many of those companies are now long out of business, yet I could still be sued or even imprisoned should I release any of the source code I wrote for them.


So true and probably why there are a lot of people trying to figure out how open source can pay the bills. I'd be one of those as I like sharing my work, but if only it would pay my mortgage.


Tuesday, January 12, 2010

Alex Payne — Don't Be A Hero


If you’ve built a system that’s supposed to be reliable, you shouldn’t be up fixing it at four in the morning. You shouldn’t be getting paged at all hours. Sure, you might need to do some occasional planned after-hours maintenance, or some very occasional unplanned-but-process-driven disaster recovery, but you shouldn’t need a hero.


Heroes are damaging to a team because they become a crutch. As soon as you have someone who’s always willing to work at all hours, the motivation from the rest of the team to produce reliable, trouble-free software drops. The hero is a human patch. Sure, you might sit around talking about how reliability is a priority, but in the back of your mind you know that the hero will be there to fix what doesn’t work.




Another great post by Alex Payne. Everybody knows a "code" hero or has been one yourself as one point or another. The problem that Alex points out is that when it happens too often, you are letting your team be mediocre or lazy and you rely on the hero. By now, I hope you have the time to read the whole post.

Sunday, January 10, 2010

Example of Bad Security - WeTV.com Exception Shows File Paths



Fatal error: Cannot use object of type MDB2_Error as array in /na/na010uspln2/vol2/production/apache-docroots/wetv.com/public/live/gadgets/ScheduleGadget/ScheduleGadgetIMP.php on line 168



My wife randomly surfed over to the WeTV site and it appears to be down at the moment. Above is an example of a bad security practice -- they show file paths on their exception page.

Saturday, January 2, 2010

Drone Or Phone? (Shot of Jaq Podcast)




Download ogg Download mp3




It is not often you hear the words “iPhone Killer” thrown around the place and taken in any way seriously, but Android has been getting hopes and expectations a-pumping. Jono Bacon and Stuart ‘Aq’ Langridge crack open the story and explore the opportunities and risks that Google face in how the Open Source community see this exciting new mobile system.


An interesting podcast discussion on Droid or iPhone with Jono Bacon and Stuart 'Aq' Landgridge (i.e. J + Aq). I love the part about using the Droid OS on netbooks. It particularly interesting to hear about how Droid is more "open source" in the terms of applications than the closed source iPhone platform.

Friday, January 1, 2010

New Query Functions Released (Open BlueDragon Blog)


New Query Functions released



Published: 2:01 PM GMT, Friday, 1 January 2010

We've justed finished the a whole new set of functions to help with the manipulation of Query objects and their respective datasources.



The following table highlights all the current functions within the Query category available in the OpenBD (nightly build) release:

































































DatasourceCreateAdds a new datasource to the system for use with any database functions. This does not persist over server restarts
DatasourceDeleteRemoves the given datasource. Note, it will not remove any datasource that was registered with the underlying bluedragon.xml file
DatasourceIsValidChecks to see if a given datasource has been previously registered using DataSourceCreate()
QueryAddColumnAdds a new column of data to the exist query object, returning the column number
QueryAddRowAdds the specified the number of rows to the end of the query
QueryColumnArrayReturns all the data in a query for a given column
QueryColumnListReturns all the data in a query for a given row but as a structure
QueryDeleteColumnDeletes the column from the query, returning the deleted column data as an array
QueryDeleteRowDeletes the row within a query object. Modifies the original query object
QueryIsEmptyDetermines if the query has any rows
QueryNewCreates a new query object with the columns past in of the optional types
QueryOfQueryRunExecutes a Query-of-Query against a previous SQL result sets. Function version of CFQUERY
QueryRowStructReturns all the data in a query for a given row but as a structure
QueryRunExecutes the given SQL query against the given datasource, optionally passing in paramters. Function version of CFQUERY
QuerySetCellSets the given column within a query with the value at the given row, or the last row if not specified
QuerySortSorts the query based on the column specified and the order criteria given. Modifies the original query object
QuotedValueListReturns a quoted list of all the values, for a given column within the query, delimited by the value given
ToCsvTransforms the query object into a Comma Separated Value (CSV) block
ToHtmlTransforms the query object into an HTML TABLE block
ValueListReturns a list of all the values, for a given column within the query, delimited by the value given


These functions will greatly increase the speed and efficiency to which you can work with Query objects.



Many of the functions where available using other means. For example, QueryDeleteColumn could have been achieved by performing a query-of-queries leaving out the column you wanted to remove. This however had a huge overhead, as well as duplicating the data.



You can read more about the DataSource functions over at Alan Williamson's blog.

Thanks to Peter J Farrell for many of his suggestions.




One word. Woot! Happy New Year!

Thursday, December 31, 2009

Help keep the Internet free by saving MySQL (Monty Says)


A big part of the Internet is built on LAMP (Linux, Apache, MySQL and PHP/Perl/Python). Now Oracle is trying to buy Sun, which owns MySQL.
It's not in the Internet users interest that one key piece of the net would be owned by an entity that has more to gain by severely limiting and in the long run even killing it as an open source product than by keeping it alive. If Oracle were allowed to acquire MySQL, we would be looking at less competition among databases, which will mean higher license and support prices. In the end it's always the consumers and the small businesses that have to pay the bills, in this case to
Oracle.

If this is the only blog post you read in 2010, then I highly encourage you to read the entire self-interview style blog post by clicking the "via" click above. "Monty" is the guy that started MySQL over 27 years ago.

I personally believe that Oracle can have Sun by should not have MySQL. The one critical part of the LAMP stack is at risk. Without MySQL, we only have Postgres which is great but does not have the same "business" community around it yet. So I encourage you to sign the Save MySQL petition at http://www.helpmysql.org which will be forwarded to the European Commission which must approved the Oracle / Sun deal. Considering the amount of time and money spent by Oracle to get this deal approved the future of MySQL is definitely at risk. Oracle could have quickly gotten the deal done if they had divested MySQL AB immediately, but they willingly have lost an estimated $1 billion in order to get MySQL.

Even if you don't use MySQL, you'll end up giving more money to Microsoft for their DB or pay Oracle for theirs then I highly suggest you sign the petition. The future of free internet is at stake!

Monday, December 28, 2009

EOL of MySQL Query Browser, MySQL Administrator, MySQL Migration Toolkit (MySQL Workbench Team Blog)


With the beta releases of MySQL Workbench 5.2 well under way, we recently announced the EOL (http://www.mysql.com/support/eol-notice.html) of the MySQL GUI Tools Bundle.



Wow, this is news to me and it looks like they have a DEB for Ubuntu. It's about time MySQL pays attention to Linux on their GUI tools. Maybe this will replace my the old DBDesigner tool (which was "bought" my MySQL to make room for the Workbench about 3 years ago). I'll blog when I get a chance to try out the Workbench. Hopefully I can say goodbye to the older MySQL tools soon!

Sunday, December 27, 2009

Tuesday, December 22, 2009

Capacity Building with Open Source - Is it a reality? (Open Tech Exchange Podcast)


Governments in many countries have to realize that fostering open source adoption is not just a means to an end, to increase ICT [information and communication technologies] use, but it is the conduit to allowing citizens the opportunity to 'adapt and thrive' in our digital world.

I'd add in corporations in the quote above as well. I've seen all to much the lack of understanding of "computing" in industry and the fear of open source as bad. I am not saying that proprietary software "must die" but over time open source tends to make certain software products a commodity. The interesting thing is there is no hard line in the sand where commodity starts and proprietary ends. It usually ends up as a unique blend sort of like blending coffee. Open source is a key element in helping third-world countries with computer literacy. If you can't afford the software, why bother buying the hardware? I definitely see the world changing for the better one Linux desktop at a time.

Thursday, December 17, 2009

There will not be a beta for Flash Professional CS5 (Adobe Flash Platform Blog)


Disagree with this strongly. Public betas mean better quality final releases. You know that. We all know that Flash has had some quite buggy releases in the past, and that you rarely put out more than one bugfix release. Put off the profits for a few months and give your customers a chance to help you make a successful product.


I'll preface this with the fact that I'm not a Flash developer at all, but this is disturbing news to me especially since the announcement of a public beta was one of the "big" announcements at Adobe MAX 2009.  However, I totally agree with the comment that was left on the blog post.


This is saddening news for a lot of people and the blog post cites the reason as "we want to make sure that we can provide the earliest possible delivery of the final software to the large number of designers and developers." I can only fathom "earliest possible delivery" means we need sales of this product now. Adobe is a for-profit company so they do need to make sales, however the decision to not have a public beta will probably hurt the quality of the product in the long term. This is an interesting dichotomy -- Flash CS5 will have no public beta whereas Adobe ColdFusion Builder went into Beta 3 on the same day. I hope the CF team continues with their public betas which is the right step in my opinion.


Personally, I believe the sooner you can deliver alpha/beta code to customers the better the product will be. This has always proved true for Mach-II (the open source project I'm involved in). The team can shake out a lot of bugs themselves, but it's always our users that find the interesting (and sometimes frustrating) edge cases. More brains are always better than fewer.


In all reality, I hope the Flash Platform Team at Adobe does well without the beta. Only the final release will tell if people will spend big money for the product. Remember, nobody likes paying for bugs!


Sunday, November 15, 2009

CFML Documentation core to Open BlueDragon


The journey has started. Let me present the official resource for CFML documentation for Open BlueDragon:



OpenBD CFML Documentation



Key features:



  • JavaDoc like interface

  • Produced from the raw Java code; no external XML/wiki/sites to keep in sync

  • Hot links to any particular function (CreateDateTime)

  • See other functions/tags that fall in that category

  • Quickly discover which parameters/attributes are optional

  • Real look-ahead search

  • See all functions/tags with their parameters/attributes

  • Hot links to the OpenBD WIKI

  • User contributed comments (Moderated)



We haven't finished annotating all the functions/methods yet, but even without that, you will find this an incredibly useful resource. I have even rediscovered functions I had completely forgotton existed!



In addition, the CFML app we developed for this, is already being bundled in the nightly build in the web-app folder. So you can even run your own internal documentation, complete with your own private notes.



We are annotating functions and tags as and when we get time, and already 80% of all the functions have been completed. For me, this is 10 years too late, for that I apologise. But we are here now. Never again will the documentation not match the implementation.




This is great -- not that it's just available via the web, but it comes bundled with the engine so it is available locally. Sometimes it's hard to get documentation on something if you're not currently tethered to the internet at the moment.

I've always thought it was strange that documentation in the CFML engine world is an "after" process. This approach is prone to error either from exemption (forgotten notes) or too much time elapsed. Unless you're a code maverick and dig around the CFML engine source code, documentation is the only way for people to understand new features and actually use them. Only after they are used do people find ways to improve them.

I hope to blog more in the future about open source, licensing and the world of CFML open source which I believe is currently in a positive flux. So check back often or subscribe to my RSS feed.

Saturday, November 14, 2009

FuseNG and therefore Fusebox by default are dead...


A few months back I tweeted that anyone can build a framework in CF; what we need is more good software out there. Given the choice between maintaining a framework and listening to the nagging whining community or developing an open source application and listening to nagging and whining community I'll take the application. My heart is just not in FuseNG, or any other framework, and I can't hold onto the framework to make people happy or ensure it has a support person. That's just not what I want to do.

For those that thought it would never get off the ground congratulation you were right! To those that had new hope for the future of Fusebox, sorry FuseNG will not be it for you. You see over the past year my career has change drastically. I do not officially work on ColdFusion at work any longer and I never find myself in the situation where I am using Fusebox. I can not continue to develop a framework I don't use, it will stagnate. I hope someone else in Kroger will step up and take on Fusebox or revive the FuseNG fork, but that is up to the other individuals that originally looked to me for leadership of FuseNG. As much as I am sure some of you would like to leave feedback or comments I'd rather not open the potential for flames so comments are off. If you really must share your opinion feel free to email me.




FuseNG is dead and Adam was the one that said it. I totally get where Adam is coming from. If your heart is not in it then it is not something to not pursue. Our lives are short. Best of luck to you, Adam, with your new management career.

I truly believe that FuseNG was the only hope for Fusebox as I do not see much involvement from the current maintainers of Fusebox. Maybe somebody will swoop in and save FuseNG, but that would require a long term framework vision and big time commitment. Only time would tell...

I totally agree with Adam that the CFML world is missing really powerful, enterprise level, commodity applications that extremely mature and polished. I think the downfall as a community as a whole is we think about building new tools, but not full-blown open source applications. Sadly, other development languages like PHP are littered with big name applications that make it into the headlines. They have a huge head start on us (we're talking many years) in the terms of maturity and polish.

One thing we are not missing in the CFML world is a selection of frameworks. So jump on in; the water is warm! Just one word of advice, do not use this as an excuse to build yet another framework in CFML. You're just re-inventing the wheel with different paint or materials. Your time would be better spent (yours and everyone else that benefits from your time) by becoming involved with an open source framework / application by adding to the spit and polish of that chosen project. Think about the CFML community as a whole instead of scratching that "I think I can do it better in my own way" kind of itch.

Please no flames... (and yes, I think I can now be crowned the "X is dead..." king for those who have been around for long enough).

Monday, October 26, 2009

Baking Bread -- A Development Process


So is the "build it bigger faster" theory a sound long term design plan for open source software? Do more and more options to accomplish essentially the same task make a better piece of sofware?  The answer to both questions in my opinion is a resounding no.  The "faster is better" theory does not work either unless you have great software architecture in place.  Implementing new features without pause or forethought is dangerous at best and a possibily a harzard to your health if things go hopelessly wrong.  This type of development is an easy to get into because it is any easy way to please users quickly and some people have dubbed this "cowboy coding".  However, it leads to poor architectural choice down the road and literally can paint you into a corner.  While it is not a hard or fast rule, projects that frequently publish "upgrade guides" when new versions are released indicate the use of the  "build it bigger faster" theory.  Upgrade guides are usually written to help users "fix" their code because the sofware project  made poor architectural choices that require revisions later on in order to make up for shortcomings.



(via http://www.mach-ii.com/index.cfm/go/blog:showEntry/entryId/8C7B1B44-D975-986B...)


I originally wrote this for the Mach-II blog, but I thought I should repost a link to this on my new Posterous.  I've been thinking about how long something should "bake" before it should be allowed to into the world.  There is a lot of open source software out there just doesn't get the refinements to it that make working with it a pleasure.  Instead of thinking of this like something you can stick into the oven for a few more minutes, I like to think of good software development like the process of baking a good loaf of bread.  Here are few items / processes for baking a nice loaf of bread and the corresponding software development part:

Premium Ingredients
Well, if you're going to bake a killer loaf of organic pumpernickel bread -- you should start with the best ingredients right?  Situations in software development where you need to turn lead into gold will never turn out.  The old phrase of garbage in equals garbage out applies here.  Let's start with nice stoned milled organic grains and filtered water for our bread.  In the terms of software development, the analogous part would be thorough research, a good strategy and an architecture plan (meaning you understand the needs of what needs to be accomplished).  Just because you have the perfect recipe and all the right ingredients doesn't mean it's going to turn out.  This leads us to...

The "Right" Tools
I don't know if you noticed, but I didn't lump in developer knowledge or skills in the last point.  You cannot just buy experience and knowledge as they must be accrued over time.  Just like in bread making, you might have access to a wood-fired, stone bottomed oven, however there is an art to using that as a tool.  If you aren't careful, you might just bake blackened mounds of burnt crap.  If you are just getting started with bread making, a loaf pan and a modern gas-fired oven might be easier for you to managed and give you better results.  With time, you'll learn the tricks of using that $40k brick oven, but just realize things take time.  And time is can be your best tool because...

Practice Makes Perfect
If you've ever seen me speak at a conference, you've probably heard me say "software development is an iterative process."  Talk about a boring phrase, albeit accurate.  A more sexy phrase is "practice makes perfect."  Let's pretend it's the very first time you're baking a loaf of organic caraway rye bread.  Doesn't matter if you have the best ingredients, the perfect recipe and the right equipment, you'll first time won't be that artisan quality you're looking for.  I think a lot of the time the phrase of "well, it's works...right?" is used as a justification for not refining the end product.  There is an art to refining what you are doing and don't think you'll get it right at the first pass.  Actually, I'll be the first to admit that many years ago I had a complex about "doing it right the first time."  This was bad because I hemmed and hawed over the small minutia -- thinking that if I did not get it right the first time -- the whole pot would go sour.  Now my philosophy is "do it your best the first time" and have the humility to realize and correct your mistakes in order to make a more perfect result.  Sometimes this means you have to correct small defects in your code or add in new features.  Other times you'll  have to start a fresh because your implementation is like somebody that just peed in the pool -- the yellow cloud underwater is an indicator that you shouldn't hang around.

Putting It All Together
So how do you make the best bread?  Talk to your fellow bread bakers!  Nothing exists in a vacuum and it's important to have a sounding board for your ideas.  Sometimes this is easy because you work on a team of great people and sometimes you have to go it alone because you're the only person on the product.  I tend to work on small teams and so my sounding board has to be me sometimes.  No, I don't have multiple personalities, but I do talk out loud to myself quit a bit.  Most of the research out there indicates that vocalizing your thoughts uses different parts of the brain than just thinking about them.   So I'm just utilizing all the parts of my brain.  I bet everybody has experienced a time where you just can't figure something out and you head over to the next cube or fire up your chat client and after the first 30 seconds of discussing something -- voila -- you'd go "d'uh" and figured out your problem before even explaining the whole thing.  I recommend that talk to yourself first before wasting an other developer's time and possibly interrupting their zone.  There is an art of knowing when to ask for help and when self-reliance is needed.

In closing, I hope to refine my bread baking concept over time.  Right now I think it's at soda crackers level.  Maybe I'll attempt a better version again soon.