Goshaky Weblogs

Weblogs for goshaky.com

Better specified than sorry

Lars Trieloff's Collaboration Weblog | General | Thursday August 07, 2008 | By lars

Long time no posts here, thanks to Mento I have switched very much to link blogging, but if you happen to be interested in the stuff I write, feel free to follow me at FriendFeed.

Today I learnt an interesting fact about interaction with developers: if you as a product manager want a feature implemented, do not talk to the developer first, write a specification and a mockup first. If you skip writing the specification first (which can and will be changed afterwards) things can turn against you.

In our new web content management product we will have quite powerful support for tagging (that can be used in a folksonomy-like way, as categories, as a taxonomy and even as a thesaurus, as I said, quite powerful). I did specify the conceptual model, the content model, created some mockups (for another product that will use the tagging feature) and discussed with the developer how to implement the tagging user interface.

Together we refined the original idea I had for the user interface, given my general experience what works in AJAX web UI, and his more recent experience with the particular widget framework we are using, examined a set of model application that already implemented some of the metaphors used and came up with a simple, but powerful (and extensible) solution. I knew what the developer would do, the developer knew what he should do, everything was fine and I rushed to the next item in my busy schedule.

Then the unpredictable happened: Schedules were rearranged, priorities shifted, the developer switched to another task, went to vacation, schedules were rearranged again, priorities shifted again, another developer picked up - and knew nothing about our previous discussion and our common mental specification, so he started coming up with his own solution, because he could not use the specification I skipped writing, ran into problems and I had to troubleshoot.

Needless to say, the troubleshooting took more time than writing a helpful specification would have taken, and a written specification would have helped our initial concept discussion as I had to explain less and we could work in a more well-structured way.

Lesson learnt: better specify than sorry!

Fluid userstyle for FriendFeed take two

Lars Trieloff's Collaboration Weblog | General | Thursday July 24, 2008 | By lars

The topic of user styles for Fluid came up on FriendFeed recently and Alexander Kucera asked me to share my userstyle I am using for FriendFeed. Here you are:

The result looks like this:

http://weblogs.goshaky.com/weblogs/lars/resource/friendfeedblack.png

The black background is inspired by Twitteriffic and allows for using a semi-transparent window, which does not look as good with a white background. Additionally I stripped everything from the display that is not feed, including the sidebar, the share-dialog, the friendfeed logo and so on. I am using a dark grey logo for the Fluid application that fits the background of the SSB window.

http://weblogs.goshaky.com/weblogs/lars/resource/friendfeedicon.png

Speaking at Jazoon next week

Lars Trieloff's Collaboration Weblog | General | Thursday June 19, 2008 | By lars

If you are following dev.day.com you have probably seen it already: I will speak next Wednesday at Jazoon conference in Zürich about REST, AJAX and WebForms 2.0. If you are interested in building interactive and standards-compliant web sites and web applications, I would be happy to meet you there.

Btw. I originally planned to call this post "Ten reasons why you will hate not being in Zürich next week", but I decided one uber-catchy headline per week is enough.

Seven reasons why FriendFeed sucks

Lars Trieloff's Collaboration Weblog | General | Sunday June 15, 2008 | By lars

