Categories
Contact Doug!
Learn About Doug!
View Doug Boude's online resume
updated 11/18/2009

View Doug Boude's profile on LinkedIn
Link to me!

Follow Doug Boude on Twitter
Follow me!

Be Doug's friend on Facebook
Befriend me!
(I promise not to follow you home)
OO Lexicon
Chat with Doug!
Recent Entries
You may also be interested in...
Web Hosting

<< April, 2011 >>
SMTWTFS
12
3456789
10111213141516
17181920212223
24252627282930
Search Blog

Recent Comments
Re: Disappearing IE Popup Window During Save/Open Dialog (by LZ at 4/20 7:58 AM)
Re: Create Dynamic WHERE Clauses in PHP (by pooja at 3/20 7:29 AM)
Re: Just What IS a 'Service Layer', Anyway? (by EugenK at 3/07 7:56 PM)
Re: Using Google as your CF Mail Server (by 5starwebteam.com at 2/25 1:27 AM)
Re: Why Provide for Service layer objects in CFWheels? (by Steven Benjamin at 1/25 11:43 AM)
Re: What is an 'Advanced' Coldfusion Developer? (by ColdFusion Developer at 12/24 5:14 AM)
Re: Equivalent of SQL "TOP X" in Oracle (by Ashenafi Desalegn at 12/06 5:29 AM)
Re: PHP Export to Excel Snippet (by serene at 12/05 1:44 AM)
Re: Just What Is 'Application Logic', Anyway? (by Arif at 11/13 8:06 AM)
Re: Hosts File Changes Not Acknowledged on Vista 64 (by Aaron at 10/22 2:31 PM)
Re: PHP Export to Excel Snippet (by Jafar Shah at 10/10 4:28 AM)
Re: Viewing Option Text (in IE7) that's Wider than the Select List (by Chenelle S at 10/04 12:53 PM)
Re: PHP Export to Excel Snippet (by Kilo at 9/26 5:20 PM)
Re: Porting Coldfusion Code to Mura (by tariq at 9/03 9:51 AM)
Re: Just What IS a 'Service Layer', Anyway? (by James at 8/27 4:06 PM)
Re: Calculating Business Hours (by helen at 8/14 2:54 AM)
Re: What IS 'Business Logic', Anyway? (by dougboude at 8/06 11:30 AM)
Re: What IS 'Business Logic', Anyway? (by Adrianne at 8/06 10:29 AM)
Re: Family Law: The Weapon of Choice for Woman Scorned (by dougboude at 8/04 4:39 PM)
Re: Family Law: The Weapon of Choice for Woman Scorned (by Lola LB at 8/04 7:43 AM)
Archives
Photo Albums
Funnies (5)
Family (3)
RSS

Powered by
BlogCFM v1.11

28 April 2011
My Short Open Letter to President Obama

Via HeritageAction.com, I composed and sent an email to President Barack Hussein Obama II today. If you would like to send the White House an email of your own, you may do so at http://capwiz.com/heritage/issues/alert/?alertid=43827501

My Email, 04/28/2011:

Thank you for receiving my message.

Every single responsible household in America right now lives within a budget. We list our needs, we list our wants, we prioritize those items, and then we apply our income to that list until we run out of cash...AND THEN WE STOP SPENDING. These are the actions that responsible adults take on a regular basis in order to ensure that tomorrow they still have the ability to care for themselves and their families.

In 2008, We The People opted for "hope and change" versus McCain's promise of "more of the same". Unfortunately for us, we didn't take the time to ask you to explain your definition of "hope and change". Mr. President, you have sorely disappointed the majority of us with your lack of leadership, your purposeful destruction of the American economy and reputation, and your blatant apathy towards all of us when we called out to you to hear what we had to say. We gave you a good shellacking in November 2010, alright, and I guarantee you that in 2012 you will be respectfully ushered out of the most important position on this planet and will go down in history as "the man who attempted to bring America to her knees". You had an opportunity in 2010 to wake up and smell the overpriced coffee, and purposefully chose not to do so. For that, your consequences are that you will be a one term president with a less than favorable history.

