Today is a good day to code

Why Separate Business Logic From Display Code – Is That a Trick Question?

Posted: December 31st, 1969 | Author: | Filed under: ColdFusion, Programming, Uncategorized | Tags: , | No Comments »

Why Separate Business Logic From Display Code – Is That a Trick Question?

Picture of Irv Owens Web DeveloperI was perusing the web the other day when I came across a site that was questioning the need for OO (Object Oriented) code in a language like ColdFusion. The author suggested that PP (Procedural Programming) was often faster as it involved much less overhead, and asked the question if it was truly necessary to strictly separate business logic from display code. I could see points in this persons argument up to this point. Not separate logic from display, was he mad? Still, to a developer who has not worked on complex applications, and has stuck strictly to commercial sites, I can see where the computing overhead and design complexity required of creating usable software would seem absurd. I can even see where EPAI (Every Page is an Island) can be of benefit in commercial sites with only several dynamic pages.

Having maintained large applications developed both with a framework and using elements of OO, as well as maintaining large applications built with no framework and EPAI, I can definately say that the applications developed with the framework and elements of OO are much easier to take care of. The primary reason is that there is a higher level of encapsulation per object, so that each individual object does only one task, and that task it could perform independent of any other objects. This way it is very easy to troubleshoot that one piece. As you continue through troubleshooting each piece you are most assured to find the issue. With EPAI, troubleshooting becomes difficult because each page has display logic mixed in, and can be performing several tasks, especially if it is sumitted to itself in forms. Even with appropriate variable scoping, it is still hard to determine what is setting what where.

I would suggest that the person who suggested that there was no benefit to separating business logic from presentation logic read Design Patterns by the Gang of Four, Gamma, Helm, Johnson, Vlissides. After reading a brief excerpt from the preface of the book I knew that it could help me solve some of my design problems. The issues in the book are real-world issues and as such the solutions make sense. After reading this book, the extra system overhead and complexity should seem worth it in many cases. However, this does not mean that it applies in all cases. Invariably there will be exceptions, for example where performance is the highest priority for a given operation. In this case you may wish to bypass the framework you have developed or are using for this operation, if the overhead it incurs is significant. This is just one example of many where design patterns and maybe even OO may not be the best solution to a problem. Remember, that is what programmers are doing, solving problems. Design patterns are just to give us more tools to do so.


Yahoo Considered ColdFusion

Posted: December 31st, 1969 | Author: | Filed under: ColdFusion, Programming, Uncategorized | Tags: , | No Comments »

New and Improved MSN Search

Picture of Irv Owens Web DeveloperIt seems that MSN has roughly the same amount of pages indexed as Yahoo and Google, and yet on almost every search they return fewer pages than either of it's contemporaries. I have noticed that MSN's relevancy tends to be pretty good, however it is possible to customize your queries to an extent with MSN with their sliders so you can choose whether you want the most popular results, the most current, or the most relevant via keywords. Also, MSN's search engine is much faster than Yahoo, and a little faster than Google, however this could be due to there being much lighter traffic across Microsoft's servers. But I would attribute the performance to a combination of good programming, and ASP.net.

I dont particularly like ASP.net, mainly because of the lack of a solid framework like struts for java to use. I also dont really like VB syntax, although I have to admit, in version 7 it is greatly improved. But back to searching, if you search for fusebox in Yahoo, you get about 1.1 Million records returned. If you perform the same search in Google, you get about 215,000 records returned. I believe that Google has had a recent shakedown of its index. In the MSN search you get about 245,000. In the Google results you get a lot of art studios, however in the MSN search you get articles about the fusebox framework almost exclusively in the first page of results. Yahoo gives you a mixed bag of results, seemingly alternating back and forth between the fusebox music site, and the fusebox web development framework. In my particular case I was thinking about the fusebox web development framework, but there is no real way for a search engine to know that.

