Sunday, May 31, 2009

Tables Vs CSS Layouts

I'm in the midst of customizing the themes for my blogs. Now, if I had oodles of time, I would build my own theme from the ground up. I don't have a nano-oodle, let alone multiple oodles, so I'm just hacking up the default theme.

No matter how well designed a web application is, it is always hard to step into someone else's work and make changes that perfectly dovetail the original source. Not impossible, just hard. So, to keep a long story from getting way too long (it is impossible to make a long story short, because it is always too late by the time the thought occurs), I found myself using tables to modify the layouts (gasp!).

Using tables for something other than tabular data is something I avoid, but I do it anyways sometimes. In the case of the theme on this blog, it was a matter of the fastest way to modify an existing layout that I did not design. If I had more time, I'm sure I could have gotten past the bugs that cropped up when I tried modifying the CSS instead. If I had built it myself from the ground up, I could definitly have avoided the table approach because I am careful to avoid redundant classes and I document the things that aren't glaringly obvious because I know I will forget later if I don't. But, since neither of these were the case, I used the table. The momentary twinge of guilt passed as soon as I moved on to something else that caught my over-burdened attention. Until I ran across a job posting that stated something to the effect of "If you use tables for layout, do not apply". Which got the question stuck in my mind "what is the truth about using tables or CSS for layout"?

I've been reading about the topic for six or seven years now, so it didn't surprise me that a search on "tables vs divs" in Google returned  "about 15,400,000" results in 0.41 seconds. What did surprise me was that the first six results were 100% relevant, and that the general consensus of the first ten results agreed with my thoughts on the topic, which are:

  • The approach that is the least complicated is preferred over the one that is the most complicated

  • The semantic web is yet to come, hopefully will come, and it is better to use CSS for layout than tables when it does get here

  • If the layout is overly complex, the semantics will be lost regardless which approach is used

  • There is no value in re-writing your code simply to eliminate tables in layouts, while it is valuable to update to CSS if you need to re-write anyway

  • The best choice depends on the goal of the page


If this sparks folks to register and comment, I will be happy to elaborate further.

Friday, May 29, 2009

GIS

For those smarter or more up on acronyms than I, ignore this post.

As posted at my parent blog, I was reading this SF story last night in Analog. There was a reference to GIS, which I've seen around alot lately on the job boards but haven't bothered to look up.  For the curious, it stands for Geographic information system.

Consider This When Planning Web Services

As soon as Web Services started getting buzz I was both excited and concerned. Interoperability and reuse are great things. Shorter time to market is a huge benefit. Bandwidth is limited. That last was never brought up by the sales people taking clients to $1000 dinners while pitching $30,000 web service platforms with $1,000,000 support contracts.

Web services are still a great way to expose legacy systems to myriad clients across the enterprise. Where they become expensive is when they are built with only one or two expected clients to support a (myopic) SOA vision. Especially when many of the new services being built are only aggregations of other services that will generally be a specialized interface to business logic required by a limited number of clients.

If an architecture includes web services, a list of clients must be part of support case or the design is simply buzz word bingo.

This technical rant was prompted by a developer.com article that has way to much code to share with the folks who will often make the final decision, but may get their advisers excited enough to explain it to them.

Tuesday, May 26, 2009

Good Article on WebLogic Deployment Plans

In WLS, deployment plans let you change the values in deployment descriptors at deployment time. This is really handy when you want to move your deployment archives from one environment to the next (i.e., from Staging to Production) and need different settings based on the environment. Maxence Button blogged an excellent how-to at http://m-button.blogspot.com/2008/08/how-to-use-deployment-plan.html

Monday, May 25, 2009

Favicon Generator

I rememeber what a pain this was the first time, and the next to last time, where I hadn't done it in years. Today I found an site that will generate one for free and tells you how to use it. Must have bookmark: DeGraeve.com Favicon Generator.

Google Maps Gets Even Cooler

