My teenage daughter frustrates me so much. Why as teens do we do such stupid things? The irony is I acted much like she is. I retreated emotionally at her age. I silently screamed for notice and became angered when no one answered, when no one read my mind. That was ok. I knew everything. I didn’t need them! I cut ties to friends and family. I made mistakes and I seem helpless to stop her from making the same mistakes.
Category: Daily Life
Ramblings, often stream of conscious, journaling the events of my life.
Respect to the Mommy Bloggers
In the brief times that I solely try to simultaneously watch and keep Evan happy in the name of giving Cathy a break I have accumulated dozens of half finished draft blog posts. How do you guys do it with infants, toddlers, and other assorted rug rats?! On top of producing great content for our reading pleasures, the Mommy Blogger Brigade tends to the emotional, spiritual and physical needs of the children and even squeeze in time to clean house, cook, and in some cases work a job or two among all the other varied things on their calendars. Amazing! I salut the Mommy Bloggers!
I’d say more but Evan wants me to be a jungle gym for a bit…
August Challenge – Projects
I am happy that today I generated invoices. I am also happy that I purchased materials that will see progress on another project.
Can you meet The August Challenge?
From the mouths of babes
Dad, point out some studs in the house: "Noah, what are these for?"
Noah: "To keep the craddle from turning over."
Dad: "It’s a crib not a craddle."
Noah: "To keep the craddle from turning over."
Dad: "It’s a crib not a craddle."
Noah: "To keep the craddle from turning over."
You know, kicking expensive phonographs always helped in these circumstances…
The Next Thing Everyone Will Link To
Today’s construction lessons/reminders
- Just because you have a rotary tool doesn’t mean you should use it
- Drywall is made out of dust
- A razor blade cuts drywall very well it’s just not as cool as a rotary tool
- Razor blades also cut fingers
- There is a reason your safety goggles are in your working pile of tools instead of in storage in the garage
- Razor blades do not automatically cut straight lines
- Take your time or take a lot of time…it’s your choice
- Do not walk away and think the mess will clean itself up
Aliens Attack Australia
August Challenge – Completion
I am happy because a job has been completed and an invoice sent. And Friday has come.
Can you meet The August Challenge?
ColdFusion Event Gateway / Web Service Gave Me Trouble
My programming love is ColdFusion. I have been working with it since early 1998 with the release of version 3. Version 8 will release next year. A feature of CFMX7 that I have not had the opportunity to use is the Event Gateway to turn a CFC into a web service.
ColdFusion event gateways are ColdFusion MX elements that let ColdFusion MX react to or generate external events or messages in an asynchronous manner. Event gateways let a ColdFusion application handle information that does not come through an HTTP request. For example, you can use event gateways to handle instant messages, short messages from mobile devices, or messages sent to a TCP/IP port. [Source]
The Project
I have a project that uses XML feeds to update inventory status from a wholesaler to the reseller. Unfortunately, do to problems at the wholesaler end, one of the feeds is unavailable and will remain so. The solution is to use a query of the database to obtain IDs of the active products then use CFHTTP to get the information from the wholesaler’s website (site scraping). Since there are roughly 1500 active products at any one time, making 1500 CFHTTP calls at once causes timeouts as the browser gives up before the webserver can finish its task. Since this update will be done only occasionally, 1500 requests to the wholesaler is not a big deal.
The Solution
The solution to the problem is to implement the CFHTTP request as a CFC, create a gateway instance with a 5 minute timeout, and call the gateway instance with small groups of product ids from a .cfm page. The concept works beautifully since the Event Gateway is asynchronous and decoupled from the browser which initiated the instance.
The Problem
I choose the .cfm to manage grouping the product IDs so that there would only be one query instead of 150 queries (~1500 products in groups of 10) as would happen if the query were within the CFC. So the code builds a list of IDs within a structure (as required by the Event Gateway)
The onIncomingMessage method must take a CFEvent structure that contains input information in its Data field, and processes the contents of the Data field as needed. [Source]
The loop that calls the gateway instance builds the list, calls the instance, clears the list, builds the next list, calls the instance, and so forth. Apparently I am able to alter the datastructure so quickly that the second list replaces the first list before the gateway instance fires so the CFC ends up processing only the information from the latter lists. More simply, the CFC processes whatever data is in the structure at the time the gateway event fires from the queue not the state of the structure at the time the gateway event was called by the ColdFusion application. Set up a gateway instance and try the following code. This is the CFC to which the gateway instance will be associated.
test.cfc
<cfcomponent displayname="Test Gateway" hint="Logs the idlist passed into the CFEvent.Data structure.">
<cffunction name="onIncomingMessage" access="remote">
<cfargument name="CFEvent" type="struct" required="yes">
<cflog
text="Gateway test complete for ids #CFEvent.Data.idlist#."
file="GatewayTest"
type="Information"
application="Yes">
</cffunction>
</cfcomponent>
The calling CF application is show below
test.cfm
<cfscript>
datarange = structNew();
tmplist = "8,1008,1019,1020,1021,1022,1024,1025,1026,1027,1030";
datarange.idlist = duplicate(tmplist);
datarange.datasource = "adult";
status = SendGatewayMessage("TestGateway", datarange);
tmplist = "8,20,19,18,17,16";
datarange.idlist = duplicate(tmplist);
status = SendGatewayMessage("TestGateway", datarange);
</cfscript>
You would expect the log file to have two different lines.
Gateway test complete for ids 8,1008,1019,1020,1021,1022,1024,1025,1026,1027,1030
Gateway test complete for ids 8,20,19,18,17,16
but instead it has two identical lines.
Gateway test complete for ids 8,20,19,18,17,16
Gateway test complete for ids 8,20,19,18,17,16
The Solution
I have not tested the solution yet but I am betting that I either
- have to let the CFC call the gateway instance after it has processed a batch of ids thus making this a synchronous process to itself but still asynchronous to the browser or
- Create a unique structure for each group of IDs to be processed
I prefer the latter. Update: Testing is complete and solution #2 works great!
Other Resources
- About event gateways
- Abobe’s (fomerly Macromedia formerly Allaire) overview
- Deploying an event gateway
- Macrodobellaire’s livedocs for initial setup of an event gateway
- Using the CFML event gateway for asynchronous CFCs
- This was the most helpful livedoc with critical information non-chalantly hidden within such as "Using the CFML event gateway for asynchronous CFCs"
- SendGateWayMessage
- Livedocs for SendGatewayMessage
- The Asynchronous CFML Gateway – A Real-World Example of a Great New Technology
- Matthew Woodward comes through in this ColdFusion Developer’s Journal article
- Understanding Asynchronous Processing by Ben Forta
- It wouldn’t be ColdFusion unless Uncle Ben said something.
- Concurrency Library
- It is very difficult to mention asychronous CFML without someone mentioning Sean Corfield’s work.
- XML Path Language (XPath)
- XPath is a language for addressing parts of an XML document, designed to be used by both XSLT and XPointer.
- XPath Axes
- XML Lessons at W3Schools
August Challenge – TGIF (almost)
I am happy that today is Thursday because I am really looking forward to Friday! I am looking forward to Friday so much that I wish Friday would come twice.
Can you meet The August Challenge?
Woot-Off today!
If you don’t know what a Woot-Off is then you probably don’t know what Woot is. Woot is one of those wonderful ideas that makes you slap your forehead and cry out, "why didn’t I think of that!" Woot is associated with Overstock.com and releases 1 product Monday through Friday at 12am Central time (1am Eastern). The product is available in a limited number and often sells out in the first hour. The product is almost always significantly cheaper than anything you find on Froogle.
A Woot-Off is basically a chance for Woot to clean out their warehouse.
…a short term frenzied mutation of our product posting procedure. In Woot-Off mode, a new product is launched immediately after the sellout of the previous deal. There is a half-Woot-life of 12 hours maximum on any product within a Woot-Off that does not sell out. The number of Woot-Off items, sequence, and quantity will not be announced. When Woot-Off mode is over, the orange lights will disappear and our normal schedule will resume. Depending on its success, this may be a mode we would go into once or twice a month for a relatively short duration of time (24-72 hours generally.) [Source]
I have purchased twice through Woot and been thrilled each time. Both the products are regularly used and were fantastic bargins. I wish we weren’t in tight budget mode or I would buy my wife the Bluetooth iPod headphones right now. My other favorite bargin hunting site is Slickdeals.net which reports coupon and rebate combinations that often result in wonderful deals or free products. It’s sister site is Slickfillers.net which helps you find low dollar items to push an Amazon order over the $25 mark to gain free shipping.
August Challenge – Getting Things Done
I highly recommend my web host. The way it reports statistics in the user control panel is a little weak. I have full access to the server logs and could process them through Webtrends for detailed reporting but it should be easier. I have been procrastinating on installing PhpMyVisites for my wife. Little procrastinations hang over your head and become huge burdens. I finally have a nice statistics report package in place for my wife to monitor her sites!
Can you meet The August Challenge?
The USA Does Not Do World’s Fairs Anymore
There was a World’s Fair in New Orleans in 1984. That was the last US participation. In 2002, the USA had its membership in the Bureau of International Expositions (BIE – the sanctioning body of the World’s Fair) withdrawn due to non-allocation of funds by Congress. Can you say war funding? The US quietly becomes more egocentric and disconnected from the world. I know I as a citizen did not realize until today that we, as a country, no longer participate in the World’s Fair which dates back to 1851. Way to be a world leader!
Look for further discussion at Atomic Tumor.
August Challenge – Tommy Turns 16
Happy Birthday Tommy! (jumped the gun yesterday_ I am thrilled with his progress and love seeing his joy at the thought of getting a driver’s license. Loved his excitement over his new phone. Overall he is a happy, fun person.
Can you meet The August Challenge?
August Challenge – Choices
I have walked some rocky paths but I wouldn’t change a single step of my journey because I love where I am. I am happy with the choices I have made in my life.
Cathy says, "It’s not the destination. It’s the journey." And I am so happy to have her on this journey with me.Can you meet The August Challenge?