Prior to this week, MSN's search results were pretty useless, Im glad to see that Microsoft is working to do things a little differently. I notice that in my case I have back-links reported in MSN, but they are not listed in Yahoo and Google. Still, I tend to place higher in the SERPS on Yahoo and Google, and often I shouldn't. I think Microsoft is branching out and using different algorithms, instead of checking Google's results and altering their algorithm based on the adjustments to Google's index. That is lame and I think that more search engines should try new things.


Fusebox 4 vs Mach-II

Posted: December 31st, 1969 | Author: | Filed under: ColdFusion, Programming, Uncategorized | Tags: , | No Comments »

Fusebox 4 vs Mach-II

Picture of Irv Owens Web DeveloperIn working with these frameworks for more object oriented code in ColdFusion, I have noticed some interesting facts. It appears that Fusebox 4 is way faster for small applications from an execution standpoint than Mach-II. Mach-II is of course way more robust in terms of near OOP utopia, however a decent level of simulated object-orientation is possible using Fusebox 4.1 if you take advantage of it's ability to natively work with CFCs.

In messing around with the sample applications that are available from the fusebox.org site, I have been modelling some of the speeds in my local development environment. When I tell both that they are in a production environment, their respective speed picks up admirally. If however, they are set to development, they remain quite slow. I would greatly prefer Mach-ii over Fusebox 4.1 for huge applications, as it seems to do much better with object orientation while using CFCs. It's light framework does a much better job than the heavier framework that supports Fusebox 4.1. Mach-ii seems to have been built to specifically work with ColdFusion MX and better, while Fusebox 4 still needs to support ColdFusion 5. This appears to add the extra weight to the runtime. If you want to get as close as you can to true OOP in ColdFusion MX, then Mach-ii is as good as it gets.

fusebox.org


ColdFusion “Scorpio” Possible New Features

Posted: December 31st, 1969 | Author: | Filed under: ColdFusion, Programming, Uncategorized | Tags: , | No Comments »

ColdFusion “Scorpio” Possible New Features

Picture of Irv Owens Web DeveloperOver on Ben Forta's blog, www.forta.com, he has a discussion running about new features for ColdFusion MX 8. One of the things he suggests is tighter integration with Microsoft Exchange. I think that would be very cool, but I'd agree with some of the readers over there that some type of iCal support would be sweet along with the ability to interact with a mail server using IMAP.

I'd like to use the Exchange interaction to allow my applications to use the events for a particular user as a trigger, for example, if a user had an event set up for a particular meeting room using a custom ColdFusion meeting booking system, the server could see if that room were still free about two hours before the meeting and if it weren't, it would send an email to all the meeting participants, in the Outlook format, to reschedule the event or change its location.

That's a really simple way to use it, and I'm sure there are others, but it would be helpful. I would like to see IMAP support so that I wouldn't have to actually pull down a user's mail in order to display it using the cfpop tag. It would be nice to have a customizable mail interface.

What I would really be interested in was an optional built in framework of some type, and upgraded SESSION management. While I don't mind having to use cflock whenever I am using SESSIONs, it would be really cool if I didn't have to use it. I also think that it would make development much easier for those who don't read up as much as I do, fail to use cflock, and end up with large applications with SESSION breakdowns. It might be cool to have another type of shared scope for objects that would automatically check to see if there were an instance of the object. If there was, then the system would use that instance unless told not to. If there were no instance, it would load a new instance from the disk.

Wow, I thought I had no real opinion about the upcoming version of ColdFusion, and that I was pretty happy about its current level of functionality, but I guess there are a couple of suggestions that I could make. More support for Mach-ii and other frameworks via a system level plug-in would be nice. Perhaps if they were more integrated into the application server, they could allow more convention-over-configuration like rails.


Preventing Comment Spam With Spamhaus in ColdFusion and Java

Posted: December 31st, 1969 | Author: | Filed under: ColdFusion, Programming | Tags: , , , , | 3 Comments »

Preventing Comment Spam With Spamhaus in ColdFusion and Java

Recently I turned comments on again for my blog, but I started getting hammered with spam comments so I looked into trying to figure out how to stop spammers.

