existdissolve.com
the singularity of being and nothingness
the singularity of being and nothingness
Oct 5th
I'm currently reading through St. John of the Cross' "The Dark Night of the Soul." In this short book, the 16th century mystic expounds upon his "Songs" which deal with the "dark night of the soul," the period of purgation through which all followers of Christ must come in order to be perfected and united completely in love and purpose with the Divine.
The Songs itself is quite short–only a few stanzas. However, St. John devotes several pages to expounding the meaning of the verses. In his introduction to the concept of the "dark night of the soul," St. John describes some of common barriers that hinder believers from true knowledge of God and precipitate the need for the grand purgation. Two of these hindrances are spiritual voluptuousness and spiritual gluttony…or simplified, the danger of experiential worship.
To John, the con-mingling of the spiritual and physical experience of worship is wholly positive: to be united with God is not just an act of mystical ecstasy, but is rather a way of being that intersects the whole of one's life with that of the divine. The danger of experiential worship, however, arises when the experience of worship–and not God–becomes the thing for which More >
Sep 14th
(Thanks to Kevin for the inspiration!)
This Sunday's message was about money. Yep, pretty exhilarating, right? I mean, who doesn't LOVE to sit through half-an-hour-or-so of hearing someone speak at you about how you should give more, how giving money is an act of worship, how you really will be blessed-in-spite-of-the-recession…blah-blah-blah, right?
We've all sat through these messages before. We've all heard how only 3% of Americans Biblically tithe 10% of their income, and of course that means that you, me, and the person sitting in front of us are not in the holy 3%. But we should be thanked nonetheless, right? After all, without the 97% of us backslidden, God-hating heathens, pastors wouldn't have such wonderfully shocking statistics. That counts as some form of giving, right?
In all seriousness, growing up in the church I've sat through an unbearable number of messages about money. I've heard pastors rail against congregations for not giving enough; I've heard others try to coax money out of their parishioners on the promise of God formulaicly responding to their act of generosity and sacrifice; and I've even seen people intimidated out of their money by, let's say, overly enthusiastic ministers trying to mold their listeners into the More >
Sep 12th
In a previous post, I wrote about watching out for data type mismatches when using the CFSharePoint tag. While this is all well and good, much of my post was based on a misconception of how an "inout parameter" works. While I can't claim great knowledge of this, I think I have a better understanding.
From what I understand, an inout parameter expects a specifically named parameter–let's say "Result"–to be passed in. When you pass this parameter to the web service, the value, or "out", should be the variable that you want returned. So if I want the "results" parameter to return its value as "finalResults", you could do something like:results="finalResults"
In the last post, I was under the impression that the initial value of "results" HAD to be a ColdFusion data type, like a structure or array. This is not correct. Sure, I can pass in the appropriate data type with the "results" parameter; however, whatever structure I pass in will overwrite the "out". This is why if you run the example I provided in the last post, copying an "About.doc" file from one folder to another will really just create a new "About.doc" with the value of the binary object More >
Aug 4th
Enough of lists! The last few posts, I’ve been dealing with the same old boring lists, and I’ve grown tired of that. So today, I want to show a quick example of how to use some of the Users and Groups web services to handle user and group management.
So let’s say I have a brand new user. They have astounding technical skills, so I decide that I want to add her to a special group of users that I’ll call “Super Users”. The only issue, however, is that this group does not exist. So to check all the items off my list and call it a day, I need to:
The first thing we need is to create the new SharePoint group. This is easy:
<cfsharepoint action="addgroup" domain="localhost" userName="un" password="pwd" name="theresult" wsdl="http://localhost/_vti_bin/UserGroup.asmx?wsdl" params="#{groupName="Super Users", ownerIdentifier="mycomp\joel", ownerType="user", defaultUserLoginName="mycomp\joel", description="A group of really cool, really powerful users :)" }#" />
Regarding the info being passed, there’s nothing really to speak of. However, you should notice that the method “addgroup” is not listed in the CF9 reference as being supported by the <cfsharepoint> tag (and believe me, a quick test reveals More >
Aug 3rd
In my last post, I showed how simple it is to post a list item to a SharePoint list from Coldfusion 9. In this post, I want to expand a bit, showing how to add an attachment to a newly created list item. I also thought it would be a bit more fun to use form data, rather than hardcoding everything…so here goes 🙂
<cfif isDefined('FORM.submit')> <cfsavecontent variable="xml"> <Batch OnError='Return'> <cfoutput> <Method ID='1' Cmd='New'> <Field Name='ID'>New</Field> <Field Name='Title'>#FORM.title#</Field> <Field Name='Favorite_x0020_Color' #FORM.color#</Field> </Method> </cfoutput> </Batch> </cfsavecontent> <cfset newItem = xmlParse(xml)> <!---Be sure to get the actual field name from the URL, not from the display in SharePoint---> <cfsharepoint action="updatelistitems" domain="domain" userName="username" password="password" name="theresult" params="#{listName="AAC20C17-A87D-4985-BA1D-9DD511EE9B9A",updates="#newItem#"}#" /> <cfset theID = theresult.result[2].ows_ID /> <cfset attach = filereadbinary(FORM.myfile)> <cfsharepoint action="addattachment" domain="domain" userName="username" password="password" params="#{listName="AAC20C17-A87D-4985-BA1D-9DD511EE9B9A", listItemID="#theID#", fileName="#filename#", attachment="#attach#" }#" /> </cfif> <cfform name="myform" method="post" enctype="multipart/form-data" target="addlistwithattachment.cfm"> Title: <cfinput type="text" name="title" /><br /> Fav Color: <cfinput type="text" name="color" /><br /> Filename: <cfinput type="text" name="filename" /><br /> File: <cfinput type="file" name="myfile" id="myfile" /><br /> <cfinput type="submit" name="submit" value="Submit" /></cfform>
So really, here we have another easy bit of code. The insert method (updatelistitems) is unchanged, except that I’ve tied the field values More >
Aug 2nd
After pretty exciting results with retrieving list data from SharePoint using ColdFusion 9, I’ve been quite eager to try out some of the other methods exposed by ColdFusion. However, retrieving lists is one thing; testing out methods that could actually modify data is another entirely. So, I broke down and spent several hours installing WSS and SQL Server 2008 on my local machine. Interestingly enough, there are ways to get it to run on a 32-bit Vista machine, so if you’re curious how, let me know ;).
Anyway, once I got SharePoint installed, I immediately created a simple list. It’s incredibly simple–it only has two fields, “Title” and “Favorite Color.”
The first method I wanted to try out was to add a list item to this list, a name and a color. As with the list retrieval web service, the “updateListItems” method is just as simple to implement. Here’s the code I used:
<cfsavecontent variable="xml"> <Batch OnError='Return'> <Method ID='1' Cmd='New'> <Field Name='ID'>New</Field> <Field Name='Title'>Monkey</Field> <Field Name='Favorite_x0020_Color'>Pink</Field> </Method> </Batch> </cfsavecontent> <cfset newItem = xmlParse(xml)> <cfsharepoint action="updatelistitems" domain="localhost" userName="username" password="password" name="newitems" params="#{listName="AAC20C17-A87D-4985-BA1D-9DD511EE9B9A", updates="#newItem#"}#" /> <cfdump var="#newitems#" />
This is super straight-forward. First, you create a “Batch” element. Basically, this allows you to define any number of “methods” More >
Jul 21st
The other day, I downloaded the beta for ColdFusion 9. While waiting for the download, I was looking through some of the marketing copy that Adobe had on their site about the new features for this release. I about fell off my chair when I saw that not only has ColdFusion 9 increased connectivity to Microsoft’s SharePoint, but they have even built a tag to wrap up the functionality into one nice little package: <cfsharepoint />.
This one little tag is incredibly powerful. It knocks out all of the painful and cumbersome web services wrappings required to deal with SharePoint’s WSDLs. Besides having over 50 built-in functions to deal with lists, document libraries, and the like, you can optionally point to other (or custom) WSDLs to access whatever <cfsharepoint> can’t get at by default.
So after reading about this, I just HAD to try it out. Not surprisingly, ColdFusion makes a routine task like retrieving a list extremely simple. Here’s my test:
<cfset viewFields = xmlParse(" <ViewFields> <FieldRef Name='Title'/> <FieldRef Name='ID'/></ViewFields> ")> <cfset query = xmlParse(" <Query> <OrderBy> <FieldRef Name='ID'/> </OrderBy> </Query> ")> <cfset queryOptions = xmlParse("<QueryOptions></QueryOptions>")> <cfsharepoint action="getlistitems" domain="domain.com" name="spVar" userName="myusername" password="mypassword" params="#{listName="546585D2-7AC4-493F-8DC5-F089B9EEB0AD", viewName="A8720E14-A847-4255-8527-055D2DD97868", query="#query#", rowLimit="20", viewFields="#viewFields#", queryOptions="#queryOptions#", webID="" }#" /> <cfset More >
May 17th
Yeah, so I'm really dumb. For a long time, I've used DreamWeaver pretty much exclusively as an IDE for my web projects. There's something that makes sense here, as it has pretty good HTML and CSS features, and some limited ColdFusion and XML niceties. However, it is the suck when it comes to JavaScript editing.
Today I discovered Aptana. Of course, I've used Aptana before…by used, I mean, of course, that I downloaded the free version and played around with it (especially the built in AIR support). However, I had never really used it to modify JavaScript.
Well, there is a new love in my life! Aptana is smart enough to take my JavaScript, spaghetti-code as it is, and self-document all of the functions and variables that I have set. They may not seem like a big deal, but when you have several hundreds of lines of JS code with inline comments, it can be a big pain to scroll around trying to find this or that.
With Aptana, this kind of stone-age button pecking is over. Aptana has a nice, built-in "Outline" toolbar that helpfully shows all of the functions in the selected file, along with any declared variables. Plus, each More >
May 15th
If you've ever tried to use Spry data sets with a default implementation of Thickbox (a jQuery-based version of the familiar Lightbox), you've probably noticed that it doesn't work.
The reason for this, of course, is simple: out of the gates, thickbox.js fires off an initialization function (tb_init) through jQuery's ready(). What this means, technically, is that thickbox has already started its processing and element fishing before Spry's data sets have been fully loaded and rendered. What this means, practically, is that Thickbox won't work.
Though frustrating, there is a fairly simple way to work around this.
Conceptually, what we'll be doing is to bypass jQuery's ready() function and load tb_init manually AFTER we know Spry's data sets have fully loaded and rendered.
First, we need to figure out when the data sets are done processing. This is pretty simple, because Spry comes with a handy way of sniffing this out.
We'll start by setting up a new data region observer. Our observer will watch the data set and when it reaches the "state" that we define, we can manually fire the thickbox.js processing.
So here's our new observer:
the_Observer= new Object()the_Observer.onPostUpdate = function() { // Here's where the thickbox function call will go… };
Spry.Data.Region.addObserver("the_region", the_Observer);
Nothing More >