Wednesday, January 10, 2018

Umbraco Multilanguage Search - PoC

Objective

The title of this post might make this obvious, but just to be sure, I want to prove out the ability to run a multilingual site in Umbraco that supports language specific search. While I could easily just create different sites for each language and reference them by top level domains, the sites are going to share all the views and only the text content is going to be different. Different language sites would mean a lot of duplication. So I want to keep everything in one instance and use URLs to drive the language. I will quickly explain my multilingual setup, but the focus of this post will be focusing on the search setup.

Base Setup Assumptions

In this post, I'll walkthrough my Proof of Concept Umbraco multilingual site search implementation.  The key assumption being, how the multilingual site is configured. I believe this setup is standard for multilingual Umbraco sites, but just in case...
  • Create a root node for each language that your site supports
  • Right click each root node and set its 'Culture and Hostnames' appropriately
  • Implement a language switcher. For my PoC I just have a toggle link, but you may need a dropdown
  • Create some content pages with test content in each of the language roots

Setting Up the Indexes

There are plenty of options to understand and consider when setting up the Umbraco Examine indexes. I found some articles referring to Lucene language specific indexers, I made some attempts at using these but was not successful and ended up using the standard analyzer. I believe the analyzer will need further investigation and that my setup may run into language specific issues when implemented on a production site with real content.
Moving right along, in order to create indexes that are specific to the language site roots and don't include results from other language sites I had to set the indexes to point to the node roots using the node id. The node id is just a number you can get by logging into the Umbraco back office, selecting a node and clicking the properties tab. Below is my index setup in config/ExamineIndex.config
Next, I added the indexers and the searchers. These need to be added to the ExamineSettings.config in the ExamineIndexProviders and ExamineSearchProviders sections.
When I initially added the indexers, I was getting an error about the 'type' parameter being null. I added the indexTypes='Content' to get past the error, but this is another setting that I need to verify. The searchers will be referenced by the search page, they are configured as follows.

A Working Search

With the indexes, indexers and searcher created, it is now possible to test the indexes and searchers. Log into the Umbraco backoffice and navigate to the 'developer' menu (left hand nav) and select the 'Examine Management' tab. The new indexes and searchers should be visible here. There are several Umbraco events that trigger the indexes to refresh, I believe starting the site will do this? In any event if you need to refresh an index, select it by clicking its link, select 'Index info & tools' and click 'Rebuild Index'. A warning popup will be displayed because this operation can be hard on the infrastructure. If this is not an issue, click 'Ok' to proceed and the index will be rebuilt.
The searchers can be tested by selecting the searcher link and selecting the search tool. For my testing I stuck with the 'Text Search' as I believe it more closely resembled what the site search would be doing. At this point you should be able to search content that has been discovered by the indexer associated with this searcher. A text search here will display matching nodes, their ids data and search 'scores'. The score is Lucene's search ranking on how relevant a search result is to the entered search term. The search page in a site will most likely sort results based on the search score.
The searchers were returning results specific to the node roots which meant I had achieved language specific indexing and results. Success!

The Search Page

While the Umbraco search tools were useful to ensure the configuration was correct, I still wanted to build an actual search page to complete the PoC. The code for my simple search page is included below
This search page view works for all languages. In my PoC I have a search node item directly hanging off the site parent node, and I detect which language parent is the current parent by checking the node id. The production version of this page will likely make fewer assumptions, but for the PoC I had a working search page that returned only results for the selected language site.

Wednesday, December 20, 2017

Umbraco Approval Workflows

Umbraco Configuration

My venture into Umbraco approval workflows began as a proof of concept in a sandbox environment.  I have the approvals working 'on my machine' and have no idea how all of this will work in a production content authoring environment.  So far though, it looks like out-of-the-box Umbraco approval workflow is very simplistic, but will suffice in a smaller environment.  I did stumble across this Plumber project, and it might be promising.  If I dig into it, I'll be sure to write a post on my experience.
My Proof of concept sandbox is simple,

  • Create a VS2017 Asp.net Web Application (Note: do not create a 'site', create an 'application')
  • Import the UmbracoCMS nuget package (I pulled 7.7.7)
  • Run the Web Application and install Umbraco
  • Leave the starter pack installed, it's helpful to have some base templates and document types to test the workflow

User Setup

In order to create an approval workflow I needed some user accounts.  An author and an approver. One thing to note about these users is, your going to want to use real email addresses for their accounts. This is in order to see the email notifications. I suppose it would be feasible to implement an approval workflow without automated emails, but I think communication would break down pretty quickly without it.

Author User