Apparently they are just starting this new bit where they show the actual buildings on the street maps and camera shots. It doesn't show up everywhere, but it does in Boston. See for yourself here: http://www.google.com/maps?f=q&source=s_q&hl=en&geocode=&q=boston&sll=35.229548,-80.834937&sspn=0.001597,0.002865&ie=UTF8&ll=42.358845,-71.05559&spn=0.005779,0.011458&z=17

Cross Domain AJAX on FireFox…Sort Of

At least, how to run it locally. Explained well at http://blog.dirolf.com/2007/06/enabling-cross-domain-ajax-in-firefox.html

Friday, May 22, 2009

Keep Your Ego in Check

I have to point to this just for the title: Never Eat Anything Bigger Than Your Head. Just wish I could remember where I first heard that phrase...

Anyway, it is a good post about sizing stories in Agile.

Thursday, May 21, 2009

Couple of Twitter Notes

Yesterday an acquaintance began following me on Twitter, and I found that they were using Twitter Job Search. It's in beta, and I wish I had time to contribute as it looks promising.

It appears that some companies are following people as a marketing approach, which is the only reason I can think of for an eBusiness-in-a-box company to start following me that had no job postings. Their Twitter page did remind me that I wanted to customize my Twitter page as I have noticed some folks have done, and I found this handy blog post on how to.

Wednesday, May 20, 2009

The Dawn of Tech Support

Someone emailed this to me today. Still laughing.

The First IT Professional

Got Ebay?

With all the recent press (Craigslist drops prostitutes, Craigslist CEO demands apology) about craigslist the last few days, eBay is up almost 10%. According to Google Finance, eBay owns about 25% of craigslist.

Microsoft Undoes It Again

Remember when web standards were supposed to end cross browser development issues? Now you can not share documents the same way, according to this ZDNet article.

Tuesday, May 19, 2009

CodeStuff Starter Updated

My favorite Windows utility now fully functional in Vista

Useful Google API Article Series

Developer.com has a series on Google integration with PHP at http://www.developer.com/services/article.php/3680076.

I suppose this would be a good time to grouse that they never gave my two series (WSRP and POI) a page of their own :)

Between the York District Boy Scouts  Spring Wateree Campout and a cold, I have not been posting much lately, so this a is re-tread from Frequently Unasked Questions.

Thursday, May 14, 2009

Delicious Deviation

If you are like me (and I am realistic to know that the odds are really against that), you could care less about visitors to your blog that have Javascript disabled.  There is really just no reason for it, with 99.99% of browsers supporting it.  So, if you want to save a few bytes and just have a clickable icon for your Delicious tag, here is my version:

<img      id="DeliciousIcon1"  title="Bookmark this on Delicious"
src="http://static.delicious.com/img/delicious.small.gif"
height="10" width="10" alt="Bookmark this on Delicious"
style="cursor: pointer; vertical-align: middle"
onclick="window.open('http://delicious.com/save?v=5&amp;noui&amp;jump=close&amp;url='+encodeURIComponent('<?php the_permalink() ?>')+'&amp;title='+encodeURIComponent('<?php the_title() ?>'),'delicious', 'toolbar=no,width=550,height=550'); return false;" />

Wednesday, May 13, 2009

It's Like It's 1998 Again

Adrian Kingsley-Hughes blog post on ZDNet today reminds me of when Windows 95 users where expecting the next service pack and instead got an ad for an upgrade.

Buying Vista is the biggest mistake I have made since buying Circuit City stock.

Monday, May 11, 2009

How Not to Succeed with Agile

Originally published at developer.com

Why Agile Projects Fail


The purposely provocative title is meant to capture the attention of people with two opposing mindsets. The first are the proponents of agile methods who will want to pick apart any arguments against their preferred approach. The second are those who oppose agile and are looking for justification for their concerns. The goal of this article is to reduce the opposition between these two schools of thought, and to provide some food for thought to those who are undecided.

The truth is development projects following agile methodologies have failed. Projects following waterfall and RUP have also failed. Just as the cliché that one should not judge a book by its cover is often true (I missed out on the intellectual pleasure of Robert Heinlein’s Friday for many years due to that primitive prejudice), one should also avoid drawing a conclusion about a topic based on the title alone (The Art of War is more about how not to fight).

