I spent a good three weeks troubleshooting this issue and finally found the solution. It started when I decided to do several updates at once. CF 8.0.0. to 8.0.1, apply the CFIMAGE hotfix, install a plethora of Windows updates (90+), and switch to the latest version of Java 6.
After several reboots, Coldfusion Application Server became unstable. If I was lucky, it would take 3-4 service start attempts before it would run successfully. And on occasion it wouldn’t last long.
“EXCEPTION_ACCESS_VIOLATION Java HotSpot(TM) Server VM problematic frame in ntdll.dll”
But what does this mean?! I exhausted just about every effort. Google searching kept returning people receiving unrelated memory errors. I tried 5 different JVMs including the one that came with CF8. Different JVM startup arguments. Uninstalled Fusion Reactor. Reinstalled CF8. Rebuilt the VM from scratch.
Reinstalling CF8 actually worked, but as soon as I changed the Maximum JVM Heap Size to anything other than the default 512m, I was back to receiving the same error. Unfortunately I didn’t realize changing the memory was the problem because CF started just fine as it sometimes it would.
On another server, I didn’t want to mess with Coldfusion at all and decided to only install Windows Updates. That server became unstable. Awesome. I wonder which of the 90 Windows Updates caused this?
I’m usually pretty good at finding answers to my problems, but this one really took me down a notch and made me feel less of a person. Weeks had gone by and I kept ending up back at the beginning. I tried everything. Everything except for the one simple thing that would fix it. Maybe I wasn’t good enough at my job, the one where I’m solving problems every day.
A few days later I knocked the JVM max memory back down to 512m. CF started. I restarted 20 times, even rebooted the machine, and it stayed up. Nice! Even though 512m isn’t enough, at least I know it’s memory related. I tried 640m and 768m. They would work more often than 1024m, but not good enough for production. I assume it’s not a physical memory issue because I’m getting the same error from a VM on a different server.
Late in the evening, before I would call it quits by hitting the bottle, I did one last Google search. Which lead me to this Server Fault link which mentions a specific Windows Update and that update having a subsequent hotfix for it. The Knowledge Base article mentions an issue with the Microsoft ISA Server Control service failing to start on servers where multiple cores were registering as multiple CPUs. My VM is a dual core running on an 8-core host. After installing the hotfix and rebooting, all my problems went away.
The good thing about this whole mess is while I felt dumber the longer it went on I learned a good amount while reading up on JVMs, error logging on the CF and Java side, various JVM arguments and what they can do for the server, Citrix XenServer tidbits, and installing and configuring our web servers from scratch.
There have been a few occasions where I have need to print a large scale image across multiple pages. Maybe I wanted to print a long list of tables+columns in a database schema or a snapshot of a web page. Most commonly, the apps I use would only shrink or crop a large image to one page. If I absolutely had to break it apart I would cut the image up and print each one individually. Very time consuming.
I came across an Ask MetaFilter post of someone asking for the same thing and one of the responses mentions MS Paint. Could it be true MS Paint actually has a use? I don’t know how long it has supported this feature, but it does indeed allow you to print large scale images across multiple pages.
Start by pasting an image in MS Paint. Then go to document menu -> Print Preview -> Page Setup:

The Fit to: option in page setup is something I’m most familiar with when printing Excel documents. Simply select the number of pages wide by number of pages tall, click OK, verify the preview, print, and you’re all set.