I sincerely wish it could have been different, because I, as a conservative independent, voted for you Mr. President. I believed in you, as millions of us did, and you have purposefully let us down. That's the part that hurts the most: you are doing this on purpose, for your own selfish reasons. You're hurting all of us and our posterity, and you do not care. If you did, plain and simply, you would listen to us and you would do your best to serve us rather than dictate to us.

If you have any shred of humanity in you, reach down deep and grab on to it. Stop the insanity of spending us into oblivion. Stop. You may choose not to do so, in which case We The People will rise up as our constitution has authorized us to do and we will remove you and your policies swiftly and permanently. But wouldn't it be a better ending to the story if you simply did the right things yourself?

Anyway, I just felt the need to share these thoughts with you. As challenging as you make it, I do still harbor a respect for you, if for no other reason than I know it is what our Founding Fathers would have done in this situation.

And if you're open to recommendations, I recommend that you NOT waste a billion dollars campaigning for another term if you're not going to actually do anything different from here on out. Your hard left stance dooms you to nothing but exhausting road tours and speeches, an eventual empty campaign coffer, and a final, humiliating concession speech. Your beloved leftist unions are bailing on you, and even if they didn't, they don't represent We The People sufficiently to carry you through. The Independents, such as myself, lost faith in you by mid 2010 and it hasn't returned. Only those you might be able to successfully scare with your false horror stories are going to cling to you as their savior. But the thing is, the American public is far, far more intelligent and informed than you give us credit for, and our common sense works very, very well. In a nutshell, your campaign is doomed to be an exercise in futility if you don't change your stance with meaningful actions visible to prove that you have done so.

Anyway, just my two cents as a guy out here walking among the real America. Take it or leave it.

Happy Campaigning!

Doug Boude (rhymes with 'loud')

Posted by dougboude at 11:24 AM | PRINT THIS POST! | Link | 3 comments



21 April 2011
How We Know Obama Hates America

Watching the events of the political scene unfold for the past two years has been a horrific experience, with the only sense of hope coming from the 2010 midterm election results when a majority of rational thinkers replaced many members of the House and the Senate. But although I can physically see the things that have been taking place, I have been unable to fathom WHY a few individuals would commit such acts knowing full well what the consequences are and will be. It has been beyond my ability to comprehend...until two nights ago.

The events to which I referred above can be summarized in this short list:

- purposeful, continued, gluttonous spending of borrowed money;
- purposeful, continued turning of a deaf ear to the will of the American people by the president and congressional leaders;
- justification of dire situations rather than solutions to the same;
- purposeful, continued neglect of America's southern border and the plight of the states suffering the brunt of illegal immigration;
- purposeful, exaggerated apathy and slowness to react to situations requiring immediate leadership;
- purposeful contradiction of domestic policy versus foreign policy (eg; no domestic drilling, but let Brazil);
- purposeful lending/gifting of huge amounts of money to foreign interests while neglecting domestic interests;
- purposeful, immoderate engaging in leisure activities, especially during times when leadership is most needed.

I'm pretty sure if I thought about it more than the 30 seconds it took me to come up with the list above, I could probably add fifty more items, all of which are utterly perplexing when viewed with a mindset of common sense and preservation of country and self. So the burning question: WHY does our president behave and act this way?

My first conclusion, which I came to a few months before November 2010, was that Barack Obama was either insanely stupid and could not see the results of his choices, or the man flat out hated America and was trying to destroy it. The more time passes, the more I listen to the man speak, and the more I listen to others analyze, criticize, and defend this man, the more I conclude that he's definitely not stupid. No, in fact he harbors the political prowess of a Chicago-style politician, planning his every move years ahead and being very adept at tying up loose ends. Yet still, even being utterly convinced that the man is purposefully attempting to run America over a very tall cliff, I was still plagued with the looming question of why he had made this his mission in life.

The answer came to me in a conversation I was having with my wife about our military days. Even while still in boot camp, with the daily barrage of belittlement, humiliation, and physical abuse, I realized why it was that the path of basic training was necessary: The military has to bring everybody down to a low, common denominator in order to be able to successfully build its people back up in the way they want them to behave. You have to format your hard drive in order to start with a clean, fresh installation of Windows; you must erase the chalkboard in order to write the next day's lessons on it; and when you're president and you want to re-mold a nation to conform to the ideals, philosophies, and beliefs that you hold as your own, you first have to bring it down to the brink of ruin and collapse.