We will not go into deep detail of agile methodologies today. There are too many to cover adequately in a single reading, and the specifics of these methodologies do not have a direct impact on why agile projects succeed or fail. Agile is as much a way of thinking about projects as it is a set of tools that can be applied to projects, and the aspects that make up successful thinking can apply to agile and non-agile methodologies.

The Project


Both definitions of agile in one online dictionary include the word “quick”. The word agile evokes thoughts of athletic prowess and graceful, fast feline predators. It is not surprising the people who chose to adopt agile methodologies for the first time do so when facing a tight deadline. Perhaps choosing a methodology by its name will be the new cliché.

People who have followed agile methodologies for multiple projects will tell you that they provide quick results, and can show you artifacts that prove it. What they may have forgotten (or simply neglected to mention) is that successful agile projects have a few advantages to be successful with agile methodologies.

For an IT shops’ first agile project to be successful, the project must be the right project for that shop to adopt agile techniques. The project should be small, in both time frame and team size. The managers of the project must be willing to either adopt agile deliverables as they are, or adapt their method of measurement. Most importantly, the project team either needs to have enough members already experienced in agile or be given the latitude to get through the learning curve.

Agile methodologies rely on continuous and open communication between all levels of stake holders. For traditional waterfall groups, it is unheard of for a developer to contact a business sponsor or client to find out what is meant by a particular requirement description. In an agile project, the ability to do so can mean the difference between success and failure.

Agile methodologies can be used successfully to deliver a large project, but not by a team that is learning to use these techniques for the first time. Large projects often include many team members, at multiple locations. An IT shop can grow a small agile team to a large, distributed team over a few projects, but it is likely to be disappointing to try to assemble a large team from scratch, even if all of the members are experience in agile. Like many adjectives, agile has different meanings to different people in different contexts, and two highly experience agile project members could have entirely opposing approaches. Large agile teams must be grown organically rather than assembled randomly. These caveats to applying agile projects are most likely the root of the general consensus that agile is not appropriate for large projects. Perhaps this caution is a good idea when introducing agile methodologies to a team for the first time.

In describing the ingredients of projects that can succeed with agile above, it is important to note that the different modal operators of probability used are chosen specifically, rather than simply to provide variety in wording. Project managers new to agile must be willing to adapt. Teams new to the agile approach as a team needs to either have enough members with agile experienced or be given the opportunity to stumble and learn. Communication across stake holders can impact results. There are exceptions, such as when those with roles that include being the translator of business requirements to technical requirements have good relations and communications with business and development and are highly competent in those communications.

This section began with a reference to a dictionary definition. In addition to the current English meaning of the word, most dictionaries include the history of a word, its etymology. At that same reference link, the etymology of agile is given as “from Latin agilis, from agere to drive, act”. So, apparently the meaning of agile in the English language evolved from its origins to include the notion of “quick”. Agile methodologies can evolve within an organization to be what we want them to be, though it is unlikely that they can be exactly what is desired the first time out.

The People


The introduction mentioned that there are opposing mindsets about agile. It also included a reference to The Art of War, and these are not coincidences. An agile project team with members of both camps has two strikes against it from the start. It only takes one more strike to be out.

Many proponents of agile tend to be over zealous in their belief of the superiority of their preferred agile methodologies. While their enthusiasm may win support from the undecided, it can also cause those opposed to agile methodologies to push back even harder. It can also frighten those who are participating in an agile project for the first time, as agile methodologies are very different from waterfall approaches and change causes anxiety for many. Where patient mentoring will frequently overcome FUD (Fear, Uncertainty and Doubt), ignoring the FUD of others generally results in greater FUD.

