A CMS and .NET Development Blog by Tomas Breen Tomás develops information systems that utilize ASP.NET, SharePoint, CRM & Third party systems, turning dispersed system data into useful connected information to improve Information Worker productivity. This blog contains his thoughts on software development, design, patterns, business and their connections.

08 May 2013 ~ 0 Comments

Unable to generate SSPI context

Time service out of sync. Kerberos authentication relys on the time service between the SQL box and your machine to be matched.

If you recently changed your DNS to google (8.8.8.8, 8.8.4.4), then your internal domain controller / sql server may be missed in dns. Ensure your DNS points internally too.

10 December 2012 ~ 0 Comments

Why others’ mistakes are your own

Here’s a scenario which would be common in my day to day tasks in work. Trying to make an interface “work”, and getting a colleague to give it their first impression. A 1 minute conversion/demo can make something you thought was obvious seem the polar opposite.

From Watching them struggle:

You’ve probably watched somebody who is not technically savvy trying to operate an interface new to them, likely with little success. Maybe that interface was yours. You’ve spent countless hours cutting that thing down to the basics, refining the copy and making everything crystal clear, and yet, you watch with bewilderment as the user before you struggles and stumbles across the screen, doing everything possible to go in circles around the interface element they actually need, which to you seems blindingly obvious.

When writing, designing, creating, producing … something, it is important that someone else can understand it, interact with it and benefit from it. Feedback counts, and early feedback counts double. If you can’t get that early feedback, at least try step back and see what you’ve done from another angle.

04 February 2011 ~ 2 Comments

Launch: JBallz Lake Balls and Golf Accessories

I helped my brother launch a new site last week. The site is developed with osCommerce. It was tough to customise the design and simplify the buying process, but we did the best we could and the site is quite functional now. Take a look if you’re interested. Your comments (positive or otherwise) would be appreciated.

jBallz Lake Balls and Golf Accessories

jBallz Lake Balls and Golf Accessories

JBallz Golf has been established with the aim of supplying Premium Brand, High Quality lake balls and Accessories, to golfers at all levels. All golfers will agree that they have a preferred ball. A ball that suits their swing, their approach or even chipping and putting feel. In addition to this golfers will also perhaps choose balls that suit their budget. Lake balls give all golfers the opportunity to select their preferred ball and order them from Jballz Golf in the qauntity they require, at greatly reduced prices.

Our lake balls are retreived from Lakes and streams on courses within Ireland and the United Kingdom. We work full time clearing waterhazards on selected courses. The balls are then put through a cleaning process and sorted by condition, Brand and Model.

Jballz Golf accessories and training aids are selected from the ranges of products from approved and branded manufacturers. We currently supply PGA Tour merchandise and Links Choice. Our aim is to provide accessories at affordable prices which aid golfers on the course, from Gloves, ball retreivers and tees, to training aids for use at home, Driving and chipping nets, swing and grip training, putting aids. Check out our current stock, if we dont have what you want contact us and we can advise and possibly arrange supply of your requirements.

27 January 2010 ~ 2 Comments

Seesmic Web – A quick review

Really loving the seesmic web application. The user interface is clean, can grow and so easy to use. It seems so original yet all the elememts fit with current patterns.

seesmic_ss_1

The top and left navigation work really well together. They are uniquely different but compliment each others roles in the app. The top has been left very simple, with only 3 buttons, 1 of which is a really intuitive refresh (ajaxy) button. The buttons are connected, and make you feel like they are tabs, which is what you achieve when clicking as they switch between 2 interfaces.

seesmic_ss_2

The epicentre is made up of “windows”, which can contain any kind of content, timeline, searches, #tags etc. Although I would have liked to be able to see a single users tweets, but can’t seem to do it (just found a tab called updates under the user profile area, but would like to see it in the epicenter, as then I can watch multiple users without officially following them).

seesmic_ss_3

The search area is great. You can have multiple search results “windows” in the epicentre. Handy for watching topics of interest.

I have found client apps are good, but become out of sync when using across work and home machines (mac at home, windows at work). I really love this interface, as it give me everything the twitter web app gives me and more.

Visit Seesmic.

18 January 2010 ~ 8 Comments

Multiple URLs for a single node in Umbraco

I am developing a public website for a client at the moment, and this is my first project with Umbraco as the CMS. On the outset, the community around umbraco is fantastic, and coming from a .NET backgound, I am getting used to it quickly. The fact that I’ve had a lot of interest in SEO and url rewriting helps too, because umbraco uses these concepts alot.

The admin interface is easy to use, and end users should have no trouble getting to grips with content editing and publishing. But like any system, the developer must keep it simple.

The challenge: To create a product line with multiple pages for each product (overview, details & contact form).