Technology is amazing.
You have just installed the Tomato firmware on your LinkSys or Buffalo router and your ISP was kind enough to give you more than one public static IP. What you’d like to do is point each IP to a different machine on your network.
1. Configure static local IPs for each machine on your network
You can set this on the router side as opposed to having to configure each computer individually. With each machine connected to the router (wired or wireless), log into the Tomato administration interface and go to Status -> Device List. Click on the current IP of each machine and set the IP Address to something that’s easy to remember. For example, if your network is on 10.10.0.1 and you have three computers, set each machine like this:
computer_one 10.10.0.50 computer_two 10.10.0.100 computer_three 10.10.0.150
Be sure that those IPs are outside of the DHCP range. For my home network I like to set DHCP to be in the 200-220 range. After setting the new local static IP click Save at the bottom. Click the Reboot link on the router and release/renew the connection on each computer to make sure they’re now pulling the new IP.
2. Configure the public static IPs on the router
From the Tomato administration interface go to Administration -> Scripts -> Firewall.
Example public static IPs from your ISP:
64.100.100.50 64.100.100.51 64.100.100.52
Update the 64.100.100.* and 10.10.0.* values below to match your actuals:
/usr/sbin/ip addr add 64.100.100.50/29 dev vlan1 /usr/sbin/ip addr add 64.100.100.51/29 dev vlan1 /usr/sbin/ip addr add 64.100.100.52/29 dev vlan1 /usr/sbin/iptables -t nat -I POSTROUTING 1 -p all -s 10.10.0.50 -j SNAT --to 64.100.100.50 /usr/sbin/iptables -t nat -I POSTROUTING 1 -p all -s 10.10.0.100 -j SNAT --to 64.100.100.51 /usr/sbin/iptables -t nat -I POSTROUTING 1 -p all -s 10.10.0.150 -j SNAT --to 64.100.100.52 /usr/sbin/iptables -t nat -I PREROUTING -d 64.100.100.50 -j DNAT --to-destination 10.10.0.50 /usr/sbin/iptables -t nat -I PREROUTING -d 64.100.100.51 -j DNAT --to-destination 10.10.0.100 /usr/sbin/iptables -t nat -I PREROUTING -d 64.100.100.52 -j DNAT --to-destination 10.10.0.150
Paste the following in the Firewall tab, click Save, wait for it to process, then Reboot the router again.
3. Allowing people from the outside to reach your server
Now let’s say you have a web server on 10.10.0.50 and you already have the server configured, you simply need a way for public traffic to reach it. From the Tomato administration interface, go to Port Forwarding -> Basic. Under “Src Address” put the public static IP (64.100.100.52). “Ext Ports” should be 80 (assuming that’s the port your web server is running under). “Int Address” set to 10.10.0.50. Add a description like “Web server”. Save.
If all is well, you should now be able to hit the public and reach your local web server. You’ll want to setup host headers and DNS records to make it more user friendly, but that’s outside the scope of these post.
Note: Be sure to only expose the ports necessary for the services you want available and patch your server OS and web server to the latest version.
Right around the time the Apple iPad came out I decided to upgrade my Dell Latitude X1 (Samsung Q30) ultraportable notebook. I wanted something I could used to comfortably browse the Internet while sitting on the couch. I bought the X1 in 2005 as my primary notebook at work. It lasted for a good two years and is still the best notebook I’ve owned to date. Sadly, when I upgraded to another notebook my X1 essentially sat around and collected dust.

Late last year I jumped on the Solid State Disk bandwagon and got one for my work notebook. Like many others have already said, it’s the best upgrade you can make to a notebook and for any power user is worth every penny.
Now, one of the greatest aspects of the X1 is it being fanless. The only noise you’ll hear is the HDD access coming from the 1.8” drive inside. I wondered if there were 1.8” SSD drives that would work in the X1 to make it completely silent. Google quickly pointed me in the right direction.
The highlights:
What I purchased:

Each item I ordered can be considered an individual upgrade and I can confirm that each one works. No part is dependent upon another which makes it easy to tailor your upgrade to what you’re in need of. You might even be able to upgrade the display, but I’m not interested in that.
SSD Drive Performance Results