Most opponents of agile are against it because of FUD. Sometimes rightly so, as agile is not a panacea and is not the perfect methodology for every combination of projects and teams. Those most opposed to agile methodologies are non-developer team members. Experienced waterfall project managers and analysts are highly trained in creating complete definitions of deliverables and measuring progress towards those deliverables with specific tools. While agile is still a measurable methodology, the measurements are defined as the project progresses instead of up front. This can be too far outside of the comfort zone of some people. And people who are uncomfortable will often do whatever it takes to become comfortable again. For some, that is achieved by adapting and learning, i.e., becoming agile themselves. For others, the approach is to make every effort to bring things back to the way they are used to. These latter individuals most likely do not do it consciously, but they will sabotage an agile project. How? By doing exactly as they are trained. By trying to capture every minute detail for a story definition rather than outlining it and providing feedback during the daily testing. By trying to fit too many features into a single iteration. By thinking a milestone was missed because an iteration did not deliver all of the features planned. By not delivering requirements that are completely defined because the due date for the requirement has not yet arrived on the calendar. By running an agile project in a waterfall mentality. In short, by not being part of the agile process by being agile themselves.

To repeat, those who oppose agile processes and sabotage agile projects most likely do not do it consciously. If everyone isn’t onboard with the agile process at the beginning of the project, it can still succeed. If everyone isn’t onboard with agile by the end of the project, that project will most likely have been a failure. If everyone pulls their own weight, but pull in a different direction, something is bound to come apart.

Those who have delivered successful agile projects have good reason to be confident in their approach. Successful agile projects result in solid software, often delivered either under-budget or with more features than originally projected. The iterative approach of providing rapid, demonstrable deliverables quickly builds enthusiasm for both the clients and the developers. Those who began the agile project with FUD and then learned to adapt and adopt new processes are those who become the biggest supporters of agile. It is important that they remember that they had their doubts at first if they are to convince others who suffer FUD that they, too, can become successful agile project members.

Hopefully you realize that this section has many redundancies to the first section. Project deliverables may be software and documentation, but it is people who deliver them.

The Process


Waterfall projects are successful when there is a rigid adherence to process. To some, that rigid adherence may be the only ingredient they are aware of. They may not acknowledge that the project also required the experience and knowledge to create an accurate project plan with achievable milestones.

In agile projects, rigid adherence to process is a key ingredient to failure. Agile is made up of many different processes that can be adopted, combined, added, dropped and modified as needed. First-time agile projects are prone to the mistake of choosing their processes and sticking to them even when they don’t work.

A perfect example is Test Driven Development (TDD). In TDD, automated test procedures are written first, then the development is done and tested continuously. This is a great approach to ensure functional quality. It works perfect for the Control layer of an MVC architecture, for example. However, for the view layer of a web project, it can result in deliverable falling out of synch as it takes much longer to write tests for web pages than it does to write the page itself.

Daily stand up meetings are an excellent communication tool. Run properly, they provide an excellent benefit. However, if one or more of the unconscious saboteurs join in (or, as is often the case, lead) these meetings, they can become a key factor in iteration failure. Choosing to make the stand up every other day or weekly while leveraging instant messaging can put an iteration back on track if the daily stand up is detracting from productivity.

Another fallacy held by extreme supporters and detractors of agile is that it cannot be combined with waterfall. Nothing could be further from the truth. An agile development team that begins prototyping based on the initial, high-level requirements of a waterfall project will be able to demonstrate their achievements earlier in the development stage and get immediate feedback from clients. Because another fallacy about waterfall is that all of the requirements are defined before development begins. Change orders are part of the waterfall process, and it is very rare they aren’t used. The earlier the change order occurs, the better the chances of success are, and agile development processes within a waterfall project facilitate these early changes in direction that lead to improved deliverables.

Agile processes work if implemented in an agile manner and followed by people willing to be agile.

Conclusion


Why do agile projects fail? When agile methodologies are not used in a project labeled as agile. Whether you consider the root of the word agile as meaning to take action and get immediate results, or the modern meaning of quick deliverables, simply using the word agile is not enough to take action or be quick about it. Nor is simply taking quick action truly agile, unless it is done with purpose and support. Many of the most successful agile projects I have participated in were not labeled agile; we simply followed agile methodologies as a development team and met waterfall deliverables, usually ahead of schedule.

Agile projects do succeed, and agile methodologies are designed for success. Like any tool, if it is not used properly it will not accomplish what it is designed for, and can cause actual damage. If you have a fly to swat, a fly swatter works well… unless it is tied to a Buick.

