Latest Entries »

Windows 8 UI

Windows 8 UI

This is just horrible, to think that Microsoft actually believes that this UI experience is better for their users. Windows 98 was better than this!

I also notice the OSX folder naming scheme, so sadly they are even looking at better and still miss the mark.

Read more here.

See some other user perspectives here.

I recently updated a Mura CMS site I maintain, by adding a new “portal of portals” section. The main portal listed a series of guest authors that are writing articles for our site. Each author block in the portal list was actually its own portal or article pages. This is all common practice in Mura and in my opinion, one of the areas where it excels at adding content.

All the pages in this section are a two-column, 70/30 layout, with the main content on the left and some author specific information in the right. Both the author article portal list and each article all have the same content on the right, so I made an “authors info” component for that information. This content is a set of the author’s favorite Web sites. To make that content easy for my Editors to maintain, I extended the author’s portal template in the Class Extension Manager, and added new attributes to collect the link information. In my case, I added 10 fields to collect up to 5 links in the form of a Text/URL combination. My attributes are named Link1Text, Link1Url, Link2Text, Link2Url and so on.

So I now have one common “authors info” component in mu Mura admin that I include in the right side of my two column layout. The code view of that component looks like this:

<div class="span-7 last sidebar">
   <img alt="About the Author" src="/xyzsite/assets/Image/sidebars/sidebar_authorsinfo.gif" />

   <p style="font-style: italic;">"Take a look at some of my favorite sites"</p>
   <ul>
	[mura]dspInclude('display_objects/custom/ali/dsp_authorsInfo.cfm')[/mura]
   </ul>

<!--- static content to link users to other author sections --->
   <hr width="50px" />
   <p>See all of our authors pages:</p>
   <ul>
	<li> <a href="/index.cfm/articles/author/Author-A/">Author A</a> </li>
	<li> <a href="/index.cfm/articles/author/Author-B/">Author A</a> </li>
	<li> <a href="/index.cfm/articles/author/Author-C/">Author A</a> </li>
	<li> <a href="/index.cfm/articles/author/Author-D/">Author A</a> </li>
	<li> <a href="/index.cfm/articles/author/Author-E/">Author A</a> </li>
   </ul>
</div>

To pull the links and information into the component, I made a custom Mura display file (a CMF file) that I include in my template. That file started like this:

/xyzsite/includes/display_objects/custom/xyz/dsp_authorsInfo.cfm

<cfloop from="1" to="5" index="x">
   <cfset txt = $.content('Link'&x&'Text')/>
   <cfset lnk = $.content('Link'&x&'Url')/>

   <cfif (len(txt) GT 0) AND (len(lnk) GT 0)>
      <cfoutput>
           <li><a href="#lnk#">#txt#</a></li>
      </cfoutput>
   </cfif>
</cfloop>

In my Extended Attributes I have fields that collect a link and the text to hyperlink for up to 5 links. So here I run a loop from 1 to 5, set my link and text values, and then if both have content I add them as a list item.

When i saved all of this and reloaded an author’s portal page, I saw my links loaded as expected. However, when I opened an actual article written by that author, all I saw at the on the right was “Take a look at some of my favorite sites” then nothing. That is because my extended attributes are part of the main portal page and not the article sub-page. If you look at the code, I am loading Mura’s “content” object. The Mura Programer’s Guide explains that the “…Content scope wraps the CURRENT front end request’s contentBean”. So when I look at the portal page, where the custom link attributes are defined, they are available in the content scope.

So, if I can only get the currently loaded page’s info in the content bean, then how can I get the content from other pages? In my case, the Programmer’s Guide led me to a very simple solution: call the parent object using the getParent() method of the $.content() method. Doing this will return the data from the current’s page’s parent page as a contentBean. With that knowledge I updated my custom display file as so:

/xyzsite/includes/display_objects/custom/xyz/dsp_authorsInfo.cfm