The solution: I could have easily create a node for the overview, then created 2 nodes below that for the details and contact form. But this would have required additional training for end users and left gaps for human error to occur, leading to additional product support. So I decided to keep it to a single node, and figure out how to create 3 pages from that node without confusing the user.

I posted a question on our.umbraco to see if anyone had any suggestions, and one answer got me on the right path, and after a little trial and error, I found a great solutions to (possibly) a common CMS problem.

The key to solving this problem is all in the XSLT for your navigation. Here is the full XSLT file for navigation:

[codesyntax lang="xml"]

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#x00A0;"> ]>
<xsl:stylesheet
	version="1.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:msxml="urn:schemas-microsoft-com:xslt"
	xmlns:umbraco.library="urn:umbraco.library" xmlns:Exslt.ExsltCommon="urn:Exslt.ExsltCommon" xmlns:Exslt.ExsltDatesAndTimes="urn:Exslt.ExsltDatesAndTimes" xmlns:Exslt.ExsltMath="urn:Exslt.ExsltMath" xmlns:Exslt.ExsltRegularExpressions="urn:Exslt.ExsltRegularExpressions" xmlns:Exslt.ExsltStrings="urn:Exslt.ExsltStrings" xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets" xmlns:tagsLib="urn:tagsLib" xmlns:BlogLibrary="urn:BlogLibrary"
	exclude-result-prefixes="msxml umbraco.library Exslt.ExsltCommon Exslt.ExsltDatesAndTimes Exslt.ExsltMath Exslt.ExsltRegularExpressions Exslt.ExsltStrings Exslt.ExsltSets tagsLib BlogLibrary ">

<xsl:output method="xml" omit-xml-declaration="yes" />

<xsl:param name="currentPage"/>

<!-- Input the documenttype you want here -->
<xsl:variable name="documentTypeAlias" select="string('Product')"/>

<xsl:template match="/">

<!-- The fun starts here -->
<ul>
<xsl:for-each select="$currentPage/ancestor-or-self::node [@level=2]/node [@nodeTypeAlias = $documentTypeAlias and string(data [@alias='umbracoNaviHide']) != '1']">
	<li>
		<a href="{umbraco.library:NiceUrl(@id)}">
			<xsl:value-of select="@nodeName"/>
		</a>
    <ul>
      <li>
        <a href="{umbraco.library:Replace(umbraco.library:NiceUrl(@id), '.aspx', '/details.aspx')}">
          Details
        </a>
      </li>
      <li>
        <a href="{umbraco.library:Replace(umbraco.library:NiceUrl(@id), '.aspx', '/enquiry.aspx')}">
          Enquire</a>
      </li>
    </ul>
	</li>
</xsl:for-each>
</ul>

</xsl:template>

</xsl:stylesheet>

[/codesyntax]

This stylesheets find all products at the second  level (2 below homepage), then displays the product name with a link, and then displays 3 links below that to the same node, but explicitly defining which template to use. A simple example would look like:

[codesyntax lang="php"]

/{parentNode}/{nodeName}/{templateAlias}.aspx

[/codesyntax]

To acheive this, you need 3 templates for your Document type, the default template (overview), and 2 other templates. The alias of this template is important as it relates directly to the url used above, so make it search engine friendly and pretty short.

product_ss_2

The document type itself can then contain an array of fields used across the different templates.

product_ss_1

And each template can then use the specific subset of content from the node.

product_ss_3

This is a great way to improve the user experience for your content editors while keeping long reams of content pages out of your site.

Tags:

15 January 2010 ~ 2 Comments

Recursive Navigation in Umbraco

A recursive call in XSLT can be a bit confusing. It was for me. Here is a simple stylesheet that gets all nodes in this section (Usually a section in Umbraco sits underneath the Hompage, e.g. Content -> Homepage -> Section 1).