Most people rely on some type of image based spam prevention. This is probably performance wise the best solution, the problem is when people with poor eyesight come in, or actual people come to spam your site. This solution doesn’t prevent that scenario.

A client of mine got me to look into SPF for protecting everyone else from someone masquerading as us. That somehow led me to spamhaus again. I had always thought of using them for spam filtering, but what I didn’t know is that you can use them for web submission protection. On the site, I learned that implementing their blacklist filtering is really easy to implement. Basically the way they work is that you supply part of your visitor, whether they are sending an email on port 25 or whether they are visiting on port 80, since Spamhaus includes their web site on their black list, if someone is sending spam mail, they will return for an http request.

Basically you have to send a request over to Spamhaus’ zen DNS server. If it returns a value, then they are a spammer, or at least they are listed at Spamhaus as a spammer. The method you use is you reverse the bytes of the IP address, for example if the IP address is 2.3.4.5 then you would send a DNS request over to Spamhaus like 5.4.3.2.zen.spamhaus.org. For Java and ColdFusion, I use InetAddress, but there are methods in every language to perform these tasks.

To do this in ColdFusion you could use code that looks like this:


<cfset address = CGI.REMOTE_ADDR />

<cfset addressArr = listToArray(address,".") />

<cfset newArray = ArrayNew(1) />

<cfset newArray[1] = addressArr[4] />

<cfset newArray[2] = addressArr[3] />

<cfset newArray[3] = addressArr[2] />

<cfset newArray[4] = addressArr[1] />

<cftry>

<cfset inet = CreateObject("java", "java.net.InetAddress") />

<cfset inet = inet.getByName(arrayToList(newArray,".") & ".zen.spamhaus.org") />

<cset hostName = inet.getHostName() />

<cfif hostName NEQ "">

<cfreturn />

</cfif>

<cfcatch type="any">

<!-- do nothing -->

</cfcatch>

</cftry>

To explain, in the first line you are starting a cftry / cfcatch block. The reason for this is if the visitor’s server is clean, it will throw an error because it won’t be able to get a response. However, if it doesn’t throw an error, it will be able to complete.

So the way this code works is that it takes the visitor’s IP address, splits it into an array, copies it into a new array, and then reconstitutes it into the IP address string but backwards.

It then creates an instance of InetAddress and calls the getByName method passing in the created address and waits for a response. If it doesn’t get one, it does nothing. If it does get one, and the result is something that isn’t an empty string, such as 127.0.0.2, it will return and not allow whatever it is protecting to be executed.

If you are using Java the code could look like this:

try{

InetAddress inet = new InetAddress();

inet = inet.getByName(backwardsip.zen.spamhaus.org);

// this should return an IP, but it really doesn’t matter what it

// returns

String hostName = inet.getHostName();

// this is just to catch a possible error

if(hostName.length() > 0){

System.out.println(‘Visitor is dirty’);

return;

}

}catch(Exception e){

System.out.println(‘Visitor is clean’);

}

So far this is proving to be a good way to check for bad commentors. The problem is that if you are a high-traffic site, Spamhaus will want to charge you for the use of their static list. If you are a high-traffic site, you would want it anyway for performance reasons. I think the cost may be worth it though in hassle.


Ruby on Rails

Posted: December 31st, 1969 | Author: | Filed under: ColdFusion, Programming, Uncategorized | Tags: , | No Comments »

Ruby on Rails

Picture of Irv Owens Web DeveloperI'm definately suffering from infatuation with another web development language. I'm hesitant to call it love yet because I have been burned so many times before, but I think I love Ruby on Rails on first sight.

For a fully object oriented framework, Ruby on Rails is downright easy. Easier than easy. It also sports a very clean syntax similar to Python in its readability, and the fact that it does almost all database stuff for you is killer. I can see excellent applications for Ruby in prototypes, and perhaps web applications. I still think it needs to be used in enterprise, but it is holding up under some pretty heavy loads right now. I'll be working with it more in the coming days and weeks, as I am very curious as to how it will compare with ColdFusion.