I created the Author account and assigned them the 'Writers' group. There are 4 predefined user roles. Administrators, Editors, Translators and Writers. Writers do not have publish permissions and can only add and update content. You can also specify which Umbraco nodes to which writers have access.

Approver User

I created the approver user named 'Test Approver' with the 'Editor' role. This use role has access to add, edit and publish content.

SMTP

There are a lot of SMTP mail services out there.  For my experiment, I setup an AWS SES (Simple Email Service). The steps to do this are well documented here.  SMTP settings are in the Web.Config under 'mailSettings'.  When testing with telnet I could see that only port 587 would accept connections, so I added port="587" to the configuration.  Umbraco has a handy 'health check' feature for SMTP configuration. Log into Umbraco Back Office as admin and navigate to Developer->Health Check->Services.

Approval Flow

Once my SMTP was setup, I logged in as my Approver user and navigated to the Home content node. In order to receive notifications that authors have content ready for publishing, authors need to listen for notifications on parts of the content tree. For my test I opted for 'Send to Publish' notifications on the Home node which effectively covers all content items. As the approver user, right click on the Home node, select notifications and check 'Send to Publish'.
Ok, everything is setup for approvals.
I logged out as Approver and logged in as my Content Author User. Navigated to the 'About' content Item and updated the section title. The 'Save and publish' button now reads 'Save and send for approval'. So, I clicked it and got a 'Submitted and sent for approval confirmation message'. But no email...

530 Errors

At this point I am expecting that my approver would receive an email indicating an item is ready for publishing. I logged into AWS and checked SES for email activity. AWS was reporting send email count as 0. I did a telnet test to ensure that I could get to the AWS SMTP relay. This is a little tricky as telnet times out very quickly and it expects the credentials to be Base64 encoded. AWS also expects TLS connections so I didn't expect to get far with telnet. However, I was able to confirm that I could connect to AWS. I downloaded Wireshark and applied the 'smtp' display filter. Then I clicked the 'Save and send for approval' button again. Aha! In Wireshark I could see that AWS was reporting a 530 Authentication required error.  and 530 Must issue a STARTTLS command first.  A bit of internet searching indicated that I needed to turn on SSL.

I went to the Web.config SMTP settings and through intellisense discovered,
enableSSL="true"
Gave it another shot, restarted the site in Visual Studio and logged in as my author. Navigated to the about item and clicked 'Save and send'. Lo and behold, I receive an email notification with a link to the item requiring approval and publication. Success!!

Summary

It looks as though once the approver receives the request to review and publish, they are expected to log in, review or preview the page and click save and publish. I am not sure if there is a history of who did what, when or a revision history. My guess however, is that I have pretty much fully explored the Umbraco workflow as of version 7.7.7.

Wednesday, January 06, 2010

New Scrum Metric Proposal - "Hits and Misses"

If you want to compare Scrum Teams, compare them on who is achieving the Sprint Commitment (what I call "Hits and Misses"), not the Velocity.

Meaningful Metrics

One of the dangers with metrics, is that when we find a way to measure something, we tend to focus attention on it. Usually more attention than the metric is worth. So we like to oversimplify. What the "P/E ratio" say about the quality of a Company? What does "velocity" say about the quality of a Scrum Team? Both are pretty subjective numbers. The P/E ratio is tied to the stock price which is tied to the market's opinion of the value of the company, and markets are very emotionally driven. A Scrum team's velocity is tied to the User Story estimates which are subjective. The outcomes of comparing team velocities will most likely be negative, teams might inflate estimates or work overtime to increase their velocities.

Hits and Misses

I think it is very important to encourage the idea of Sprint Commitment. The team should take the Sprint Commitment very seriously. One way to encourage this is to measure how the team is succeeding in achieving the Sprint Commitment. I call this "Hits and Misses". Essentially, every Sprint Commitment achieved is counted as a "hit", every missed commitment is a "miss". If management is won't let go of the need to compare teams, I would give them the "Hits and Misses" metric instead of "Velocity". Of course there is a danger that teams will under commit. If this is happening, I might look into presenting both "Hits and Misses" and "Velocity". However, I rarely see teams under commit, the tendency is always to over commit.

Monday, October 19, 2009

Office Kanban - My Early Experiments

This works well, and it's fun, but a couple of things I've noticed...


You will need some Wall Space


My cube (yes, I work in a cube :p) does not have a lot of wall space. And what it does have is covered by this strange mesh made of recycled carpet or upholstery or shoes or something, so stickies don't really adhere to it. I almost used my window for the board, which would have worked great, but would have made me crane my neck to see, and I was worried might look a bit show-off-ish for people looking in from outside because they would see my sticky to solve the NP-complete travelling salesman problem in nLogN operations securely placed on the "done" side of the board - more about this in an upcoming post (ok, no - not really).


