Archive for January, 2008

A Practical Use for ColdFusion 8’s Object Serialization

Tuesday, January 29th, 2008

ColdFusion 8 added the ability for objects to be serialized. Although you can not serialize/un-serialize objects with CFML, you can use underlying Java functions to do so as described by Pete Freitag’s post Serializing CFC’s in ColdFusion 8. In this post a commenter asked whether there is a use-case where this ability would be useful. While contemplating a problem at work, I think I may have found one.

The problem involves building an asynchronous process queue which sits between a “real-time” web service and the system’s database. The web service will be used to import large amounts of data and the queue is required due to the length of time required to process and then store the data in the database. The idea is to store the data, which will be in the form of CFML beans, in an array in application scope and then have a CFTHREAD process the beans into the database.

Where does serialization come in? Well suppose something happens to the server while there are items in the queue. A restart will lose all the data in the queue. Although this is an edge case, the data is critical to the business and cannot be lost. So, when an item is added to the queue it is serialized and stored to the file system. When an item is removed, the serialized file is removed. On start up, any serialized files on the file system are read and the queue is repopulated without data loss.

This is purely theoretical at this point, but I think the idea has enough merit to give it a try.


Creating a Server.cfc

Sunday, January 27th, 2008

This is technique I have been using for a while to handle environmental (development, test, production etc) configuration settings. It mimics the Application.cfc added in ColdFusion 7, creating a Server.cfc shown below.

  1. <cfcomponent hint="Server wide Information" output="false">
  2.  
  3. <!--- PROPERTIES --->
  4.  
  5. <!--- TODO: Set for each server instance --->
  6. <cfset variables.environment = "Development" /> <!--- Development, Test, Staging, Production --->
  7.  
  8.  
  9.  
  10. <!--- INIT --->
  11.  
  12. <cffunction name="init"
  13. hint="Initialise the Server information"
  14. access="public"
  15. returntype="Server"
  16. >
  17.  
  18. <!--- Handle Server Start --->
  19. <cfif Not StructKeyExists(server, "Name") OR Not StructKeyExists(server, "Environment")>
  20. <cflock scope="server" type="exclusive" timeout="10">
  21. <cfif Not StructKeyExists(server, "Name") OR Not StructKeyExists(server, "Environment")>
  22.  
  23. <!--- Set Server Information --->
  24. <cfset server.name = createObject("java", "java.net.InetAddress").getLocalHost().getHostName() />
  25. <cfset server.environment = variables.environment />
  26.  
  27. <!--- call onServerStart --->
  28. <cfset onServerStart() />
  29.  
  30. </cfif>
  31. </cflock>
  32. </cfif>
  33.  
  34. <cfreturn this />
  35. </cffunction>
  36.  
  37.  
  38. <cffunction name="onServerStart"
  39. hint="Initialise the Server information"
  40. access="public"
  41. returntype="void"
  42. >
  43.  
  44. <!--- TODO: Add any server startup code here --->
  45.  
  46. </cffunction>
  47.  
  48. </cfcomponent>

The Server.cfc is copied to the approot/webroot of the server and the variables.environment property set the the server type e.g. "Development". Then in each Application deployed to the server, the following code is added to the begining of the onApplicationStart method in Application.cfc.

  1. <!--- Run Server.cfc --->
  2. <cfset CreateObject("component", "approot.Server").init() />

Environmental configuration changes within each application can then be made by referencing the server.environment and server.name properties of the server scope.


Embedding Multiple File True Type Fonts in Flex

Friday, January 18th, 2008

Many True Type Fonts (TTF) are made up of multiple .TTF files. One file will be for the normal font, while another file is for the Bold version of the Font. For example, the Verdana font that comes with Windows XP consists of four separate files.

The following code shows how to include multiple TTF files into a Flex CSS file.

  1. @font-face
  2. {
  3. src:url("font/verdana.TTF");
  4. font-family: EmbeddedVerdana;
  5. font-weight: normal;
  6. font-style: normal;
  7. }
  8.  
  9. @font-face
  10. {
  11. src:url("font/verdanab.TTF");
  12. font-family: EmbeddedVerdana;
  13. font-weight: bold;
  14. font-style: normal;
  15. }
  16.  
  17. @font-face
  18. {
  19. src:url("font/verdanai.TTF");
  20. font-family: EmbeddedVerdana;
  21. font-weight: normal;
  22. font-style: italic;
  23. }
  24.  
  25. @font-face
  26. {
  27. src:url("font/verdanaz.TTF");
  28. font-family: EmbeddedVerdana;
  29. font-weight: bold;
  30. font-style: italic;
  31. }
  32.  
  33. Application
  34. {
  35. font-family: EmbeddedVerdana;
  36. }

Rotating Text in Flex

Friday, January 11th, 2008

The Flex docs tell you that in order to use Fade effects with Text controls, you have to embed a True Type Font to use in the Flex application. The default Fonts available within Flex (Aerial, Verdana etc) will not fade.

This also applies to rotating Flex controls, which is not mentioned in the docs - as far as I can see.


Copyright © 2005, David Beale

  • Valid XHTML 1.0!
  • Valid CSS
  • Level Triple-A conformance icon, W3C-WAI Web Content Accessibility Guidelines 1.0