Posted by: ivyclark | January 3, 2008

Great news for Web Analysts!

According to WISTV, things are looking for those of us working in the Internet arena. In her article, “Today’s Top Careers: 2008 and Beyond“, Debbie Strong highlights how technology has been a factor moulding the job markets.

Companies everywhere are allocating resources to developing effective Web sites, says O’Donnell. [GL1] She points to Web analytics as a specific, cutting-edge job choice. “Companies need people who can make their sites easy to navigate and visually impactful, so Web analysts need to understand human psychology and also be slightly obsessed with the Web,” she says. “A coordinator position with a keyword-driven marketing and Web analytics firm may earn somewhere between $30,000-$40,000, starting out, depending on where the job is located,” she adds. With more experience, Web analysts can expect to earn an average of between $52,000 to $75,000, according to the Bureau of Labor Statistics (BLS).

Her article also covers other industries. If you are in Sales, Management, Healthcare, Education or Ecoscience, you can refer to her article too.

Posted by: ivyclark | December 27, 2007

10 common web design mistakes

Suddenly remembered an article from Techrepublic which I read a couple of months ago on the above topic.  Definitely something beginners and seasoned web designers need to remember:

  • Failing to provide information that describes your web site
  • Skipping Alt and Title tags
  • Changing URLs for archived pages
  • Not dating your content
  • Creating busy, crowded pages
  • Going overboard with images
  • Implementing link indirection, interception or redirection
  • Making new content difficult to recognise or find
  • Displaying thumbnailsthat are too small to be helpful
  • Forgoing web page titles

You can read this article at: Techrepublic, which is based on another article also available at Techrepublic (10 ways to improve the design of your commercial web site).

In addition, should also be avoided:

  • Using more than 4 font types in 1 page
  • Having more than 5 animated banners
  • Pure flash sites
  • Presenting content only in images
  • Using high resolution images and videos that require long download time.
  • fixing your font size by px, rendering the browser resize option useless
Posted by: ivyclark | December 18, 2007

Tabbed content using CSS

When there is just far too much content to squeeze into 1 page, sometimes it helps to divide the page up into tabs. Although this may not be so appropriate for textual web content, this approach is definitely useful if you are in the middle of screen design for a complex web application. For instance, in an enquiry screen whereby the information to be displayed has a complex-multilevel parent-child relationship, a multi-layer tab approach can help to make the steps appear clearer.

We’ve been doing some research into the display of tabbed content lately and came across the following resource:-

The Dynamic Drive one was my favourite, although we ended up using our own afterall. But thanks goes to these guys for sharing their solutions and inspiration with us.

There are lots of css tabbed solutions out there, but these stood out to me.

Posted by: ivyclark | December 17, 2007

Trapping malicious codes in your cfm sites

I came across this sometime ago, but complete forgot about it. If you are looking for ways to trap malicious codes in your cfm sites, have a look at this:


Function isHackAttempt(MaliciousCode) {
//Set the Regular Expression used and any local vars
Var strRegex = "(%)|(-- )|(' )|(script)|()|(%3c)|(%3e)|(script)|(SELECT)|(UPDATE) |(INSERT) |(DELETE) |(DROP)|(GRANT) |(REVOKE)|(UNION)|(<)|(>)";
Var blnCodeDetection = False;

//If argument is a Structure loop through it
If (IsStruct(MaliciousCode)) {
For (Field in MaliciousCode) {
If (REFindNoCase(strRegex, MaliciousCode[Field])) {
blnCodeDetection = True; //Malicious code was found, set flag var
}
}//If argument is an Array loop through it
} Else If (IsArray(MaliciousCode)) {
For (x = 1; x LTE ArrayLen(MaliciousCode); x = x + 1) {
If (REFindNoCase(strRegex, MaliciousCode[x])) {
blnCodeDetection = True; //Malicious code was found, set flag var
}
}//If none of the above its an individual variable
} Else {
If (REFindNoCase(strRegex, MaliciousCode[Field])) {
blnCodeDetection = True; //Malicious code was found, set flag var
}
}
Return blnCodeDetection; //Return the boolean result
}


Then all you need to do is figure out what you want to do with the errors that have been trapped – e.g. if isHackAttempt is true, display an error message.

Place the above code in your application.cfm and customise according to your specific needs.