When lo, what did I see? My embedded whiteboard, easy to reach and visible from my computer, the perfect rectangular shape, I could write on it (not with the Jiffy markers though, really hard to get that cleaned off - trust me) and it had excellent sticky adherence. Good-bye whiteboard, hello Kanban board!


Small tasks, but not too small


I started out really small, like 20 stickies a day, it was crazy, like "read email", "clean coffee cup", "recycle TPS reports", "select new screen background". I think I was just reveling in the amazingness of the board, and stuff was just getting done. Whatever I put up there, like magic. Lots of tiny tasks was creating a lot of churn, I was spending too much time writing up stickies, and going to the stationery cabinet for more stickies, and stealing stickies from co-workers. I was also using the Jiffy markers A LOT and I think they were having an affect on me (like I became extra talkative and paranoid and really thirsty all the time).


So I made the tasks bigger, too big unfortunately. Like days, and days big. And this allowed me to get distracted. So, say, instead of writing an AD interface like my task said - I was adjusting my chair height, and then my desk height and then my lamp angle - and those things were NOT on the board. The Kanban "flow" was not happening. I could see it was time to right-size my tasks.


Somewhere in between nano-tasks and uber-tasks was right-sized tasks. How big are they? somewhere around 2. Hours that is. I like them around this big. Why? Well, at the end of the day I can look at the "done" column and say "That was a pretty good day, look at all those stickies in there". Smaller tasks keep the focus, and keep you coming back to the board to move them, which keeps you focused on the board, like a game of tag, a back and forth, a conversation, a flow...


A Great Topic of Conversation


My visitors like to talk about the board. Like "What have you got there? Is that the sticky board you were talking about? Do you have MS Project installed because it can manage tasks? No? Well put in a request to have it installed, and I'll help you get started with it. I think you'll really like Project. And you'll see you don't need this sticky board.".


Or, "Are you using those stickies to track your work, because we have a task tracking system you know. In fact we have two, and people are expecting you to keep that up to date. Well, it doesn't really matter if the task tracking system works for you or not, the important thing is that we ALL use it. It's written in our SOX compliance documentation. Where is that documentation? I don't know, and I don't think we're allowed to see it anyway.".


Here's a picture of it before someone orders the janitorial staff to remove it.


Monday, October 05, 2009

A Look at 10 iPhone Twitter Apps

A quick summary of 10 iPhone Twitter client applications I have been trying out. I have ordered them by preference, starting with my favorite. My analysis is heavily based on how I use Twitter. I've noted what I like and dislike about each app and added a few screen shots of each.

Prices are based on the Canadian iTunes store

Tweetie 2

Price: $2.99
Vendor: Atebits
Go to the Tweetie 2 site.

What's Nice

  • Wow, what a great product. Tweetie 2 is fast and stable like its predecessor, but offers a rich set of new features.
  • At $2.99 it is the cheapest of the full featured Twitter client apps.
  • Slick integration with follows back and follow cost.

  • Refresh your timeline - "pull down" on the timeline to refresh it. Great idea>
  • Following/Followers list management is very easy

What's Lame

  • I can't seem to get to the Public Timeline.
  • It replaces the old Tweetie, so it really cost me $3.99.


SimplyTweet

Price: $4.99
MotionObj
Go to the SimplyTweet site.

What's Nice

  • DM and Reply alert - This works like text messaging, so you could use SimplyTweet for texting too.
  • Conversations - Very nice. It can be easy to lose track of conversation threads and replies, SimplyTweet can show reply threads.
  • Bubble Tweets - I find bubbled tweets easier to read
  • Follows back - this feature is well integrated into the product and is displayed on the user profile
  • Nearby - You can specify the proximity of nearby tweets from 1 to 50 miles

What's Lame

  • Follower/Following Lists - I can't seem to display these lists.


Echofon

Price: $4.99
Naan Studio Inc
Go to the Echofon site.

What's Nice

  • I'm calling this the 'people finder' - from within the tweet window, you can pull up a list of people to choose from for shout-outs.

  • Links are auto-shortened with bit.ly. This just happens automatically once you tweet.
  • Profile detail shows if you are following someone and if they are following you back.
  • Following/Follower lists on profiles. My "can't live without" feature.
  • Trends - Go to current trends through the search feature.
  • Nearby Tweeters. Again through the search window

What's Lame

  • The Name - EchoFon? Is Naan Studio Inc a Swedish company? because 'Echofon' sounds like the name of an Ikea product.
  • I can't find the 'go to user' feature. But the search can be used to find people.