Well, FriendFeed does not really suck, it has managed to convert me from a naysayer to fanboy (I think writing userscripts and user-css qualifies me as a fanboy) by giving me a communication platform that allows me to interact with my peers, but now that I have your attention, I would like to tell you five things where FriendFeed actually needs improvements. If you are on FriendFeed, feel free to like or comment this post to bring it to the attention of FriendFeed's product managers.

  1. no feed for daily, weekly and monthly toplinks: Friendfeed introduced a new feature, daily toplinks only few days ago and while it is insanely cool to have use your FriendFeed contacts as a personal attention filter and aggregator, I do not like the fact that there is no Atom or RSS feed for it. Come on, this thing is called FriendFeed, so you must be aware that there is a thing called feeds in the interwebs.
  2. no link-based aggregation: if one person posts a link twice in separate services, for instance directly on FriendFeed via Mento and later to del.icio.us, it will show up twice in the Feed, leading to clutter and noise (not the smart noise we are looking for at FriendFeed) in the feed and finally to a fragmentation of the discussion, as I have to chose which entry I like or comment. As a second example, if someone in my network posts a link that someone else posted as well, we have the same situation: two links, two discussions, two sets of likes. An easy solution would be a add a "also posted at ..., also posted by ..." line next to the list of people that liked a post. This way you could reduce clutter and join conversations that spread across multiple postings.
  3. bad recommendations for contacts: FriendFeed is a superb implementation of the "Activity feed" pattern of social networking, but its social networking capabilities are mediocre at best. Example number one: FriendFeed's recommended friends dialog suggests that I should subscribe to Dave Winer, Jason Calacanis, Leo Laporte, Loic Le Meur, Michael Arrington, Robert Scoble, Steve Rubel and some of the FriendFeed founders. While I think they are surely great people and I could learn a lot from them, it is too much information to handle (I tried to follow these suggestions, and removed them one by one later). Additionally as soon as they write something that is interesting for someone in my network, it will appear in my feed as well, which is a great feature. The only problem is: the recommended friends page does not make any sense if it is just a list of the top-users at FriendFeed. What I need are reasons to subscribe like: many of my important (measured in likes and comments) friends find them important (measured in likes and comments) as well.
  4. not notifying me when friends join: I wish everyone I know would be on FriendFeed. Unfortunately this will not happen and I will also not send an email requesting them to join yet another social network, because I know how distracting this would be for most of my contacts. However, I wish there were tools to make it a bit easier for me: If someone joins who has an e-mail address that was found in my address book before, please inform me. If someone adds a feed or a service that matches an imaginary friend that I created, please inform me. If you can read my address book, why can't you offer me to automatically create imaginary friends for my flickr, twitter, etc. contacts?
  5. bad Facebook integration: Like it or not, Facebook is popular. But FriendFeed's Facebook application is a joke. It is simply FriendFeed in an IFrame, but I cannot see which of my Facebook friends are on FriendFeed, I cannot invite them as it is possible with other social applications that offer Facebook integration. Probably the best example for this is dopplr.com which is a champion of social network interoperability. Another point in case that FriendFeed's social networking capabilities need some work.
  6. bad customer service at getsatisfaction.com: FriendFeed managed to move conversations from the blog comments to FriendFeed. Some bloggers objected, but that's the way it works. Conversations move and if you would like to take part in the conversation, you have to follow. The best place for customer care (and conversations with users of your product) today is getsatisfaction.com. There is a room for ~FriendFeed at getsatisfaction.com, but FriendFeed is not listening. As I am sure these guys know that they have to take part in the conversation where it happens, and I am also sure they know that customer service is part of the product design, it looks like they do not want to listen, because it does not matter to them.
  7. no search for URLs: Early adopters and developers are craving to integrate FriendFeed with their tools and services they use. The main integration point, the most important social object is content and content is identified by an URL in the web, yet FriendFeed's advanced search (and API) does not allow searches for URLs. This means, people looking to integrate FriendFeed with their blogs, using FriendFeed from Yahoo! Pipes or creating Mashups with FriendFeed are left out in the rain.
These are the most important changes and improvements I am looking forward at FriendFeed, not the addition of six (or sixty) more social networks. Improve the features you already have, improve search, improve social networking, improve aggregation and improve integration and I will be happy.

Black Friendfeed Widget with Fluid

Lars Trieloff's Collaboration Weblog | General | Thursday May 15, 2008 | By lars

My Favorite SSB application Fluid got an update some days ago that allows you to fiddle with some window settings, namely the window opacity and the window decoration and the window placement (normal, above all windows, below all windows, above the dashboard). With the window decoration comes a black-window style with dark window borders and scroll bars that looks very cool. But using this style with Friendfeed for which I provided a custom userscript before yielded unpleasant results as the white background of friendfeed and the dark window borders do not match.

So I modified the user CSS file that is embedded in every Fluid SSB application (Right-click the application icon in Finder, select "Show package contents", browse to Contents/Resources) called default.css to give me a black background with white text and links (and I removed all the sidebar and clutter to make it a minimal interface)

The result looks like that and gives specialized desktop applications such as Twhirl or AlertThingy a run for it's money.

http://weblogs.goshaky.com/weblogs/lars/resource/friendfeed-hud.png

See something cool, learn something new, win something shiny

Lars Trieloff's Collaboration Weblog | General | Wednesday May 14, 2008 | By lars

I went to one of our customers today to demo our Digital Asset Management System (it seems to be DAM-week, see also my presentation at the Henry Stewart Show) and one of the projects managers told me that he started playing around with Sling and how impressed he was with the power that is hidden in Sling and JCR and how easy it was to build something interesting. So, if you would like to see something cool, just as he did, download CRX Quickstart Edition, which contains CRX (a commerial grade content repository) and Sling (a web application framework built around the concepts of JCR, REST, AJAX, OSGi and Scripting) and take a look at Michael Marth's screencast first steps with CRX Quickstart. (This was the see something cool part)