Barack Obama holds a personal and political philosophy that greatly contradicts those of the majority of Americans and especially those of the founding fathers. Unfortunately for us, he has a host of like-minded sycophantic allies whose pooled resources of power, influence, and money enable him to pursue his agenda with fervor. The results of these alliances and his tireless efforts to bring our economy (and thus this country's people) to its knees are readily apparent every single day. Unemployment rates, the housing market, the stock market, our world reputation politically and economically, and the steady loss of faith in the US Dollar are all absolute indicators that this individual and his circle of powerful power-hungry mongrels are currently succeeding in tearing this nation down to the point where they can then begin to rebuild it "in their own image". We as a people and society are being put through the meat grinder, tested. Tested with the purposeful allowance of inflation to raise the prices of everyday necessities to near unaffordable levels; tested as the executive branch maneuvers to create, persist, and agitate the divisions and polarizations that exist among the Senate and the House, the states and the White House, and between ordinary, hard working citizens; in essence, creating and maintaining a divided government and citizenry. Barack Obama wears the mask of a person who wants unity, wants cohesion, wants economic recovery; but his actions speak loud and clear that the existing and escalating chaos and uncertainty is precisely what his goals are. On that wave he intends to ride into another term as president, completing his goals of taking America to the edge of collapse, "enslaving" her masses to the teat of entitlement and welfare programs that most will absolutely need in order to simply survive on a daily basis, granting amnesty to the hordes of illegal (entitlement-minded) masses, placing his political worshipers into positions of power and influence, and then putting his efforts into the dismantlement and re-creation of the very heart of all that we as a people are: the Constitution of the United States of America.

It is frightening to consider, but all of his actions and lack thereof clearly point to such an end game. Thank the Lord, though, we still have an opportunity to avert this disaster of historical proportions! The wisdom of our founding fathers intentionally created our political processes to be fairly slow moving so that no sudden shifts like those Barack Hussein Obama are chomping at the bit to enact can take place in that manner. We have an election coming in less than two years in which we can decidedly reverse this horrific trend of self-destruction and begin to repair the damage this man has almost single-handedly accomplished thus far. But, it's going to take a lot of effort on our part as a society. Barack is on the trail right now amassing what will probably be the largest campaign fund in the history of our nation. He'll be strategically spending it to ensure that we remain dazed and confused, turning on one another, unsure of the truth, and in our hour of weakness then convince us that he is indeed the answer to our prayers. His plan is already well in motion, as he strategically places himself in a position to be able to point fingers and cast blame to divert our attention away from the man himself. He attempts to molest our innate sense of fairness by proclaiming the unfairness of some possessing more than others and the righteousness there is in redistributing that wealth. His tactful and colorful use of phrasing will color our perspective; his ensuring that our lives are burdened with the additional stresses of a failing economy will distract us from the truth of the matter; and his polarizing attacks on those whose common sense dictates self-discipline and moderation will divide us as a nation. The evil intent of this individual knows no bounds, and the resources at his disposal to pursue those intents are equally infinite. The one thing beyond his reach is our own individual ability to reason, judge, and discern fact from fiction. Though he may wear the bonnet and gown, he will not be able to adequately respond to us at the polls in 2012 when we say "Obama, what big TEETH you have!", and fool us again into believing in his brand of "hope and change".

In 2008 our common sense told us that McCain would simply bring more of the same, and so hope and change sounded like exactly what we needed to reform Washington and re-establish our country more in keeping with the intent of our founding fathers. The one mistake the majority of us made, though, was in our assumption of what Barack Hussein Obama actually meant by 'hope and change'. The lesson then ought to be: next time someone offers you Nirvana, go ahead and make them explain exactly what they mean by that.

In the meantime then, my brethren, my recommendation is that you look outside your blinders at least a little, and consider the distinct possibility that all that you see going on around you is real and is a precursor to what is absolutely headed our way. Consider the distinct reality that, although we have been used to a quality and way of life that is unparalleled in the world, it can and very likely will take a turn for the worse in the very near future. Don't go crazy with it, but spend some effort and resources preparing yourself and your family to be more self-sufficient than you already are. Learn to garden, exercise your second amendment right (while you can!), spend a little extra at Sam's Club or Costco and stack some non-perishables and bottled water away in your pantry. At this point in the game, it's only craziness and lunacy to IGNORE what's happening. Don't wait until the winter comes (and come it will) before you allow yourself the responsible realization of the state you find yourself in. Anticipate, be proactive, and prepare. In Aesop's famous fable, the ant was the only one who had no regrets when the circumstances of the world around him turned negative. As for me and my house, we shall exercise our God-given ability for reason and discernment, and prepare. We will also do our part to oust this evil, anti-American individual in the 2012 election and will hopefully succeed so that we have a hope of restoring ourselves to what we once were.

And that's all I have to say about that.

Doug out.

Posted by dougboude at 1:27 PM | PRINT THIS POST! | Link | 8 comments
19 April 2011
Picking Up Where Interfaces Fail
Interface.CFC

What Is An Interface?

Interfaces in ColdFusion are something that makes most of us turn our heads sideways and give the two dollar look. Any of us who didn't come from other languages before ColdFusion probably hadn't heard of them, and since they were introduced into CF, the majority of us haven't taken the time to even understand their purpose, let alone actually use them for anything. Myself, I did take the time to know what they were for (in a ColdFusion context anyway), but even so had never found a single solitary use case for them...until recently.

For the record and to give the rest of this post context, let me share my understanding of what interfaces do for us in ColdFusion. In a nutshell, they act as validators for our CFCs. That is, by "implementing" an interface within a component (<cfcomponent implements="myInterface"....>), we are forced to adhere to rules we laid down beforehand for the functions we will write in the future, and we'll be stopped dead in our tracks if we violate any of those rules. Rules such as  what arguments a function must minimally have, what the returntype of a function should be, and other criteria that interfaces allow us to specify.

My Use Case

I have recently written a small library called JBase that is a virtual relational database. Two pieces of functionality that JBase sports, which I factored out into their own components, are data formatting and validation. Now, knowing full well that I haven't anticipated every possible formatting or validation need, I created those components in such a way that they can be easily customized by the developer, AS LONG AS CERTAIN RULES ARE FOLLOWED when writing the custom functions.

I documented what those rules are very thoroughly, as well as placing them into the CFC itself as comments. But, I really wanted to be able to make CERTAIN that all customized functions followed my rules. Now this, you might be saying to yourself, is a perfect use of ColdFusion interfaces! And you would be so very right if it weren't for a couple of teeny weeny challenges, challenges that caused ColdFusion interfaces to utterly fail in this scenario.

1) CF Interfaces (as it is in all languages to the best of my knowledge) require that you EXPLICITLY indicate the name of the function you want to police - but I have no idea what my developers will name their custom functions! As long as they follow a naming convention of "format[whatever]" or "validate[whatever]", the function has a valid name according to my rules.