Posted by: ivyclark | December 14, 2007

Interesting quote…

To live is the rarest thing in the world. Most just exist, that is all. – Oscar Wilde

We are limited, not by our abilities, but by our vision. – Anonymous

For more, go to http://www.mp3quotes.com/motivational-quotes.html

Posted by: ivyclark | November 21, 2007

“.asia” domains – And let the race begin!

Well, here we go again.

Anyone interested in a .asia domain can express their interest on www.asiadns.com.

According to EuroDNS, “While this service cannot be a pre-registration until the actual .asia rules are finalised, it is an increased chance for any potential domain registration to be considered and will allow Do.asia and EuroDNS to get a better feel of the market.”

ICANN and Do.asia signed the .asia registry agreement on 6 December 2006 at the ICANN annual meeting in Sao Paulo, Brazil following the ICANN board approving the designation of the .asia sponsored top-level domain on 18 October 2006. Do.asia is the first gTLD registry with a headquarters in the .asia-Pacific region. Do.asia Organisation (http://www.do.asia.org) is a membership-based not-for-profit corporation located in Hong Kong that was created in March of 2004 for the purpose of submitting a proposal to ICANN to operate a new TLD registry for the .asia top-level domain (TLD).

Let us remember that new domains have always been and will continue to be created. We have to therefore ask ourselves where we should draw the line and where this domain acquisition should stop.

Let’s have a quick glance at the long list of available domains:

Domain name examples

And this is just a short list. A rough count reveals over a hundred possible domain names. Now, this most certainly puts things in perspective, doesn’t it?

Having said that… I can’t ague against grabbing domains with your company name or brand name to prevent anyone else from owning them, to avoid any future nasty ownership issues. But, which person in the right mind choose to buy all the domain names available? The answer is nobody, except people who collect domains. Yup, these people do exist.

And of course, the only people who will profit from this are the domain registrars. More $$$$$$ for them each time such a frenzy happens…

Posted by: ivyclark | November 16, 2007

I found a friend!

Yay, I’m so excited.  I recently found out one of the freelancers I work with is quite “universal accessibility” savvy!  Her name is Divya.  This is a good sign for me as it means there is slowly, but surely, more an more emphasis placed on web usability in Singapore.  Having pushed for it over the past 3 years but not making much progress has been quite depressing.  So now, I have found new inspiration to rekindle my enthusiasm.

Up to now, there is little emphasis on web accessibiltiy in Singapore.  Most sites are still designed and built around tables.  And some done by traditional agencies are in fact neither accessible via non-graphic enabled browsers no are they searchable, as they are basically htmls with a single image plastered within the pages.  Although they look nice, they take ages to load and do not offer search engines any information pertaining to the sites.  This makes the sites simply a waste of time, money and effort.  But this is what you get, if you get the wrong folks to do the task for you.

It would have been good if they were professional about it and turned the job down or leave it to the rest of us who know what we are doing.  Unfortunately, that is not the case.  They get away with it as customers don’t verify the codes and will not find out until it’s too late.  The result? Sites with fantastic creatives that offer nothing else.

Posted by: ivyclark | November 16, 2007

Follow-up on coldfusion jrun server problem

Here’s the final update. Sorry it took so long. Having isolated the problem and put in a quick fix through rectification of the database entries, we needed time to run through our codes to locate the point(s) of failure.

Turns out, the error was not caused by Coldfusion after all. We have a piece of code in our application which generates the breadcrumb which flag to users their current location on the site. Unfortunately, the code did not cater for adnormal situations.

An example of such would be when a child page (which exists), is related to a parent page which doesn’t. This is what happened.

During our troubleshooting:

  • We walked through the database entries to identify any corrupted or errornous data, and didn’t find any.
  • We also checked for possible updates applicable to the web server, application server and jrun, but decided to implement this if all else failed.
  • Various server settings were changed to improve the system performance, but this didn’t solve the problem.

There has not been any changes to the application since 2005.

It seemed the application ended up in a loop still looking for a parent which its never able to find. Yup, we didn’t see this coming at all, as each time a child page is added, we would relate it with a parent which exists…

Unfortunately there is a hardcoded value within one of the pages which contributed to this error. That page references a hardcoded url. And although that page exists, it didn’t have a parent associated with it in this particular site. (The page is shared across our sites).

So it’s down to the nitty gritty. Janice helped me to search for the fault and finally able to locate it after sifting through our various .cfc and .cfm codes, doing dry runs based on the faulty data.

durr… So this is ultimately a case of human error. But that is no excuse, so we have added in the check into the application. Well, we live and learn.

The upside is, our application now handles the anomoly, it was a good learning experience for the team as we have never tweaked any of our coldfusion server settings before, and we are all aware of possible problems that can arise from the settings plus our current server capacity.

Posted by: ivyclark | October 16, 2007

Still having jrun error…

The setting changes didn’t help, so Nithi has helped to put in the min and max java heap size setting in Coldfusion to 512 and 756.  This seems to have helped stabilise the high CPU hogging by jrun from a constant of 98%-100% to 80%-90%.  However, we feel the cpu utilisation shouldn’t be so high.

To get the version and vendor information from the JRE on our server, we used this link: http://javatester.org/version.html.

Java Version 1.5.0_12 from Sun Microsystems Inc.

Then, from a reference table on the same page, the site informs that our version is the latest version as of Dec 2005!

Next, we looked at the system error logs to see if there’s anything else we can find.  Lots of exceptions and it seems the warnings and exceptions have been there since a long time ago.  To me, its and indication that we need to look into this, but this may not be our immediate concern.

Mark Kruger (http://mkruger.cfwebtools.com/index.cfm?mode=alias&alias=err.log) suggests that log file size could contribute to system slow performance.  He suggests that attributes in jrun.xml can be used to rotate the log files more efficiently, preventing them from getting too big:

<service class="jrunx.logger.LoggerService" name="LoggerService">
...
<attribute name="filename">{jrun.rootdir}/logs/{jrun.server.name}-event.log</attribute>
...
</service>

Can be changed to:

<attribute name="filename">{jrun.rootdir}/logs/{jrun.server.name}-{log.level}.log</attribute>

Only problem is… it doesn’t work for the -err file.

 

Posted by: ivyclark | October 15, 2007

Notes while troubleshooting jrun error

The cleanly setup system didn’t solve our problem.  So now, we are exploring the following changes, as recommended by the resources I have listed in my earlier entry:

  • review settings in jrun.xml
  • upgrade jvm

Reviewing jrun.xml

The following extracts show the current settings in our jrun.xml:
<service class="jrun.servlet.http.WebService" name="WebService">
    <attribute name="port">8500</attribute>
    <attribute name="interface">*</attribute>
    <attribute name="deactivated">true</attribute>    
    <attribute name="activeHandlerThreads">200</attribute>
    <attribute name="minHandlerThreads">1</attribute>
    <attribute name="maxHandlerThreads">1000</attribute>
    <attribute name="mapCheck">0</attribute>
    <attribute name="threadWaitTimeout">20</attribute>
    <attribute name="backlog">500</attribute>
    <attribute name="timeout">300</attribute>
  </service>

<service class="jrun.servlet.jrpp.JRunProxyService" name="ProxyService">
    <attribute name="activeHandlerThreads">25</attribute>
    <attribute name="minHandlerThreads">1</attribute>
    <attribute name="maxHandlerThreads">1000</attribute>
    <attribute name="mapCheck">0</attribute>
    <attribute name="threadWaitTimeout">20</attribute>
    <attribute name="backlog">500</attribute>
    <attribute name="deactivated">false</attribute>
    <attribute name="interface">*</attribute>
    <attribute name="port">51010</attribute>
    <attribute name="timeout">300</attribute>
    <!-- set this to false for multi-hosted sites -->
    <attribute name="cacheRealPath">false</attribute>

We have changed the settings as follows:
<service class="jrun.servlet.http.WebService" name="WebService">
    ....
    <attribute name="activeHandlerThreads">100</attribute>
    <attribute name="minHandlerThreads">5</attribute>
    <attribute name="maxHandlerThreads">300</attribute>
    ....
  </service>


<service class="jrun.servlet.jrpp.JRunProxyService" name="ProxyService">
    <attribute name="activeHandlerThreads">100</attribute>
    <attribute name="minHandlerThreads">5</attribute>
    <attribute name="maxHandlerThreads">300</attribute>
    ....
</service>

« Newer Posts - Older Posts »

Categories