 |
Thoughts, ideas, tips, musings, and pontifications (not necessarily in that order) by Ben Forta ...
NOTE: This is my personal blog, and the opinions and statements voiced here are my own.
November 30, 2006
Posted At : 9:54 PM
Related Categories:
ColdFusion :
ColdFusion MX 7.0.2 Cumulative Hot Fix 1 (containing a total of 14 fixes) has been released.
Posted At : 4:03 PM
Related Categories:
Stuff :
Adobe :
As Ray Camden just posted, RIAForge has hit a major milestone, it's 100th project posted. Thus far, RIAForge has blown away our usage projections!
Posted At : 12:20 PM
Related Categories:
Flex :
I presented CF/Flex and Scorpio sneaks to the Toronto CFUG earlier this week. At the event, Oliver Merk announced the formation of a new Toronto Flex User Group, and the inaugural meting is set for January 23rd, 2007. This is great news for the Toronto community!
Posted At : 12:19 PM
Related Categories:
ColdFusion :
Marco Martins wrote to let me know about the new Brazilian National ColdFusion User Group. ColdFusion has some very important customers and deployments in Brazil, but community support withered somewhat during the Macromedia era, and this new group is going to be an important part of reinvigorating the Brazilian ColdFusion community. The group had their first meeting earlier this week, and I want to publicly congratulate them on this important milestone. And yes, I am planning a trip to Brazil for early 2007, and will be sure that this new group makes it on to my agenda.
Posted At : 12:03 PM
Related Categories:
Flex :
A user e-mailed with an interesting question. He has a ColdFusion powered Flex application that uses lots of DateField controls. By default, DateField displays left and right buttons to change months, but no buttons to change years. Changing years is supported by specifying yearNavigationEnabled="true", but he wanted to know if there was a way to change the default behavior so as to not have to add that property over and over. The solution is a very simple one, and is a nice demonstration of the simplest form of Flex custom components. This first code snippet is a new DateField2 component:
<?xml version="1.0" encoding="utf-8"?> <mx:DateField xmlns:mx="http://www.adobe.com/2006/mxml" yearNavigationEnabled="true" />
And here is the equivalent DateChooser2 component:
<?xml version="1.0" encoding="utf-8"?> <mx:DateChooser xmlns:mx="http://www.adobe.com/2006/mxml" yearNavigationEnabled="true" />
That's all there is to it, just use DateField2 instead of DateField, and DateChooser2 instead of DateChooser, and you're done.
November 29, 2006
Posted At : 2:40 PM
Related Categories:
SQL :
SQL searches are usually case-insensitive, because most databases are set up by default for case-insensitive searching. Case sensitivity is defined by collation sequences, rules which define how strings are compared taking into account the specifics of individual languages (case, special characters, and more). Collation sequences can be defined at the database server level, at the specific database level, at the table level, and also at the individual column level. Collation sequences can also be overridden, so if a collation sequence is defined for a database or table, a specific column can have an alternate collation sequence. Why do I bring this up? An app I am working on needs to use LIKE to perform wildcard searches against a table column, but those searches must be case-sensitive (so that %foo% will not match FooBar). The simple solution would have been to modify the table so that the column used in the search would use a case-insensitive collation sequence. But that would have messed up other searches that need to remain case-insensitive. So what to do? Here are a couple of solutions. Collation sequences may be defined inline, right in the WHERE clause, as seen here:
SELECT * FROM MyTable WHERE Col3 COLLATE SQL_Latin1_General_CP1_CS_AS LIKE '%foo%'
In this example, the default collation sequence was SQL_Latin1_General_CP1_CI_AS (the CI indicates case-insensitive), but in the above WHERE clause an inline COLLATE statement is specified so that collation sequence SQL_Latin1_General_CP1_CS_AS (the CS indicates case-sensitive) is used in this search. Another solution, better suited for situations where both case-sensitive and case-insensitive searches are frequently needed, is to define the table with one sequence (whichever sequence will be used more frequently), and a VIEW based on that table with another. Here is an example, setting an explicit collating sequence for one column:
CRETE VIEW MyTableCS AS SELECT Col1, Col2, Col3 COLLATE SQL_Latin1_General_CP1_CS_AS as Col3 FROM MyTable
November 27, 2006
Posted At : 9:03 PM
Related Categories:
Mobile :
In addition to the comments I posted yesterday regarding my new Samsung BlackJack: Pros:
- Batteries can be charged via the included charger, or by connecting the phone to your computer, it uses the same USB connection to sync the device and to charge the battery, which is very nice. No need to carry a charger and a sync cable.
- I've been using the phone actively today, and call quality is superb!
Cons:
- Battery life is appalling! I do have Bluetooth activated all of the time, and that does drain power. But still, this device has the worst battery life of any device I have used. Not good at all.
- As already noted, I like that the device charges via the sync cable. But, there is no easy way to determine when charging is complete! No light, no indicator, the battery strength indicator is not granular enough to distinguish between partially full and completely full.
- And the biggie! As noted yesterday, the Bluetooth support works well. But, there is one MAJOR implementation flaw. You can pair as many devices as you like, including multiple headsets. But only one can ever be active at any time. What does this mean? I use two headsets continuously, one is a little ear headset and the other is my car. Both are paired with the phone, and so whichever is available should be used. This is how every other Bluetooth device I have used works, including multiple Sony Ericsson phones, the Nokia E62, the Treo 650, Windows devices like the Cingular 8125 and the Treo 700w (meaning that this is not a Windows Mobile limitation), and more. But not the BlackJack. To switch from one headset to the other I have to go to Settings, Communications, Bluetooth, Headset Settings and use the menu to manually select which one to use for connections (SET will appear next to the selected one and an X next to the other). This is a ridiculous and arbitrary limitation, and could be the deal breaker for me. :-(
More to follow, I am sure.
I just arrived in Toronto, and will be presenting here twice tomorrow: If you are in the area, please drop by! You probably won't want to attend both events, as there will be quite a bit of overlapping content (although you are more than welcome to do so).
November 26, 2006
Posted At : 6:34 PM
Related Categories:
Mobile :
I bought the Samsung BlackJack that I mentioned the other day. I've been using it on and off throughout the weekend, and so here are my initial thoughts: Pros:
- The form factor is incredible. The device is about the same height and width as the Treo, but it is considerably thinner and much lighter. Actually, the form factor is probably closer to that of the Motorola Q (which is not available for Cingular customers), but unlike that device, the BlackJack feels solid and rugged. It's also remarkably comfortable to hold next to your ear.
- The back (which includes half of the depth) of the device is rubber coated. This makes it very comfortable to hold, it just grips and feels right in your hand.
- The scroll wheel (for which the BlackBerry is famed) is well placed, intuitive to use, and just plain works. This is a big plus, and scroll wheels should be the standard on all devices like this.
- The screen is very sharp and clear. It's small, smaller than the Treo and much smaller than the absolutely perfect Nokia E62 screen, but it is still easy to read and very bright.
- The device is very responsive, easily as fast as the Treo (650), faster than the other Windows devices I've used (including the Cingular 8125 and the Treo 700), and orders of magnitude faster than the Symbian devices I have tried of late (including that horribly sluggish E62).
- Audio quality is great, both on my end and on the other end of the connection.
- Cell coverage is really good, this phone works in places where my Treo (and former Sony Ericsson devices) could get no coverage at all. (Incidentally, the Nokia was just as good in this respect).
- Bluetooth support is decent, although not great. I'm listing Bluetooth as a pro because at the end of the day it does work with every device (including my car). But at the same time, it does not publish extended data (cell and battery strength), it does not always easily switch from headset (the one in my ear) to headset (my car). Although, to be fair, the week I spent with the Nokia E62 significantly raised the bar for what Bluetooth support should be, and frankly, I have yet to see any other vendor implement Bluetooth as perfectly as Nokia did in that device, and I doubt I'll be satisfied with any other Bluetooth implementations now.
- The phone comes with 2 batteries, that's the good news. The bad news is that the second battery is needed, see below.
- The 3G support is really good, and very fast. When it works, that is. More on that below, too.
- The basic apps are great, although that is more a Windows Mobile function than the device itself.
Cons:
- The screen is small. I know I listed this already under pros, because it is, it helps with the device form factor that I love. But at the same time, it is a bit too small for web browsing or for reading large documents or e-mails.
- The keyboard is a bit cramped. And yes, I know I said that I like the small form factor. But the keys are a bit narrow, they are longer than the keys on the Treo, but the narrow shape makes it harder for big fingers to press just the one you want. The multi-directional toggle button is also really badly designed - it is flush with the other keys, including the red end-call key. I may get used to it, but for now I hit that end-call key way too often.
- The text messaging app is not very good, nowhere near as good as the Treo's one. No as-you-type lookup, and no chat mode, are the biggest flaws. But at least it isn't the horrid integrated inbox text messaging app that other Windows devices have (like the 8125).
- I already said that the 3G support is good, and it is, it is really fast. When it works. Every once in a while the device can't connect to anything! I don't know if it is the device, local coverage, or what - I'll test it some more while on the road this week, but requests that neither respond nor time out are downright annoying!
- Battery life is poor, definitely worse than any device I have used previously. Good thing there are two batteries!
- The back cover is absolute pain to get on and off, and, taking into account the previous item ,this is a real problem.
- No voice dial.
- Speed dial keys are basically useless. One of the things I really like about the Treo is that you can instantly access what you need, there are the dedicated calendar and messaging keys, you can assign speed dials easily to any letter, and there are also one touch soft buttons on the home screen. The BlackJack has two context sensitive softkeys, and a dedicated messaging key, but only one real programmable key (on the right, and only the long press is programmable). And it appears that you can only assign speed dials to number keys, and not letters. This coupled with no voice dial (as previously mentioned) means that you'll be digging through lists and menus far too often.
- There seems to be a problem using ActiveSync when I am on a VPN connection. I know that this is not a Samsung issue, it's a Microsoft ActiveSync one, but still, having to disconnect from VPN to synch the device is frustrating.
My initial reaction to the Samsung BlackJack is a very positive one, primarily because of the form factor, the feel, and the performance. So far the pros outweigh the cons (I think). More to follow.
November 23, 2006
Posted At : 9:55 PM
Related Categories:
Mobile :
I know, I've found my "next phone" many times over the past few years, only to be disappointed each time. But I am not giving up, and now the device that has caught my attention is the new Samsung BlackJack. This device has a pretty sleek form factor, it's narrower than the Treo, the Nokia E61/62, and most BlackBerry devices (several reviewers find the form factor similar to that of the Motorola Q). It also features a scroll wheel, the one feature that BlackBerry got right and that Treo and the others failed to implement. The BlackJack runs Windows Mobile 5, it's a quad-band GSM device with 3G support (it supports UMTS/HSDPA/EDGE/GPRS data connectivity), and initial data performance numbers are very impressive. Reviewers like the audio quality and phone volume (always a problem with Treo). The device supports Bluetooth 2, but no WiFi. It also features a 1.3-megapixal camera, which I'd rather not have. So, nice form factor, decent screen (although it can't compare to the E62), Windows Mobile (in my experience faster than Symbian but slower than Palm), decent keyboard, quad-band GSM and great data connectivity but no WiFi ... humm, not perfect, but it definitely sounds like I need to take a look at it. If you have any experience with this device, please share!
In addition to the existing ColdFusion and Flex portals, a new LiveCycle portal is now online.
November 22, 2006
Posted At : 11:02 PM
Related Categories:
Flex :
One of the things I like most about ColdFusion's <CFSELECT> tag is the SELECTED attribute, give it a value and it figures out which one to pre-select. The Flex ComboBox allows you to set selectedIndex (the relative element position) but not selectedValue. Actually, ComboBox does have a selectedValue property, but that is used to read the value of the selected item, and can't be used to set the value of the item to be selected. Coincidentally, while I was working on this, both Scott Stroz and Ray Camden posted solutions to the exact same problem. Scott's solution involved calling a method to set the value, and I really think that the selectedValue property should be used to be consistent with how ComboBox itself works. Ray's solution allows for a property to be set (he defined a new property for this), but his solution would not work for me as my dataProvider was being populated after the control had been created (it is being populated by a call to a CFC). So, here is my solution. It's bit more complex than what Scott and Ray suggested, but it does support selectedValue, it'll also allow that property to be changed as needed (even after control creation), and it also properly handles delayed dataProvider population. Here is the code:
<?xml version="1.0" encoding="utf-8"?> <mx:ComboBox xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script> <![CDATA[ private var _selectedValue:String; private var bSelectedValueSet:Boolean = false; private var bDataProviderSet:Boolean = false;
// Override committ, this may be called repeatedly
override protected function commitProperties():void { // invoke ComboBox version
super.commitProperties();
// If value set and have dataProvider
if (bSelectedValueSet && bDataProviderSet) { // Set flag to false so code won't be called until selectedValue is set again
bSelectedValueSet=false; // Loop through dataProvider
for (var i:int=0;i<this.dataProvider.length;i++) { // Get this item's data
var item:String = this.dataProvider[i].data; // Check if is selectedValue
if(item == _selectedValue) { // Yes, set selectedIndex
this.selectedIndex = i; break; } } } }
// Trap dataProvider being set
override public function set dataProvider(o:Object):void { // invoke ComboBox version
super.dataProvider = o;
// This may get called before dataProvider is set, so make sure not null and has entries
if (o!=null && o.length) { // Got it, set flag
bDataProviderSet = true; } }
// set for selectedValue
public function set selectedValue(s:String):void { // Set flag
bSelectedValueSet = true; // Save value
_selectedValue = s; // Invalidate to force commit
invalidateProperties(); } ]]> </mx:Script>
</mx:ComboBox>
And here is a simple test case: <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:ns1="*"> <mx:Script> <![CDATA[ [Bindable] private var comboData:Array= [{label:"Item1", data:"1"}, {label:"Item2", data:"2"}, {label:"Item3", data:"3"}]; ]]> </mx:Script> <ns1:ComboBox2 dataProvider="{comboData}" selectedValue="3" /> </mx:Application>
Lots of us have needed a Flex ComboBox populated with U.S. States, and there are examples of that out there. But what I needed for an app I am working on is something a little different, a ComboBox that could display U.S. States or Canadian Provinces (but not at the same time, obviously). One simple (albeit ugly) solution would be to have two controls, switching the active one as needed. But nah, a better solution would be a control that does both. And so, with lots of invaluable help from Peter Ent, I created a USCAStates control. Here is how it could be used: <!-- Display US States ComboBox --> <ns1:USCAStates country="United States" />
<!-- Display CA Provinces ComboBox --> <ns1:USCAStates country="Canada" />
And that country property can be change on the fly, forcing the list to refresh on demand based on whatever country name is passed. In my application I have another ComboBox containing countries. If United States is selected then the next ComboBox displays U.S. States, if Canada is selected then the next ComboBox displays Canadian Provinces, and if any other country is selected then the next ComboBox is disabled using enabled=false. Here is the code for USCAStates: <?xml version="1.0" encoding="utf-8"?> <mx:ComboBox xmlns:mx="http://www.adobe.com/2006/mxml" dataProvider="{internalDP}" labelField="@label">
<mx:Script> <![CDATA[ public static const USA:String = "United States"; public static const CANADA:String = "Canada"; // have the ComboBox look at this internal provider and switch it
// depending on the value of country
[Bindable] private var internalDP:XMLList; private var _country:String; public function set country(c:String):void { _country = c; if (_country==USA) { internalDP = usstates.state; } else if (country==CANADA) { internalDP = castates.state; } } public function get country() : String { return _country; // just in case anyone wants to know
} ]]> </mx:Script>
<mx:XML id="usstates" xmlns=""> <root> <state label="Alabama" data="AL"/> <state label="Alaska" data="AK"/> <state label="Arizona" data="AZ"/> <state label="Arkansas" data="AR"/> <state label="California" data="CA"/> <state label="Colorado" data="CO"/> <state label="Connecticut" data="CT"/> <state label="District of Columbia" data="DC"/> <state label="Delaware" data="DE"/> <state label="Florida" data="FL"/> <state label="Georgia" data="GA"/> <state label="Hawaii" data="HI"/> <state label="Idaho" data="ID"/> <state label="Illinois" data="IL"/> <state label="Indiana" data="IN"/> <state label="Iowa" data="IA"/> <state label="Kansas" data="KS"/> <state label="Kentucky" data="KY"/> <state label="Louisiana" data="LA"/> <state label="Maine" data="ME"/> <state label="Maryland" data="MD"/> <state label="Massachusetts" data="MA"/> <state label="Michigan" data="MI"/> <state label="Minnesota" data="MN"/> <state label="Mississippi" data="MS"/> <state label="Missouri" data="MO"/> <state label="Montana" data="MT"/> <state label="Nebraska" data="NE"/> <state label="Nevada" data="NV"/> <state label="New Hampshire" data="NH"/> <state label="New Jersey" data="NJ"/> <state label="New Mexico" data="NM"/> <state label="New York" data="NY"/> <state label="North Carolina" data="NC"/> <state label="North Dakota" data="ND"/> <state label="Ohio" data="OH"/> <state label="Oklahoma" data="OK"/> <state label="Oregon" data="OR"/> <state label="Pennsylvania" data="PA"/> <state label="Rhode Island" data="RI"/> <state label="South Carolina" data="SC"/> <state label="South Dakota" data="SD"/> <state label="Tennessee" data="TN"/> <state label="Texas" data="TX"/> <state label="Utah" data="UT"/> <state label="Vermont" data="VT"/> <state label="Virginia" data="VA"/> <state label="Washington" data="WA"/> <state label="West Virginia" data="WV"/> <state label="Wisconsin" data="WI"/> <state label="Wyoming" data="WY"/> </root> </mx:XML>
<mx:XML id="castates" xmlns=""> <root> <state label="Alberta" data="AB"/> <state label="British Columbia" data="BC"/> <state label="Manitoba" data="MB"/> <state label="New Brunswick" data="NB"/> <state label="Newfoundland" data="NL"/> <state label="Northwest Territories" data="NT"/> <state label="Nova Scotia" data="NS"/> <state label="Nunavut" data="NU"/> <state label="Ontario" data="ON"/> <state label="Prince Edward Island" data="PE"/> <state label="Quebec" data="QC"/> <state label="Saskatchewan" data="SK"/> <state label="Yukon" data="YT"/> </root> </mx:XML>
</mx:ComboBox>
[Update]
Here is a simple usage example, sent to me by Dan Zeitman:
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:ns1="*">
<mx:RadioButtonGroup id="Country" change="{cbStates.country = Country.selectedValue.toString()}"/> <mx:RadioButton label="United States" groupName="Country" selected="true"/> <mx:RadioButton label="Canada" groupName="Country"/> <ns1:USCAStates country="United States" id="cbStates" /> </mx:Application>
November 21, 2006
Posted At : 11:02 PM
Related Categories:
ColdFusion :
I am working on a project that needs to do LDAP lookups, and lots of them. Some of my searches are for a single name, others are for multiple, and some allow partial matches (begin with passed string) while others don't. A simple LDAP test for equality filter might look like this: uid=jsmith. Searching for multiple users (an OR search, so that any of them match) requires a syntax like this: (|(uid=jsmith)(uid=jdoe)(uid=bjones)). And then to allow wildcard searching you'd need to add a * after the name (or each name in the OR example). To make all of this simpler I wrote this little UDF. You pass it the attribute to search on, the text to search for (lists are allowed), and whether or not wildcard searches are allowed. The string that is returned can be passed to <CFLDAP> as is. <!--- Build LDAP filter, handle lists (treat as or search) ---> <cffunction name="BuildLDAPFilter" returntype="string" output="false"> <cfargument name="ldapField" type="string" required="yes"> <cfargument name="searchText" type="string" required="yes"> <cfargument name="wildcard" type="boolean" required="no" default="no">
<cfset var result=""> <cfset var i=""> <cfset var suffix=""> <!--- If wildcard, set suffix ---> <cfif ARGUMENTS.wildcard> <cfset suffix="*"> </cfif>
<!--- Is this single or list? ---> <cfif ListLen(ARGUMENTS.searchText) IS 1> <!--- Single, use as is ---> <cfset result="#ARGUMENTS.ldapField#=#ARGUMENTS.searchText##suffix#"> <cfelse> <!--- Multiple, start filter string ---> <cfset result="(|"> <!--- Loop through fields ---> <cfloop list="#ARGUMENTS.searchText#" index="i"> <!--- Append field ---> <cfset result=result&"(#ARGUMENTS.ldapField#=#i##suffix#)"> </cfloop> <!--- Wrap up filter string ---> <cfset result=result&")"> </cfif>
<cfreturn result> </cffunction>
November 20, 2006
Posted At : 10:59 PM
Related Categories:
SQL :
Temporary tables have long been an integral part of any complex SQL processing. If you have a long script or stored procedure, one which needs to extract or manipulate data using multiple queries and related statements, then being able to save results into temporary tables can dramatically improve performance (as well as readability and management). SQL Server has supported temporary table use for any years, I first used them in SQL Server 6.5 (which were released in the mid 90s). Temporary tables are created and used just like any other tables, and then can be either local or global. Here is a simple code snippet that creates two temporary tables, one local and one global: -- Create local temporary table CREATE TABLE #MyTempTable ( id INT PRIMARY KEY, firstName CHAR(50), lastName CHAR(50) )
-- Create global temporary table CREATE TABLE ##MyTempTable ( id INT PRIMARY KEY, firstName CHAR(50), lastName CHAR(50) )
The two code snippets look similar, the only difference is that one table is named #MyTempTable and the other is named ##MyTempTable. In SQL Server, a single # is used to refer to a local temporary table, and double # is used to refer to a global temporary table. Once created, these tables can be used like any other tables. You can SELECT, INSERT, UPDATE and DELETE, you can use them in JOINs and subqueries, and more. You just have to be careful to use # (or ##) as part of the table name. Oh, and you can also use SELECT INTO to create and populate a temporary table in one step. You can also DROP temporary tables. Although SQL Server can automatically drop the temporary tables for you, too. Temporary tables are automatically dropped when the session that created them terminates (goes out of scope). SQL Server 2000 added support for an alternative to temporary tables, the table variable. Table variables are similar to temporary tables in that they are intended for temporarily working with data. Here is how one is created: -- Create table variable DECLARE @MyTempTable TABLE ( id INT PRIMARY KEY, firstName CHAR(50), lastName CHAR(50) )
DECLARE is used to declare variables, and the variable is prefixed by @ (instead of #). In SQL Server, variables are always prefixed by @, and table variables are no different. Once created, a table variable can also be used like a regular table. You can SELECT, you can INSERT, UPDATE, and DELETE, you can use the table variable in JOINs and subqueries, and more. And the table variable has some important benefits over temporary tables:
- Table variable access can be considerably faster than temporary table access.
- There is no need to DROP tables or perform cleanup, when the variable goes out of scope (the statement or stored procedure ends) the table variable is cleaned up just like any other variable.
- Table variables can be safer in a multi-user environment than temporary tables.
So, there are definitely benefits to using table variables. But is there any reason not to use them? Well, maybe. Table variables have some important restrictions that may impact whether or not you can use them:
- Tables variables are not available pre SQL Server 2000.
- Table variables must always be accessed using an alias (except in the FROM clause of course). If you want to refer to the table variable in a JOIN, for example, you must refer to is by its alias.
- Table variables do not support SELECT *, you must always explicitly list the columns you want.
- Table variables cannot be explicitly DROPped.
- Once created, table variable definitions cannot be changed.
- Tables variable do not support SELECT INTO syntax.
- There are fewer index options available for table variables, and this can impact performance.
This Microsoft FAQ explains some of the differences between temporary tables and table variables. So yes, table variables do have some limitations that temporary tables do not. But, having said that, I was working on a rather complex stored procedure today, one that made extensive use of temporary tables. And in this project, replacing the temporary tables with table variables resulted in a very significant performance gain. The bottom line is that both temporary tables are table variables are invaluable tools in your SQL Server toolbox, and you really should become familiar with both. Note: Other DBMSs (including both Oracle and MySQL) also support temporary tables and table variables. Unfortunately, the syntax used to work with these tables (as well as the restrictions and differences between them) tends to differ significantly between DBMSs implementations.
November 18, 2006
Posted At : 11:49 PM
Related Categories:
ColdFusion :
The ColdFusion team released three hot fixes recently:
November 17, 2006
Posted At : 2:32 PM
Related Categories:
Flex :
Ok, so I am not sure where I could use this personally, but wow, SpringGraph is as impressive a Flex 2 component as I have seen yet. Try the demos!
Kuler is a new online application that you can use to explore and experiment with colors and color themes. Honestly, I am not a designer (duh!), so while the UI is cool I doubt it's an app I'll use much myself. What is really cool, at least for me, is that the backend for this app is ColdFusion powered Model-Glue (as noted by Sean Corfield).
November 15, 2006
Posted At : 6:54 PM
Related Categories:
ColdFusion :
CFUnited (formerly CFUN) has become the premier ColdFusion specific event. I've attended for the past 5 years (with the exception of 2003), and plan on attending this year too. And as in previous years, I expect that the bulk of the CF team will be in attendance as well. If you are serious about ColdFusion and CFML, this is one event you don't want to miss! Registration is now open.
Ted Patrick built FlexSearch, a simple search app to locate Flex content from dozens of sources (he has over 50,000 articles indexed). Ted posted details on his blog, and also noted that this is his first real ColdFusion application. Well done Ted, and welcome to the wonderful world of ColdFusion simplicity and productivity! Now I almost forgive you for having a PHP powered blog! ;-)
Posted At : 12:13 PM
Related Categories:
ColdFusion :
I just received a rather upset (and even irate) e-mail from a user complaining about ColdFusion's lack of MacTel support. While some users have indeed gotten ColdFusion to run on MacTel boxes, MacTel is not an officially supported platform. Why? Simply because ColdFusion MX7 was released before the first generation Intel-based Macintoshes were released (January 2006, I believe)! Having said that, lots of customers have asked for MacTel support, and we do indeed plan on supporting this platform in "Scorpio" (which we've already said is slated for a mid-2007 release). Of course, all plans can (and sometimes do) change. ;-)
November 14, 2006
Andrew Muller has posted a great MAX 2006 report on Builder.au (Australia's Builder.com).
Posted At : 4:35 PM
Related Categories:
ColdFusion :
Eric Jones is resurrecting his ColdFusion blog over at sitepoint. Welcome back, Eric
November 13, 2006
Posted At : 11:40 PM
Related Categories:
Stuff :
I tried paying my Corporate American Express bill online. The online form told me that the amount due was $2,420.53 (prefilling the box with that exact value), so I selected that balance and authorized payment. When I submitted the form I received the following error: Error: The amount you attempted to pay exceeds the Total Outstanding Balance of 2420.5299999999997. Please reenter a payment amount that does not exceed this value. Well, ok then!
November 11, 2006
I guess it was to be expected. The online MAX store has created a Scorpio Man t-shirt. ;-)
|
|