Unfortunately I don’t have results from before the upgrade, but if you have an X1 with a stock HDD I’d love to see your results. The results aren’t as impressive as I was expecting on the writes side, but the read speed is not bad at all.\
Additional Resources:
Over the past two days I redesigned my site and officially moved it to Tumblr from Mango Blog (and previously from BlogCFC). The two main reasons for the move was to find a hosted solution and something that’s quicker to post to in hopes that I’ll post more often.
Tumblr supports RSS feeds which I planned to use for photos and recent posts lists, but you’re limited to the latest item and new items going forward. Not so good when you have historical data you want to backfill. Instead, I setup a scheduled task to pull down a list of feeds, format each feed to a specific layout, and copy up to Amazon S3. Then I just needed to include the iframe as part of the theme.
I’ll post the Coldfusion/CFML code I have for this along with the what I wrote to import my old posts.
I’m going to attempt to set a schedule for blogging regularly primarily for my own reference. Either development projects I’m personally working on or work-related problems I’ve come across and resolved. Not to mention some of the other topics you’ll find links for in the header/footer.
I’ve run into this a few different times at work. You have a web page script that calls a SQL Stored Procedure and all of a sudden it takes 10-20x longer than it normally does to finish. If it’s a hefty query it could timeout. When you execute the proc or take the code within and manually run it in a query window it runs as it should.
The solution is a quick Google search away (assuming you know what to search for).
“Parameter sniffing” refers to a process whereby SQL Server’s execution environment “sniffs” the current parameter values during compilation or recompilation, and passes it along to the query optimizer so that they can be used to generate potentially faster query execution plans. The word “current” refers to the parameter values present in the statement call that caused a compilation or a recompilation.
Quick solution, change:
CREATE PROCEDURE books_by_subject_lis @foo nvarchar(50)
AS BEGIN
SELECT title, description
FROM book
WHERE subject = @foo
END
To:
CREATE PROCEDURE books_by_subject_lis @foo nvarchar(50)
AS BEGIN
DECLARE @localFoo INT -- Declare local var
SET @localFoo = @foo -- Set local var
SELECT title, description
FROM book
WHERE subject = @localFoo -- Use local var
END
Resources:
http://elegantcode.com/2008/05/17/sql-parameter-sniffing-and-what-to-do-about-it/
http://omnibuzz-sql.blogspot.com/2006/11/parameter-sniffing-stored-procedures.html
A problem I’ve been having with the Daily Puppy widget I have on Petnibs.com is it doesn’t display the same size image each day. Aside from the laziness on their part, it meant the iframe I was using would never be the perfect size. Either there would be extra space below it or it’d cut off part of the featured image.
It’s easy to resize/manipulate a local domain iFrame based on the content, but Petnibs is on a hosted platform and the Daily Puppy widget lives on another server. It takes a little bit more effort, but the solution I found on Adam on Life explains it well and is pretty cool.
Pages Need:
Basically since Parent and iFrame 2 are on the same domain and linked together by iFrame 1, iFrame 2 is able to call functions on Parent and pass in values.
How to add a “What is your question?” field at the top of all your pages so users can start asking a question from anywhere. I posted screenshots on the Meta Stack Exchange site, but wanted to post more detail here for others to get at.

Submitting the form takes you to the normal Ask Question page, pre-populates the form with your question, and displays any related questions above the form field.