Having seen something cool, it is time to learn something new, namely building applications using Sling and JCR and CRX Quickstart is a great way of doing to. Aside to the aforementioned screencast, there is a second one: the serverside.com in 15 minutes and the rest of the CRX Quickstart documentation we have assembled.

If you now want to win something shiny, namely a brand new MacBook Pro, apply your newly won knowledge and take part in the Day JCR Cup '08, which is one of the reasons we released CRX Quickstart. We want more developers to learn something new, more developers to build something cool and thought that winning something shiny might be a good incentive to do so.

links for 2008-05-09

walking the way - startup, business & life | General | Thursday May 08, 2008 | By saar

Teresa's DocBook vs. DITA article

Lars Trieloff's Collaboration Weblog | General | Saturday May 03, 2008 | By lars

Scott Hudson points to DocBook versus DITA: Will the Real Standard Please Stand Up? (slides here at dev.day.com) wriiten by my colleague Teresa Mulvihill. Scott points out that DocBook can be used for single-sourcing out of the box, thanks to support for XInclude and I would like to add that we at Day are currently in the process of translating our documentation to DocBook (not DITA) and first results are looking very promising. We are using Wilfried Springer's DocBook Maven Plugin as the driver of the processing toolchain, which is powerful, because we can integrate documentation development tightly with software development, sharing the same repository, using the same branches and tags and using the same build process.

Creating Web Products: Do's and Don'ts

Lars Trieloff's Collaboration Weblog | General | Friday May 02, 2008 | By lars

Normally I do not use my blog as a linkdump, I have http://del.icio.us/trieloff, http://twitter.com/trieloff, http://www.friendfeed.com/trieloff and Mento for this, but today I am making an exception and the whole point of my post is read this blog post: Seven Do’s And Three Don’ts For Creating New Web Products. These tips are some essential rules every entrepreneur and product manager should learn by heart. You have to create value and find a way of sharing the created value with your customers (making profit) if you fail either of those goals, find a better idea.

OpenSearch plugin for Apache JIRA

Alexander Klimetschek's Blog | General | Wednesday April 30, 2008 | By alexkli

If you are an Apache user or developer and find yourself searching through the JIRA at the ASF very often, it is useful to have the search built-in right into your browser. The solution is to install an OpenSearch plugin that sends the right search query to Apache's JIRA. The following Javascript link will just do that:

Install OpenSearch plugin

For the curious, look at the OpenSearch XML file.

You can now enter your favorite search terms. The search will be the same as the "Quick Search" in the upper right of the JIRA interface. Try for example mod_proxy, "JCR persistence" (which will detect the project shortcut "JCR" and search only the respective Jackrabbit project) or JCR-123 (it will detect issue identifiers and jump right to the issue).

Fluid userscript for Friendfeed and Mento

Lars Trieloff's Collaboration Weblog | General | Friday April 25, 2008 | By lars

Being alone this evening I had the opportunity to spend some time programming interesting stuff. As I am currently researching lifestreaming applications, in particular Friendfeed, which is an excellent implementation of this concept I wrote a plugin for Blogbridge that will automatically send "pinned" entries to Friendfeed, similar to "shared items" in Google reader. Secondly, I got an invite to Mento, a social link sharing application (not bookmarking) that is focused around finding interesting links and sending them to friends, services (like Twitter, Friendfeed or del.icio.us/trieloff) or channels, which lead to my third activity: Integrating Friendfeed and Mento.

As Friendfeed is giving me lots of input from interesting people, I would like to save some links directly from the Friendfeed interface. Additionally, I am using Fluid in order to create a site-specific browser (SSB) for Friendfeed, basically a small desktop application that does nothing but running Friendfeed. Aside from this interesting concept, which is also being implemented by Mozilla Prism for instance, Fluid is currently the best implementation of this concept. Todd, the developer is working hard to integrate it with Mac OS X and make it a seamless user experience and he is adding easy programmability as one of the core aspects to SSBs. With Fluid it is possible to run userscripts that not only change the appearance and behavior of the website, these userscripts are also able to invoke advanced desktop integration features like adding an "unread items" badge to the dock item or display Growl notifications.

The small user script you find below does two things: on the one hand it adds a "Share" button to all links posted on Friendfeed. Clicking the "Share" button will invoke the Mento bookmarklet which allows you to send the link to friends and colleagues. On the other hand, the script will track which links have been added to the feed while the Friendfeed window has been in the background. For each new, unread item, it will increase the counter in the badge and display a Growl notification.

Sharing a link on Mento
Sharing a link on Mento

Growl showing an update Notification
Growl showing an update notification. (In the background there is Dashcode, the IDE I have been using to write this userscript)

One unread item
There is one unread item waiting for me in Friendfeed.

