Inspired by Sean’s example, I asked myself, “Why doesn’t Squidhead have a mailing list?”
“I don’t know,” I replied.
So now I have one. Feel to join and pester myself and the 2 other people that will join.
Inspired by Sean’s example, I asked myself, “Why doesn’t Squidhead have a mailing list?”
“I don’t know,” I replied.
So now I have one. Feel to join and pester myself and the 2 other people that will join.
Squidhead has gone through a little resurgence since I got back from MAX. It’s happened for two main reasons.
But it occurs to me that I could/should do a better job explaining why you might want to give it a longer look.
Squidhead might be for you if:
Squidhead might give you an excuse to:
Squidhead isn’t for you if:
If you’re interested, here are some resources for you:
Um, hey, did some of you try and download the Flash version of the video? Um, yeah, and did it crash your browser, and possibly crash your computer?
Sorry about that.
I’ve fixed the Flash version and it shouldn’t do that anymore. I should have gone with Flash Video encoder in Flash CS3 from the get go.
I’ve long thought about doing a blog in 15 minutes demo of Squidhead. But come on, everyone’s done one by now, right?
Then I thought about ColdFusion 8 and its image capabilities, and the image CRUD that I’ve added to Squidhead and thought maybe a facebook type application would be more compelling. So I did it, and put it up on Google Video. (cause I couldn’t get it under 10 minutes.) Then I saw it on Google video and was repelled by the quality of the video. So I have few options to watch it below.
I show off three features of Squidhead in the video:
If anyone watches it, please let me know what you think.
UPDATE: It appears that the Flash Version will cause your computer to crash. Sorry about that. I will have a replacement up at some point in the very near future.
UPDATE:Flash Video version works now.
I’ve been noodling here and there and have finally put the finishing touches on Squidhead 2.0.
Before I started rewriting, I spent some time developing more applications with Squidhead. I figured out a couple areas of inefficiency and tried to fix them when I could. Creating configuration files took longer than it should and was a bit confusing. I found myself writing Ant scripts for all of my applications. I kept forgetting to test my applications.
Further when I was maintaining the actual Squidhead codebase, some things were frustrating. Maintaining a separate code base for ColdFusion 8 and ColdFusion 7 was a pain in the ass. Maintaining a simple version and a business version was a pain. Adding new features required a series of cascading tweaks because it was poorly architected.
So here are the solutions to all of those issues and a few more for good measure.
New features:
* CF 8 features can be turned off if application will not be running on a CF8 server.
Deprecated Features:
Removed Features:
Requirements:
Notes:
Old versions of Squidhead still available at http://www.numtopia.com/squidhead.
The new version is available at Riaforge.
I’m working on some improvements to Squidhead, and a few of them relate to Ant. The new version of Squidhead creates Ant build files. In addition to Ant tasks for rebuilding and refreshing the application, there is also one for running all of the CFUnit tests that Squidhead creates.
Since I’m trying to highlight the ability to add steps to Squidhead applications, I was thinking that it might be cool to not just write the tests as part of the Squidhead build, but also run the tests as part of the Squidhead. Including the ColdFusion autorunner for the reports didn’t work. Because both CFunit and Squidhead rely on <cfflush>. So I fired up CFAnt to see if it would run. It didn’t. It through an error that stated: BUILD FAILED… askdef class net.sourceforge.cfunit.ant.CFUnit cannot be found.
I copied the version of cfunit-ant-v3-alpha.jar I use with Eclipse to my ColdFusion8/lib directory, restarted the server and voila: BUILD SUCCESSFUL.
Ant in ColdFusion is cool.
Oh and I imagine the same tip would help you to run CFCUnit tests to run from <CFAnt>
I’m doing some serious thinking about the future of Squidhead, and I some stuff I wanted to run by the small but plucky group of Squidhead users that are out there.
It’s gotten a little unwieldy to do updates for both a ColdFusion 7 and 8 version of the feature set. Additionally, the whole business objects and non-business objects version is also getting hard to support. Finally, there are a whole bunch of features I would like to support but require ColdFusion 8. So here is what I am proposing:
Once I did that, I could do the following:
I’d be happy to hear any feedback you might have on these proposals. Assuming no one objects, I would publish one last version of the old code as 1.0, and then start pruning and working on what I would call version 2.0. (I would also come up with a more standard versioning system.)
I published a change to Squidhead earlier today that included an option for Squidhead to write its own unit tests today. These unit tests are compatible with and require CFUnit. Here’s a little bit about the reasons behind this.
I originally started fooling around with unit testing because after drinking Pragmatic Programmer Kool-Aid, and attending cf.Objective, it was the next thing on my list. I figured I would be pulling them into Squidhead, as it’s pretty easy to tell if Squidhead worked (the application is either written or not,) but it’s hard to tell if the created application is working. So I started to write unit tests for my DAO Objects figuring it would be an easy place to start. Once I got one working, I realized it was relatively rule based and could stand to be generated itself.
What it does is:
All that is wrapped in a <cftransaction> making sure the thing never happened. Additionally it reads in and honors foreign key constraints. It’s got some weaknesses: it doesn’t like binaries or images; its smalldatetime check is only accurate to the hour; and there are probably more bugs lurking.
Now once I got them working, they were in, but what’s the point for users of the application? One should expect that the parts work.
So to make this worthwhile I added some logic that will run any test that is in the test directory structure. So if you’re using Squidhead and looking to dip your feet in the waters of CFunit or unit testing in general here’s your chance.
If you’re wondering why CFUnit, and not CFCUnit, it’s because as far as I can tell CFCUnit requires Mach II, and I figured one requirement was better than two.
So if anyone has any suggestion on how to test gateways or dao’s I’d be curious. Otherwise check it out.
Over the last few days, between the inspiration I got from cf.Objective(), and some positive internal feedback regarding Squidhead, I was inspired to make some cool additions (Or what I consider cool editions.) I figured I would share.
Business Layer
Dave Konopka advocated for a layer between the DAO and UI for awhile, as I explain in my last Squidhead update. Well he finally got it. Basically it’s the place where you want to put all of your logic for dealing with the objects as they will be interacted with by the UI.
XML Structure Cache
I wanted to do a few things to overcome the fact that the database is does not contain enough metadata to handle certain things. But I didn’t want people to have to start with XML to start working with Squidhead. Solution: an XML version of the variable structure that Squidhead uses to generate all of the procedures, functions, cfc’s, custom tags, and cfml pages for an application.
So what happens is that at some point you freeze changes on the database, then you set Squidhead to use the disk cache instead of the database. It will then allow you to change a couple of things in how the application works.
Currently you can only change three things (and have the change do something useful):
Which leads me to…
Foreign Key Support
Squidhead now understands foreign keys. Here’s how it works:
Form UI – On forms that interact with tables with foreign keys, Squidhead will produce a select box of the aforementioned “foreign key labels.”
List and Read UI- These components now call separate stored procedures that properly join the requisite tables to show the appropriate “foreign key label” in lieu of the actual value.
I haven’t done anything with children objects or anything yet. Basically the change was to make the UI a little more useful.
My next pass of updates will be documentation related, as I’ve fallen behind.
Anyway give a try when you get a chance. Get it at RiaForge.
Squidhead is swimming along nicely. I’ve gotten some good suggestions, over the last few weeks, and figured I would post what’s going on.
Dave Konopka, who works with me here at Wharton, has a pretty good complaint about Squidhead. Basically his complaint is that there needs to be another layer between the DAO and UI. We’ve taken to calling it the Business layer. Basically, many times his basic interaction with the database requires more than just one DAO operation, and often other operations not related to the database (logging, email, etc.) So to achieve perfect encapsulation and reusability through the application, he requires the business layer.
He provided me with a good bit of code for it, which will create Business beans for any of the DAO operations. Additionally it abstracts the whole “Is it an add or is it an update” logic, making the UI have to do less work.
I’ve added the business CFC creation routine to Squidhead and am working on rewiring the UI to use it. It will be optional, so that existing applications don’t break, but it will be set to the default way of doing stuff.
Finally, I did get some requests for Fusebox integration, and MySQL compatibility. I’m working on those, but Dave’s in my office, so he gets to sell me this stuff right to my face.