Additional Reference Links


The Wikipedia entry on Agile at http://en.wikipedia.org/wiki/Agile_software_development contains many disclaimers, making it more honest than most references found during the writing of this article.

A short list of SDLC approaches can be found at http://testdog.com/knowhow/Sorting%20Out%20SDLC.html. While there are many, many other sites about various SDLC approaches, this one seemed to have the least agenda and the most variety.

Saturday, May 9, 2009

Cleaning Context Click Conundrums in Vista

Over in my old blog, I recently had an entry about cleaning up the context menu in XP with PowerToys to fix a problem where Windows Exlplorer was even slower than usual.

Alas, Power Toys are not available for Vista, and even cleaning out the context menu will not speed it up. But, cleaning up the context menu does make it easier to use simply by narrowing down the choices by eliminating those you don't use.

One habit I am trying to get into is adding a link to my Google query so folks can a) point out how I could have got better results and b) teach the less sophisticated Googlers how to improve their own results.

For the curious (and those who have not done much with Windows under the hood), there is a good summary of why your context menu may be annoying in an article at My Digital Life. The article includes a link to a ShellExView v1.37 by NirSoft. ShellExView is a cool tool if you are computer savvy, but not something I would recommend for your grandmother.

Of course, you can always do it the old fashioned way, i.e., regedit. Instructions on where to make the changes can be found at The WinVista Club.

On a related note, there is a good article at Computer World on how to manage your context menu in the "normal" way.

Friday, May 8, 2009

Good Reference for Agile On Boarding

As the author notes, on boarding is costly in Agile. He presents a nice template to reduce that cost at http://www.the-arm.com/2009/05/project-standards/

An FYW Enterprises Blog

Topics for this blog comes from my day-to-day experience. There are three ways you can directly influence the topics.
One option is to create an account and leave a comment. Option two is to email me at scott@fywservices.com*. Option three is to hire me to do your bidding, which will result in a blog post here (names withheld unless otherwise requested).

Please visit http://fywservices.com for details on option three.

*If your email client does not support using mailto: links, please feel free to use the contact form at http://www.fywservices.com/contact.php.

A Real Annoyance

The point of this post is getting rid of that annoying incompatibility notice about Real every time an update is made to FireFox. But first, a rant...


I am not a fan of the Real Player to begin with.  I certainly give it credit for being one of the early multimedia players. I also give them credit for being one of the first major abusers of the installation process, changing extension mappings without asking, installing itself as a service when it is only used occasionally, and being really obtuse in how to fix these problems afterward.   When I did PC maintenance service (before the Geek Squad, which people keep reminding me that I thought of four years before they did) I routinely removed the RealPlayer service and was always thanked for speeding up the machine.


I even tried to give the Real Player a second chance when they bought the Napster name. That lasted about 2 minutes past the installation where it still did all the things that annoyed me about the their 1.0 version. The Real Player is not installed on my personal machine. I used to routinely uninstall it from my work machine until my current employer decided to build their compliance training application using it. Which brings me to my point.


After updating the excellent password manager I use (RoboForm), I was once again confronted with this annoying screen.


[caption id="attachment_70" align="aligncenter" width="341" caption="Real Extension Annoyance"]Real Extension Annoyance[/caption]

My first shot in Google (remove incompatible firefox extension) got me pretty close to a solution with a Mozilla Support thread. The last entry in the thread did the trick for me. In case that link is dead, the entry was:



Ok, run the program "regedit" and goto "HKEY_LOCAL_MACHINE\Software\Mozilla\Firefox\Extensions\"


If there is nothing there try "HKEY_CURRENT_USER\Software\Mozilla\Firefox\Extensions"


There you should see the extension... delete the registry entry.


That worked for me...


The first path worked for me, too, specifically the key {ABDE892B-13A8-4d1b-88E6-365A6E755758}, with the value of "C:\Program Files\Real\RealPlayer\browserrecord"

Wednesday, May 6, 2009

FastSwap Feature of WebLogic Server 10.3