The user script that accomplishes this can be found here. You are free to use and modify and redistribute it of course.

// ==UserScript==
// @name        Share With Mento
// @namespace   http://fluidapp.com
// @description Adds a Share link to links listed on friendfeed.
// @include     *
// @author      Lars Trieloff http://weblogs.goshaky.com/weblogs/lars
// ==/UserScript==

(function () {
  var knownclusters = {};
  var unknownclusters = 0;

  function updateMento() {
    refreshMento(true);
  }
  
  function initMento() {
    refreshMento(false);
  }
  
  function refreshMento(background) {
    var infos = document.getElementsByClassName("info");
    for (var i=0;i<infos.length;i++) {
      var link = infos[i].previousSibling.previousSibling.firstChild;
      var parent = infos[i].parentNode.parentNode.parentNode.parentNode;
      var eventid = parent.getAttribute("eid");
      var header = 
      $(parent).find(".summary").get(0).innerHTML.replace(/<(.|\n)+?>/g, "");
      var description = 
      infos[i].previousSibling.previousSibling.innerHTML.replace(/<(.|\n)+?>/g, "");
      
      if (eventid in knownclusters) {
        
      } else {
        unknownclusters++;
        knownclusters[eventid] = "a";
        if (background) {
          window.fluid.showGrowlNotification({
            title: header, 
            description: description, 
            priority: 1, 
            sticky: false,
            identifier: eventid,
          });
        }
        if (link.href) {
        //alert(link.innerHTML);
        
        infos[i].innerHTML = infos[i].innerHTML + " - <a href=\"javascript:(" +
        "function(){o='location=0,width=515,height=375,resizable=1';u='http:" + 
        "//www.mento.info/qp/#v=bk&vn=1&';w=window;d=w.top.document;e=encode" +
        "URIComponent;u+='title='+'"+encodeURIComponent(link.innerHTML)+"'+'" +
        "&url='+'"+encodeURIComponent(link.href)+"'+'&via='+'"
        +encodeURIComponent("http://friendfeed.com/e/"
        +parent.getAttribute("eid"))+"';var%20mw=w.open(u,'_blank',o);if(mw)" +
        "setTimeout(function(){mw.focus()},%20250);else{alert('A%20popup%20b" + 
        "locker%20got%20in%20the%20way.%20Hold%20the%20CTRL%20key%20and%20tr" +
        "y%20again.');}})();\">Share";
        }
      }
      if (background) {
        if (unknownclusters==0) {
          window.fluid.dockBadge = "";
        } else {
          window.fluid.dockBadge = unknownclusters;
        }
      } else {
        window.fluid.dockBadge = "";
        unknownclusters = 0;
      }
      
    }
  }

  function jquery_wait() {
    
    if(typeof window.jQuery == 'undefined') { 
      window.setTimeout(jquery_wait,100); 
    }
    else {
      $ = window.jQuery; initMento();
      window.setInterval(updateMento, 1000); 
    }
  }

    if (window.fluid) {
    window.onfocus = initMento;
    //initMento(true);
    jquery_wait();
    }
})();

No more daily link posting

Lars Trieloff's Collaboration Weblog | General | Friday April 25, 2008 | By lars

I disabled the daily del.icio.us link posting, because there are better ways keeping up to date with my postings: join my del.icio.us network or follow me at Friendfeed.

links for 2008-04-20

Alexander Klimetschek's Blog | General | Sunday April 20, 2008 | By alexkli

links for 2008-04-19

Lars Trieloff's Collaboration Weblog | General | Friday April 18, 2008 | By lars

Bash history

Alexander Klimetschek's Blog | General | Thursday April 17, 2008 | By alexkli

history|awk '{a[$2]++} END{for(i in a){printf "%5d\t%s \n",a[i],i}}'|sort -rn|head
  118	svn 
91 curl
63 find
42 ls
28 cd
20 mate
15 rm
10 diff
8 vim
7 tail

Sorry, I had to follow the hype ;-) But this list changes every day anyway - the top command "svn" for example is there because I did a lot of "svn st" piping to "grep" before a large checkin.

links for 2008-04-17

Lars Trieloff's Collaboration Weblog | General | Wednesday April 16, 2008 | By lars

SVN: Commit replaced directories

Alexander Klimetschek's Blog | General | Wednesday April 16, 2008 | By alexkli

Problem