2) ColdFusion interfaces do not allow me to police functions that are designated as private. Why, I'm not sure, but since one of my rules is that custom functions MUST be private, this was also a fail. What to do, what to do?

Write my own interface component.

What I needed was something I could transparently apply to a component or chain of components (if one extended the other to infinity) that would inspect all of the methods and ensure those whose names matched a pre-defined pattern also adhered to other applicable rules. I called it, strangely enough, "Interface.cfc". Interface.cfc leverages a "rules" configuration array that it uses to analyze the methods, public AND private, within a component or component chain that can be n levels deep. It allows me to provide a regular expression describing function names, and when it encounters a function whose name matches the regex, it then analyzes the function based on the rules associated with that regex. Here's an example rules config array:

<cfscript>
  stRules = [
  {
   name = "^format(?!Value).+?",
   args = {
    targetValue = {
     type = "string",
     required = "true"
    }
   },
   access = "private",
   returntype = "string"
  },
  {
   name = "^validate(?!Value).+?",
   args = {
    targetValue = {
     type = "string",
     required = "true"
    }
   },
   access = "private",
   returntype = "boolean"
  }
 ];
 return stRules;
</cfscript>

 

Allow me to share a short list of Interface.cfc's highlights:

  1. Very non-intrusive. Simply extend Interface.cfc within a component or within the most base component of any heredity chain;
  2. Rather than die on the first error encountered, Interface.cfc will analyze the entire function collection at once and throw a comprehensive error detailing EVERYTHING it found in violation of the rules;
  3. The rules is an easy to read array that is self-explanatory and highly expandable.
  4. Rules are triggered when a function name matches a regular expression in the "name" key for a given rule set.

 

 

 