[codesyntax lang="xml"]

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet [
  <!ENTITY nbsp "&#x00A0;">
]>
<xsl:stylesheet
	version="1.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:msxml="urn:schemas-microsoft-com:xslt"
	xmlns:umbraco.library="urn:umbraco.library"
	exclude-result-prefixes="msxml umbraco.library">

  <xsl:output method="xml" omit-xml-declaration="yes" />

  <xsl:param name="currentPage"/>

  <xsl:param name="level" select="2"/>

  <xsl:template match="/">
    <xsl:call-template name="menu">
      <xsl:with-param name="level" select="$level"/>
    </xsl:call-template>
  </xsl:template>

  <xsl:template name="menu">
    <xsl:param name="level"/>

    <ul class="level_{@level}">
      <xsl:if test="count($currentPage/ancestor-or-self::node [@level=$level]/node [string(data [@alias='umbracoNaviHide']) != '1']) &gt; '0'">
        <xsl:for-each select="$currentPage/ancestor-or-self::node [@level=$level]/node [string(data [@alias='umbracoNaviHide']) != '1']">
          <li>
              <a href="{umbraco.library:NiceUrl(@id)}">
                <xsl:if test="$currentPage/@id = current()/@id">
                  <xsl:attribute name="class">Selected</xsl:attribute>
                </xsl:if>
                <xsl:value-of select="@nodeName"/>
              </a>
            <xsl:if test="count(current()/node [string(data [@alias='umbracoNaviHide']) != '1']) &gt; '0'">
              <xsl:call-template name="submenu">
                <xsl:with-param name="level" select="$level+1"/>
              </xsl:call-template>
            </xsl:if>
          </li>
        </xsl:for-each>
      </xsl:if>
    </ul>
  </xsl:template>

  <xsl:template name="submenu">
    <xsl:param name="level"/>

    <ul class="level_{@level}">
      <xsl:for-each select="current()/node [string(data [@alias='umbracoNaviHide']) != '1']">
        <li>
            <a href="{umbraco.library:NiceUrl(@id)}">
              <xsl:if test="$currentPage/@id = current()/@id">
                <xsl:attribute name="class">Selected</xsl:attribute>
              </xsl:if>
              <xsl:value-of select="@nodeName"/>
            </a>
          <xsl:if test="count(current()/node [string(data [@alias='umbracoNaviHide']) != '1']) &gt; '0'">
            <xsl:call-template name="submenu">
              <xsl:with-param name="level" select="$level+1"/>
            </xsl:call-template>
          </xsl:if>
        </li>
      </xsl:for-each>
    </ul>
  </xsl:template>

</xsl:stylesheet>

[/codesyntax]

This code also adds a class to the node you are currently visiting.

13 January 2010 ~ 0 Comments

Gmail Tip: Advanced Email Address

Here’s something I’ve just learned from the Gmail Tips page:

You actually get more address variations than just “yourusername@gmail.com,” all of which get delivered to you. You can put a plus (“+”) sign and any combination of words or numbers after your name, like changing hikingfan@gmail.com to hikingfan+mailinglists@gmail.com or hikingfan+junk@gmail.com. Then you can easily add a filter to label and/or archive messages sent to the variations.

This is brilliant for finding the source of your spam. If you sign up for an account with a website, and you’re unsure about their spam policy, then use something like yourusername+sourcewebsite@gmail.com. All the mail will still come to you, but if you start getting spammed to that address, then you know who gave it out. And it’s easy to filter mails from facebook, youtube etc (yourusername+facebook@gmail.com).

13 June 2009 ~ 0 Comments

Without the 98% shit, the other 2% wouldn’t be gold

An interesting tweet from Deane @gadgetopia (Gadgetopia Blog) earlier this week.

It got me thinking about the nature of the web, as a publishing media. It’s common knowledge that the internet is free, accessible and un-censored (to a level), meaning more voices, less coverups and what seems like a never ending stream of opinion and content.

The downside, of course, being the fact that a large amount of these voices and opinions are coming from complete ‘tards who really have nothing to say, but will try anyway. Yes, a gross stereotype and over-simplification of the situation.

Out of all the content on the web, there will always be the hater, troll inducing no sense …. shit.

But luckily the rest is gold, and the more shit there is the more value there is in the gold. Hmm, I have a feeling this post is part of the 98%. God bless the free web.

16 December 2008 ~ 1 Comment

The business of blogging

Bit of a pipe dream really. Money can be made from Blogging, some make a lot of money. But most don’t.

On that day more than 500,000 people hit my site—by far the biggest day I’d ever had—and through Google’s AdSense program I earned about a hundred bucks.

That’s not very inspiring. I seriously figured more people clicked on ads. I don’t click on ads, in fact I’ve managed to stick them in my blind spot on most sites I visit, so I guess I can’t assume everyone else does.

It would be great to be able to make money directly from blogging, but realistically, the only main value that can come from a blog is to be able to sell yourself as a writer/designer/developer or someone competent in your professional field. When it boils down to it, this value should be worth more to you than ad revenue. Building relationship with your readers, and converting them into paying clients should be the goal of a professional blogger. In fact a personal (?) bloggers goal should be to build relationships too.

One month I made €4.36 in google ads, and I was stoked. Still haven’t reached the €100 mark after almost 5 years writing BahFlafBurb, so have yet to actually get money (Major party when that cheque comes!!). I guess I’ll just have to put up with the enjoyment of having an outlet and some reliable readers and commenters.

My tip? Like other networking platforms, focus on quality content that sells you as a person/professional.

Tags: , ,