Although there is the Mindquarry Desktop Client, which stores the Subversion metadata (hence the .svn subdirectories) not inside the working directory, I still very much use the standard SVN command line client. Which sometimes brings up the following problem: if a tool replaces an entire directory - examples are Apple Keynote or Eclipse re-compiling code and replacing the classes folder (yes, I know, you shouldn't do it, but sometimes you just have to put it under version control...) - well, if it replaces the directory, the .svn subfolder is lost and you get this ugly status message:

~   subfolder

Which means subversion knows about it (the current folder contains an entry like "directory: subfolder"), but the directory itself is not a working directory (no .svn folder present in subfolder). That status is called "~ replaced"; unfortunately the description in the SVN manual is incomplete: "Item is versioned as a directory, but has been replaced by a file, or vice versa." It should better read: "Item is versioned as a directory, but has been replaced by a file with the same name, or vice versa. It could also indicate that it is versioned as a directory, but has been replaced by a directory of the same name without the important .svn folder inside."

Solution

It's normally a three step process on a standard UNIX command line:

mv subfolder subfolder-temp
svn up subfolder
cp -R subfolder-temp/* subfolder

Note that subfolder-temp is just a temporary name which must not exist yet. The important step is the copy with -R and *, which under UNIX means to copy the tree below subfolder-temp into the existing tree under subfolder. This is technically a simple forward merge. And here is the tricky part: it works for added and modified files, but not for deleted files. You will have to manually delete them. To find out which files are actually deleted, you can use the diff command in recursive and brief mode:

diff -rq subfolder subfolder-temp

For each file it says "Only in subfolder/: foobar", you can delete it:

svn del subfolder/foobar

To make sure everything is correct now, check the status:

svn st subfolder

You should probably also run your (test) code on this "rebuilt" directory or check the files with whatever program is using them. If everything is ok, you can commit it and throw away the temporary copy:

svn ci subfolder
rm -rf subfolder-temp

Quite a long workaround, but somewhat systematic. It's probably possible to write a script that does it, but when I think about it, I would probably never trust the script to not accidentally throw away the local changes ;-).

Update: Martin Probst has such a script (called svnrecover), but it works in a different fashion.

My Weblog integrates FriendFeed now

Lars Trieloff's Collaboration Weblog | General | Sunday April 13, 2008 | By lars

I created a small mashup that combines my weblog with the Friendfeed API. The first thing I did was replacing my Planet-generated Activity feed and activity index calculation with one based on the Friendfeed JSON API. The JSON provided by Friendfeed even allowed me to add additional information, so I am highlighting every piece of activity that has been commented or liked in bold type.

http://weblogs.goshaky.com/weblogs/lars/resource/Picture%209.png

Additionally, I integrated the Friendfeed comment API with the footer of every weblog post. What I am doing here is using the search API to find the post you are watching on Friendfeed and listing the number of comments and likes in the footer of the blog. Given the ability of the Friendfeed API of specifing callback functions, this was really a piece of cake to implement.

http://weblogs.goshaky.com/weblogs/lars/resource/Picture%2010.png

Your attention is worth USD .34 and for sale

Lars Trieloff's Collaboration Weblog | General | Sunday April 13, 2008 | By lars

Andrew Baron, founder of Rocketboom is selling his Twitter account on eBay. With the current bid of 510 USD, each of his 1481 followers is worth .34 USD to the buyer. That is little more than you would pay for a click in Google Ads, which bears some interesting implications for everbody interested in monetizing Twitter attention at a large scale (e.g. Twitter). So if you would find a way of grabbing the attention of all twitter users (TwitDir tracks almost a million twitter users), this collective attention would be worth 330435 USD, which is much less than the 21 million valuation estimated by Techcrunch.

Turning the calculation around, and taking this 21.88 USD per user valuation, however Andrew Baron's account would be worth 32411 USD.

RescueTime for the Console

Lars Trieloff's Collaboration Weblog | General | Sunday April 13, 2008 | By lars

In some way, RescueTime can be seen as the graphical variant of this meme.

 $ history|awk '{a[$2]++} END{for(i in a){printf "%5d\t%s \n",a[i],i}}'|sort -rn|head
   93	cd 
   80	sudo 
   71	ls 
   29	rm 
   17	ssh 
   16	less 
   14	export 
   11	mvn 
   10	./autogen.sh 
    9	tar 

[via Bill]

links for 2008-04-12

Lars Trieloff's Collaboration Weblog | General | Friday April 11, 2008 | By lars

links for 2008-04-11

Alexander Klimetschek's Blog | General | Friday April 11, 2008 | By alexkli

links for 2008-04-09

Lars Trieloff's Collaboration Weblog | General | Tuesday April 08, 2008 | By lars

links for 2008-04-07

Lars Trieloff's Collaboration Weblog | General | Sunday April 06, 2008 | By lars


Combined RSS feed for site. Right-click, copy link and paste into your newsfeed reader

Search for blogs