That's it! Let me show you how to use it and then what the results look like.

Picture If You Will...

Here is a rough diagram of the components that comprise the JBase relational database library. I've circled the customizable components in red:

Here is the same diagram showing interface.cfc implemented to ensure that all of the rules I lovingly outlined in the documentation are actually adhered to :) :

In this diagram, the components circled in red are those who will be validated by Interface.cfc. If we had three or four or n components in the inheritance chain, ALL of them would be subject to Interface.CFC's scrutiny. (note: the level at which Interface.CFC's functionality is triggered does allow one to control "how high" up the chain validation will crawl. The level at which "validateInterface()" is executed is where validation begins to cascade downward. Typically, you will execute validateInterface() at the topmost level component in the chain.)

To use Interface.CFC, follow these simple steps:

1. Create the rules array within the getRules method of Interface.CFC;
2. Make the most base component in the chain (or the component being validated, if there's only one) extend Interface.CFC (<component extends="Interface"....>")
3. Execute the "validateInterface()" method in the pseudo-constructor area of the topmost component that is to be validated
liks so:

<cfcomponent extends="myBaseComponent">
 <cfset validateInterface() />
 
 <cffunction name="init" ....</cffunction>
 ....
</cfcomponent>

 

 

For demonstration purposes, I have chained together (via the "extends" attribute) three components with the most base of them extending Interface.CFC. My rules are defined as in the rules example above. I purposefully coded in several errors. When I attempt to instantiate the topmost component, here is a screenshot of the results:

That's it! I'm extremely pleased with the results.

You can grab Interface.cfc here. Get Interface.cfc from Github at: git://github.com/dougboude/interface.git  View the awesome API documentation here.

And Boyan Kostadinov (@boyank), my .NET evangelist buddy, time to eat a little crow pie my friend. I don't UNDERSTAND interfaces??? Wrong, my man. Dead wrong. Contrary to the beliefs that keep some programmers of other languages thinking highly of themselves, this stuff just ain't all that challenging to comprehend once you weed through all the highfalutin lingo, acronyms, jargon, and fluff. Literally, I can teach this stuff to my 4 year old (and have!). ;) Love you buddy.

Posted by dougboude at 12:18 PM | PRINT THIS POST! | Link | 4 comments
15 April 2011
Approaches to Building Strings: The Imploding Array
stringBuffer vs Imploding Array

So I'm working on a method that needs to generate a potentially giant SQL script, so of COURSE I'm NOT going to use ColdFusion's string concatenation functionality...far too slow. In other words, I will NOT be doing this:

<cfset thestring = "" />
<cfloop query="qryData">
 <cfset thestring = thestring & "," & theField />
</cfloop>

So, the next obvious choice is to leverage the amazingly fast java stringBuffer object! I've used it before, and I know for a fact that it is an extremely high speed approach to building strings. However, there is another approach I use in PHP (since I don't have easy access to Java, that I am aware of), that also works very fast. So, I thought I'd implement it using ColdFusion as well and make it run a foot race with stringBuffer to see which was actually faster. Before I go on, let me demonstrate this other method I'm talking about.

<cfset aString = arraynew(1) />
<cfloop query="qryData">
 <cfset arrayAppend(aString,"check this value out: " & theField) />
</cfloop>
<cfset finalString = arrayToList(aString,"<br>") />

In a nutshell, for each line in my final string, I append an array item. When the array is fully populated, I simply turn it back into a list, using a line break as my delimiter. In PHP I would "implode" the array, but arrayToList accomplishes the same thing.