BirdFeed

Price: $4.99
Vendor: System Of Touch
Go to the BirdFeed site.

What's Nice

  • Bubble format and fast scrolling - I prefer the bubble format, even though it takes up more screen space.
  • Tied into external tools - Query tweeps agaist FollowCost, DoesFollow, Overlapr - could be better integrated into the app, but still cool.
  • Basics like ReTweets, DMs, Replies and favorites are quickly accessible and easy to find.

What's Lame

  • No URL Shortening - It either can't do URL shortening or I don't know how to find the feature. But when I paste a URL, it violates the 140 character limit and I can't post the tweet.
  • Profile Details - While I can look at profiles and see bio's and follower/following counts, I can't view followers/following lists. I tend to use these to follow new people.


Twittelator

Price: $4.99
StoneDesign
Go to the Twittelator site.

What's Nice

  • Horizontal aspect - You can view link web pages horizontally.
  • Paper clip links - Links in a Tweet include a paper clip icon which can be clicked to navigate to the link. Reduces some navigation overhead.
  • TwitPic display - thumbnails of photos are displayed in tweets.
  • Mute - This seems contradictory to the spirit of Twitter, but sometimes, maybe I don't want to hear @Alyssa_Milano's daily minutiae.
  • Groups and subgroups - I think these are specific to Twittelator. There are so many sites trying to provide this feature.
  • Link shortener - j.mp

What's Lame

  • Tweet actions menu (to retweet, reply, etc.) was slightly difficult to find. Tap above the tweet text to activate.
  • The Windows 3.1 style shading on text makes it very hard to read.
  • UX - This application just doesn't look that good. Might be time to hire a design and graphics expert.


Twitterrific

Price: Free (displays advertising)
IconFactory
Go to the Twitterrific site.

What's Nice

  • What a slick interface - shading and colouring looks great.
  • Feed display - I can collapse tweets to 3 different sizes
  • Access to the public timeline, which I only use to play with the translator
  • Translation - This works very well, especially on latin based languages. Thai, Malay not bad. Japanese? Not so good.

What's Lame

  • It makes "chirping" sounds when you refresh your feed. This is cute, like... once.
  • Ads. Not really intrusive, but I feel like I need to click them or they'll start charging for this app.


TweetDeck

Price: Free (Beta Version)
TweetDeck
Go to the TweetDeck site.

What's Nice

  • Columns - I love columns. I generally use columns to store searches on keywords and hash tags. With TweetDeck my searches are always available, and I can quickly scan them.
  • URL Shortening - there is a small icon of chain with 'shrinking' arrows on the tweet window to shorten URLs. Tweetdeck uses the bit.ly shortener.
  • Location Tweeting - Not my thing, but it's there.
  • TwitPic Photos - Take a shot, or choose one from your library. I like this feature.

What's Lame

  • Unstable - Tweetdeck crashes on a regular basis for me. Usually when I start it up, it'll just disappear. Annoying.
  • Column Maintenance - I have a super hard time closing columns, tapping the 'gear' in the top right corner is very challenging. This could just be me.
  • Column update messages - I have a lot of columns and when I start Tweetdeck I get a load of intrusive messages indicating how many new tweets have been added to each column.



Tweetie (1)

Price: No longer available
AteBits
Go to the Tweetie site.

What's Nice

  • Fast - Tweetie loads fast, and scrolls nicely. The line display lets you move through tweets like a rocket.
  • My Profile - I think every Twitter app should have strong profile maintenance. Tweetie makes it easy to view your bio, followers/following lists and time-line.
  • Nearby - You can see who's tweeting 'nearby' if you allow Tweetie to broadcast your location. Again, not my thing, but still cool.

  • Trends and Public Timeline - I generally avoid the trending topics (mega spamage). I think being able to follow trends is an important part of Twitter and it's good that Tweetie offers this.

What's Lame

  • Follows me? I can get to my following list, but there's something I like about knowing if someone I'm following is following me back. Tweetie doesn't have this feature.



Twitter Pro

Price: $0.99
iApp Ventures LLC
Web Site?

What's Nice

  • ummmm? Well... it has a nice icon.

What's Lame

  • Scrolling is very jumpy - probably the most irritating feature.
  • Can't view profiles, or add users.
  • It costs a dollar - I can't believe this app got through testing?
  • What is this app even called? iTwitter Pro or Twitter Pro?

Tweeter

Price: Free
Takuma Mori

What's Nice

  • Simple. It works as advertised - all you can do is tweet. That's it.

What's Lame

  • Well, this app doesn't really do much.