Entries Tagged as 'Learning'
/project
/config <-- Coldspring and Transfer config files
/model <-- model components
/root <-- web root
/admin <-- secure admin screens
Basically, I want to create mappings to config and model. I did a little googlin' and found a nice snippet on Sean Corfield's blog on looping over a list to build the mappings. I aped that code with a slight mod for my setup.
<cfif (ListLast(CGI.HTTP_HOST,".") eq "local")>
<cfset mapPath = "../">
<cfelse>
<cfset mapPath = "../" & this.name & "/">
</cfif>
<cfloop index="p" list="config,model">
<cfset this.mappings["/" & p] = expandPath(mapPath) & p />
</cfloop>
I dev on Mac and deploy on Windows and my local folder structure is slightly different from my host. The first part of the code is just a test of whether the site is being served up locally. When on the production server, the mapped folders are in a folder with the same name as the app.
This is a great alternative to using Apache Alias or Virtual Directories in IIS for mappings. That is, until I tried using the mapping from within the admin folder. Suddenly the path was not recognized. I initially thought this was a transfer issue, but that was not the case. I tried several variations and workarounds. Eventually, I figured out that the mappings were fine for files in the web root where Application.cfc resides. So why was the path not available to files in a folder below the web root? The answer was pretty simple. The admin folder had no Application.cfc, thus no mappings.
Remembering another gem by Mr. Corfield regarding extending Application.cfc via a Proxy, I created an Application.cfc in the admin folder and the required proxy in the web root. Instead of repeating the code for creating the mappings with only the path prefix changed, I wrapped the creation of mappings up in a method.
<cffunction name="createMappings" access="private" output="false" returntype="void">
<cfargument name="pathPrefix" type="string" required="false" default="../">
<cfif (ListLast(CGI.HTTP_HOST,".") eq "local")>
<cfset variables.mapPath = arguments.pathPrefix>
<cfelse>
<cfset variables.mapPath = arguments.pathPrefix & this.name & "/">
</cfif>
<cfloop index="p" list="config,model">
<cfset this.mappings["/" & p] = expandPath(variables.mapPath) & p />
</cfloop>
</cffunction>
And call it from the Application.cfc in the admin folder using the appropriate prefix.
<cfcomponent displayname="Application" extends="ApplicationProxy">
<!--- set mappings in this directory --->
<cfset createMappings(pathPrefix="../../")>
</cfcomponent>
Application level mappings are handy, but the per directory limitation does not make for a tad more code. Overall, I think it's a small price to pay for the benefit gained.
UPDATE:
After testing this on my Windows machine, it appears that using "this.mappings" inside a method does not properly set the mappings. I've changed things around so that the createMappings() method returns a struct and I set it as a pseudo-constructor.<cfset this.mappings = createMappings(pathPrefix="../") >
Two Utility Classes to Help Keep Your Controllers Lean
Learning , ColdFusion , Application Architecture 5 Comments »Apache Ant
I've run a build.xml file, but I do not know a thing about how Ant works or how to leverage it for development. Sad, but true...
Subversion
I've used Subversion for a long time, but have always been petrified of using branches, tags and merging. I need to overcome that to reach the next level. Even if I start with a local repository first.
Unit Testing/TDD
I've made some headway in this department with CFCUnit, but my effort has been less that stellar. I'm radically changing my development work flow and this is one area that I definitely want to integrate without backsliding or excuses.
Regular Expressions
Oh, the shame. For I am lame when it comes to regex. It's just one of those things I've passed on learning in favour of something else.
Aspect-oriented Programming (AOP)
Like subversion, I'm familiar with ColdSpring, but mostly on a simple level. Over the next few months, I'm pretty serious about breaking out of the comfort zone and really learning how to harness the more powerful features ColdSpring has to offer.
Design Patterns
I grok a few patterns, but the majority of patterns, and OO concepts, are elusive to me. I might need to really focus on the basics before venturing into the pattern hinterland.
Flex
I have an AIR app in the HTML/Javascript category, but I have not sat down and worked at learning Flex. "I'll get to it", I keep telling myself. And with the demand for Flex developers these days, I'd be a damn fool not to add those skills to the arsenal sooner than later. ;)
Actionscript 3
Oh how I love and cherish my Essential Actionscript 2 book by Colin Moock. I know I'm going to dig working with AS3 as much, if not more. Why haven't I mastered it yet? Still searching for a good project that I can put a focused effort into.
jQuery
jQuery gets a lot of love and rightfully so. I've had a taste over the last few weeks and it can be an addictive.
UML
I have only scratched at UML, but I'd really like to be able to build UML into a standard part of my development process. Even if I only master class diagrams I'll be happy.
A programming language I don't know
Ruby and Python are high on the list. Regardless, I want to spend a little time working in a new language (static or dynamically typed) to improve my understanding of object oriented programming.
This agenda is subject to change. I haven't place a date or priority on any subject as it is likely that I'll focus on two or more at any given time. And it's entirely possible that I immerse myself deeply into one subject until I'm satisfied with my level of proficiency.
Recent Comments