I'm the first to admit that if you are looking for breaking news, I am not the source. Broken news, maybe...

Anyway, I just noticed the FastSwap feature for WLS 10.3. This allows for updating classes in a running instance without having to do a full redeploy. If you have spent anytime developing WebLogic Portal applications, you know what a boon this is.  Two of the major productivity killers in building  WLP solutions is the time it takes to redeploy the whole portal to test every little change, and eventual Out of Memory errors that will occur with repeated redeployment of the same application.

Turning on the feature is a simple matter of updating weblogic.xml and weblogic-application.xml (see the documentation for the specifics).

One note of caution: This is for development use only. If your deployment processes do not include either deployment plans or environment-specific deployment descriptors, you will need to maintain a local copy outside of your normal source control.

Monday, May 4, 2009

Patch for WLS 10.0 ORA-00001 Error Messages in Logs

While the message does not impact functionality, if you have to read the logs it becomes tedious to scroll past the following over and over:

<BEA-403302> <An unexpected SQL exception occured java.sql.SQLException: ORA-00001:
unique constraint (PORTAL.PK_LEASE) violated.
java.sql.SQLException: ORA-00001: unique constraint (PORTAL.PK_LEASE) violated
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)

Not to mention how the fun of having every person who hasn't looked at your application before reporting it as a problem or insisting it is the root of a bug you are chasing (it isn't).

If you have a support account, you can surpress this with the following WLP 10.2 patch:

VZGR | 9AS6D7D9

Sunday, May 3, 2009

Next Step: Using MySQL on Vista

Once I got MySQL running on Vista, I then needed to manage it. While I ran MySQL from the command line eight years ago, that was, well, eight years ago. I remembered enough to get the server started, set up the root user, and find the databases that are pre-configured. This was enough to get my local version of WordPress running.

To do more interesting things for the casual user, the best tool I ever found is the one made by DBTools. I started using it with version 1.02, and find 3.2.4 just as delightfully simple and feature-rich as my first foray into getting fast results with very little ramp-up back in 2001.

I'm also notoriously cheap, and DBTools has a free version for personal use. Price aside, it is still my preferred tool for basic interaction with MySQL.

Saturday, May 2, 2009

WebLogic Workshop 10.2 Debugging

On a very long, large project where there are multiple portals I will create separate worskpaces for the different portals. Especially when developing shared libraries, to save time in unit testing and debugging. Once in a while, I would get this annoying message about the WebLogic Server not starting within the timeout period. The server does eventually start, but you can't debug without restarting.

Later in the project I had to run all of the portals in Workshop at once. Being able to debug become the norm, which is really annoying when trying to find bugs in code you have never seen before. I did some digging and found that the timout period was made configurable in an older version of Workshop. Originally, there were several versions of Workshop. Some were versions for specific products, like WebLogic Portal. Then they combined them in all into one. Unfortunately, the ability to configure the timeout was only in the WLP version and did not make it into Workspace Studio (the actual new name for Workshop that no one seems to use).

Long story short (yeah, I know, too late), I got the feature ported forward to 10.2. It is patch WW5U | F21UMQIN. Once the patch is installed, edit workshop.ini and add the following:

-Dweblogic.deployment.timeout=3600000
-Dweblogic.startserver.timeout=3600000
-Dweblogic.stopserver.timeout=3600000

3600000 is number of milliseconds, and is the maximum setting.  You can set it for whatever you want less than that, but why would you?

Friday, May 1, 2009

Installing MySQL on Vista Part 3

Mission accomplished.As noted in part 2, changing the path where tables are stored causes a failure. This is probably a Vista permission thing, which I will dig into deeper when I start building stuff on my machine where backing up the files is important again (it isn't, usually).

The only other comment on the great instructions from thesitewizard.com is in the Modifying Your PHP Configuration to Allow Your PHP Scripts to Use MySQL section, he leaves out the tip found in many PHP fourms of placing the php.ini file in the windows directory. For some reason I remebered doing this from my installation a year ago and didn't spend hours trying to find the fix I failed to blog or bookmark at that time.