Here is the code we'll be using to do the same thing with stringBuffer:

<cfset csvstr = createObject("java","java.lang.StringBuffer")>
<cfloop query="qryData">
 <cfset csvstr.append("check this value out: " & theField & "<br>") />
</cfloop>
<cfset finalString = csvstr.toString() />

Here are the results of running 40 tests over a 50,000 record query:

I think the moral of this story is obvious ;)

Here is the actual code I used to conduct the tests:

<cfparam name="application.counter" default=0 />
<cfparam name="application.jtotal" default=0 />
<cfparam name="application.atotal" default=0 />
<cfparam name="application.jAverage" default=0 />
<cfparam name="application.aAverage" default=0 />
<cfparam name="reset" default=false />

<cfif reset>
 <cfset application.counter = 0 />
 <cfset application.jtotal = 0 />
 <cfset application.atotal = 0 />
 <cfset application.jAverage = 0 />
 <cfset application.aAverage = 0 />
</cfif>

<!--- increment my counter --->
<cfset application.counter = application.counter + 1 />

<!--- execute query to retrieve 50K records --->
<cfquery name="qryData" datasource="glock">
 select invoicenum,mid(comment,1,50) as comment from ilog_text LIMIT 0,50000
</cfquery>

 


<cfoutput>

<!--- LET'S DO THE STRINGBUFFER METHOD --->
<!--- create stringbuffer object --->
<cfset csvstr = createObject("java","java.lang.StringBuffer")>
<!--- add initial header line --->
<cfset csvstr.append("invoicenum,comment" & "<br>" )>
<!--- start our counter... --->
<cfset jstart = getTickCount() />
<!--- loop over the query results and build the string --->
<cfloop query="qryData">
 <cfset csvstr.append(invoicenum & "," & comment & "<br>")>
</cfloop>
<!--- generate the final string... --->
<cfset finalstring = csvstr.toString() />
<!--- stop the clock --->
<cfset jend = getTickCount() />
<!--- capture stringBuffer stats --->
<cfset thisJTime = jend-jstart />
<cfset application.jtotal = application.jtotal + thisJTime />
<cfset application.jAverage = application.jtotal/application.counter />

<!--- LET'S DO TH ARRAY METHOD... --->
<!--- create our string array --->
<cfset aLines = arraynew(1) />
<!--- add header line --->
<cfset arrayappend(aLines,"invoicenum,comment") />
<!--- start our counter --->
<cfset astart = getTickCount() />
<!--- loop over the query results and build our array of strings --->
<cfloop query="qryData">
 <cfset arrayappend(aLines,invoicenum & "," & comment)>
</cfloop>
<cfset delim = "<br>" />
<!--- generate the final string... --->
<cfset finalstring = arrayToList(aLines,delim) />
<!--- stop the clock --->
<cfset aend = getTickCount() />
<!--- capture and output array method stats --->
<cfset thisATime = aend-astart />
<cfset application.atotal = application.atotal + thisATime />
<cfset application.aAverage = application.atotal/application.counter />

<!--- OUTPUT THE RESULTS TO THE SCREEN --->
Records being parsed: #qryData.recordcount# &nbsp;&nbsp;&nbsp;&nbsp;Number of executions: #application.counter#<hr>
(time in milliseconds)<hr>
THIS JAVA TIME: #thisJTime#&nbsp;&nbsp;&nbsp;&nbsp;AVERAGE JAVA TIME: #application.jAverage#<hr>
THIS ARRAY TIME: #thisATime#&nbsp;&nbsp;&nbsp;&nbsp;AVERAGE ARRAY TIME: #application.aAverage#<hr>
Array method is #decimalformat(application.aAverage/(application.aAverage + application.jAverage)) * 100#% faster!
</cfoutput>

Posted by dougboude at 1:11 PM | PRINT THIS POST! | Link | 8 comments
12 April 2011
JBase: The Virtual Relational Database Component

