ColdFusion News :.
To bring a little life to my site, I've pulled a couple - Developer Circuit (ColdFusion Jobs)
- coldfusionbloggers.org
- Fusion Authority
- EasyCFM News
- EasyCFM Tutorials
You are currently viewing and RSS Feed from coldfusionbloggers.org.
ExtJS 4.2 Walkthrough Upgrade!
As with all software, each version of ExtJS ships with the following: Bugs Known issues “Would-be-nice” features that didn’t make the prior release Fortunately, the ExtJS team is constantly tweaking, fixing, and improving the framework. With each round of development, they’ll do various releases…some major like 4.2, others minor like the recent 4.2.1. Should I…
(Sat, 25 May 2013 15:00:39 GMT)
[view article in new window]
Ruby: stream-of-consciousness
G'day:
OK, so I'm fiddling around with Ruby (as per my previous post), and am typing this article as I explore.
Prior to starting this I googled "ruby IDE", and saw a lot of advice from people to just use a text editor. There are always people who claim they do all their code in notepad or vi etc, and I always figure they're just trying to sound cool. Whereas I think they just sound stupid, because whilst anyone can type code into a blank, featureless typing window (and we've all had to do emergency hacks on prod servers using vi or notepad, so it's good to not have to rely on code assist, etc), it's not exactly the most professionally productive way of going about one's business.
It seems like the general opinion is to use the plug-in for NetBeans, or a plug-in for Aptana. The plug-in for NetBeans has been discontinued (although someone's blogged how to install it anyway... I might need to look at that later on), so I have installed Aptana as a plug-in to Eclipse, adjacent to my ColdFusion Builder plug-in. This seems to have had the effect of slowing down Eclipse even more, and interfering with my Eclipse config, so this has not impressed me one bit.
One of the Aptana pages I landed on suggested install Ruby via RubyInstaller, which I duly have done, and that all seems to work, which is cool.
I dunno how to do all the IDE-y stuff yet, but I can create a Hello World file and run it from the command line.
Very simple version:
# helloWorld.rb
puts "Hello World"
OO version:
# helloWorldOO.rb
class HelloWorld
def initialize(name)
@name = name.capitalize
end
def sayHi
puts "Hello #{@name}!"
end
end
hello = HelloWorld.new("World")
hello.sayHi
And at the command line:
Hello World
C:\apps\Ruby200-x64\bin>ruby C:\src\ruby\misc\helloWorldOO.rb
Hello World!
C:\apps\Ruby200-x64\bin>
Cool. I'll not try to explain what's going on with that code, as I have no idea. But it's pretty self-explanatory at this level.
Another thing I noticed is that Ruby has a CLI, which one can run using irb:
DL is deprecated, please use Fiddle
irb(main):001:0> puts "Hello World"
Hello World
=> nil
irb(main):002:0>
NB: I am also not vouching for any "best practices" here... I'm just telling you what I'm messing around with.
On the Code School website, I've started the reallyreally beginner "class", which has got me typing stuff into a web-based command interpreter. I'm currently keying in stuff like "4+4" and "Adam" and stuff. Type an expression in, and Ruby evaluates it. I can do the same in my irb window, eg:
=> 45.14
irb(main):011:0>
Ruby seems to be one of these languages in which everything is an object, so the tutorial has had me do this sort of thing:
"Zachary".reverse
(yields "yrahcaZ")
"Zachary".length
(yields 7)
Note how method calls don't need parentheses.
I can also do this, which is neat:
"Zachary" * 5
(yields "ZacharyZacharyZacharyZacharyZachary")
So if one multiplies a string, one gets the string that many times. I tried this:
"Zachary" + 2
And got this:
irb(main):015:0> "Zachary" +2
TypeError: no implicit conversion of Fixnum into String
from (irb):15:in `+'
from (irb):15
from C:/apps/Ruby200-x64/bin/irb:12:in `<main>'
irb(main):016:0>
Yeah... fair enough ;-)
Continuing with the tutorial, they demonstrate the inverse of me trying to add 2 to a string, by calling reverse on a number (which errors), and then showing how to convert the number to a string, and then it's all good:
NoMethodError: undefined method `reverse' for 40:Fixnum
from (irb):17
from C:/apps/Ruby200-x64/bin/irb:12:in `<main>'
irb(main):018:0> 40.to_s.reverse
=> "04"
irb(main):019:0>
Hmmmm... method names with underscores in them. I don't like that much. Oh well.
The tutorial observes there's a few conversion methods:
Oh... I didn't even know which version of Ruby I was running (OK, I should have guessed from the install path: C:\apps\Ruby200-x64), so googled a way to find out. And found this page. One can do stuff like this:
=> "2.0.0"
irb(main):024:0> RUBY_PLATFORM
=> "x64-mingw32"
irb(main):025:0> RUBY_RELEASE_DATE
=> "2013-05-14"
irb(main):026:0>
So v2.0.0 it is.
The tutorial continues to explain arrays, and the syntax is familiar:
["tahi", "rua", "toru", "wha"]
And one can call methods directly on the literal array:
["tahi", "rua", "toru", "wha"].length
(yields 4).
Variable assignment is the same as in CFML:
numbers = ["tahi", "rua", "toru", "wha"]
And they observe arrays have a sort method:
numbers.sort
(yields ["rua", "toru", "tahi", "wha"])
There's two different approaches to sorting available. the sort method sorts the input array, returning a new array. the sort! (with the !) sorts the array itself, returning it. EG:
=> ["whero", "karaka", "kowhai", "kakariki", "kikorangi", "tuauri", "tawatawa"]
irb(main):036:0> rainbow.sort
=> ["kakariki", "karaka", "kikorangi", "kowhai", "tawatawa", "tuauri", "whero"]
irb(main):037:0> rainbow
=> ["whero", "karaka", "kowhai", "kakariki", "kikorangi", "tuauri", "tawatawa"]
irb(main):038:0> rainbow.sort!
=> ["kakariki", "karaka", "kikorangi", "kowhai", "tawatawa", "tuauri", "whero"]
irb(main):039:0> rainbow
=> ["kakariki", "karaka", "kikorangi", "kowhai", "tawatawa", "tuauri", "whero"]
irb(main):040:0>
Notice how sort doesn't change numbers, but sort! does.
One interesting thing I have noticed. all this code is coming pretty naturally. With the PHP stuff I've been doing recently, I've needed to refer to the docs constantly to remind me what I'm supposed to type in. With this Ruby stuff, it's so "obvious" that it's sticking first time. That say... it's not like I'm doing anything complicated yet.
The next step of the tutorial is a bit gimmicky, but I'll demonstrate it anyhow. Typing this all in line by line in the CLI is a bit messy, so I'll use a file for this. Here we take the first verse of NZ's national anthem, and switch it around, line by line:
# gdnz.rb
anthem = "
E Ihowā Atua,
O ngā iwi mātou rā
Āta whakarangona;
Me aroha noa
Kia hua ko te pai;
Kia tau tō atawhai;
Manaakitia mai
Aotearoa
"
puts anthem
puts "\n"
lines = anthem.lines
reversedLines = lines.to_a.reverse
reversedAnthem = reversedLines.join
puts reversedAnthem
This outputs (the first one is the correct version, the second is the reversed version):
E Ihowa Atua,
O nga iwi matou ra
Ata whakarangona;
Me aroha noa
Kia hua ko te pai;
Kia tau to atawhai;
Manaakitia mai
Aotearoa
Aotearoa
Manaakitia mai
Kia tau to atawhai;
Kia hua ko te pai;
Me aroha noa
Ata whakarangona;
O nga iwi matou ra
E Ihowa Atua,
Of course one could do all this in one statement:
# gdnz2.rb
puts "
E Ihowā Atua,
O ngā iwi mātou rā
Āta whakarangona;
Me aroha noa
Kia hua ko te pai;
Kia tau tō atawhai;
Manaakitia mai
Aotearoa
"
.lines
.to_a
.reverse
.join
Interestingly, I've made a point of spreading all this over multiple lines, and Ruby works out what I mean no problems. That's quite neat.
There's a coupla new methods in there, the doc links for which are as follows:
On the summary page there's an observation that methods can have punctuation in their names (eg: sort!)... that's good clarification: I thought the ! was a modifier, but it's actually part of the method name. Another example given is the include? method, which is quite cool as it works like this:
anthem.include? "Aotearoa"
Which returns true, as anthem does indeed include "Aotearoa".
We're still on the first tutorial, but there's a shift in content so I'll break there.
Next we're looking at hashes, which seem roughly analogous to structs in CFML (so far, anyhow...), and we quickly get into symbols too. The tutorial got me to create a collection of books (the first was its suggestion, the others mine):
# books.rb
books = {}
books["Gravity's Rainbow"] = :splendid
books["London Fields"] = :splendid
books["The Da Vinci Code"] = :abysmal
books["Once Were Warriors"] = :quite_good
puts books
puts books.length
(I've not read Gravity's Rainbow, but I found The Crying of Lot 49 a bit self-indulgent, and have no reason to think GR is any different. The others are my own personal opinion).
This outputs:
{"Gravity's Rainbow"=>:splendid, "London Fields"=>:splendid, "The Da Vinci Code"=>:abysmal, "Once Were Warriors"=>:quite_good}
4
It's nice that Ruby works out that if I tell it to output a hash, it realises it needs to convert it to a string first (which it knows how to do), and does so. Rather than how in CF we'd just get an error. It shouldn't be too much to ask to expect CF to know to JSONify or (given its veneration) WDDXify a struct and then just output it, rather than being unhelpful:
Complex object types cannot be converted to simple values.
Thanks, CF.
Anyway, whilst hashes seem analogous to structs, there's no equivalent to symbols in CFML. I got what symbols were, but the docs for them weren't very descriptive (in a helpful way), so I googled about and came up with two pages which described them well:
So basically they're just a constant label which can be reused in situations like the above: where one wants to use the same value or token repeatedly. Things to note from those pages above are that symbols compare very quickly compared to strings: with two strings, one needs to compare each character; with a symbol, each side of the comparison either is or is not the same token. Also as tokens don't get garbage collected (ever), they can cause memory leaks if used injudiciously. I would say one would need to go mental with them to cause a problem though.
A quick digression:
- Ruby is case-sensitive. This has been tripping me up when writing the tutorial code;
- Quotes seems to be interchangeable. The tutorial is using single quotes - which I happen to detest for strings (chars: yes; strings: no. I blame C) - so I've been using double-quotes. They seem to work fine.
books.values.each {|rate| ratings[rate] += 1}
Err... OK.
What that seems to do (having cheated and looked at the result) is for each of the values in the books hash, increment the key of that value's name in the ratings hash by one. But let me show the code I've typed in to show you what I mean.
# books2.rb
books = {}
books["Gravity's Rainbow"] = :splendid
books["London Fields"] = :splendid
books["The Da Vinci Code"] = :abysmal
books["Once Were Warriors"] = :quite_good
puts books
puts "\n"
ratings = Hash.new(0)
books.values.each {|rate| ratings[rate] += 1}
puts ratings
And the output is this:
{"Gravity's Rainbow"=>:splendid, "London Fields"=>:splendid, "The Da Vinci Code"=>:abysmal, "Once Were Warriors"=>:quite_good}
{:splendid=>2, :abysmal=>1, :quite_good=>1}
Note how it's tallied up the counts for each symbol in the books hash.
Right, so checking the docs, new can take an argument that acts as a default for any preciously unspecified hash entry, which is why when we increment ratings[rate] we don't get an error that it doesn't yet exist. That's neat!
And each does indeed call the following block for each element in the hash. each can pass either the value or the key and the value (if applicable) into the block, as the given name. In the given example we're just iterating over each value, which is a simple value itself, so we only give the anonymous block the value. However we could have been doing this:
books.each {
|title,rating|
puts "Title: " + title + "; rating: " + rating.to_s
}
Wherein we're iterating over each book, and each book has a title (key in this case), and rating (value), so we pass both into the anonymous block. Note how I have to convert the rating to a string before I can concatenate it to the rest of the string, because rating is a symbol, not a string. The output for this is:
Title: Gravity's Rainbow; rating: splendid
Title: London Fields; rating: splendid
Title: The Da Vinci Code; rating: abysmal
Title: Once Were Warriors; rating: quite_good
So that line of code with all the braces and the pipes and stuff looked a bit scary initially, but once one stops to look at it an analyse it slightly, it's all straight forward.
Ooh... the next example of a block is a good 'un:
5.times { print "Odelay!" }
Obviously this prints out "Odelay!Odelay!Odelay!Odelay!Odelay!". But it's quite cool how the combination of 5 being an object, and having iterative methods like times with anonymous blocks works, innit?
There's another shift in topic now, it looks like we're going to investigate file ops next...
The tutorial has demonstrated two different directory-reading methods:
# dir.rb
(Dir.entries ".").each{
|fileName|
puts fileName
}
puts "\n"
Dir["d*.rb"].each{
|fileName|
puts fileName
}
The output is this (it's of the directory I'm saving the sample files for this article in):
.
..
array.rb
arraySorting.rb
books.rb
books2.rb
books3.rb
books4.rb
dir.rb
gdnz.rb
gdnz2.rb
helloWorld.rb
helloWorldOO.rb
dir.rb
Here we use two different methods of the Dir class. entries returns an array of each file in the specified directory. And the [] method uses a pattern to match files in the current directory.
And do you know what? Ruby has just died a bit for me. The [] method is shorthand for the... the... the bloody glob method. And if you've been following along my forays into PHP, you know my opinion of the idea of calling a method "glob". Grumble.
By default when using Dir the directory is the current directory (ie: that the file was executed from). For example if I was to consider just this code:
# dir2.rb
Dir["*"].each{
|fileName|
puts fileName
}
I'm running this as follows:
C:\src\ruby\misc>ruby dir2.rb
So I get a listing of what's in C:\src\ruby\misc\
If I was to CD up a level and re-run it (I have the ruby/bin dir in my PATH, so can run it from anywhere), I'd get a listing of C:\src\ruby\. The default dir is predicated on where ruby was run from.
I can change the current dir as follows:
# dir3.rb
Dir.chdir "C:/apps/Ruby200-x64"
Dir["*"].each{
|fileName|
puts fileName
}
And this lists the contents of my Ruby install dir instead.
One other thing to note here is if we go back to look at dir.rb again:
(Dir.entries ".").each{Notice I've got the parentheses around the first bit. Initially I tried to simply do this:
Dir.entries ".".each{But that didn't work because it was trying to do each on ".", which of course is a) not likely to work as "." is a string and it doesn't have an each method; b) not what I meant anyhow. So the parentheses are just to force the correct order of operations. Sorting this out was another example of Ruby being fairly intuitive. I didn't have to look up what went wrong, I just kinda knew the parentheses would sort things out.
Carrying on with the tutorial it takes me through some file ops, and touches on date functions. There was nothing not completely obvious here, so I'll not go into detail (it copies a file, appends to a file, gets the file's timestamp: boring). But the relevant classes are File and Time. One good thing about the docs is that the URLs are pretty hackable. I wanted to get the docs for the File class, and was currently sitting on the docs for the Dir class (http://ruby-doc.org/core-2.0/Dir.html), and as I've been traversing through the docs, I know to simply change the class name, eg: http://ruby-doc.org/core-2.0/File.html and http://ruby-doc.org/core-2.0/Time.html. This seems trivial, but try doing that with the CFML docs. Or just trying to find the Railo docs ;-)
The tutorial is also telling me it covered using do / end instead of using braces around blocks. I didn't notice this, but I'll take their word for it. Here's a summary anyhow:
# array.rb
numbers = ["tahi","rua","toru","wha"]
numbers.each {
|value|
puts value
}
puts "\n"
numbers.each do
|value|
puts value
end
These output the same thing. So what's the difference. Well from my googling about it seems that braces have a higher precedence in the order of operations, so will always be bound to what's to their immediate left. However do/end have lower precedence, so might behave different. The second comment on this blog entry explains it well. I'll replicate it here:
f g { }
is parsed as f(g { }), where the braces belong to the method g. On the other hand,
f g do end
is parsed as f(g) do end, where the braces belong to the method f.
That's fairly clear, I think. Of course one can use parentheses to avoid this ambiguity in the first place. But I think using braces is clearer anyhow.
Blimey this tutorial is seeming very long (I've been writing this article for 5.5hrs now!) I think if I was not typing this as I went, the tutorial would be about 30min worth of work. Maybe an hour's worth. Oh well... it's certainly going into my head better this way.
Anyway, now we're looking at defining functions. Just looking at the tutorial example, the general form seems to be:
def function_name([arg [,arg[...]])
# expressions
lastExpression
end
eg:
def greet(name)
"G'day " + name
end
puts greet "Zachary"
Note that there's no return statement, simply the value of the last expression is what the calling code receives from the function. Oh: every statement in Ruby is treated like an expression, so returns a value... I shoulda mentioned that earlier, sorry!
The tutorial also contrives a situation to use the require method to basically include some code one of the examples uses.
Next we're looking at classes, and - as we've seen above, once creates an object instance with the new method (it's a method of the Class class), just like we would in CFML.
Creating a class is bloody easy. Check out this basic example:
# PersonClass.rb
class Person
attr_accessor :firstName, :lastName, :dob
end
kid = Person.new
kid.firstName = "Zachary"
kid.lastName = "Cameron Lynch"
kid.dob = Time.new(2011, 3, 24)
puts kid.dob
This outputs Z's birth date: 2011-03-24 00:00:00 +0000
There's no real surprises here... the attr_accessor method defines the properties of the class. Once defined, one can use implicit getter / setter notation on the object instance
I've been doing all this stuff in a file and then running it, but remember I've got the CLI open as well? I can just copy and paste that code into the CLI, and it all just runs fine, line by line
irb(main):101:1> attr_accessor :firstName, :lastName, :dob
irb(main):102:1> end
=> nil
irb(main):103:0>
irb(main):104:0* kid = Person.new
=> #<Person:0x00000002e2e558>
irb(main):105:0>
irb(main):106:0* kid.firstName = "Zachary"
=> "Zachary"
irb(main):107:0> kid.lastName = "Cameron Lynch"
=> "Cameron Lynch"
irb(main):108:0> kid.dob = Time.new(2011, 3, 24)
=> 2011-03-24 00:00:00 +0000
irb(main):109:0>
irb(main):110:0* puts kid.dob
2011-03-24 00:00:00 +0000
=> nil
irb(main):111:0> kid
=> #<Person:0x00000002e2e558 @firstName="Zachary", @lastName="Cameron Lynch", @dob=2011-03-24 00:00:00 +0000>
irb(main):112:0>
That is really cool. How useful it is? Hmmm... I've been using Windows too long for me to really get a buzz out of command-line hacking like some people do, but it's good to know it's there if one needs it. And I'm sure people will pipe up with a good use case. I suppose I still do a bunch of stuff with MySQL via the command line, so it's the same sort of thing. I'm just more familiar with MySQL than I am with Ruby (albeit I'm so rusty with MySQL, there's probably not much in it any more!).
The next step in the tutorial is adding a constructor method to the class, eg:
# PersonClass2.rb
class Person
attr_accessor :firstName, :lastName, :dob
def initialize (firstName, lastName, dob)
@firstName, @lastname = firstName, lastName
@dob = dob
end
end
kid = Person.new "Zachary", "Cameron Lynch", Time.new(2011, 3, 24)
puts kid.dob
initialize is the equivalent of init() in CFML. Also note the @varName syntax for instance variables. And the slightly weird way one can assign multiple values to multiple variables at the same time.
And that's it. The last few pages of the tutorial went back over some array methods, but they weren't anything noteworthy.
I actually feel I know a bit about Ruby now. And I've only completed one of the seven tutorials on it they have. I'm absolutely fried after this... not the tutorial itself, but the seven hours I've been writing this blog article. Still: it filled up the afternoon. And you have something to read.
I'm gonna do the other tutorials too, and I'll write up my findings as I go.
Interestingly... I think I now know more about Ruby than I do about PHP. And which one of these am I supposed to be learning? Oops.
In closing: Ruby looks like quite a good language. I have only a superficial knowledge of it, but I found myself going "hey cool!" quite a bit as I worked through the tutorial and messing around with the sample code here. And having read each page of the tutorial or the docs, I found it very easy to write the code almost intuitively. I don't even get that feeling writing CFML even now, after a dozen years. I know better what to do in CFML, but until I've rote-learned something, it's not exactly intuitive. Which is odd for a language that claims it's dead easy to get up to speed with development in. It's interesting having a new perspective on this sort of thing.
Right... I deserve a beer. I'm going up the road to have one.
--
Adam
(Sat, 25 May 2013 14:07:26 GMT)
[view article in new window]
Ruby via codeschool.com
G'day:
Cheers to Ray Camden for putting me on to this, but Code School are offering free online training all weekend, thanks to some outfit called New Relic sponsoring it. Yay for Code School & new Relic!
I was planning on doing some summery stuff like going into the forest and getting a decent dose of greenitude and vitamin D, but it's bloody freezing (10degC @ midday, about a week from the start of "summer"!) so I'm staying indoors and am gonna work my way through the Ruby courses they offer. If I find anything interesting - which I presume I will - I'll write it up.
However I had better also dose up on various forms of caffeine first, as I've already sat at this blimin' computer for 4h today, and my attention span is waning.
Wish me luck (not with the Ruby, but with not freezing to death en route to the station for a coffee ;-).
--
Adam
(Sat, 25 May 2013 07:27:39 GMT)
[view article in new window]
212 untriaged ColdFusion 10 bugs
G'day:
I saw this on Twitter last night, and - predictably - it f***ed me right off.
From: James Moberg @gamesover
To: @Adobe @coldfusion
I want to upgrade to #ColdFusion 10, but not if issues exist & aren't even being actively reviewed. Need help?
From: Adobe ColdFusion @coldfusion
To: @gamesover @Adobe
Can you provide the bug numbers if you have already logged them? We will review the same.
From: James Moberg @gamesover
To: @coldfusion @Adobe
Use search feature ow.ly/lmysL Type=Bugs Only, Product=#ColdFusion, Version=10, State=Open, Status=Unverified
From: Sean Corfield @seancorfield
To: @gamesover
CC: @dacCfml @Adobeis that right? 212 unverified bugs reported against @coldfusion 10?
To which the response was (initiated by me, followed-up by others):
From: @dacccfmlPlease note: the 212 figure Sean cites is not "bug and feature requests", it's just "bugs". And it's not all bugs. It's just the ones that are a) open; b) haven't even been looked-at by Adobe. And just for ColdFusion 10.
To: @seancorfield @gamesover @coldfusion @Adobe
Yep, that's what I see as well. 212 publicly visible bugs in an enterprise (priced) product that the vendor hasn't even bothered to triage. That's very disrespectful of their clients
From: Jason Brookins @twinsploitation
To: @dacCfml
Trying to get to Railo as quickly as possible; this just adds impetus.
From: Adam Cameron @dacCfml
To: @twinsploitation @coldfusion @Adobe
Indeed. Do you know what though, it's not that there's a lot of bugs - everything has bugs - it's just that they can't even be arsed checking to see if there are any significant problem being raised. Or respecting their clients enough to bother suggesting they give the slightest shit.
From: am2605 @am2605
To: @dacCfml
this makes me sad more than angry. I wish we could all chip in and buy it off them and give the poor thing a good home
I know I said it in the Twitter exchange, but to re-iterate: it's just completely unacceptable that the Adobe ColdFusion Team have such a shitty attitude towards their clients. Their paying clients. Clients who pay thousands and thousands of dollars / pounds for their product. And who have clearly been caught out by these bugs, so they are affecting people in a real world way, and enough so that they take the time to raise said bugs with their vendor, Adobe. This is borderline professional negligence on the part of Adobe (actually I'm not sure which side of the that particular border it's on!).
I hasten to add I do not blame the bulk of the Adobe ColdFusion Team for this. The developers won't be at fault here because they will just be doing what they're told. And clearly they've been told to ignore the bugbase. However I do firmly blame whoever is the decision-maker in that process.
I've been part of assessing the upgrade of a pretty bloody big ColdFusion install from CF9 to CF10 recently. I hasten to add I'm not one of the decision-makers in this and I will not express the opinions of the decision-makers here (I don't know their opinion, for one thing), but I will say that the upgrade involves licensing costs measured in the tens of thousands of pounds (many tens of thousands of pounds). If it was entirely my decision as to the direction to take, the fact that Adobe have 212 untriaged bugs sitting in their public bugbase would weigh heavily on me: why would I be wanting to give Adobe all that money for... nothing. For apathy. For client neglect.
To repeat what I touch on about, I actually don't have much of a problem with the number of bugs in total. Everything has bugs. And there's a good chance a lot of those 212 bugs will be minor, or so trivial as to not even warrant the time taken to raise them, or not actually bugs but people misunderstanding something. However a lot will be genuine bugs, and some might be serious bugs. But we wouldn't know, would we? Because no-one's bothered to look at them.
This paints a very poor picture of Adobe's focus on ColdFusion. Yet another one.
And let's not forget we're only talking ColdFusion 10 bugs here. What about the other metrics:
| Version | Unverified | Verified | Notes | ||
|---|---|---|---|---|---|
| Bugs | Features | Bugs | Features | ||
| 8.0 | 1 | 0 | 1 | 1 | (incl 1 "fixed" but still "to test") |
| 8.0.1 | 11 | 2 | 1 | 1 | - |
| 9.0 | 21 | 0 | 7 | 3 | (incl 4 "fixed" but still "to test") |
| 9.0.1 | 110 | 10 | 35 | 4 | (incl 10 "fixed" but still "to test") |
| 10.0 | 212 | 79 | 192 | 32 | (incl 15 "fixed" but still "to test") |
So it's not like there's a policy of them to simply ignore everything, or they're just not updating the bugbase. They do look at stuff. They've verified almost as many bugs as they've ignored in CF10. So they really honestly actually haven't bothered to took at those 212 James / Sean singled out.
It's also worth pointing out that the CF Team have fixed really a lot of issues too. There's 515 open issues for CF10, but 362 closed ones. For 9.0.1 it's better reading: 398 closed to 159 open. 9.0: 1550 closed; only 31 open. CF8.x: 1082 closed vs 18 open. So they do plug through the work. But that doesn't excuse not at least triaging all the stuff that people have taken the time to raise with them, at least as a professional courtesy.
If you want to know what 212 untriaged ColdFusion bugs looks like... here they all are:
| # | Created | ID | Summary | |
|---|---|---|---|---|
| 1 | 2012-04-17 | 3167817 | Running Web Server Configuration tool on one site throws a 500 error | |
| 2 | 2012-05-04 | 3182493 | ||
| 3 | 2012-05-07 | 3183868 | ORM Search Serialization Issue | |
| 4 | 2012-05-22 | 3196322 | path_info breaks Flash forms | |
| 5 | 2012-05-22 | 3196326 | CF9.0.1 vs CF10 wrt cfgrid + bind = floating point | |
| 6 | 2012-05-26 | 3199273 | When using offline AIR support, certain class property names need escaped | |
| 7 | 2012-05-26 | 3199274 | When using offline AIR support, the actionscript load(cls, object, ignoreLazyLoading) method is broken | |
| 8 | 2012-05-26 | 3199275 | When using offline AIR support, the client-side [Transient] metadata is already used for another purpose. | |
| 9 | 2012-06-05 | 3206530 | Spring integration, spring security and jsp tags | |
| 10 | 2012-06-13 | 3213501 | Conflict with Microsoft Exchange and Handler Mappings | |
| 11 | 2012-06-20 | 3219587 | UPgrading from CF 9 to CF 10 leaves connectors to CF 9 causing issues. | |
| 12 | 2012-06-25 | 3222889 | GetPageContext().getRequest().getParameter('param_name') is undefined | |
| 13 | 2012-07-10 | 3283049 | Dockable Debugging Error | |
| 14 | 2012-07-20 | 3292315 | cftrace "fatal information" image is not displayed properly | |
| 15 | 2012-07-28 | 3298213 | Various Charts Will not render in IE7 | |
| 16 | 2012-08-02 | 3301875 | Login method on cfide.adminapi.administrator component failing intermittently | |
| 17 | 2012-08-06 | 3303777 | CFGRID doesn't set values in HTML like CF9 but will work if format is changed to flash. | |
| 18 | 2012-08-07 | 3304661 | unable to register C++ CFX tag in 32 bit CF on 64-bit OS. | |
| 19 | 2012-08-17 | 3312917 | CF9 won't uninstall; CF10 is a nightmare to install | |
| 20 | 2012-08-22 | 3315764 | CFFlush doesn't work. | |
| 21 | 2012-08-22 | 3315766 | CFChart Tooltips not working correctly on Google Chrome | |
| 22 | 2012-08-22 | 3315776 | CFChart does not recognize "animate" or "detach" values when using format=html and JSON style file | |
| 23 | 2012-08-23 | 3316776 | arrayFindNoCase() returns false negatives | |
| 24 | 2012-08-23 | 3316784 | arrayFindAllNoCase() returns false negatives | |
| 25 | 2012-08-23 | 3316788 | arrayFindAll() returns false positives | |
| 26 | 2012-08-23 | 3316798 | arrayDelete() returns false positives | |
| 27 | 2012-08-27 | 3318699 | Tomcat connector, isapi_redirector 1.2.32 issues | |
| 28 | 2012-08-30 | 3321646 | Deprecate CFLOOP/array and try again | |
| 29 | 2012-09-03 | 3323375 | HTML cfchart ignores labelFormat attribute | |
| 30 | 2012-09-04 | 3324252 | IE9 fails but Firefox fine.using cfwindow and cfgrid. | |
| 31 | 2012-09-10 | 3328113 | Cannot access CF Admin after install | |
| 32 | 2012-09-13 | 3330734 | Dynamically Typed Queries with '300D' in the first row. | |
| 33 | 2012-09-13 | 3330785 | CGI Scope geting reset by websocket handler | |
| 34 | 2012-09-21 | 3334751 | AJAX XHR Upload (application/octet-stream) after update from coldfusion 9 to 10 | |
| 35 | 2012-09-22 | 3335478 | Unable to delete a REST service | |
| 36 | 2012-09-22 | 3335493 | Caching issue | |
| 37 | 2012-09-22 | 3335505 | [ANeff] Bug for: Incorrect task status when action="list" omits task="" attribute | |
| 38 | 2012-09-24 | 3335956 | [ANeff] Bug for: ArrayContainsNoCase and ArrayDeleteNoCase are missing | |
| 39 | 2012-09-24 | 3336205 | [ANeff] Bug for: cfschedule falsely says exclude date format invalid | |
| 40 | 2012-09-24 | 3336210 | [ANeff] Bug for: cfschedule's exclude disallows date and range combination | |
| 41 | 2012-09-25 | 3336302 | using functions of an included file makes coldfusion ignore imports | |
| 42 | 2012-09-26 | 3337394 | Function SerializeJSON() converts employee's last name ("No") to boolean false in JSON output | |
| 43 | 2012-09-27 | 3338329 | Dumping an entire object that extends a parent class displays metadata for overridden functions from parent instead of child | |
| 44 | 2012-09-28 | 3338790 | OrmSearch does not include result score + entity for queries generating a single result | |
| 45 | 2012-09-28 | 3338825 | SerializeJSON casts multiple zero value as number instead of string | |
| 46 | 2012-09-29 | 3339105 | valueList() should take any expression that evaluates to a query column | |
| 47 | 2012-09-29 | 3339126 | CFFeed does not extract content element xml:base attribute from atom feeds | |
| 48 | 2012-09-30 | 3339175 | "coldfusion status" command fails silently on Linux | |
| 49 | 2012-10-01 | 3339690 | Starting Solr on RHEL 6 64 bit | |
| 50 | 2012-10-03 | 3340537 | [ANeff] Bug for: Wish form links to old cfbugs.adobe.com | |
| 51 | 2012-10-05 | 3341684 | Redirection to URL in IIS6 website redirecting to /jakarta/isapi_redirect.dll | |
| 52 | 2012-10-05 | 3341910 | SQL Server 2008 (or newer) HierarchyID datatype not supported by CF10 jdbc driver (works in CF8) | |
| 53 | 2012-10-06 | 3342124 | XML serialization for REST services is not escaping some values. | |
| 54 | 2012-10-07 | 3342141 | Source code file should not need special charset encoding instructions for them to compile properly | |
| 55 | 2012-10-09 | 3342986 | [ANeff] Bug for: WebSocket open/closeConnection() return undefined instead of boolean | |
| 56 | 2012-10-09 | 3342991 | [ANeff] Bug for: typo subscribercount_callbackHanlders (dl, not ld) in cfwebsocketChannel.js | |
| 57 | 2012-10-09 | 3342995 | [ANeff] Bug for: typo in WSPublish() exception | |
| 58 | 2012-10-09 | 3343006 | [ANeff] Bug for: invokeAndPublish() returns no error when channel doesn't exist | |
| 59 | 2012-10-09 | 3343429 | A cfm page is set as a custom error page for a website in IIS, does not work as expected | |
| 60 | 2012-10-10 | 3344090 | pageEncoding only works in CFCs | |
| 61 | 2012-10-10 | 3344353 | Web services will not be served from https with stock CF10 install | |
| 62 | 2012-10-11 | 3345011 | error "javax.mail.MessagingException: Unable to load BODYSTRUCTURE" when using CFIMAP | |
| 63 | 2012-10-11 | 3345191 | isValid 'Email' validation allows underscores in email form | |
| 64 | 2012-10-11 | 3345255 | function call structure creation occasionally executes before the line in code is run | |
| 65 | 2012-10-11 | 3345316 | [ANeff] Bug for: WebSocket unsubscribe() invokes afterUnsubscribe() twice | |
| 66 | 2012-10-14 | 3346117 | [ANeff] Bug for: restInitApplication("absolute path",..) null pointer in Application.cfc pseudo-constructor | |
| 67 | 2012-10-17 | 3348475 | Concurrency issue accessing / verifying a datasource - "could not locate" datasource | |
| 68 | 2012-10-17 | 3348765 | [ANeff] Bug for: REST app will crash if installed on multiple sites | |
| 69 | 2012-10-18 | 3349444 | IIS Physical Path can't see Google Drive folders | |
| 70 | 2012-10-19 | 3350030 | Some Query of Query errors are 500 errors | |
| 71 | 2012-10-22 | 3351326 | .NET Integration Services grayed out during the sub component installation of Coldfusion server on windows 8 | |
| 72 | 2012-10-23 | 3351451 | Cannot edit or delete scheduled tasks | |
| 73 | 2012-10-24 | 3352451 | CF 9 scheduled tasks not migrated during CF 10 install and unable to re-create them manually on Win 2008 Server | |
| 74 | 2012-10-25 | 3352745 | properties with default values not accessible outside init function | |
| 75 | 2012-10-25 | 3353222 | ColdFusion 10 doesn't gzip responses. This worked fine with the same configuration in ColdFusion 9. | |
| 76 | 2012-10-25 | 3353254 | ColdFusion doesn't properly start or restart if ethernet is down even if loopback is up | |
| 77 | 2012-10-25 | 3353358 | cfajaxproxy generates incorrect javascript when machine restarted | |
| 78 | 2012-10-25 | 3353515 | CFSelect Google Chrome | |
| 79 | 2012-10-26 | 3354038 | Scheduled Tasks disappear after restart - Update 3 broke | |
| 80 | 2012-10-27 | 3354476 | Session reset on each page load on IE for certain machines | |
| 81 | 2012-11-03 | 3358792 | WSConfig does not back up all the config files it changes | |
| 82 | 2012-11-03 | 3358817 | Application.cfc-set mappings don't work in onApplicationEnd() | |
| 83 | 2012-11-06 | 3360511 | CFDBINFO doesn't know to escape reserved words | |
| 84 | 2012-11-06 | 3360524 | "unique" constraint on ORM-mapped properties not respected when DB is Derby | |
| 85 | 2012-11-07 | 3361502 | No setting in cluster admin to enable session replication | |
| 86 | 2012-11-07 | 3361929 | CFSTAT server port conflict in multiserver configuration | |
| 87 | 2012-11-09 | 3363329 | onMisfire attribute of cfschedule docs & tag behavior don't match & include duplicate arguments (fire_now vs. firenow) | |
| 88 | 2012-11-09 | 3363366 | Application mappings failing with a REST call | |
| 89 | 2012-11-13 | 3364745 | Web Server Configuration Tool doesn't work for "All" sites in IIS 7 | |
| 90 | 2012-11-14 | 3365388 | AWS Elastic Beanstalk rejects ColdFusion WARs | |
| 91 | 2012-11-15 | 3365773 | cflayout - tab height problem in IE 7 | |
| 92 | 2012-11-15 | 3366005 | Default document not working | |
| 93 | 2012-11-19 | 3367866 | "Select all" option in ColdFusion updater doesn't work | |
| 94 | 2012-11-19 | 3367872 | Updater should leave the system how it found it | |
| 95 | 2012-11-21 | 3369252 | CF9 Query of Queries on CF10 Query object only returns the first row | |
| 96 | 2012-11-28 | 3373247 | isJSON throws exception | |
| 97 | 2012-11-29 | 3374680 | CFDocument won't embed Helvetica font | |
| 98 | 2012-11-30 | 3375263 | Misleading error with REST services and missing returnType | |
| 99 | 2012-11-30 | 3375431 | Unable to access delegated calendar using cfexchangeConnection | |
| 100 | 2012-12-03 | 3376486 | restSetResponse with a header can cause an error. | |
| 101 | 2012-12-03 | 3376670 | Remove spreadSheetReadBinary | |
| 102 | 2012-12-04 | 3377595 | Bundled jIntegra is 32bit on 64 Bit Windows | |
| 103 | 2012-12-05 | 3378447 | Java Servlet Exceptions prevent ColdFusion10 server from starting | |
| 104 | 2012-12-12 | 3427668 | cfinfo reports wrong version number | |
| 105 | 2012-12-12 | 3427695 | CFLOOP over a list should have includeEmptyValues attribute | |
| 106 | 2012-12-12 | 3427961 | Changing Task Name causes CTASK error and tasks deletes itself | |
| 107 | 2012-12-14 | 3429588 | isCustomFunction() needs to do what it says on the box | |
| 108 | 2012-12-17 | 3430245 | Session gets lost on cflocation width J2EE Sessions and Cookies disabled | |
| 109 | 2012-12-17 | 3430402 | CFPDFFORM fails on Linux | |
| 110 | 2012-12-18 | 3431165 | CFFILE - Unable to set MS Office MIME Types if OpenOffice installed | |
| 111 | 2012-12-18 | 3431423 | INSERT query on Oracle database with maxrows attribute on cfquery tag crashes | |
| 112 | 2012-12-23 | 3433620 | ImageGetEXIFMetadata is not working as expected | |
| 113 | 2012-12-23 | 3433621 | CFIMAGE action="write" is not maintaining EXIF Metadata info of an image | |
| 114 | 2012-12-26 | 3434100 | Updating a task via cfschedule resets task to defaults | |
| 115 | 2012-12-26 | 3434101 | cfschedule missing values for attributes | |
| 116 | 2012-12-26 | 3434106 | Code Hinting | |
| 117 | 2012-12-29 | 3434535 | param statement with no default creates spurious variables | |
| 118 | 2012-12-30 | 3434560 | CFDUMP tag doesn't collapse in Opera | |
| 119 | 2012-12-31 | 3434633 | Enterprise Manager: Element httpport is undefined in a Java object of type class java.util.HashMap. | |
| 120 | 2013-01-01 | 3434652 | Parser bug in function with typo in it | |
| 121 | 2013-01-04 | 3436101 | NULL NULL errors after the last coldfusion update | |
| 122 | 2013-01-07 | 3442915 | Installation fails on IIS 7.5 without CGI but does not alert the user to it | |
| 123 | 2013-01-15 | 3476230 | event gateway services won't start/stop from cfadmin. | |
| 124 | 2013-01-15 | 3476661 | deserializeJson does not properly handle high-ascii characters | |
| 125 | 2013-01-16 | 3477538 | cfajaxproxy and cfcomponent extends no longer work in CF 10 when using IIS Virtual Directories | |
| 126 | 2013-01-18 | 3485286 | ColdFusion not exposing exceptions correctly | |
| 127 | 2013-01-22 | 3486707 | [ANeff] Bug for: Admin API's login() treats ishashed=false as ishashed=true | |
| 128 | 2013-01-25 | 3489921 | The value of isDSTOn returned by GetTimeZoneInfo always seems to be no | |
| 129 | 2013-01-25 | 3490112 | SEVERE: Error in getRealPathFromConn persists after Updating Coldfusion | |
| 130 | 2013-01-27 | 3490441 | Using the word "required" with a leading underscore in the name attribute of a cfinput field | |
| 131 | 2013-01-28 | 3491238 | NumberFormat returns different results with optional placeholders | |
| 132 | 2013-01-29 | 3492574 | [ANeff] Bug for: CF installer migrates ODBC data sources w/ wrong port | |
| 133 | 2013-01-29 | 3492580 | [ANeff] Bug for: ODBC DSN creation fails in non-cfusion instances | |
| 134 | 2013-01-29 | 3492608 | [ANeff] Bug for: ODBC DSN deletion fails in non-cfusion instances | |
| 135 | 2013-01-29 | 3492620 | [ANeff] Bug for: 64-bit CF10 creates wrong registry entries for ODBC data sources | |
| 136 | 2013-01-30 | 3493209 | CFPresentation tag throws file not found error when trying to create a presentation with a VFS destination | |
| 137 | 2013-01-31 | 3493990 | CFPDF doesn't add headers/footers to PDF files | |
| 138 | 2013-01-31 | 3494006 | Calling Oracle Package: [Macromedia][Oracle JDBC Driver]User defined type not found: SYS.DBMS_UTILITY | |
| 139 | 2013-01-31 | 3494045 | Coldfusion Errors when parsing "Reporting" form submission from Captivate | |
| 140 | 2013-02-12 | 3498968 | Some web services with data structure as argument values could not execute | |
| 141 | 2013-02-12 | 3499114 | JBoss 6 | |
| 142 | 2013-02-17 | 3501428 | Scheduled task does not allow ":" in url | |
| 143 | 2013-02-19 | 3502465 | Manage Colelction Values not saved | |
| 144 | 2013-02-19 | 3502742 | Nested loop over [] array notation throws compiler error | |
| 145 | 2013-02-20 | 3503303 | hover tips for resume and pausing tasks need to be switched | |
| 146 | 2013-02-20 | 3503472 | Creative Cloud 6 fonts corrupt the ColdFusion CFPDFFORM tag (not cfform) | |
| 147 | 2013-02-20 | 3503539 | Cannot Delete Log Files | |
| 148 | 2013-02-21 | 3504508 | Installer option to install local documentation | |
| 149 | 2013-02-25 | 3506225 | argumentcollection bugs with numeric keys | |
| 150 | 2013-02-26 | 3506891 | CFM can't find a CFC in the same directory. | |
| 151 | 2013-02-27 | 3508034 | Flashservices Gateway Configuration | |
| 152 | 2013-02-28 | 3508651 | Bug in writeDump() / CFDUMP with non-contiguous-numerically-keyed argumentcollection | |
| 153 | 2013-03-03 | 3511958 | ColdFusion Sandbox Security Breaks Active FTP Connections | |
| 154 | 2013-03-04 | 3512735 | cftextarea richtext does not load in Internet Explorer 10 (Windows 8) | |
| 155 | 2013-03-04 | 3512854 | Error connecting to Oracle servers using Oracle Advanced Security | |
| 156 | 2013-03-06 | 3514590 | Annotations with ":" do not work inline in script based functions | |
| 157 | 2013-03-06 | 3514766 | Problem adding Scheduled Task on system with different Format and Display settings that runs on Java 7 | |
| 158 | 2013-03-07 | 3515355 | Adobe ColdFusion 10 Extensions for Dreamweaver Removes HTML5 Tags | |
| 159 | 2013-03-07 | 3515644 | CFHTTP with compression="none" fails to decode deflated http response | |
| 160 | 2013-03-08 | 3516357 | Connection verification failed for data source: csvfiles | |
| 161 | 2013-03-10 | 3516836 | Error updating a scheduled task on day of Daylight Saving Time | |
| 162 | 2013-03-11 | 3517457 | ColdFusion mappings are ignored when using REST services | |
| 163 | 2013-03-12 | 3518496 | Administrator throws errors on managing scheduled task with space at end of name | |
| 164 | 2013-03-13 | 3519649 | Could not find the included template | |
| 165 | 2013-03-15 | 3521203 | CFThread loses Attributes collection inside Custom Tag. | |
| 166 | 2013-03-15 | 3521227 | Page Level Caching Does Not Work Correctly For Application Specific Caches | |
| 167 | 2013-03-19 | 3525182 | CFGRID HTML version issue | |
| 168 | 2013-03-19 | 3525473 | Mail spooler jam due to SpoolLockTimeoutException | |
| 169 | 2013-03-21 | 3526880 | cfimport doesn't resolve /../ correctly in cf10. It did in cf9 | |
| 170 | 2013-03-21 | 3527009 | Caused by: java.lang.NullPointerException On CreateObject | |
| 171 | 2013-03-27 | 3530880 | App Pool Crashing "Randomly". "Load balancing workers will not function properly." in isapi_redirct.log at crash time. | |
| 172 | 2013-03-28 | 3531688 | There was an error accessing this page. Check logs for more details. | |
| 173 | 2013-04-01 | 3533394 | CFIDE available even with no virtual directory | |
| 174 | 2013-04-02 | 3534348 | Typographical errors in $cfroot/cfusion/bin/cf-init.sh | |
| 175 | 2013-04-04 | 3536062 | In memory file system limit cannot be more than JVM max heap size | |
| 176 | 2013-04-05 | 3536673 | Problem with empty CGI variables/Windows authentication in CF10/IIS 7.5 | |
| 177 | 2013-04-05 | 3536920 | A query object with a column type "object" becomes column type "longvarchar" after being converted to WDDX and back | |
| 178 | 2013-04-09 | 3538759 | Adding a domain requires restart of Cold Fusion | |
| 179 | 2013-04-09 | 3539041 | coldfusion-out logs stuff targeted for other logs | |
| 180 | 2013-04-09 | (Sat, 25 May 2013 06:52:01 GMT) [view article in new window] Confessions of a Serial Hackathoner. Hello World, It’s been a very busy few months for me. New Projects! New Languages! More Hackathons! Yes, you heard that right, Hackathons. “Hi, My Name Is Theo and I’m A Serial Hackathoner” In case you’re wondering, “just what is a Hackathon?” I’ll give it to you short and sweet straight from the one resource […] (Fri, 24 May 2013 18:01:09 GMT) [view article in new window] CF Webtools is Hiring Full Time Remote Developers Mark Kruger, aka. ColdFusion Muse posted that CF Webtools is hiring again. Check it out! CFWebtools is location in Omaha, NE, but we have a large number of remote employees and contractors. If you are interested,read the job posting at the link above and contact us. A couple highlights: Frequently Asked Questions
I've been with CF Webtools since December of 2010 and it's a good place to work. (Fri, 24 May 2013 15:17:17 GMT) [view article in new window] Using MariaDB with Mango Blog In one of my previous posts I went over connecting ColdFusion to MariaDB. This was my first hands on with MariaDB. Once I had things talking I went to test using MariaDB as the database to connect with Mango Blog. Initially, when switching, I was able to view the main pages - posts and the other content. I could log in to the admin as well; but upon trying to create a post or edit content, I would get a ColdFusion error regarding invalid MySQL syntax. Looking back on how I set up MariaDB to CF, I had used the "other" option when adding a data source in the CF Admin. Since Mango Blog's setup allows for using MSSQL and MySQL, there was most likely a hang-up in identifying what DBMS was actually being used. I'm not entirely sure as I have not pursued this error fully. The solution that works actually came in part to a comment made on the above referenced post. Since MariaDB is a fork of MySQL, when setting up a MariaDB data source in the CF Admin, you don't have to go the "other" route. Instead you can simply use the "MySQL 4/5" option and, in the "Server" field, specify the URL and port to MariaDB. This will hook things up more or less the same as using the "other" option but the key difference here is that the underlying reference to the DBMS will still come off as MySQL from CF. When connected in this way you can easily choose that data source as a MySQL database to use with Mango Blog; but it will in fact be using the MariaDB database. So far in my tests everything runs and functions as expected. Obviously there is the possibility for this to fail in the future as features / inner-workings of MariaDB shift from MySQL. Of course this was more experimental than anything. Cheers. (Fri, 24 May 2013 14:11:57 GMT) [view article in new window] PhoneGap Online/Offline Tip A few months ago I wrote a blog post that talked about "robust" PhoneGap applications. Basically it was a look at the types of things you should consider to make your PhoneGap application more of an app and less of a wrapped web page.One of the main topics of that blog post was about handling connection status. PhoneGap gives you access to the type of connection the device has as well as events that let you respond to online and offline states. These are important features that (most likely) every single PhoneGap app should be using. I want to point out though a small issue with the code I shared. It isn't broke, but how I did things could be done slightly different. Consider this code block: I want you to notice two things. I've got event listeners for my connection status. Then I have an immediate check. My thinking was, "I want to know when things change in the future but I also need to know what's going on right now." However, it turns out that this isn't actually necessary. If you add event listeners for the online/offline events in the main body load event (not the PhoneGap device ready), then the appropriate event will be fired automatically. If you read the docs for the events (http://docs.phonegap.com/en/2.7.0/cordova_events_events.md.html#online) closely you will see that they demonstrate using the body load event. What may not be clear from the docs though is that even though your connection may not change, the event really is fired for you. Here is an example that I've slightly modified from the docs. Using this way of handling the events, I would not need a check in onDeviceReady. Thanks go to fellow Adobian Shazron for pointing this out. So... do you have to use this way of handling it? To be honest, I prefer my way. It is a bit more coding, but I'd rather not have onload event with logic and a ondeviceready. My way just "feels" better to me, but I reserve the right to change my mind in the next five minutes. ;) (Fri, 24 May 2013 10:30:49 GMT) [view article in new window] On Working Remotely (Telecommuting) I've been wanting to share my tips for being productive while working from home full time for a while now, but never got around to writing them all out. As luck would have it, I ran across an article that covers almost everything... I've had the good fortune to spend the last year-plus working at CounterMarch, which is to say working from home. We don't have an office to which I could commute if I wanted to -- but that's ok, because I don't. I've also been fortunate enough to have a few jobs that allowed me occasional telecommuting privileges in the past, but there's something substantially different about doing it full time. Because of all of this working from home, I feel like I've gotten pretty good at it. Most days I'm very pleased with my productivity, and on days when I'm not I can usually trace it back to a particular client issue (in which case I'm billing them, so their roadblocks become their loss) or service issue (in which case I go on the war path). On the rare day that I feel like it was something environmental or my own lack of motivation or energy that caused my productivity drop, I also feel like the good days outnumber the bad ones by a significant margin, and write it off to the law of averages. There are a lot of fairly-obvious productivity tips for working from home full time that this article covers, so start with that. Good, now that you've read that article, let me expand on it a little bit here and there... WorkspaceThe missing element here is that your workspace needs to be desirable. The more uncomfortable and gloomy your workspace is, the more you'll dread work and the more you'll want to get out of there. If, instead, your workspace has the best stereo in the house (if you're into music) or if you invest in a super high-end chair All of the above said, one of the best perks about working from home is that when the weather is right you can take your work out onto the back porch and soak up some Vitamin D (and if the boss is amenable, perhaps a tasty adult beverage)! Why not work outside when the timing is right? And speaking of leaving your office... assuming you're geographically close(ish) to some or all of your team, get together every once in a while. Steve and I originally planned to meet once a month at a central location (the Whole Foods in Plymouth Meeting is tremendous for this!), but for whatever reason we're both usually too busy to make it happen that frequently. It usually works out to more like every 2-3 months. However, after every one of those get-togethers I feel recharged and ready to take on new problems. It's nice to be reminded you're not alone. I also like to take one or two days between Whole Foods meetups to work from my favorite greasy-spoon diner or hole-in-the-wall bar (or both!). You can't beat cheap scrapple and free wifi, and the change of pace of getting out of the house is like a reset button if you feel a rutt settling in. CommunicationSteve and I are often both so busy that we barely type 10 messages back and forth throughout the day -- and chat/IM is our primary mode of communication. We do use email a bit more than is recommended in the article, but my rule of thumb is:
That said, sometimes the stars align and we both sit in a Google+ Hangout literally all day. It's kind of the greatest thing ever. We can water-cooler chat while we work for a bit, and then we settle into a comfortable silence punctuated by occasional F-bombs directed at semicolons or service providers. Got a question? Just ask it out loud. The all-day hangout thing isn't for everyone, and even for us it's something we manage probably once every week or two. Love thy jobThe last thing I have to add is that when you love your job, it's not hard to be productive. I think I looked at reddit twice today, and one of those times was on my phone while I ate my lunch. The rest of the day I just grabbed the top card from the to-do column in Trello for my project, did the thing, and moved it to the column to the right. Cultivate a career that makes all of the hardships worthwhile. Here's an excerpt from the offer letter I got from CounterMarch:
... And it has been true. I see myself growing and getting smarter with every project. I feel lucky to have reached this point in my career in my early 30s, and I will have been even luckier if I can ride this wave until I retire. When you've got a boss that prioritizes interesting work over lucrative work, that understands the benefits of peace & quiet, and that wants nothing more than for you both to enjoy your work so much that you want to continue doing it... how can you not be productive? If you don't have those things, keep looking. Don't quit your job until you've got something better lined up, but never settle. And if you can't find that dream job, perhaps it's time to become that boss. (Fri, 24 May 2013 09:45:33 GMT) [view article in new window] Connecting to JNDI data sources in ColdFusion 10 Here's a guide to show you how to configure JNDI datasource in ColdFusion 10. 1. Get the JDBC DriverThe JDBC Driver needs to be placed in ColdFusion10/cfusion/runtime/lib folder. 2. context.xml configurationAdd a resource block before the closing tag (</Context>) in the
For more information on the attributes please refer to http://tomcat.apache.org/tomcat-7.0-doc/jndi-resources-howto.html.For setting isolation level use the 3. web.xml configurationIn the
4. Add ColdFusion DataSource through AdministratorAfter saving the configuration files restart the ColdFusion server.Log in to ColdFusion Administrator and navigate to Data & Services > Data Sources and add a new Data Source by selecting
Hope you found this useful.Write in to us if you have any issues with the Tomcat specific configuration.
-Asha (Fri, 24 May 2013 09:00:28 GMT) [view article in new window] © The connection to the COLDFUSIONBLOGGERS's RSS feed has timed out - please try again later. We are sorry for any inconvenience this may have caused. | ||
|
© 2013 iribbit.net. All rights reserved. Plainfield, IL 60586 | ||||