<cfloop from="1" to="5" index="x">
<cfsilent>
   <cfset page = ListLast(cgi.PATH_INFO,'/') />

   <cfif  (page IS 'Author-A')
       OR (page IS 'Author-B')
       OR (page IS 'Author-C')
       OR (page IS 'Author-D')
       OR (page IS 'Author-E')
   >
     <!--- user is on a author portal page where the link values are available --->
     <cfset txt = $.content('Link'&x&'Text')/>
     <cfset lnk = $.content('Link'&x&'Url')/>
   <cfelse>
     <!--- user is on a article page, so grab info from the parent --->
     <cfset parentBn = $.content().getParent() />
     <cfset txt = parentBn.getValue('Link'&x&'Text')/>
     <cfset lnk = parentBn.getValue('Link'&x&'Url')/>
   </cfif>

   <cfif (len(lnk) GT 0) AND (lnk CONTAINS 'mysitedomain.com')>
       <cfset openIn = "_self" />
   <cfelse>
       <cfset openIn = "_blank" />
   </cfif>
</cfsilent>
   <cfif (len(txt) GT 0) AND (len(lnk) GT 0)>
       <cfoutput>
          <li><a href="#lnk#" target="#openIn#">#txt#</a></li>
       </cfoutput>
   </cfif>
</cfloop>

As you can see, at the top I updated my code to determine if the right side component was being loaded on an author’s page, by looking at a CGI var. If so, I set my links the same way I did originally. If not, then I assume the right side component is being loaded on a nested article page, so I first get my parent page’s contentBean, then set my links that way. In addition, I added some code to determine my link’s target value.

This all seems to work well. I would like to dig a little deeper and find out if I can dynamically find out how many attributes my page has. That way I wouldn’t need to hard code the 1 to 5 loop, and could easily add more link pairs in the future.

3.25 inch Floppy Disk

Yesterday, a co-worker brought me a 3.25″ floppy disk and asked if my Macbook could open it (you know because Mac’s never update their storage tech!). As it turns out, I could open the disk, as I still have an old VST USB Floppy Drive lying around in a drawer at home. When he told me that the disk stored some ColdFusion code from an old project they worked on in 1996. I became very motivated to help out, mainly just wanting to see some of their old code.

Well, today I brought in my disk and we cracked open the file.  There wasn’t any code, but there was some old libraries, MAPIPOP and SMTPGATE (both Windows .exe files to add functionality to their old project) and a ColdFusion White Paper as an HTML file. Turns out it’s from Allaire and is a white paper on ColdFusion version 1.5!  Yes I said 1.5.  I thought it was pretty neat to see what they supported then and some of the code examples.  The link to the file is below.  None of the links work of course and none of the images were on the disk, so it’s sort of bare bones.  At any rate, I got a kick out of reading it.  Hope you will too!

COLD FUSION PROFESSIONAL 1.5 : AN ALLAIRE WHITE PAPER

My team at work uses Atlassian’s Jira® for tracking our bugs and other work tasks. We recently started tracking all of our time in Jira as well. It’s really easy to do. You enter in estimates for each issue, then “log work” against the issues as you work. If you also use the Eclipse plugin, Atlassian Connector, you can tag files or directories of files to log work anytime they are open and in focus. I’ll save that for another post.

To track non-project tasks, my team has issue tickets for all our “Administration” tasks, like staff meetings, trainings, management, etc. These are unassigned issues, and most of which don’t have estimates. We all just add our time to those open buckets and our manager runs reports on them for his needs.

For our vacation time we have a vacation issue with a sub-task for each employee. Each sub-task has an estimate of the total amount of vacation days we get in a year. That way, we can see how much time we have left as we bill against it.

I wanted a Jira filter that would show me all the unassigned Admin tickets I could bill time to, and just my vacation sub-task ticket (not everybody’s vacation sub-tasks). The simple filter controls don’t offer a way to filter by multiple users, in this case unassigned and my user id. However, Jira has its own Jira Query Language (JQL) that allows you to query the underlying database and get almost any data set you need.

So I started with a simple filter to pull all the Admin tasks, then switched over to advanced mode and updated the simple filter’s JQL to be:

project = ADM AND (assignee is EMPTY OR assignee = currentUser()) AND status = Open ORDER BY priority DESC

This works great and we have one filter that everybody can use because I used the currentUser() function to grab the time sub-task. If you wanted to specify your user id specifically you would just change “assignee = currentUser()” to “assignee = yourusername“.

Final filter showing all the Admin tasks and only my vacation task