Below is the code to implement a generic version of this form. I removed any style attributes that were specific to Petnibs.
CSS
Add to the theme custom CSS field
/* ========================= */
/* Ask Question */
/* ========================= */
#content { margin-top: 64px; }
#ask-question-form {
padding: 0px;
position: relative;
top: 88px;
width: 470px;
}
#ask-question-form form {
margin: 0px;
padding: 0px;
}
#ask-question-form input {
font-size: 17px;
float: left;
width: 348px;
}
#ask-question-form button {
cursor: pointer;
float: left;
font-size: 130%;
font-weight: bold;
height: 31px;
line-height: 31px;
margin: 5px;
padding: 0px 8px;
}
/* ========================= */
/* Search results */
/* ========================= */
#search-title {
margin-top: 18px;
}
#search-message {
color: #F00;
line-height: 18px;
margin-top: 18px;
}
#search-results {
max-height: 165px;
overflow: auto;
width: 665px;
}
#search-results .question-summary {
padding-bottom: 2px;
padding-top: 2px;
width: 640px;
}
#search-results .summary {
width: 450px;
}
#search-results h3 {
font-size: 14px;
margin-bottom: 2px;
margin-top: 2px;
}
#search-results .search-text {
font-size: 11px;
line-height: 13px;
}
#search-suggest {
color: #888;
padding-left: 8px;
}
Ask Question Quick Form Code
Add to the end of the Linkbar content field
Ask
<div id="ask-question-form">
<form action="/questions/ask" method="get">
<input id="question" name="question" type="text" value="What is your question?" />
<button>Ask</button>
</form>
</div>
Ask Question Form Code
Add both sets of code to the end of the Question Help content field. For the second block, wrap it with <script type=”text/javascript>…</script>.
<style type="text/css">
#ask-question-form { display: none; }
#content { margin-top: 45px; }
#question-suggestions { display: none; }
</style>
Look for //modify and tweak those lines to your preference.
// Insert new elements
$("#post-form").before('<div id="search-message" style="display: none;"></div>');
$("#post-form").before('<h3 id="search-title" style="display: none;"></h3>');
$("#post-form").before('<div id="search-results" style="display: none;"></div>');
// Set question title field from url.question if blank
$().ready(function() {
if ($("#ask-error-container").length == 0) {
if ($("#title").val().length == 0) {
if ($.getUrlVar('question').length > 2) {
$("#title").val($.getUrlVar('question'));
QuestionSuggestions();
}
}
}
});
// Override QuestionSuggestions()
QuestionSuggestions = function() {
var s = $("#title").val();
if (s.length > 2) {
document.title = s + " - [site_name.com]"; // Modify
$.ajax({
url: "/search/titles?like=" + escape(s),
cache: false,
success: function(data){
$("#question-suggestions").html(data);
process_results();
}
});
}
}
// Plugin to retrieve URL variables
$.extend({
getUrlVars: function(){
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++)
{
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
},
getUrlVar: function(name){
var return_string = $.getUrlVars()[name];
return_string = jQuery.trim(return_string).replace(/\+/g,' ');
return unescape(return_string);
}
});
// Display related results
function process_results() {
var results = $("#question-suggestions").html();
var htmlString = "";
results = jQuery.trim(results);
if (results != "That's not a very good title. Can you add some more unique words to it?") {
// Change results to related questions list, clear out any previous results, show count
results = $(".answer-summary");
$('#search-results').html('');
$('#search-title').html('Related Questions (' + results.length + ')');
// Loop over related questions and create new HTML string to display results
$.each(results, function(i, n) {
var htmlString = "<div class='question-summary narrow id-"+i+"'>";
var textString = "";
// Add question votes
htmlString += "<div class='search-link'>" + $(this).find(".answer-link").html() + "</div>";
// Add answer votes
votesCount = $(this).find(".answer-votes").text();
if ( votesCount == 1) { votesString = "<div>vote</div>"; } else { votesString = "<div>votes</div>"; }
htmlString += "<div class='votes'><div class='mini-counts'>" + $(this).find(".answer-votes").text() + "</div>" + votesString + "</div>";
// Add title
htmlString += "<div class='summary'><h3>";
htmlString += "<a href=" + $(this).find("a.question-hyperlink").attr("href") + ">";
htmlString += $(this).find(".question-hyperlink").text();
htmlString += "</a></h3>";
// Add summary
htmlString += "<div class='search-text'>" + $(this).find("a.question-hyperlink").attr("title") + "</div>";
htmlString += "</div></div>";
// Insert into DOM
$('#search-results').append(htmlString);
// hacky : Remove href from answer-link, string spaces and parentheses, replace content
$('#search-results .id-'+i+' a.question-hyperlink').remove();
textString = $('#search-results .id-'+i+' .search-link').text();
textString = textString.replace(/[\(\)\.\-\s,]/g,'');
if (textString == '') { textString = "<div class='status'><div class='mini-counts'>0" } else { textString = "<div class='status answered'><div class='mini-counts'>" + textString };
if ( textString == 1) { answersString = "<div>answer</div>"; } else { answersString = "<div>answers</div>"; }
textString = textString + "</div>" + answersString + "</div>";
$('#search-results .id-'+i+' .search-link').replaceWith(textString);
});
$("#search-message").html("Your question may have already been asked.<br />Please review the following related questions before submitting a new one."); // Modify
// Show related search results
$("#search-message").show("fast");
$("#search-title").show("fast");
$('#search-results').show("slow");
}
else {
$("#search-message").html("Your question seems too short. Are there additional unique words you can add to it?"); // Modify
// Show results - message only
$("#search-message").show("fast");
$("#search-title").hide();
$('#search-results').hide();
}
}
Just got back from the Stack Overflow DevDays conference in LA. Overall it was worth the price of $99 a ticket and is unheard of. I enjoyed the speakers, many of which are making me itch to learn a new language (Python in particular).
Available Swag
The Crowd
The crowd seemed a bit light. My guess would be 150 people. A few members of my team weren’t able to make it at the last minute either. And as expected, most software developers are shy and had trouble mingling with strangers. I know I personally, really wanted to say high to Joel & Jeff and shake hands. Everyone was respectable, though.
Favorite Presentations
The Not-So-Favorites
Other Goods
In the end, would I go next year? Yes! The price alone makes it a no-brainer. However, if it’s the same talks it will get boring fast. The presentations were all introductory and pretty easy to grasp. More intermediate talks would be cool. Technology is always advancing so I imagine it won’t be hard to find new topics. Couch DB or principle talks of software development / project management would be great. I hope some people post pics. I wanted to do a Qik video stream, but wasn’t sure if it would be allowed.