<?xml version="1.0"?>
<rss version="2.0">
<channel>
	<title>dopefly.com: The Dopefly Tech Blog</title>
	<link>http://www.dopefly.com/techblog/</link>
	<description>Join Nathan Strutz as he shoots the breeze on techie geeky web dev stuff.</description>
	<language>en-us</language>
	<webMaster>mrnate@dopefly.com (Nathan Strutz)</webMaster>
	<pubDate>Mon, 09 Aug 2004 12:00:00 PST</pubDate>
	<lastBuildDate>Thu, 24 Jul 2008 14:07 PST</lastBuildDate>
	<ttl>30</ttl>

	
	<item>
		<title>Having other projects</title>
		<link>http://www.dopefly.com/techblog/entry.cfm?entry=282</link>
		<guid>http://www.dopefly.com/techblog/entry.cfm?entry=282</guid>
		<description><![CDATA[I know a lot of us out in the general work force really do a lot of work, and some of us put in way more hours than is healthy, but with the holidays being upon us, I'd like to suggest one thing: have other projects.<br/><br/>By other projects, I mean a personal project or an open source project where you can do what you do best, whether that's bean counting, programming or technical document writing, do what you do best and what you love to do (or at least loved to at one point), and do it on your own time outside of work. In having this other project, you give yourself a number of great opportunities.<br/><br/>First, you get freedom - be creative, do it on your own schedule, do it <em>your</em> way. Freedom ignites the passion you have for what you do. At work, you conform to rules, legacy problems, people problems, and things that make what you do not fun. Freedom from that structure makes things fun, and you can bring that fun back with you to your job, something everyone will appreciate.<br/><br/>You also get learning opportunities that you would never have when you're slaving away for a dollar. They want things done their way, and you have 2 hours to do it, while on your own time, you can try something new and it doesn't really matter how long it takes you. Be creative and come up with the <em>best</em> solution. Once you get there, you've probably learned something new. Keep at it until this becomes a point on your resume.<br/><br/>For me, I typically learn new programming frameworks and languages, and try creative methodologies that initially sound like they could never work. This eventually trickles down to work for me in ways that I thought never would. One of them was quite tangible in getting me hired at better places - the more I know, the more people want to hire me, and the more money they want to give me. I honestly didn't expect that. Strange, I know, I'm a little dense.<br/><br/>One of my pet projects is doing little things in C#. I find it fun and can't explain why. Playing with C# has made me a better programmer in general, as well as it has been able to solve some relevant issues in my day-to-day work where I use it for utility chores and small projects. I'm not saying that C# should be your project; I'm just throwing that out there.<br/><br/>At one previous company I worked at, one of the interview questions was about extra, non-work programming projects. This was literally one of the measures of how serious a candidate was at programming - if it was more than just a chore and if it bled over into a way of life. Lucky for me (... ?) you can almost never find me far from a keyboard, hacking away at something.<br/><br/>Finally, with completed projects, there's always the chance to monetize them one way or another. You never know if the project you've been kicking around has million dollar potential until you've put some real work into it.<br/><br/>Let me suggest some projects to get you started. If you like starting new things, make a personal web site, or one for your family. Be creative with where things come from (like Photoshop &amp; Illustrator for design, your Flickr account for content, etc.). If you have one, be improving it. If you make something cool along the way, consider open sourcing it. If there's a tool you always wanted to use, make it. If there's some boilerplate code you keep re-typing on each project, make a real tool or framework out of it.<br/><br/>If you don't like starting new things, download code from an open source project, make a few improvements and send them in. Open source developers LOVE this. If they don't want to take the app in the same direction you're going, fork it and start your own project. This is a great addition to your resume as well.<br/><br/>In conclusion, I'm urging you to get a personal pet project of your own, or a few. It's good for everyone, most of all, yourself.]]></description>
		<category>AZCFUG</category>
		<comments>http://www.dopefly.com/techblog/entry.cfm?entry=282</comments>
		<author>mrnate@dopefly.com (MrNate)</author>
		<pubDate>Wed, 24 Dec 2008 12:51:00 PST</pubDate>
	</item>
	
	<item>
		<title>The problem with Microsoft's software platform</title>
		<link>http://www.dopefly.com/techblog/entry.cfm?entry=281</link>
		<guid>http://www.dopefly.com/techblog/entry.cfm?entry=281</guid>
		<description><![CDATA[I've got a fever, and the only prescription is a bunch of ranting run-on sentences...<br/><br/>See, here's the problem with Microsoft's software platform, especially relating to ASP.NET, but they keep doing things like this: they went from having no MVC, where web sites feel like desktop app programming, except with HTML, which really just makes no sense whatsoever and is a retarded paradigm to program for even though they pulled it off fairly well even from the first version, to finally having some basic MVC support; things that the rest of the programming universe have been doing and loving, where they finally addressed the issues where they just suck at, acknowledging that maybe all the programmers out there in the world are smart and are basically right and that the feeling of needing to make maintainable applications that aren't ridiculous to update and work with and acknowledging that letting the developers do the HTML, CSS and Javascript to do their web-based apps might be a good thing because after all, they probably work on a team with designers and deselopers and the like and the developers have to eventually be sick of the stupid paradigm of being forced to use ASP.NET's web controls and having those things write all their tables and login forms because the code those output just really sucks and they can't get in and fix it and make it look like the designers really wanted without sacrificing a lamb, by introducing ASP.NET MVC late last year, which would finally let Java programmers in, and maybe even ColdFusion and Ruby guys as well because they can all do MVC even though ASP.NET couldn't, and would also just make the platform much more approachable by traditional web developers who understand the request/response model and who like to get their markup right enough to validate and who are always annoyed by Microsoft's web stack getting in their way because there's only 3rd party support for making a normal web site instead of postback and having the whole page be a form, which again, makes no sense, ok, from that, straight into <a href="http://weblogs.asp.net/scottgu/archive/2008/12/19/asp-net-mvc-design-gallery-and-upcoming-view-improvements-with-the-asp-net-mvc-release-candidate.aspx">the ASP.NET MVC Design Gallery</a>, where the traditional ASP.NET desktop software developers - and yes, I said they make desktop applications in ASP.NET because there's no other real excuse or explanation for what you're doing when you work with ASP.NET except that you're posting back and responding to events exactly like a desktop app in visual studio where you double-click on a button and write a codebehind action for the click event where it makes sense for desktop applications but falls utterly flat on the web unless you actually are doing something special with the button's onClick event like popping up a 'loading' image so the user doesn't hit the link again - now they can download and apply a pre-made design so that suddenly your MVC app is friendly, and you don't really have to do HTML and CSS because that's for web people, and programmers aren't web people, they're programmers and shouldn't have to learn html because it's somehow too difficult to understand for a programmer because after all, the programmers doing ASP.NET and dragging their little web controls onto the stage and shying away form the HTML probably actually are too slow to learn something as 'challenging' as the div and span tags, or at least Microsoft has somehow formed the permanent opinion that they are and they coddle their developers and pet them on the head and say "it's alright, you don't have to do HTML." If you commit your life to programming on the Microsoft platform, I would pretty much promise you that you will never have to learn HTML, Javascript or CSS, just C# or better yet, VB because then you can do vbscript too and program in classic ASP or make windows scripts and macros for Excel which is really all your business wants anyway. Imagine a programmer who never learns anything about what they're doing or what platform they're working on, then imagine armies of them crying and whining until Microsoft gives in and releases something that takes them from zero to hero, but you have to do it this one certain way and whenever you deviate off the path you're out of range, even for some clever googling because no one else has ever gone that path and that error number is so obscure that Microsoft would really rather that you never saw it so the MSDN page for it says something about how to get back on the right course because you tried to change the font tag to a span with a class and they didn't expect you to know what you were doing so you should leave it because, after all, IE v.16 still supports the font tag even though firefox had disbanded it 22 years after the standards committees threw the tag out and they figured no one would actually have software that generated a font tag because that would be ludicrous.<br/><br/>Dear Microsoft, make the developers on your platform grow some brains and learn a little about HTTP and a little about forms and links, where the Javascript goes and where CSS fits in, and how to write a multi-page form without postback (even though postback is a clever solution). See, it's too hard to know why we would implement a pattern (like postback or MVC) until we've suffered without it. There's no reason for an ASP.NET desktop programmer - yeah, i said it again - to switch to MVC (other than it's new and now has a design gallery) because MVC doesn't solve any of their problems, and MVC is better for making web applications that work together and have reusable parts and are well managed but it's not so good for just web pages, and who knows, I'm sure there will always be a market for those end-developers who really just want a web page with a login form and a table from the database and they want to call it an application even though the only cohesion it has with the rest of the pages is a link to another page and it has no reusability or management from the standpoint of the application as a whole and all the code is on the page or in a partial class which might as well be on the page except that now you have to have 2 files open in visual studio as if to prove the point that Microsoft is always trying to solve the wrong problem. Maybe if you allow ASP.NET to really be a part of the web instead of this alien spaceship that visits the web when it feels like it, then we'll drop some of the dead weight out of the programming chairs, as if the programming industry could downsize itself based on IQ, or better yet, it would let people learn some of what's really going on and how technology works and would excite them and make programming on your platform as fun and rewarding as we all know it can be like when you solve your first big problem and even though your manager wouldn't ever understand the programming difficulty you just overcame, you know you did it and you did it well, and it's 4:50 Friday afternoon so you can free your mind to have a relaxing the weekend and everything just feels right.<br/><br/>I like ASP.NET MVC. I really do, but I do not think it should be the first point of entry for a new developer getting into web development. I even somewhat like ASP.NET and web forms, although, I suppose in another way, I also despise them with the fire of a thousand suns, so it's maybe 50/50 what I'll feel depending on my caffeine intake for the day, but I don't think ASP.NET and web forms should be a new web developer's entry point into web development. It just isn't right. What is right? JSP is close, as it's still fairly modern and can be upgraded into an MVC pattern (many frameworks are available) as the developer matures, except for the complexity, specifically with getting your server up and running, and learning about beans and stuff, it's just overkill and that is a rant for a different day. PHP would work, except that when you look at the language you see C versus Perl with an out of control language library that could choke three camels. Ruby on Rails is a magical UFO that does MVC - too much code generation that hides what the world wide web does, not a good starter. Classic ASP, not really a language as much as a lightweight platform, and it's coupled usually with vbscript, I would say avoid it because, while not technically end-of-life, it hasn't seen any activity since ASP.NET came out in 2002 and is no longer considered modern. That leaves us with ColdFusion, which is perfect with its syntax that's similar to HTML and javascript without performing any type of web magic that can't be deduced by just looking at it, easy debugging, easy database connections, the ability to move into object oriented concepts and some well supported frameworks that give you as much MVC as you can wish for. As much as ColdFusion is touted for its ease of programming, it also doesn't hide the real web from you - it just makes it easy to get to.]]></description>
		<category>General</category>
		<comments>http://www.dopefly.com/techblog/entry.cfm?entry=281</comments>
		<author>mrnate@dopefly.com (MrNate)</author>
		<pubDate>Fri, 19 Dec 2008 11:22:00 PST</pubDate>
	</item>
	
	<item>
		<title>ColdFusion and the Session Facade</title>
		<link>http://www.dopefly.com/techblog/entry.cfm?entry=280</link>
		<guid>http://www.dopefly.com/techblog/entry.cfm?entry=280</guid>
		<description><![CDATA[We've heard it, we may have seen it in action. If you have ever asked yourself &quot;why,&quot; this is for you.<br/><br/>(BTW, I'm just going to call it a &quot;facade&quot; because &quot;fa&ccedil;ade&quot; is too difficult for my keyboard to produce)<br/><br/><strong>The Pattern</strong>
<br/>A facade is a fake front, like a mask. A session facade hides away the &quot;complexity&quot; of using a session.<br/><br/>The session facade is the point-of-contact for your session variables. Using one, we no longer have a session scope that you can talk to, now we talk to the facade. The facade offers basic bean methods with generic names - get(), set() and delete(), or a variation on the theme.<br/><br/>Dave Ross has pretty much <a href="http://www.d-ross.org/index.cfm?objectid=0DF6FA41-EB39-B6C1-5D5D31A245991A2F">the definitive ColdFusion Session Facade article</a> (2 pages worth and sample code) - how to use it and all. I'm just considering the usefulness of it.<br/><br/><strong>That sucks</strong>
<br/>Instead of <code>#session.username#</code>, now we can just type <code>#application.objectFactory.getBean('sessionFacade').getData('username')#</code> and the session facade will handle the dirty work of typing the scope name &quot;session&quot; for us. Finally, more typing!<br/><br/>So now that we're typing more, we also have to learn a new API for managing the session scope. What if we use get, put and delete methods and our friend Bob Bobbery uses get, set, remove, clear, search, etc, etc? More to learn equals more complexity.<br/><br/>And what problem exactly did this fix? We had a session scope before, and we technically still have it. Nothing forces the bad coders on our eam to use it. Nothing really changes, assuming the facade just gets and sets variables from the session scope. It just added another CFC to manage and a bunch of extra code.<br/><br/>The final problem is that the session facade doesn't do anything to manage the session, to organize it, report on it, fix problems that could occur or reduce complexity. It's typically just a dumb bean with variables.* replaced with session.*. It's useless.<br/><br/><strong>Oh, that might be cool</strong>
<br/>We programmers are managing change. That's one of the things that we do, and hopefully, we will do it well. What if the session scope goes away... no not likely, but with a session facade, we have the mechanism to manage every variable in and out of the session scope. We could reroute it to a database.<br/><br/>The session scope could disappear due to an administrative switch. On a hosted server, we may have no choice. The session facade could then be changed to get essential data from the database at every request.<br/><br/>What if, to reduce server memory, we want to put certain variables, or certain types of variables in our database. The session facade could be made to leave some things on disk, some in memory. A little brains can be added without touching the rest of the application.<br/><br/>What if we want to write a log event every time something goes in and out of the session scope? The session facade is basically our only option for this. The only other way would be to search our code for the word 'session' and add a cflog on each event. With a session facade object, we can do logging or any other type of thing all in one place. Not bad.<br/><br/>Perhaps we may want to cflock each session access because of some potentially unsafe code reading and writing to one variable - we can do that easily here by exclusively locking the set method and readonly locking the get method, using a unique session key to name the lock.<br/><br/><strong>In summary</strong>
<br/>In summary, the choice to use a session facade should be based on the risk of drastic session scope change. The benefits seem to be a lot of 'what if' scenarios, but they could happen, maybe, while the drawbacks seem to pay off right away. Laziness now or laziness later?]]></description>
		<category>ColdFusion</category>
		<comments>http://www.dopefly.com/techblog/entry.cfm?entry=280</comments>
		<author>mrnate@dopefly.com (MrNate)</author>
		<pubDate>Sun, 14 Dec 2008 21:07:00 PST</pubDate>
	</item>
	
	<item>
		<title>AZCFUG December 2008 - Casual Wednesday</title>
		<link>http://www.dopefly.com/techblog/entry.cfm?entry=279</link>
		<guid>http://www.dopefly.com/techblog/entry.cfm?entry=279</guid>
		<description><![CDATA[Hey everyone in the Phoenix valley - This month's AZCFUG meeting is going to be super-casual. We're going to <a href="http://www.google.com/search?q=aunt+chilada%2C+tempe%2C+az">Aunt Chilada's in Tempe</a> next Wednesday, the 17th at 6:30. As usual, we will probably be out back somewhere, so look around until you find us.<br/><br/>There's an official post at <a href="http://groups.adobe.com/posts/3e9ce92346">our Adobe Groups site</a> with a little more info.<br/><br/>The agenda? Nachos, the user group and giving away our schwag. Buy your own drinks, but bring something to say about the CFUG.<br/><br/>I'll get you started.<br/>&quot;I think one cool idea for a meeting next year would be __________.&quot;<br/>&quot;I think Alan would look better if his hair __________.&quot;<br/>&quot;I think, in regards to virtual presenters, we should __________.&quot;<br/>&quot;I would like to do a presentation on __________.&quot;<br/><br/>Oh snap, did I just involve the community?]]></description>
		<category>AZCFUG</category>
		<comments>http://www.dopefly.com/techblog/entry.cfm?entry=279</comments>
		<author>mrnate@dopefly.com (MrNate)</author>
		<pubDate>Wed, 10 Dec 2008 10:45:00 PST</pubDate>
	</item>
	
	<item>
		<title>Why precisely is it important to var-scope your variables?</title>
		<link>http://www.dopefly.com/techblog/entry.cfm?entry=278</link>
		<guid>http://www.dopefly.com/techblog/entry.cfm?entry=278</guid>
		<description><![CDATA[We've all heard it a thousand times. "<a href="http://www.webapper.net/index.cfm/2007/2/5/Why-you-need-to-VARscope-your-variables">VAR</a> <a href="http://livedocs.adobe.com/wtg/public/coding_standards/style.html">YOUR</a> <a href="http://www.coldfusionjedi.com/index.cfm?mode=entry&entry=6579B85C-F992-5BFE-388D680443054E0F">VARIABLES</a> <a href="http://corfield.org/blog/index.cfm?do=blog.entry&entry=E0815825-A540-CCDD-7F3105958EE9B3D1">!</a>" But why? You say, "I've never had that problem" and I'll tell you what, you probably wouldn't know it if you saw it. Pay attention here.<br/><br/>Let's take a simple ColdFusion function, easy stuff here. Dead simple.<br/><pre><code>&lt;cffunction name="runMyCode"&gt;<br/>    &lt;cfset result = 1 /&gt;<br/>    &lt;cfloop from="1" to="5" index="i"&gt;<br/>        &lt;cfset result = result * i /&gt;<br/>    &lt;/cfloop&gt;<br/>    &lt;cfreturn result /&gt;<br/>&lt;/cffunction&gt;<br/></code></pre>
<strong>What's the harm?</strong>
<br/>Ok, so you hit your page, which calls this code tucked away safely in a CFC. You put that CFC in the application scope because that's the Singleton pattern, or something like it and it runs faster. You get a good result (120). Great. Hit it again, no problem. Write a unit test if you want, it passes every time.<br/><br/>Now, put that out on production. I dare you.<br/><br/>Minutes later, your phone rings. Bill Billings, your most loyal customer calls up. He must be your most loyal customer, because it's only loyal customers or especially angry customers that ever call. He sounds angry and you rethink Bill's loyalty. Bill says "What's the idea? I got '7200' when I <em>know</em> I was supposed to get 120!" And you're pretty sure he was supposed to get 120. I mean, that's what the function does. It just returns 120. You tested it! You tell Bill that you'll look at it and brush him off because you're busy coding. Check your glasses, Bill. Check your glasses.<br/><br/>As soon as you get off the phone, it's Sally Sallington, another <em>loyal customer</em> calling, asking how she got 518400000 from something that should really be giving something closer to 120. Oh man. Now you have a problem.<br/><br/>Interestingly, your customers are getting round numbers, and they are both divisible by 120.<br/><br/><strong>The Java thread model</strong>
<br/>If you get the sense that <em>java is screwing with you</em>, you're on to something. What you failed to test for was multithreaded access to your method. When Bob and Sally hit that method at the same time, anything can happen.<br/><br/>You've got 2 users, so 2 threads running some code. Java has to make sure that both requests are satisfied as quickly as possible. How does it do that? Well Java will flip-flop between which thread is running, basically, on a whim. Maybe Bill will run through the loop 3 times and stop before the multiplication line, then Sally will just start the loop. Bill will run another 1 time around the loop, then Sally's thread takes a turn going 2 loops, stopping after the multiplication line.<br/><br/>Both variables in the function, <em>result</em> and <em>i</em> are being shared between everyone who runs the function. Bill sets <em>result</em> to 1, then 5, then 10, at which point, Sally may come in and set result back to 1, or pick up Bill's 10 at the start of the loop and go from there. It's impossible to say what exactly will happen. It's part of the magic of Java.<br/><br/><strong>Why did they do it that way?</strong>
<br/>Why does Java's threading flip-flop between the active threads? Why can't it just finish one and then start the next? Well then you wouldn't be running a multi-threaded application server, would you?<br/><br/>Then there's HotSpot - Java optimizes code as it runs and chooses the best path while it's running. As far as I know, it's literal, actual, magic. There's no way to know what it will do.<br/><br/>Also, usually your code isn't quite that simple. You put <code>&lt;cfquery&gt;</code> tags in there which could even be on a different server, maybe component instantiation calls that have to go to disk to pull in the CFC in, compile it and call it. While Java waits for the network or the disk or whatever else, it handles the other requests that are waiting.<br/><br/><strong>But I have a 4-CPU, 4-core server</strong>
<br/>Oh, that's not going to help. Now Java can literally do the same operation across 16 threads at the exact same time. You're really in trouble.<br/><br/><br/>read on for the stunning conclusion...]]></description>
		<category>ColdFusion</category>
		<comments>http://www.dopefly.com/techblog/entry.cfm?entry=278</comments>
		<author>mrnate@dopefly.com (MrNate)</author>
		<pubDate>Tue, 09 Dec 2008 20:51:00 PST</pubDate>
	</item>
	
	<item>
		<title>SQL Surfer 2.0: First commit</title>
		<link>http://www.dopefly.com/techblog/entry.cfm?entry=277</link>
		<guid>http://www.dopefly.com/techblog/entry.cfm?entry=277</guid>
		<description><![CDATA[Hey all - quick note to let you all know that I issued my first commit of many into the <a href="http://sqlsurfer.riaforge.org/">SQL Surfer project</a>. No real single-file download yet, but you can download the source and build your own with Eclipse, Ant and Groovy (if you dare!).<br/><br/>I'll share some more ideas with you all as I progress.]]></description>
		<category>Free Code For You</category>
		<comments>http://www.dopefly.com/techblog/entry.cfm?entry=277</comments>
		<author>mrnate@dopefly.com (MrNate)</author>
		<pubDate>Mon, 10 Nov 2008 20:36:00 PST</pubDate>
	</item>
	
	<item>
		<title>Integrating 3rd party applications into yours, safely</title>
		<link>http://www.dopefly.com/techblog/entry.cfm?entry=276</link>
		<guid>http://www.dopefly.com/techblog/entry.cfm?entry=276</guid>
		<description><![CDATA[<blockquote>
  Reuse-in-the-small is a solved problem. Reuse-in-the-large remains a mostly unsolved problem.<br/></blockquote>
<cite style="font-size:0.9em;"><a href="http://www.codinghorror.com/blog/archives/001083.html">Jeff Atwood </a> from <a href="http://www.amazon.com/gp/product/0321117425?tag=d0pe-20">Robert Glass, <em>Facts and Fallacies of Software Engineering</em></a></cite>
<br/><br/>I'm actively hacking at my latest <a href="/techblog/entry.cfm?entry=273">toy project</a>, which integrates a few 3rd party projects, and I had the thought, integrating a library, like <a href="http://jquery.com/">jQuery</a>, is drastically simpler than integrating a whole application, like a discussion board or WYSIWYG text editor. How do you solve these problems?<br/><br/><br/>A few years ago I attempted to drop <a href="http://galleon.riaforge.org/">Ray Camden's Galleon Forums</a> into another project. My app was Fusebox, so I had to rewire some of the front end, then move the component calls back out to the circuit. Sounds fairly easy, but with 3 gaping problems.<br/>1st, the client calls and we have to modify it heavily. It turned out the only thing Ray's app was good for, was a starter kit on the database and DAO templates.<br/>2nd, Ray puts out a new version with features we like, avatars, BBcode and signatures. We were so far out of sync that there's no way we could implement his new version.<br/>3rd, I was never sure how stable the rewritten code was (turns out it was ok, but I was crossing my fingers).<br/><br/>Result: Thanks for the starter kit, now I'm on my own.<br/><br/><br/>Fast-forward a few years to my new project, and I've started integrating <a href="http://www.cdolivet.net/editarea/">Edit Area</a>, a javascript code editor, into my application. Edit Area presents a few challenges, including the build program written in PHP and the authors not being native English speakers. Also, I have some application requirements, such as no externally linked files, and oh yeah, it has to work right (grrr).<br/><br/>So, how do I make changes to the application while keeping myself open to future versions?<br/><br/>The method I chose was to make changes to Edit Area in my build file. Ant calls Groovy. Groovy reads in their file and turns it into my file, which my program includes. It is repeatable but not destructive. When the next version comes out that fixes some of my problems (and I do hope it does), it will be mostly zero effort to update my code. Their changes could break my build temporarily, but I can tweak and adapt.<br/><br/>The biggest issue here is the challenge of meta-programming, or programming programs to reprogram programs. It's a lot of trial and error to get it right, and a lot of regular expressions. Also, Ant isn't exactly a real programming language, so I have Ant run a Groovy script. It's initial complexity to solve a repeating problem, which is a fair trade to me.<br/><br/>Result: Brainiacs only, but it works well.]]></description>
		<category>General</category>
		<comments>http://www.dopefly.com/techblog/entry.cfm?entry=276</comments>
		<author>mrnate@dopefly.com (MrNate)</author>
		<pubDate>Wed, 29 Oct 2008 20:26:00 PST</pubDate>
	</item>
	
	<item>
		<title>SQL Surfer 2.0: alt.lang</title>
		<link>http://www.dopefly.com/techblog/entry.cfm?entry=274</link>
		<guid>http://www.dopefly.com/techblog/entry.cfm?entry=274</guid>
		<description><![CDATA[I kind of went overboard on the languages & platforms with SQL Surfer 2.0, which I first mentioned early yesterday morning. Luckily, the finished product is just running CF/HTML/CSS/JS (That's 4).<br/>The build process uses C# (+1) to customize fixes to Edit Area.<br/>I used a batch file (+1) to copy the C# exe to my dev folder.<br/>The build file is Ant (+1), and Ant is in XML (+1).<br/>The build file uses groovy (+1) to replace some includes with actual content.<br/><br/>Total count: 9 different platforms, languages or technologies. Not bad for a little SQL tool.<br/><br/>UPDATE 10/23: I move the c# asynchronous process into Groovy during the build process, so that removes 2. That puts me down to 7 now.]]></description>
		<category>Free Code For You</category>
		<comments>http://www.dopefly.com/techblog/entry.cfm?entry=274</comments>
		<author>mrnate@dopefly.com (MrNate)</author>
		<pubDate>Sun, 19 Oct 2008 17:51:00 PST</pubDate>
	</item>
	
	<item>
		<title>SQL Surfer 2.0: Coming soon</title>
		<link>http://www.dopefly.com/techblog/entry.cfm?entry=273</link>
		<guid>http://www.dopefly.com/techblog/entry.cfm?entry=273</guid>
		<description><![CDATA[My wife has been on me to work on some projects that will make us money. Instead, she's seen me hacking away at this little toy. SQL Surfer 2.0 is a web 2.0 style SQL query editor. I've been playing with it for a few weeks now, and I've got to say, it really is starting to rock.<br/><br/>I had this old version, version 1, which was like your basic postback SQL tool in 200 lines of code. Well into 4 years old now, I was still using it, and i felt completely ashamed. Bad programmer. It looks lame, it works lame, but at least it worked. It had some cool ideas, like how it has a 1-file deployment for the whole thing - drop it in anywhere and it just works. Also, I like how it saves everything you run into a history box, but even that was limited.<br/><br/>SQL Surfer 2.0 brings the whole thing into web 2.0. I'm playing with some CF8 features now, but I hope to also deploy a CF6 compatible version. As always, I'm having trouble getting it to look right in Internet Explorer. I'm planning a beta &quot;soon,&quot; so this is like a heads-up teaser.<br/><br/>Yeah I know the concept is like a solved problem. Ray Camden has the <a href="http://cfdbexplorer.riaforge.org/">Database Explorer</a> and Todd Sharp with <a href="http://cfsilence.com/blog/client/index.cfm/2006/1/4/Genesis-10-Query-Evalution-Tool-Released">Genesis</a>, but I think I have a unique twist on the subject. More to come as I prep this one.]]></description>
		<category>Free Code For You</category>
		<comments>http://www.dopefly.com/techblog/entry.cfm?entry=273</comments>
		<author>mrnate@dopefly.com (MrNate)</author>
		<pubDate>Sat, 18 Oct 2008 00:32:00 PST</pubDate>
	</item>
	
	<item>
		<title>I joined facebook</title>
		<link>http://www.dopefly.com/techblog/entry.cfm?entry=272</link>
		<guid>http://www.dopefly.com/techblog/entry.cfm?entry=272</guid>
		<description><![CDATA[I had completely promised myself that I would NOT join MySpace, just as a fundamental stand against poor web design, even if they did write it with my favorite programming language. As a result, I had mentally discarded social networks in general, but, when you get married, you know, you make some compromises. So anyways, a few weeks ago, Alanda talked me into joining Facebook (in exchange for me taking out the garbage and cutting down a tree and giving her a massage -- I think she got the better end of the deal).<br/><br/>If you don't know social networks, basically, you find all your friends and talk about yourself so they can keep up with your life. It's less formal than a phone call or even an email, but better than spreading hearsay and 3rd hand information. Then they can comment on what you say and vice versa.<br/><br/>Facebook is especially nice in that the usability of the site is fantastic and the design is consistent throughout. Pretty much any activity I would like to do from any given area is already there. Thus far, they've thought of everything. As far as social web sites, including ones I've worked on, it's the best I've seen, by far.<br/><br/>Just in this past few weeks I've found a friend from school I didn't know was living in town. Anyways, if you feel like it, come look me up.]]></description>
		<category>Life Events</category>
		<comments>http://www.dopefly.com/techblog/entry.cfm?entry=272</comments>
		<author>mrnate@dopefly.com (MrNate)</author>
		<pubDate>Mon, 06 Oct 2008 08:39:00 PST</pubDate>
	</item>
	
	<item>
		<title>jQuery Wins</title>
		<link>http://www.dopefly.com/techblog/entry.cfm?entry=271</link>
		<guid>http://www.dopefly.com/techblog/entry.cfm?entry=271</guid>
		<description><![CDATA[A few days ago, Tony Petruzzi posted &quot;<a href="http://rip747.wordpress.com/2008/09/29/its-official-jquery-wins/">It's official: jQuery wins!</a>&quot; I took it with a grain of salt, but left it in the back of my mind. Then today, I saw the <a href="http://www.slideshare.net/jeresig/state-of-jquery-08-presentation/">State of jQuery '08</a> slideshow. Now, I think Tony was right.]]></description>
		<category>General</category>
		<comments>http://www.dopefly.com/techblog/entry.cfm?entry=271</comments>
		<author>mrnate@dopefly.com (MrNate)</author>
		<pubDate>Fri, 03 Oct 2008 08:29:00 PST</pubDate>
	</item>
	
	<item>
		<title>Do you back up your personal production web site?</title>
		<link>http://www.dopefly.com/techblog/entry.cfm?entry=270</link>
		<guid>http://www.dopefly.com/techblog/entry.cfm?entry=270</guid>
		<description><![CDATA[Along the trail of <a href="/techblog/entry.cfm?entry=268">web-based ad-hoc query tools</a>, I also have the need to back up my database from time to time. Having no direct connection to SQL Server across the internet on my host, I can't just use the SQL Server tools to do it.<br/><br/>Another scenario: a couple weeks ago I installed SQL Server Express 2008 64 bit. It's been running really well on Vista 64 and working fantastically with ColdFusion 8. The problem is, I had to recreate a local copy of dopefly.com's database (it runs the blogs and family photos apps). Then, I knew I wanted to populate it with some data, as close to the live data as possible. This is a pain because the only way to get the structure is to eyeball and hand-jam it. yuck, no thanks.<br/><br/>Well, I came up with a pretty good solution for myself, but I was hoping to get some advice from other people as to how they would do it. Any ideas out there?]]></description>
		<category>Database</category>
		<comments>http://www.dopefly.com/techblog/entry.cfm?entry=270</comments>
		<author>mrnate@dopefly.com (MrNate)</author>
		<pubDate>Thu, 25 Sep 2008 23:20:00 PST</pubDate>
	</item>
	
	<item>
		<title>Pagination 1.0 Released</title>
		<link>http://www.dopefly.com/techblog/entry.cfm?entry=269</link>
		<guid>http://www.dopefly.com/techblog/entry.cfm?entry=269</guid>
		<description><![CDATA[So after nearly a year of sitting on Pagination 1.0 RC, I finally have the 1.0 release of the data paging library for ColdFusion.<br/><br/>The only thing in the 1.0 final version that I changed from the release candidate was the error messages. Most of the questions I had were about why they were getting a <em>variable doesn't exist</em> type error. Turns out they didn't call <em>init()</em> or didn't set the <em>queryToPaginate</em> item. I added some checking and some <em>cfthrow</em>s to better explain what is happening.<br/><br/><a href="http://paginationcfc.riaforge.org/">Pagination.cfc is available to download at RIAForge</a>, and the subversion repository has all the files as well. ]]></description>
		<category>Free Code For You</category>
		<comments>http://www.dopefly.com/techblog/entry.cfm?entry=269</comments>
		<author>mrnate@dopefly.com (MrNate)</author>
		<pubDate>Tue, 23 Sep 2008 18:39:00 PST</pubDate>
	</item>
	
	<item>
		<title>Do you have a web-based ad-hoc query tool?</title>
		<link>http://www.dopefly.com/techblog/entry.cfm?entry=268</link>
		<guid>http://www.dopefly.com/techblog/entry.cfm?entry=268</guid>
		<description><![CDATA[I was just thinking about managing my database here on Dopefly. I don't have direct SQL access to the server (SQL Server 2000), so there's no using SQL Manager to do things. That sort of leaves me with FTPing my ad-hoc queries to the server and running one at a time (no please). That sucks, so my real solution was to make a web-based ad-hoc query tool, <a href="/projects/sqlsurfer.cfm" title="you probably don't want to download this, it's circa 2004">SQLSurfer</a> (warning, old code!). I've got an admin area of the site here in a secured directory, so it's basically secure & safe, but I would not recommend installing it anywhere public, or anywhere that a client could find. Generally, I just use it for local development when I don't want to open big clunky tools.<br/><br/>The need for an ad-hoc query tool is debatable, but I would say it is needed just to verify my data validity and run some small reports, like, I don't have a screen that will display the most recent comments on the blog, reversed by date (for spam checking when my email was down). Or what about when I am trying to remember the names of my tables when I don't  have a local copy running - it's perfect.<br/><br/>I'm sure I'm not the only one to have this general problem, so my question to you is - <em>do you have a web-based ad-hoc query tool? What tools do you use?</em> Really, I guess it comes down to <em>how do you solve the problem?</em>
<br/><br/>The reason behind this is that I'm thinking of updating the old SqlSurfer (run a selected block of code, better history management, ajax), but am wondering if anyone has anything better already.]]></description>
		<category>Database</category>
		<comments>http://www.dopefly.com/techblog/entry.cfm?entry=268</comments>
		<author>mrnate@dopefly.com (MrNate)</author>
		<pubDate>Fri, 19 Sep 2008 07:41:00 PST</pubDate>
	</item>
	
	<item>
		<title>Creative code (where creative = bad) - Part 1</title>
		<link>http://www.dopefly.com/techblog/entry.cfm?entry=267</link>
		<guid>http://www.dopefly.com/techblog/entry.cfm?entry=267</guid>
		<description><![CDATA[I've got a few of these types of entries lined up. If you have a blog, post your own!.<br/><br/><code>&lt;cflock name="#createUUID()#" type="exclusive" timeout="30"&gt;</code>
<br/><br/>This code creates a uniquely named exclusive lock - that's an oxymoron. If the name of the lock is unique every time this code runs, the cflock will never lock anything until somehow, magically, createUUID() returns the same value twice, within 30 seconds (right, <a href="http://en.wikipedia.org/wiki/Uuid#Random_UUID_probability_of_duplicates">not very likely</a>).]]></description>
		<category>ColdFusion</category>
		<comments>http://www.dopefly.com/techblog/entry.cfm?entry=267</comments>
		<author>mrnate@dopefly.com (MrNate)</author>
		<pubDate>Tue, 16 Sep 2008 13:16:00 PST</pubDate>
	</item>
	
	<item>
		<title>Quickly Understanding Selenium</title>
		<link>http://www.dopefly.com/techblog/entry.cfm?entry=266</link>
		<guid>http://www.dopefly.com/techblog/entry.cfm?entry=266</guid>
		<description><![CDATA[Selenium is an open source, simple web site testing and automation platform. I say it's a &quot;platform&quot; because it can't really be classified as just a tool, a language, API or a full application, but rather to a degree, all of these.<br/><br/>The basic idea is to create, using very plain, easy HTML, a repeatable script that is then executed by a Selenium runner.<br/><br/>I recommend using the Selenium IDE to create your first script. It's an add-on to IE and Firefox that records your clicks. Save it to a file (it generates plain HTML) and you can repeat it later on. It won't always work perfectly, however, so you can edit it with any text or HTML editor. You just need a <a href="http://www.openqa.org/selenium-core/reference.html">Selenium language reference</a> to get by.<br/><br/>Selenium actions and accessors are the language you program your scripts in. Generally, you would use the <code>click</code> action, <code>type</code> to enter values into forms and things like <code>assertText</code> to make sure certain content exists.<br/><br/>One part of using the language you will have trouble with is selecting elements. Hopefully, you use uniquely named text links everywhere. If not, Selenium supports XPath very nicely. For me, it's a matter of sprucing up my XPath skills, something I wanted to do anyway.<br/><br/>Selenium scripts consist of a table with three columns. The first column is the action to perform. The second column is like the first argument of a function, usually this is the item to perform the action on and is almost always used. The third column is like the second argument in a function, usually the content of the action like the text to enter into the form item from the second arg. This column is not always used.<br/><br/>Selenium scripts must run within your web browser, however, different tools to automate your browser exist:<br/><br/>The Selenium IDE will run a file off your disk. This is perfect for single scripts and quick browser automation.<br/><br/>Selenium Core is a javascript application that runs on your web site - put it on your dev/QA site. Being a javascript application, there is no server-side interaction and nothing to install. This method requires your scripts to live on the local web site as well (browser security). This is actually very natural feeling, as then you can check them into your source control (you HAVE source control, right?).<br/><br/>(jump break)]]></description>
		<category>General</category>
		<comments>http://www.dopefly.com/techblog/entry.cfm?entry=266</comments>
		<author>mrnate@dopefly.com (MrNate)</author>
		<pubDate>Sat, 06 Sep 2008 19:04:00 PST</pubDate>
	</item>
	
	<item>
		<title>AZCFUG August meeting Tomorrow</title>
		<link>http://www.dopefly.com/techblog/entry.cfm?entry=265</link>
		<guid>http://www.dopefly.com/techblog/entry.cfm?entry=265</guid>
		<description><![CDATA[Oh man, only 2 posts since last month's meeting. Am I ever slacking. Anyway, tomorrow, Wednesday, August 27, 2008, is another valley-of-the-sun CFUG meeting in Tempe. Jim Bambrough from Amkor is going to be talking about Mach-II and Eclipse, and giving us basically a nice overview of the technology he uses and how he uses it. It should be good.<br/><br/>As always, there's door prizes and stuff just for showing up. Check the site for details and directions: <a href="http://www.azcfug.org/">azcfug.org</a>.]]></description>
		<category>AZCFUG</category>
		<comments>http://www.dopefly.com/techblog/entry.cfm?entry=265</comments>
		<author>mrnate@dopefly.com (MrNate)</author>
		<pubDate>Tue, 26 Aug 2008 14:07:00 PST</pubDate>
	</item>
	
	<item>
		<title>Trouble finding things in Eclipse?</title>
		<link>http://www.dopefly.com/techblog/entry.cfm?entry=262</link>
		<guid>http://www.dopefly.com/techblog/entry.cfm?entry=262</guid>
		<description><![CDATA[I've heard it 2 times in the last week that people are having trouble using the find features in Eclipse, so I thought I might be able to help a little.<br/><br/>#1 - Refresh your project files automatically<br/>#2 - The search dialog box<br/><br/><img src="eclipse-search.png" alt="Eclipse search dialog" />
<br/>Hit the link to read it.]]></description>
		<category>CFEclipse</category>
		<comments>http://www.dopefly.com/techblog/entry.cfm?entry=262</comments>
		<author>mrnate@dopefly.com (MrNate)</author>
		<pubDate>Mon, 11 Aug 2008 12:14:00 PST</pubDate>
	</item>
	
	<item>
		<title>Required training 2008</title>
		<link>http://www.dopefly.com/techblog/entry.cfm?entry=261</link>
		<guid>http://www.dopefly.com/techblog/entry.cfm?entry=261</guid>
		<description><![CDATA[At work, we are required to take 5 days of training this year. This is a challenge for me on a few levels. First, I have a new baby at home, so I don't want to leave the Phoenix area. Second, I'm having trouble finding classes that are open and applicable to me.<br/><br/>I have a SQL Server background, and I'm using Oracle, so I tried to get into a good Oracle class, but it was cancelled, so now, I'm weighing Java and .NET among others.<br/><br/>Unfortunately, at this point, it's quickly turning into an annoyance that i just have to 'fix' instead of the terrific learning opportunity that I'm sure it was meant to be.<br/><br/>If anyone has any suggestions, I'm all ears.]]></description>
		<category>General</category>
		<comments>http://www.dopefly.com/techblog/entry.cfm?entry=261</comments>
		<author>mrnate@dopefly.com (MrNate)</author>
		<pubDate>Tue, 29 Jul 2008 10:35:00 PST</pubDate>
	</item>
	
	<item>
		<title>Review of AZCFUG's July meeting with Bryan Hogan, from the new co-manager</title>
		<link>http://www.dopefly.com/techblog/entry.cfm?entry=260</link>
		<guid>http://www.dopefly.com/techblog/entry.cfm?entry=260</guid>
		<description><![CDATA[Bryan did an awesome job at conveying how simple it is to begin using Java in our CF applications, how helpful Eclipse is for Java development, how to make a simple Java GUI with NetBeans, how to work with the Java threading model, how to use a generic JDBC driver (jTDS) and how to create Excel files with Apache POI. It was awesome how much he covered in about 30 minutes. Bryan was well prepared as well, which was great because I only gave him like a week to prep (sorry!).<br/><br/>We don't have anything planned for the August meeting, so we're looking for volunteers!<br/><br/>As a final note, <a href="http://alan.rotherfamily.net/" title="Alan Rother, Manager of the AZCFUG">Alan</a> asked me to co-manage the group with him, which I accepted. I guess I was the heir to the schwag box anyway, so this way he doesn't have to die first. It's good all around because I hate doing that. (yeah, of course i'm kidding).]]></description>
		<category>AZCFUG</category>
		<comments>http://www.dopefly.com/techblog/entry.cfm?entry=260</comments>
		<author>mrnate@dopefly.com (MrNate)</author>
		<pubDate>Thu, 24 Jul 2008 14:58:00 PST</pubDate>
	</item>
	

</channel>
</rss>