For years I have thought that ColdFusion couldn't be beat for “Rapid Application Development.” But here is an application plus framework that beats it as far as time to market, but also does it in a completely OO way. I have been working to develop my own framework for a couple of days now, and I think that I'll start trying to mimic Rails' functionality for ColdFusion. But the reflection, etc… I don't know if I am up to the task of that.

The other nagging question about Ruby on Rails is how customizable it is as far as if you really want to get down to the nitty gritty. It does a lot of cool high-level stuff for you as far as the database interaction is concerned, but as far as delivering views that comply with XHTML Strict, and ECMA Script standards, I don't know. If I find myself having to rebuild all of the views from scratch it wouldn't be too bad, but I'd rather not.

One other really nice thing out of the many nice things about Ruby on Rails is that it creates nice search engine safe URLs for you, from the start. It truly seems that this language was made to be the web developer's language. It is so young now that to compare it to ColdFusion is almost heresy, but I find myself doing it.

Ruby on Rails


Flash Forms in ColdFusion MX 7

Posted: December 31st, 1969 | Author: | Filed under: ColdFusion, JavaScript, Programming, Uncategorized | Tags: , , , | No Comments »

Flash Forms in ColdFusion MX 7

Picture of Irv Owens Web DeveloperOne of the coolest things in the not-so-new-anymore ColdFusion MX 7 release is the ability to use Flex and ColdFusion tags to generate Flash components without having to design them. One of the perennial headaches for a web developer has been the difficulty in creating self-validating forms, and grid components that could take the stress of sorting off of the web or database servers.

I am not really too into screenshots so I will just show you a sample of the new flash forms. I am not sure if they validate or not, but they are definately cool. The built in forms validation is excellent also, it is handled completely on the client. If you press the submit button without entering any text in the you must enter some text field, it will show you the error. The binding is sweet too, you can bind one item to another in a form. If you notice, when entering text in the top box, you will see the bottom box mirroring it.
Flash Form Example

That is sweet for many different reasons, here is the code behind it:

<cfform name="code" action="http://www.owensperformance.com/test/formExample.cfm" method="post" format="flash" height="600" width="639" preloader="true" timeout="100" preservedata="yes">

<cfformgroup type="tabnavigator">

<cfformgroup type="page" label="Text Entry">

<cfformitem type="text">Enter Some Text

<cfinput name="aninput" type="text" required="yes" message="You must enter some text" />

<cfformitem type="text">Bound to the Above Text Box

<cfinput name="bound_input" type="text" bind="{aninput.text}" />

<cfformitem type="text">A Text Area

<cftextarea name="moreText" value="Some More Text" />

</cfformgroup>

<cfformgroup type="page" label="Grid Component">

<cfgrid name="myGrid" width="624" height="350" query="theQuery" format="flash" align="absmiddle">

<cfgridcolumn name="title" header="Title" />

<cfgridcolumn name="dateEntered" header="Title" />

</cfgrid>

</cfformgroup>

</cfformgroup>

<cfinput name="Submit" value="Submit" type="submit" />

</cfform>

Another really cool item is the cfgrid component. It is a fully featured flash grid that can show any number of objects. I am toying with the idea of implenting it on my search page, using javascript to show and hide the results, but that seems like overkill. I would show one to you in action, but you’ll just have to settle for the code.

This will create a nice grid component that handles sorting for you. It will draw its data from the query myQuery. Each column will pull from the field in the database according to its name. For example the date column will get its data from #myQuery.date#. The others will get their data similarly. I don’t know why I didn’t use flash forms before. They are certainly cool. You can bind to the data in the columns so you could have a field that would allow you to edit the currently selected field in the database. This is extremely handy in creating sensible and usable forms. I hope this helps, some java application servers don’t support flash forms, in fact I am not certain that this one will. However I’ll try, if it doesn’t work, at least the code may be helpful.