DISCLAIMER: My JBase project is in no way related to or in competition with a commercial relational database product called jBASE. Though my project remotely resembles jBASE only in that both perform data storage and retrieval, my project does so in a COMPLETELY different and very specific-context: ColdFusion. My product cannot and never will be able to compete with jBASE for market share. End of disclaimer.

My little pet project JBase is at a point now where I feel *okay* about letting people play with it, so I thought I'd let y'all know. For clarification's sake, JBase = Json Database, though the name is a bit misleading as the JSON portion of the code really plays a semi-minor role. In a nutshell, JBase allows you to define an entire database structure using CF's structure notation, including tables, fields, field metadata, and table relationships, and then work with that database via the JBase component as if it were an actual backend database. Since most apps these days sport a service layer between the backend database and the consuming application, you can think of JBase as a service layer object that accesses a database that lives entirely in RAM.

A few things about JBase that I think make it cool to work with (I built a sample app with it, and it was fun!):

  • JBase utilizes an ORM-like API that most users will be familiar with;
  • JBase's virtual database schema is configured by the developer using a Coldfusion configuration Component, making schema designs extremely dynamic and versatile (no XML!);
  • JBase is a Coldfusion Component, making it able to be used in the same way as any other CFC (controlled with IOC mechanisms, usable within caching schemes, injectable and accessible by other model components)
  • Although JBase exists as an instance residing in server RAM, it persists its data to disk and optionally reloads it from disk on instantiation, enabling data preservation across application restarts;
  • JBase is ideal for use within test-driven projects;
  • No DSNs to mess with!
  • JBase has built in data validation and formatting, both of which are easily customized;
  • JBase's API is robust, offering a lot of flexibility with implementation
  • JBase's child component JTable can be used standalone for smaller projects or to create your own virtual database manually!

If it pique's your interest and you've got a few minutes, you can access all of the docs (which I worked REALLY hard on!) and can download the project and a sample app at JBase.masonclaims.com

Let me know what you think!


If you don't feel like parsing through the docs right now, here's a presentation I did for my local CFUG
Posted by dougboude at 3:58 PM | PRINT THIS POST! | Link | 0 comments
08 April 2011
Fredrick "French" Fry

Fredrick "French" Fry, 13(days), died at 1:24 PM, April 7th from injuries sustained in an accidental fall from a Burger King container sitting on a desk.

French was born March 25th in a Boise, Idaho potato processing plant contracted by Burger King. French was a veteran of the ongoing Deep Fryer war, and sustained massive burns over 100% of his body while serving. He never allowed his wounds to hinder him, however, from being a model citizen, and his friends could always count on his sharp wit to keep them smiling.

French is joined in death by 42 siblings, all cleaved from the same spud.

Services will be held in about 3 minutes at the waste can near the office window. In lieue of sending flowers, the family requests that donations be sent to the "Trans Fat Research Institute" to aid in the production of healthy lard and lard derivitives.

French, you are gone but not forgotten. Rest in peace, our friend.

Posted by dougboude at 11:02 AM | PRINT THIS POST! | Link | 2 comments
06 April 2011
JBase Documentation Ready for Peer Review

The little open source project I've mentioned a time or two via Twitter is almost ready for release into the wild. All I have left to do is build a sample app that utilizes it and do a little more testing. BUT, I went ahead and did the documentation for it so that those who are curious can get a good feel for what the heck JBase even is.

Now, will JBase be useful to anyone beyond myself? I have no clue. But on the off chance that someone else might find it useful for something I want to make it available. I also do plan on pushing ahead with a version 2 since as I wrote up the docs I came up with a fairly long list of enhancements I want to add to it!

At the very least, working on the JBase project has given me a LOT of opportunities to refine my existing knowledge and learn a few new things as well. I've gotten to delve in depth into:

  • circular dependency
  • thread safety
  • object decoration
  • dynamic method generation
  • API and class architecture
  • Recursive functions
  • Component self-documentation
  • Component metadata traversal
  • Probably lots of other cool stuff I've forgotten at the moment

Without further adieux then, you can view the docs and download the code and sample app here.

Let me know what you think! And don't hold back...roast me if you find it to be justifiable. ;)

Posted by dougboude at 2:24 PM | PRINT THIS POST! | Link | 0 comments