We searched for "" in 193 documents.
Privacy and Visitor Information Policy
Excerpt: "We hold the privacy of our visitors as dear as our own (and we hold our own privacy pretty damn dear). We may (and do) make use of non-visitor specific information in aggregate form to present certain metrics and statictics. This type of information will never be presented in such a way as to allow identification of specific visitors."
Policies
Excerpt: "DepressedPress.com abides by the following self-imposed policies. If you have any questions or comments on these policies please contact us. Information about our source code and example code."
Source Code Policy
Excerpt: "Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES..."
YODEL Tags
Excerpt: "The tag is the root tag ("envelope" or "wrapper") of a YODEL packet. The tag cannot be contained within any other tag. The tag can only be contained within a tag."
YODEL MetaData
Excerpt: "Apply the attributes from within the metadata (the "type" and "fields" attributes) to the corresponding tags (in this case the attribute "type" is defined in metadata and so will be applied to the corresponding . The metadata for the array defines the first element of the array (a complex object) and the metadata for that element is applied to all children of linked array. Similarly implementations in languages where arrays are limited to single data types may also find it easy to ..."
YODEL Specification
Excerpt: "Yodeling (the singing kind) is popularly believed to have developed as a way to pass messages across mountain peaks in the Swiss Alps. That's what YODEL strives to be: a simple way to send messages. Yodel is an XML dialect and follows all rules of standard XML (well-formedness, tag nesting, etc). "
Extending YODEL
Excerpt: "YODEL may be extended in several ways, only one of which is supported (the use of the custom attribute). Additional tags, attributes or core data types may also be added but will not be valid as per the YODEL XSD and will almost definately not be parsed properly in compliant parsers. A standard YODEL parser would see both as number values while the extended parser would extract and work with the more explicit information. "
YODEL Data Types
Excerpt: "In this version the recordset is treated as a collection of objects: each object represents a row of data while all the objects are collected into an array. The values contained in an object can be of any type (including other objects or arrays) and can be nested arbitrarily deeply. Array values can be of arbitrary types (YODEL array elements do not have to share the same data type)."
YODEL Specification Change Log
Excerpt: "Previously values in MetaData would supersede values in individual tags. This behavior has been reversed: attribute values in tags should now supersede values set in MetaData. While this change shouldn't affect most implementations (the whole point of metadata being to eliminate the need for attribute values set in tags) it may affect some. "
Sample YODEL Packets
Excerpt: "All Features Sample One: A packet which attempts to exercise all the features of YODEL (with the notable exception of metadata). Complex Objects Sample One: An example packet describing an array containing objects which have objects as properties. Metadata Sample One: A sample packet featuring metadata applied to an Array of Objects."
YODEL (Yet another Open Data Exchange Language)
Excerpt: "#Request.DPLib.Graphic.Spot("0094", "Right")# YODEL (Yet another Open Data Exchange Language) is an XML dialect desiged to describe structured data for the purpose of transfering that data via HTTP (or any other text-only mechanism). The YODEL specification and rules for implementing it properly. If you've implemented YODEL in another langauge please consider allowing us to add it here!"
YODEL Implentations
Excerpt: "DP_YODEL Library: This is our JavaScript implementation of YODEL. It supports serialization and deserialization and supports the entire YODEL specification (including deserialization of metadata). DP_YODEL CFC: This is our CFMX 7+ implementation of YODEL. "
YODEL FAQ
Excerpt: "Like SOAP XML-RPC defines methods for invoking remote procedure calls although, unlike SOAP, this does not add markedly to its complexity. Unlike SOAP and XML-RPC YODEL is a data-only definition. Unlike WDDX and XML-RPC it supports mechanisms to greatly reduce the size of the packets required to pass data. "
JavaScript
Excerpt: "#Request.DPLib.Graphic.Spot("0373", "Right")# In my opinion Netscape made one truly significant contribution to the World Wide Web: the idea that your web browser could become a capable container for complex, dynamic functionality. JavaScript has changed the way that the Web is expected to work in an absolutely fundamental way. Downloadable, open-source extensions to aid in your JavaScript development."
JavaScript Extensions
Excerpt: "DP_Debug (JavaScript Debugging Extensions): This library extends the JavaScript object prototype with functions to assist in debugging. DP_ObCollection: The DP_ObCollection ("Object Collection") is used to mantain and manipulate multiple instances of a JavaScript objects ("Members" of the collection) where the order of the objects is unimportant. DP_ObCollectionOrdered: Similar to the DP_ObCollection the DP_ObCollectionOrdered ("Object Collection Ordered") is used to mantain and manipulate ..."
DP_YODEL Library
Excerpt: "The library supports a simple method of parsing custom datatypes using the YODEL custom attribute via user-defined custom handlers. Can be either "serialize" (convert a native object to a YODEL packet) or "deserialize" (convert a YODEL packet to a native object). By using the CustomHandlers feature of the dpYODEL() function developer's can easily implement custom deserialization processing by defining external data handler functions and linking them to pre-defined values of the custom ..."
DP_WDDX Library
Excerpt: "The DP_WDDX library provides JavaScript support for the WDDX (Web Distributed Data Exchange) standard. This library (is an attempt to) provide updated WDDX support in the JavaScript environment. Can be either "serialize" (convert a native object to a WDDX packet) or "deserialize" (convert a WDDX packet to a native object)."
DP_RequestPool Library
Excerpt: "Improved request object detection for IE (including IE 7) and streamlined request queue object discovery and onReadyStateChange handler functionality. Request: A Request Object (created with the DP_Request constructor), required. Once created Requests are added to the Request Pool's queue using the addRequest() method of the pool object. "
DP_QueryString Object
Excerpt: "The DP_QueryString script creates a global object which provides the developer with simple access to values set in the query string (also called the "command line parameters" or "URL variables"). An object where each property=value corresponds to the parameter=value of the query string in the ReturnStyle specified. The values contained in the object must be simple string values (or convertable to strings via the toString() method) or arrays. "
DP_PanelManager Library
Excerpt: "Once a panel is imported or created the DP_PanelManager library adds methods to access and manipulate many properties of that panel. Sorts all panels in the manager panels by the specified property and returns an array of panel references in that order. Once a panel is added to a Panel Manager several properties and methods are added to the panel."
DP_Panel Example
Excerpt: "Panel: Change Duration: Aspect Current Value Modifiers Opacity (0-100) Relative Set To Specify New Opacity: Down 20 / Up 20 / 0 / 20 / 40 / 60 / 80 / 100 Position (Top,Left) Relative Set To Specify Top: Left: Up / Down / Left / Right 0,0 / 200,200 / 200,400 / 400,200 / 400,400 Size (Height,Width) Relative Set To Specify Height: Width: Smaller by 50 / Larger by 50 0,0 / 20,20 / 50,50 / 100,100 / 150,150 / 10,100 / 100,10 "
DP_PanelManager Example: It's a Frog.
Excerpt: "You can drag the little black fly around. It's like a game! ()The number is the Bearing.)"
DP_PanelManager Example: Drag-and-Drop Ordering Example
Excerpt: "This is an example of implementing drag-and-drop ordering functionality to a web page using the DP_PanelManager component provided by the DepressedPress. Try dragging the panels along the row. Notice how the panels automatically rearrange themselves."
DP_Panel Test
Excerpt: "The Wii allows you to download games via the "Store" channel from the Wii main menu. The PlayStation 3 provides a similar service via PSN while the XBox 360, as always, has XBL."
DP_PanelManager Example: Drag-and-Drop with Collision Example
Excerpt: "This is an example of implementing drag-and-drop and collision detection functionality on a web page using the DP_PanelManager component provided by the DepressedPress. Drag the smaller, blue panel over the larger, green panel: when a collision between the panels is detected the smaller panel will change color. The distance between the two panels (as returned from the "getDistanceFrom()" method) will be displayed in the larger panel. "
DP_Panel Test
Excerpt: ""
DP_Panel Test
Excerpt: "Item 1! Item 2! Item 3!"
DP_PanelManager Example: It's a Frog.
Excerpt: "You can drag the little black fly around. It's like a game! ()The number is the Bearing.)"
DP_PanelManager Example: Drag-and-Drop with Ordering Example
Excerpt: "This is an example of implementing drag-and-drop ordering functionality to a web page using the DP_PanelManager component provided by the DepressedPress. Try dragging the panels along the row. Notice how the panels automatically rearrange themselves."
DP_PanelManager Example: Popup Definitions
Excerpt: "The following sentence contains several inline definitions. The Wii allows you to download games via the "Store" channel from the Wii main menu. The PlayStation 3 provides a similar service via PSN while the XBox 360, as always, has XBL."
DP_PanelManager Example: Drag-and-Drop with Collision Example
Excerpt: "This is an example of implementing drag-and-drop and collision detection functionality on a web page using the DP_PanelManager component provided by the DepressedPress. Drag the smaller, blue panel over the larger, green panel: when a collision between the panels is detected the smaller panel will change color. The distance between the two panels (as returned from the "getDistanceFrom()" method) will be displayed in the larger panel. "
DP_PanelManager Example: Useless Animation
Excerpt: ""
DP_PanelManager Example: Animated Menu
Excerpt: "MenuOffset1 { padding: 20px; background-color: #eeeeee; } . MenuOffset2 { padding: 20px; background-color: #dddddd; } . MenuItem { background-color: gray; width: 50px; } "
DP_ObCollectionOrdered Object
Excerpt: "A DP_ObCollectionOrdered is used to manage multiple instances of a JavaScript object as a single logical unit where the order ("rank") of the instances matter. Once the library has been imported you may create DP_ObCollectionOrdered objects as you would any other JavaScript object. Returns the type of the Member object (a reference to the object constructor)."
DP_ObCollectionOrdered Example: Sort a Table
Excerpt: "Table"
DP_ObCollectionOrdered Example: Manage a Select Box
Excerpt: "Select Box Controls Demote or promote the selected option. Demote the first person in the list."
DP_ObCollection Object
Excerpt: "A DP_ObCollection is used to manage multiple instances of a JavaScript object as a single logical unit. Once the library has been imported you may create DP_ObCollection objects as you would any other JavaScript object. A reference to the Members object which itself contains references to all objects in the DP_ObCollection."
DP_ObCollection Example
Excerpt: ""
DP_Debug (JavaScript Debugging Extensions)
Excerpt: "Moved the functions from the Object to a new global object, "DP_Debug". The library must be imported to generate the DP_Debug DP_Debug. timer() displays information in the log console panel using a log entry type of "Timer" (color-coded blue)."
DP_DateExtensions Library
Excerpt: "This static conveinence method converts HTTP dates (specified in RFC 822) date strings into native JavaScript Date objects. If false (the default) the method will return a new date object with the results; if true the method will update the date in place and return a reference to the original date. The method returns zero ("0") if the dates are equal, negative one ("-1") if the original date falls prior to the passed date or positive one ("1") if the original date falls after the passed date..."
DP_Cookies Object
Excerpt: "The DP_Cookies script creates a global object which provides the developer with simple, abstracted client-side management of browser cookies. The object provides methods to get, set and erase (delete) cookies by name. The object provides methods to erase or return (as a JavaScript object) all available cookies."
DP_AlphaWords Library
Excerpt: "The function can output a simple list or can output a verbose script suitable for reading. These declarations are "dpAlphaWords_Char" (applied to the character in Verbose-style output) and "dpAlphaWords_Trans" (applied to the translation). Using the Array style is more difficult but useful when the simple or verbose styles do not meet your needs."
Test Popup Window
Excerpt: "Top of Page: Move to Bottom of Page Bottom of Page: Move to Top of Page "
Test Page
Excerpt: "This is the Main Window Open the Popup"
Test Page
Excerpt: "This is the Main Window (The Popup should have opened automatically)"
Test Page
Excerpt: "This is the Main Window Open the Popup"
Test Page
Excerpt: "This is the Main Window Open the Popup"
Local Targets in Popup Windows
Excerpt: "The main page calls an external script to create and populate the popup. Same as above except the body of the popup content is loaded via innerHTML. Inline script in the main page creates the popup."
Browser Quirk: Local Targets in Popup Windows
Excerpt: "FireFox an Opera both load the popup correctly but when the "Move to the Bottom of Page" inner link is selected they load the main page content into the popup. Clicking the "Open the Popup" link in the popup returns to the popup content although FireFox adds the wrinkle that it loads the popup content to the bottom target. If you continue clicking the links in FireFox you will bounce (all in the popup window) between the top of the popup content, the main page and the bottom of the popup ..."
Browser Quirk: Include CSS using DHTML in IE
Excerpt: "One frustration met by many developers is the apparent lack of Internet Explorer support for embedded and/or linked style-sheets in included content. Hello, how are you! As long as something (anything) above the STYLE or LINK tags affects the layout the styles will be applied. "
JavaScript Articles
Excerpt: "Ever try to include CSS on a page using DHTML and been stymied by Internet Explorer? Here's how to fix it. The exploration of a simple, pre-AJAX technique that allows a browser to send data to the server and allows the server to return data to the browser without refreshing the current page by using a small GIF image as a conduit."
Using a GIF as a Data Pipe
Excerpt: "Ever want to send data to the server and return data to the browser without refreshing the page? Using JavaScript we can create, populate, and append URL variables to the modified src attribute allowing us to send arbitrary data to the server. Line 20 uses a simple regular expression replace to change all plus signs to "%20". The cookie value is then decoded on line 21 using the unescape() function. "
Test Page
Excerpt: "Your Message: Server Response: "
Test Page
Excerpt: "Your Message: Server Response: "
Development
Excerpt: "Development has given me food on my table, a roof over my head and thousands of pieces of information that have been absolutely no help to me socially. ColdFusion is my transition language: way back in 1996 ColdFusion turned me from a "Web Designer" into a "Web Developer". Well over a decade later it's still going strong and still the best choice for Web application development."
ColdFusion
Excerpt: "#Request.DPLib.Graphic.Spot("0081", "Right")# ColdFusion is the most mature dedicated web application development platform in existence. Over the years the fundamental concepts driving its evolution have never been lost: be the easiest, cheapest, fastest, most powerful way to construct quality, scalable web applications. My open-source CFC-based application development libraries."
Variables in CFML
Excerpt: ""
ColdFusion Extensions
Excerpt: "Supported BBML in DP_ParseBBML: A detailed guide to all the BBML code and smilies supported by DP_ParseBBML. DP_ParseBBML Example: A simple application allowing you to enter and convert BBML code. DP_AlphaWords Example: A simple free form example of the DP_AlphaWords CFML custom tag."
FreeData_NWS: Your Weather
Excerpt: "This tags allows ColdFusion developers to retrieve the hourly weather reports for most US locations from the National Weather Service. (Note that Alaska and Hawaii use incompatible weather report formats and are not listed.) A pipe-delimited ("|") list of the variable names of the weather report followed on the next line by a pipe-delimited list of the values. "
Sample NWS Database System
Excerpt: "This is an example application with explanation that allows authors to create a database of weather reports using FreeData_NWS with or without using the ColdFusion scheduling engine. This archive contains the FreeData_NWS CFML Custom Tag, the FreeData_NWS_DBUpdate.cfm ColdFusion Template and the (empty) FreeData_NWS.mdb Microsoft Access database. This simple system lets website authors keep an archive of weather reports using the FreeData_NWS custom tag. "
FreeData_NWS CFML Custom Tag
Excerpt: "This ColdFusion 4.1+ CFML custom tag uses CFHTTP to retrieve weather reports (posted hourly) from the National Weather Service's Interactive Weather Information Network. NWS_WindDir:The "full" wind direction: "North", "South-East", etc. NWS_WindDirShrt:The abbreviated wind direction: "NE", "S", etc. NWS_WindSpeed:The Wind Speed (either "Calm" or number indicating miles-per-hour). NWS IWIN Web Site: The home page of the National Weather Service system where FreeData_NWS gets its information."
DP_YODEL ColFusion Component
Excerpt: "The CFC supports a simple method of parsing custom datatypes using the YODEL custom attribute and user-defined custom data handlers. Serializes a native CFML date item into a YODEL packet (converts native CFML data to YODEL). By using the CustomHandlers feature of the DP_YODEL CFC developer's can easily implement custom deserialization processing by defining external data handler functions and linking them to pre-defined values of the custom attribute in YODEL. "
DP_ValidateIP CFML Custom Tag
Excerpt: "At its simplest this tag can validate whether or not any given input is an IP address. The tag returns a single variable (definable via the "OutputVar attribute and defaulting to "IPMatch") with a value of "Yes" (the IP is valid or does match one of the masks) or "No" (the IP is not valid or does not match one of the masks). <cfmodule template="DP_ValidateIP.cfm" IP = "#IPAddress#" IPMasks = "192.168."
DP_ParseBBML: Supported BBML and Smilies
Excerpt: "An item tag is placed before each item in the list and does not require and end tag. In addition the there can be no text between the beginning list tag and the first item tag ("[list][*][/list]" is correct while "[list]MyList [*][/list]" will fail). Lists can be nested together as deeply as you like, but each nested list must be a list item of the outer list. "
DP_ParseBBML CFML Custom Tag
Excerpt: "This ColdFusion 4.5+ CFML custom tag translates a simplified, HTML-like markup language called "BBML" (supported BBML tags) into valid HTML. The tag takes a string and converts BBML markup code to HTML, converts HTML markup to "safe" character entities, and converts common "smilies" to graphics. BBML Codes supported in DP_ParseBBML: All of the codes supported in DP_ParseBBML with explanation and examples."
DP_ParseBBML CFML Example
Excerpt: "This tag converts supported BBML code in HTML, converts many "smilies" to graphics, and makes any entered HTML code safe for display. If you are unfamiliar with BBML code you should first read out information on Supported BBML and Smilies in DP_ParseBBML. [list] [*]Supports many [link=http://www.depressedpress.com/Content/ColdFusion/CustomTags/DP_ParseBBML/SupportedBBML.cfm]BBML Codes[/link]."
DP_FileFind CFML Custom Tag
Excerpt: ""File": The results are dumped to a pipe ("|") separated text file named in the "OutputFile" attribute. File: The full system path and file name of the file. TXT files created with the tag can be compared to create custom reports of new files and file changes."
DP_AlphaWords CFML Custom Tag
Excerpt: "The DP_AlphaWords Custom Tag provides a simple method for converting arbitrary text to list of words which help to disambiguate spelling. The tag can output a simple list, a verbose script suitable for reading or an array of objects for programmatic display of the data. The tag supports most typable english characters and will translate them to their names. "
DP_AlphaWords CFML Custom Tag Example
Excerpt: "This is an example of the DP_AlphaWords ColdFusion custom tag. This simple tag converts any string into one of many standard "alpha word" codes. For example the string "CAT" converts to the NATO standard "Charlie Alfa Tango"."
Depressed Press Libraries
Excerpt: "A "DP Library" refers to a collection of related code while a "DP Package" refers specifically to a group of related "DP CFCs" (ColdFusion Components which extend the root Depressed Press component). The Root package contains the root component extended by all DP CFCs. Building DP Collections: Detailed information on using the DP_Collections component to create managed units of component instances or component instance caches."
DP Root Package History and Archives
Excerpt: "The archive and change history of the DP Libraries follows. The many DP Libraries are provided within a single ZIP-format archive to ease maintenance. This is the initial beta release of the DP Libraries."
DP Libraries Component Documentation
Excerpt: "The init() method is used to initialize the component. Although most DP Libraries components provide init() methods some do not by design (broker implementations for example). Properties defined locally to the comoponent are detailed while any properties inherited from an ancestor are listed but link to source component's documentation."
Root Package Component Catalog
Excerpt: "The Root Package provides the foundational elements required to create DP CFCs. The root component is ultimately extended by all other DP CFCs. This is an example template for creating DP CFCs."
Utility Package Component Catalog
Excerpt: "This component makes managing groups of components or component caches easier. The documentaton component contains routines for retrieving metadata and DP Documentation from code. This extension of cfc_DepressedPress.Utility.DP_PersistenceInfo provides specific information for DSN persistence entities."
Security Package Component Catalog
Excerpt: "The Credential Mediator manages access to credentials on the system while improving performance via object caching. The Entitlement Mediator manages access to credentials on the system while improving performance via object caching. The Profile Mediator manages access to credentials on the system while improving performance via object caching."
Framework Package Component Catalog
Excerpt: "The Framework Package contains components useful to the building of web applications and tools. This component is designed to extend and enhance the CFML "Application" scope. This component is designed to extend and enhance the CFML "Request" scope."
DP Libraries: Uses for DP_Paths
Excerpt: "DP_Paths is useful, suprisingly enough, in places where you need to generate paths. ColdFusion extensions (Custom Tags, Includes and CFCs) which output HTML (or do file management tasks using CFFILE) often need to reference paths either from themselves or from the location of the template calling them. However the "Header" custom tag may be called from any file in the application, in any folder. "
DP Libraries: Instantiating DP_Paths
Excerpt: "The DP_Paths component's init() method takes as it's only parameter the Application Root Offset for the current application.
DP Libraries: Using DP_Paths
Excerpt: "Application Root Offset: This is the path to the application root minus the web root. Relative from Path: These paths assume a known starting point (either the web or application root) and present the path needed to reach a specific file under it. Relative to Path: These paths begin at a specified file and present the path needed to reach a known destination point (either the web or application root). "
DP Libraries: Examples of DP_Paths Output
Excerpt: "These examples assume that the web root is "C:\WebRoot" and the application root is "C:\WebRoot\MyApp\". In this case the output is from a Custom Tag called from within another template (using the CFMODULE tag). This is useful to seamlessly integrate custom tag output with the calling template. "
DP Libraries: Building DP Collections
Excerpt: "Coming Soon!"
Building DP CFCs: Step Four: Init() and Super.Init()
Excerpt: "All DPComponents require an init() method (even if that method is empty and not called) as the internal reference to the init() method is used to link the CFC to its DPMetaData information. When the root component's init() method is called this value is set to "true". (More advanced programmers may choose to set the value of DPInit manually to save a method call or to avoid deeply chaining calls in deeply extended CFCs. "
Building DP CFCs: Step Three: Cache DPMetaData
Excerpt: "To cache basic information about the CFC including the values you've defined in the defineProps() method you must call the cacheDPMetaData() method. ... Once you have cached the DPMetaData you may access it directly via the DPMetaData property or the getDPMetaData() function. "
Building DP CFCs: Step Two: Define Properties
Excerpt: "--- Define Component Properties --->
Building DP CFCs: Step One: Extend the Root Component
Excerpt: "The first step is to extend the root component ("cfc_DepressedPress.DP_Component") in all your DP CFCs. ... DPLastAccess: Using the DP CFC method "touch()" you can update this value to easily track updates to your CFC instances. "
Building DP CFCs: Optional (but Useful) Techniques
Excerpt: "One of the trickier aspects of CFCs, especially memory persistent CFCs or those with recursive functions, is the concept of the var keyword and the unnamed, or function local, scope. The unnamed scope is an exception to the traditional CFML scoping model (where all variables have a scope and all scopes are accesible by name) and this is often confusing. Scope level locks can lead to deadlocks if containing code also uses scope locks and named locks are universal to the server on which they ..."
Building DP CFCs: Introduction
Excerpt: "A DP CFC is simply a normal ColdFusion Component that has extended the DP Root Component and defined itself in a stadardized way. It is actually quite simple to convert any existing component to a DP CFC and the work involved in creating a DP CFC versus a "normal" CFC is insignificant. The DP Libraries maintains information within each CFC allowing the programmer to determine if the CFC's init() function has been called or not."
Building DP CFCs: Documenting your CFC with DPDocs
Excerpt: "The DPDoc tag provides a way to add documentation elements to your CFC not provided for in CFML. For complete information concerning the DPDoc tag please explore the DP Documentation tutorial contained in the DP Libraries Overview. When DP Docs are parsed using cfc_DepressedPress.Utility.DP_Documentation all DP Docs contained within a method will be returned as part of that method's documentation information, not as part of the general CFC documentation information."
Building DP CFCs: Conclusion
Excerpt: "I hope that the additional features provided by DP Libraries makes the subsequent development easier and more streamlined. However before you create your own CFCs make sure that you scan the CFCs of the other DP Packages. Many of the CFCs there (especially those in the Utilities Package) provide a base for further development (via extension) or might even provide the functionality needed as they are."
DP Libraries: Building DP Brokers
Excerpt: "Coming Soon!"
DP Libraries: Building DP Applications
Excerpt: "Coming Soon!"
DP Utilities Package
Excerpt: "The Utility Package contains components generally useful to application development but not specific to any one application. For a complete list and documentation for each component see the Utility Package Component Catalog. cfc_DepressedPress.Utility.DP_Collection: This component abstracts the management of multiple component instances as a single unit. "
DP Security
Excerpt: "The DP Security system is a well-encapsulated, easily-pluggable security framework with a small footprint. Security services are provided via an abstracted CFC-based progrmming interface. Using the services you can easily (well, more easily) create a full end-to-end web security system or use only what aspects of the system are attractive to you. "
DP Security
Excerpt: "Information like UserID, the password hash and password reminder, historical authentication information, and other system-level information is maintained in the Credentials object. This object provides access to the user's information via the Credential, Entitlement and Profile objects. If (as is recommended) the system that updates user information accesses the same mediators that hold user information any information changes (entitlement or user information changes for example) will take ..."
DP Root Package
Excerpt: "The Root Package contains the foundational and utility CFCs required by other DP Packages. Formal Instance Variable Declaration: All DP CFCs can formally declare the name, type and a description for all of the instance variables (properties or "Props" for short) that they wish to allow public access to. The root package contains an empty template DP Libraries CFC which should make it easier to create your own DP Libraries extensions and applications."
The DPMetaData Cache
Excerpt: "The first time any DP CFC is run a memory-resident structure is created to hold meta data for all DP CFCs. The information cached is collected using both the standard getMetadata() CFML function and the DP Properties definition for the CFC. Cache updates in these cases would need to be done manually by restarting the application (if the cache is stored in the Application scope) or forcing the cache to update itself using the cacheDPMetaData() method of the DP CFC in question."
DP Application Framework Package
Excerpt: "Coming Soon!"
DP Libraries Setup: Installation
Excerpt: "The DP Libraries are provided as a single ZIP archive containing all of the libraries and associated materials. All of the CFC (ColdFusion Components) Packages reside in a folder named "cfc_DepressedPress" and a ColdFusion mapping (set up in, you guessed it, the ColdFusion Administrator) to that folder is required. cfc_DepressedPress: These are CFC files and should be placed, with the directory structure intact, in whatever folder you've mapped as "cfc_DepressedPress". "
DP Libraries Setup: Overview
Excerpt: "Building your own DP Libraries applications requires at least a basic understanding of ColdFusion Components and how to build and call them. For most of the applications a good, basic understanding of the ColdFusion Application Framework (the CFAPPLICATION tag, ColdFusion Sessions, etc) would also be very helpful. Lastly as the DP Application Framework Library makes use of shared memory scopes (the Server, Application and Session scopes) an understanding of the issues of multi-threading and..."
DP Libraries Setup: Conclusion
Excerpt: "I've tried to make setting up DP packages and applications a simple and painless process. I've also striven for consistency across the individual packages and applications to ensure that the hardest set up will always be the first one. Although to ease malignance all material is provided in a single archive you may, after you extract it, pick and choose which libraries and applications you want to explore and which you want to ignore."
DP Libraries Overview: Next Steps
Excerpt: "Whether you want to just use the sample applications provided unchanged, extend them to suit your needs or build your own applications from scratch you should probably begin by reading through the general Installation and Setup information and the FAQ. These packages and the concepts presented with them are fundamental to all DP Libraries and the applications using them. Although you may not use this package directly in your web site it is used in all of the sample applications and ..."
DP Libraries Overview: Introduction
Excerpt: "The problems I've solved simply aren't particularly fascinating or unique: they are common to web application development. The DP Libraries aren't a Framework in the traditional sense in that they don't provide a grand theory of application development. There are many mature, full-featured Frameworks available for ColdFusion developers that are much more deserving of the auspicious "Framework" label. "
DP Libraries Overview: Fundamentals
Excerpt: "The libraries themselves generally represent a traditional OO model, but then expose that model as a service to be used in a more traditional procedural application. Where possible I will provide sample applications for the libraries detailing the way I use them in real applications. In many ways they're closer to APIs than a development framework in that the Libraries provide abstracted interfaces to functionality rather than complete applications. "
DP Libraries FAQ
Excerpt: "Why should I use the DP Libraries instead of [insert favorite framework]? If you already have a favorite Framework then simply put, you shouldn't use the DP Library Application Framework as an application framework at all (although you might find pieces of it useful regardless). For example the DP Libraries Security Library could be easily integrated into a FuseBox application and a FuseBox application could easily be written to manage it."
Weighting Random Selections
Excerpt: "This code illustrates an example of how to deal with weighted random selections. In code this system mimics this by generating the random number based on the total of the weightings and then looping over the list of weightings to find which range the random number falls in. The following table is generated by running the Weighting Random Selections code 100 times. "
Variables in CFML; Simple Data Types
Excerpt: "#Request.DPLib.Graphic.Spot("0377", "Right")# Simple data types differ from complex types in that all simple types can be displayed and treated as plain text. It can be said that all simple data types in CFML are actually simple strings (described below) and that the other simple types are just specially formatted strings. Like lists UUIDs are not a true data type but rather a specially generated and formatted string. "
Variables in CFML; Transient Variable Scopes
Excerpt: "Transient variable scopes exist for the current page request only and are private to the current request. When not within a ColdFusion component or function any variable not specifically created in another scope automatically becomes a member of the variables scope. As the variables scope is the lowest level "catch-all" scope most developers don't explicitly scope variables within it. "
Variables in CFML; Overview of CFML Scopes
Excerpt: "What follows is a quick reference to important information about each of the scopes defined in CFML. In CF 4.5 and 5.0 all named scopes with the exception of the Variable, Caller, Client, and Server scopes are available as structures. This means that all of the CFML structure functions may be used to manipulate these scopes. "
Variables in CFML; Other Variable Scopes
Excerpt: "Caller: The Caller scope is a pointer to the local Variables scope of the template that called the Custom Tag. Setting variables in the Custom Tag's Caller scope will create or overwrite them in the calling template's Variables scope. Similiar to the Variables scope any variable declared without specifying a scope in a UDF will be assigned the function local scope."
Variables in CFML; Cookie Scope
Excerpt: "The CFML Cookie Scope is an abstracted interface to standard HTTP Cookies. It allows CFML developer's to create, edit and delete cookies using CFML. Cookies lacking an expiration date exist only until the browser is closed and are not written the client hard disk, these are known as session cookies."
Variables in CFML; Session and Client Scopes
Excerpt: "Like the Server and Application scopes the Session and Client scopes are both persistant and can exist across multiple requests. #Request.DPLib.Graphic.Spot("0336", "right")# The Session and Client scopes can be considered children of the Application scope. The Client scope is designed to store more permanent information than the Session scope. "
Variables in CFML; Server and Application Scopes
Excerpt: "Data stored in Server and Application scopes are persistent and can exist across multiple requests. Data stored in these scopes is maintained in the server's system RAM and along with the Session scope (described later) are called "Shared Variable Scopes" due to the fact that acess to these scopes is shared among all active requests. These two templates create two separate application scopes: the "AppOne" application scope and the "AppTwo" application scope. "
Variables in CFML; Referencing Variable Scopes
Excerpt: "#Request.DPLib.Graphic.Spot("0084", "right")# Each scope is separate from all others meaning that a scope can have variables named the same as variables in another scope without conflicting. It should be obvious then than unexpected results can occur if you let ColdFusion discover the scopes of your variables when multiple scopes have variables of the same name. As this is the default scope any unscoped variable will often be assumed to be a member of the Variables scope."
Variables in CFML; Mixing Notation
Excerpt: "The most common of which is accessing query values using Dot notation to specify the column and Indexed notation to specify the row in the form queryName.ColumnName[RowNumber]. #Request.DPLib.Graphic.Spot("0243", "right")# However as your applications become more complicated you will often find the need (or desire) to create complex, nested data objects. Structures, arrays and queries can hold structures, arrays and queries to an effectively infinite level."
Variables in CFML; Indexed Notation
Excerpt: "Indexed notation, also called array notation, is somewhat more complex than Dot notation, but can be much more powerful and flexible. #Request.DPLib.Graphic.Spot("0082", "right")# Indexed notation takes the basic form of object[index] where "object" is a complex, indexed variable and "index" (always wrapped in square brackets) is the index being referenced. A two dimensional array (seen as a stack of one dimensional arrays) requires two indexes to reference any cell, or a single index to ..."
Variables in CFML; Dot Notation
Excerpt: "With Dot notation each level, or container of the variable is separated by a period, or "dot". #Request.DPLib.Graphic.Spot("0268", "left")# Dot notation is applicable to the data types "Query" and "Structure" (and to component objects which are treated as structures by ColdFusion). Referencing values in a structure with Dot notation takes the form StructName.KeyName. Structures can, of course, hold other Structure structures (or any other data type) as values. "
Variables in CFML
Excerpt: "#Request.DPLib.Graphic.Spot("0119", "Right")# Variables are the workhorses of any language. They allow for manipulation of values, storage of data and give languages the ability to maintain and control state during processing. Matthew Woodward, Sean A Corfield, Andy J, Erik Allen, Brian Simmons, and Matt Robertson provided invaluable comments and proofreading."
Variables in CFML; Dynamic Variables
Excerpt: "The ColdFusion function IsDefined() is used to determine the existence of a variable (it replaced the now deprecated function ParameterExists() which did not allow for dynamic variable processing). The function takes a string (or a variable containing a string or functions resulting in a string) and determines if there is a matching, existing variable. The function returns TRUE (the variable exists) or FALSE (the variable does not exist)."
Variables in CFML; Creating Variables
Excerpt: "CFML is somewhat unique in that the variable name used in the CFSET tag can itself be a dynamic value (variable). The tag accepts a variable name using the Name attribute and will test to see if that variable exists. Within CFSCRIPT variable creation uses a simple "name = value;" format (with name being any valid variable name, structure or array reference). "
Variables in CFML; Conclusion
Excerpt: "Using ColdFusion Variables By Hal Lichtin at Macromedia DevNet. An excellent overview of using ColdFusion variables that covers many of the same topics as this guide. In addition we also point you to our list of ColdFusion Books and our listings of general ColdFusion Resources. "
Variables in CFML; Complex Data Types
Excerpt: "Query objects can also be built manually using the many query functions (QueryNew(), QueryAddRow(), QuerySetCell(), etc) and specially populated Query objects are returned by some ColdFusion tags. Multi-dimensional arrays in ColdFusion are simply ordered collections of single dimensional arrays. Although new arrays are limited to three dimensions the ability to place arrays within arrays creates the potential for nth-dimensional arrays. "
Variables in CFML; Assignment by Value and Reference
Excerpt: "The end result of the following code is that foo holds the value "4" and fee holds the value "3". The second line made a copy of the then current value of foo, subsequent changes to foo are not reflected in fee. Unlike other data types structures and queries are not copied by value when using the equals ("=") sign, instead a reference or pointer to them is created. Locking references can become complicated very quickly so it's generally recommended that only advanced developers create ..."
Variables in CFML; Assigning Data to Variables
Excerpt: "Special characters, such as the pound sign ("#") and the double quote are used to distinguish variables from other CFML code. Pounds signs are only needed when you need to use a CFML variable within a string. The above code will create the variable "foo" but assign it no obvious value. "
Simplify Searching with Multiple File Extensions
Excerpt: "Search worms (file system explorers like Verity and Index Server) generally use file extension and folder to determine which files to include within an index. #Request.DPLib.Graphic.Spot("0115", "Left")# To solve this problem we have developed a simple solution: create multiple file extension types for ColdFusion (or ASP for that matter). The main benefit is that it's now a very easy task to "hide" these files from the Verity Search Engine or Index Server: simply don't include "CFMS" in the..."
ColdFusion Articles
Excerpt: "For compatible clients this system will allow you access to screen color depth and screen resolution. The CFToken and CFID cookies that identify ColdFusion sessions are, often annoyingly, set as persistent cookies. Here's some simple code allowing you to still use cookies as session identifiers and force them to die with the browser session."
Get Client Resolution Data
Excerpt: "Using these templates developers may retrieve client screen resolution and color depth data from JavaScript 1.1+ compatible browsers. A rare "big" you may also encounter is that client systems with multiple displays will return the resolution of the primary display even if the browser is currently shown a secondary display. Note this file will only populate the data if three criteria have been met: the session.resdata structure must exist, the URL.ScreenData variable must exist, and the ..."
Make Session Variables Truly Session Variables
Excerpt: "ColdFusion session variables, if identified by the CFToken and CFid cookies (the default behavior), will persist beyond a browser shut down. Sometimes however, for example if session variables are used to track security status (whether the user is logged in or not), it would be nice if the ColdFusion session actually ended with the browser session. (Note that "session" in this case refers to the browser session, not the ColdFusion session.)"
Design Statistics
Excerpt: "First Night ranks in the trinity of annual "Big Boston Events" along with the Esplanade Fourth of July Celebration and the Boston Marathon. First Night Boston 2000: A three-day FirstNight celebration held December 31, 1999 - January 2, 2000. First Night Boston 2001: Held December 31, 2000."
FirstNight.org Statistics: First Night Boston 2001
Excerpt: "Month of December (579kb Zip file of a 1,805kb Microsoft Word file). Day of December 31 (540kb Zip file of a 1,820kb Microsoft Word file). Then, from the December report, you can see that December 31st accounts for nearly 29% of December's traffic. "
FirstNight.org Statistics: First Night Boston 2000
Excerpt: "The event web site at www.firstnight.org offered database-driven access to the entire schedule of events, a personalized planner feature, artist profiles, maps and other event information. Firstnight.org, being a non-profit web site, can not afford the level of hosting that its two-day traffic spike would warrent. The database, also shared, was MS SQL Server 7.0 and hosted on identical hardware to the web server."
DepressedPress.com Screen Resolution Statistics
Excerpt: "#Request.DPLib.Graphic.Spot("0099", "Right")# The following table represents the resolutions and color depths used by visitors to DepressedPress.com. It may be expected that this group favors larger monitors and resolutions and higher color depths. For example note the "double wide" resolutions (such as 2048x768); these represent spanned dual-monitor configurations (however true, independent display dual-monitor configurations will log the resolution of the primary monitor only and are not ..."
Design
Excerpt: "#Request.DPLib.Graphic.Spot("0366", "Right")# We consider web and application design a new, uniquely modern art form. It combines the freedom of artistic expression, esthetics and graphic design with the constraints of human-factors, industrial design and usability. General interest articles and opinions on design, mostly covering web design but not always."
My Opinion of Smart Tags
Excerpt: "Recently, as part of an updated beta of WindowsXP, Microsoft released "Smart Tags", a new feature within Internet Explorer. A user may even choose to run my content through an auto-translation service like Babblefish thus ruining the meaning of my content more that Smart Tags ever could hope to. Smart Tags exist only in the context of the user and as such should not be considered an issue by web authors."
My Opinion of Colored Scrollbars
Excerpt: "A similiar problem can occur however if the author happens to change their scroll bar colors to match the users desktop color. Another problem is that very often authors taking advantage of this technique often choose colors which make it difficult to tell which component is the scroll bar tab and which is the the scroll bar track. In these cases having control over the scroll bar color settings makes Internet Explorer a more attractive choice for application developers."
The Lotus Notes Tribunal
Excerpt: "#Request.DPLib.Graphic.Spot("0366", "Right")# This guide is an attempt to display, beyond any shadow of doubt, that the distribution and continued development of Lotus Notes constitutes a crime against humanity. These charges are brought strictly against the end-user interface of the Lotus Notes client. Notes presents the user with many elements seemingly designed only to draw the user way from the work they hope to complete. "
The Lotus Notes Tribunal: Workspace Configuration
Excerpt: "Yes, there's a scrollbar, thank you Notes for once again doing the absolute minimum. Yes, of course Notes should give you the option to maintain your workspace exactly as you've configured it. The Notes Workspace: the best desktop since Windows 3.1."
The Lotus Notes Tribunal: "SmartPad Posting Options"
Excerpt: "In there there's an ambiguous little item called "SmartPad Posting Options". Yup, clear as mud: "Please Invoke SmartMail for Lotus Notes from SmartOffice". A subtly condescending error message assuming that I know what SmartMail is (I don't) and that I have "SmartOffice" (I don't). "
The Lotus Notes Tribunal: Nostalgia for Old Versions
Excerpt: ""Notes isn't JUST an email program," its proponents will crow, "it's a full-featured highly capable application platform!" It probably also explains why Notes often forgets what version you're actually using and takes you down little walks on memory lane. The fact is however that there isn't a soul on earth that wants to configure multiple toolbars across mail folders - especially when those toolbars lack basic functionality. "
The Lotus Notes Tribunal: Fax Address Helper
Excerpt: "Notes provides an email message (I'm sorry "Memo") preview function. Interestingly the line between the message header and the message itself is draggable. Why does Notes provide such a relatively complex and inappropriate feature instead of a simpler option to suppress the message header? "
The Lotus Notes Tribunal: Login Screen Language
Excerpt: "Note that the screen begins "Enter your password" then continues "For user" and "At Location". If so shouldn't the password be entered after the location has been selected (although we've already given up logical order by selecting the user after the password)? The drop-down select box presented next to "For User" graciously presents your "Notes Hierarchical Name" which is as about important to the average user as the sex life of the earthworm."
The Lotus Notes Tribunal: Login Screen Animations
Excerpt: "As you type your password Notes adds a seemingly random number of capital "X" characters into the password field for each keypress. However an observer watching the password be entered may actually find it easier to note the changes in this interface - especially as the changes are marked by large, bold-typed "X" characters instead of something less visually striking. It's been argued that the animation begins when the minimum number of characters needed for a Notes password has been ..."
The Lotus Notes Tribunal: The Folder Tree
Excerpt: "Note that most items represent a physical metaphor: folders, toolbox, trash can, etc. Click on a folder and the folder opens? Notes confuses and distracts us in this case by only "opening" folders which contain other folders. "
The Lotus Notes Tribunal: Fax Address Helper
Excerpt: "There's an "Actions" menu in Notes. This error message must be especially important for Notes to make such a spectacular departure from all user-interface guidelines, right? A normal application would have simply greyed out or removed the "Fax Address Helper" from the actions menu when you were not in a memo. "
The Lotus Notes Tribunal: "Cannot Drag and Drop out of Trash with Soft Deletes Enabled"
Excerpt: "If you click that button your item is moved from "Trash" to "Inbox" without further ado. Notes clearly recognizes that you are trying to move an item from the trash to the inbox. So the question has to be asked: "If Notes knows all of that why doesn't it HIT THE BUTTON ITSELF and move the item?""
My Opinion of HTML Magic Acts
Excerpt: "As web content authors we can bestow the ability to add and remove features, content, or controls at the whim of our readers. This page, with the help content, is about 20% longer than the page without the help content. The help content, when displayed, is not so large as to hinder the usability of the page. "
Design Articles
Excerpt: "Lots and lots of opinions. With modern HTML the web author now has the ability to make content appear and disappear like a street magician's quarter. The controversy about Smart Tags seems incredibly overblown to me and just may bring to the surface the unfortunate contention between content authors and content consumers."
Contact Us
Excerpt: "#Request.DPLib.Graphic.Spot("0130", "Right")# If you would like to consult with the Depressed Press please contact us: Phone: 570-343-7225 Fax: 570-343-7228"
A Solution to the US Financial Crisis!
Excerpt: "These caches rang from 18 to 58 million dollars (or, as they would say, "EIGHTEEN MILLION TO FIFTY-EIGHT MILLION AMERICAN DOLLARS"). Considering a (conservative) average personal holding of 29 million dollars that means that (conservatively again!) there's 3,672,433,154,000,000 (or "THREE QUADRILLION, SIX HUNDRED AND SEVENTY-TWO TRILLION, FOUR HUNDRED AND THIRTY-THREE BILLION, ONE HUNDRED AND FIFTY-FOUR MILLION AMERICAN DOLLARS") being held by the populace of Nigeria."
Resistance: Fall of Man Contest Entry
Excerpt: "drop zone was Manchester but we started taking heavy fire as soon as we hit the coast. I couldn't see that clearly, and I don't think I've been gassed, but I swear those bastards didn't look human to me." The enemy squad was small - I only saw six men - and they used those weird tracer rounds again. "
Writing
Excerpt: "#Request.DPLib.Graphic.Spot("0006", "Right")# Every once in a while something I write, I like. There was a contest write some short fiction based on the (then) unreleased PlayStation 3 Game "Resistance: The Fall of Man". Farscape was an amazing show that was killed by cowardly network execs uncomfortable with quality. "
Catalog of Farscape Deaths
Excerpt: "but damn, its characters did seem to die alot (but only rarely permanently). This includes dreams, alternate realities, unrealized timelines, hallucination, clones and any other tropes that may have popped up. Depending on your point of view either John is in the lead with nine deaths or Jool and Crais are tied for the lead with zero each. "
After Hours
Excerpt: "#Request.DPLib.Graphic.Spot("0041", "Right")# The section covers all those things that happen when we're not working. We think most people call it "life". Random stuff I've written over the years that don't fall into any other topic but that I liked enough not to throw away."
Review: Sly Cooper 2, A Band of Thieves
Excerpt: "Although I loved the first game I disliked the ending (a stealth platforming game that ends with jet-pack battle against a giant mechanical owl kind of dilutes the experience for me). Murray and Sly also have custom mini-games for many levels. Like many games of late there is very little background music to be had so the game relies heavily on the wonderfully produced ambient sounds. "
Review: Rag Doll Kung Fu (PC)
Excerpt: "Actions are fluid but have a tremendous amount of range - the game is designed to fling the characters around madly, not for surgical strikes. I found this INSANELY tedious since any click near the character affected the character and not the mushroom I was clicking on. If you're a fan you might like the game just for that reason - there's definitely a love and respect for the genre in this game. "
Review: Prince of Persia, The Warrior Within
Excerpt: "First thing first: I didn't like this game nearly as much as its predecessor "The Sands of Time". The Prince, having stolen the dagger of time and releasing the sands of time is now being chased by a nasty, unstoppable monster for having vilolated the timeline. He decides to travel to the Island of Time to confront the Empress of Time and try to prevent her, in the past, from creating the Sands of Time."
Review: Lego Star Wars (PS2)
Excerpt: "It can be played with one or two players and players can enter and leave the game at will (when they enter they take on the role of a friendly and when they leave that friendly goes back to computer control). This freedom means that the game is perfectly suited for play with your kids. You begin playing as Jedi, but can instantly switch to any friendly character in the story missions. "
Review: Jak 3 (PS2)
Excerpt: "These light powers are generally defensive and do add a nice balance to the game that Jak 2 lacked. Any common areas (the City of Haven, the Desert City of Spargus and the huge Wasteland Desert) are littered with mini-games and challenges. Also, as has become tradition in Sony's platform games, there's a (purchasable) easter egg relating to "Ratchet and Clank" (a cute, but pretty difficult gun course using characters from that game). "
Gaming
Excerpt: "#Request.DPLib.Graphic.Spot("0006", "Right")# Ever since Coleco gave me the ability to play games (Tennis, Hockey or Handball) on my TV I've never looked back. Folklore is a stunningly beautiful game with more than enough substance to forgive it's minor sins. A quirky little game about punching and kicking quirky little characters in their quirky little heads."
Review: High Velocity Bowling (PS3)
Excerpt: "This downloadable game implements SIXAXIS motion controls to simulate the motions of real bowling. Although this game will suffer many (and many ignorant) comparison to Wii Sports Bowling the games are really in two different (bowling) leagues. Where Wii Sports excels at being a "kiddy" game High Velocity Bowling takes a much more realistic tack and provides many more options for deeper play. "
Review: Grand Theft Auto, San Andreas
Excerpt: "Forgetting all of that I could still (just for fun and profit) do the low-rider challenge, perform burglaries, do the shooting range challenges, play one of four video games, play pool, play basketball, gamble on any of six or so games, go dancing, primp with barbers, tattoos or new clothes, trick out cars at the mod garages or grab a friend and play any of around 10 two player missions. The game has tons of cheap, cheap, cheap deaths (or mission failures). I lost several driving missions ..."
Review: God of War (PS2)
Excerpt: "Each of the large enemy types (Gorgons, Cyclops, Centaurs, etc) has a "last throws" mini-game attached. It's also disappointing that the final boss (Ares, of course, no spoiler there) just isn't as interesting as the regular game enemies. Once you beat the game you open up the insanely difficult "God Mode" and a special "Challenge of the Gods" mini-game where you must face 10 combat "puzzles" in a row."
Review: Folklore (PS3)
Excerpt: "For example the clockwork folk "Habetrot", for Ellen, causes other folk to fall asleep while, for Keats, drops a large pendulum weight on enemies causing a small earth quake. Ellen's folk, in general, are also more cerebral with several "sleep" and "charm" folks (classes which Keats lacks) and she has many more long distance attacks at her disposal. Where Ellen summons the folk Keats becomes the folk. "
Review: Assassin's Creed (PS3)
Excerpt: "Like the UBISoft classic "The Prince of Persia: The Sands of Time" this game works hard to provide compelling narrative explanations for game mechanics. This is probably not a game that you will play from beginning to end: the game is simply too repetitive and dull for that. However as a game that you play in stints between other games this might grow on you. "