Archive for the ‘General Stuff’ Category

One Month Germany (or so)

All right, I got 10 minutes to write about 1 month (a bit less) in Germany.

Initially we’ve been shocked a bit, our arrival followed one really hot sunny day and then 5 or 6 rainy days. With rainy I mean, it poured, almost continuously. So that was a bummer.

What followed were a few really enjoyable days. Our container arrived a bit late and so we had time to kill and nothing to put together (meaning furniture). We met our parents, became members of the Zoo and really appreciated the excellent public transport. S-Bahn, U-Bahn, Tram and Bus took us wherever we wanted and the kids enjoyed that a lot, too.

We now finally got our container with the household, car is still being modified… the container truck driver from the UK was a bit a shock. Easily the most horrible person I have ever met in my life. He accused me of telling him to not bring his buddies to unload the truck, meaning he, my neighbor an myself did that job. When he left, we still had a rough 70 pakets unpacked in the house, so we spent a few days unpacking, sorting, putting together furniture. That was not too easy with the kids at home, but we made it.

Now we await our car, finally, and then we seek a normal, ordered life again from September on. Work, kids at kindergarten, etc. Call it normal, but for me and my wife it will be refreshing as we now spent camping (no furniture, no car) for more than 2 months. It’s time this is over :-)

It’s over :-)

It’s almost three years ago that my family and me arrived in the states and in 16 days we’ll fly back home to Munich, Bavaria, again. I worked for Yahoo! Inc. right in the center of the Silicon Valley and and their headquarters in Sunnyvale, CA. I’ve done backend Java development with a lot of Spring, a lot of web-based frontends, a lot of mashups and integration. I worked on admin scripts written in Groovy, on quick and dirty prototypes to showcase ideas, I fixed bugs. HTML5, CSS3, JavaScript, AJAX, Java, Groovy, Grails, Android, MySql, Tomcat, etc. are the buzzwords and technologies that come to my mind.

Times were sometimes challenging, sometimes boring, sometimes exciting… we went through a few interesting phases I guess. Yahoo! went through a lot of layoffs, right-sized it’s business and is just getting on track to kick ass again. Overall it was an awesome experience and I’d do it again, believe me!

I was not alone here, my family was with me. I think we *really* arrived here in California. Kids went to preschool and pre-kindergarten, my wife went to college, both me and my wife dialed 911 and I’ve been to an emergency room with one of the kids twice, including a funky ride in a paramedics van up to Stanford. I think we really lived here, we did not just work here. We lived here, relatives died back home and we could not visit that fast.

We visited the great places a lot of people dream of back in Munich. If they ever get to California, they’ll come during the summer months when there are way to many tourists everywhere. We enjoyed going to Lake Tahoe off-peak, snowboarding during the final days towards summer at Squaw Valley or visiting beaches around Santa Cruz that were totally empty and looked like pictures out of a travel magazine.

We had a great time, but we’re all ready to come to Munich, again, too. These days, a strange feeling surrounds us. It’s the feeling of finally coming home again, which is good and full of excitement, and the feeling of leaving this place that treated us well, which makes us a bit sad.

What I’ll personally miss most is the people here and the way they approach anything new. For an IT guy, being surrounded by people working at Yahoo!, Google, Twitter, Facebook and the tons of startups that exist here, too, is something you just have to miss. You can visit a different user group for whatever technology you’re interested any week – try that in Munich. Also, the Bay Area is a melting pot for all kind of cultures. This is probably one of the rare places multi-cultural integration really works. I’d say our minds were definitely broadened and are more willing to accept different ideas and cultures now that we lived here.

But we’re ready for Munich, too. As I am leaving Yahoo! and I am ready for something new, I am actively looking into Android and I am really fascinated by this amazing mobile platform. The picture on the left shows the Android riding a skateboard, which is also something we all look forward to: public transport :-) It might sound limiting to a lot of people in the US, but I can’t wait to hop on an S-Bahn that takes me downtown in about 10 minutes – downtown to Marienplatz, where I’ll likely enjoy a real Brezn and a real coffee in a real mug in a real cafe. We’ll leave the car in the garage all week and we’ll use it for trips over the weekend. All things we need for our daily life – groceries and other shops, kindergarten, public transport including munich airport – is reachable within 5-10 minutes by foot. I call that a good thing.

My wife will have the chance to begin working again, the kids will go to a German ‘kindergarten’ and we’ll pay a fraction of what we paid in the US for child care. Food will also be cheaper, but eating out will be more expensive. For electronics, some recent comparisons are not at all that bad, prices in Germany are roughly comparable to the US when it comes to the latest unlocked/non-contract Android phones for example.

Comparing all these things is really hard. For health care for example, we’ve always been treated well in the US. But that’s of course because Yahoo! has some excellent benefits. Knowing that a lot of Americans don’t have that makes me appreciate the ‘socialised medicine’ and the regulated health care system in Germany. Even though I’ll be paying more for health care, it feels good to know that nobody is left behind when it comes to these essential things in life.

16 days. I’m hacking some Android code whenever I have some time to get more experience, go to Android UG meetings and add a lot of people to my LinkedIn, Facebook and Twitter follow lists. With my family we’re driving around, visiting places we know and love. We meet friends, many for the last time. We watch Netflix Streaming, the single media service I’ll truly miss (ok, I’ll also miss Google Voice…) .

Bye bye California.

Oh, and I’m back in September for JavaOne 2010 :-)

Am I really doing a Project 365…? Oh, yes!

I am still shooting, 110 days straight now. Unbelievable, at least for me, but still shooting. For most of the days, it is a lot of fun, but there are also days which are crazy. If you know your shooting for the day is off 5 mins before, you start getting a bit angry, I tell you :-)  So far I was able to quickly find someone else and I just hope this luck will go on.

The most amazing thing is the networking. I know I mentioned this before, but it is just really amazing and it totally surprised me. I have the pleasure to meet one new person a day, that is a pretty damn good addition to my social network I would say.

Oh, and the Nullzeitgenerator-Blog wrote about my project, I am a VIP :-) I hope I can take a portrait of Helene back in Germany, too!

Still taking photos…

I am taking a portrait each day since 55 days. It has been an extremely rewarding experience, both from a technical photographic point of view and from an networking point of view (55 days = close to 55 people I spent quality time with, most of them newfriends). I begin to realize a Project 365 is only partially about taking pictures. Especially when doing portraits of others, I think the whole post-shooting process, backing up, managing multiple laptops and keeping a calendar, etc. is another challenge you have to master. Partially for myself to reflect on what I learned, I compiled this list of ‘experiences’ and tipps:

  • I promise my subjects all RAW files and JPEG exports. Initially I shot in JPEG and then used a memory stick to transfer the images onto their laptop. This is a really time -consuming process, as you first have to transfer the images onto your laptop, then to the memory stick and later again to their laptop. Sounds like just a few minutes each day, but it gets boring. Also when doing RAW, it means you have to visit them later on, but what if they work in different building?  So you chat and email to meet but all too often you just waste a lot of time delivering the images.
    Solution: burn DVDs. After importing the raw files and converting them all to JPEG using the preset white balance from camera, I just burn a DVD each day. I deposit the DVD on my desk for people to pick up or carry them around for a few days in case I see them often.
  • After you’re done with a shooting, you probably have a couple hundred RAW files. Conversion to JPEG is pretty time-consuming, but luckily you don’t have to watch and see it happening.
    Solution: I make a a trade off – while I could optimize each image for white balance, I just take the preset white balance. I take a new preset white balance before each shooting and just keep it for exporting to JPEG later. The results are good enough and I would not have the time otherwise. Exporting to JPEG is a background process using ufraw_batch – a unix command line tool which is quite fast. It runs in the background while I work or am in a meeting.
  • Managing the pipeline of shootings is also a crazy task. I am booked – in theory – till mid March now. I often ask my subjecs to refer me to others and that works amazingly well. It still happens some people drop spontaneously, what then?
    Solution: Having a calendar with names and email addresses of future shootings is critical.  I also remind people 3-4 times before each shooting so the appointment is really set in stone in their calendars. For the actual shooting, I check out poses on Flickr and sometimes print or scribble them down in a small notebook I carry. This helps to get an easy shot and leaves more room to explore each day.

Getting late… more the next days!

Project 365: The first 11 days


11 days have passed since I started Project 365 with my own special goal: focusing on portaits. I failed miserably on day one, but since then things went quite smoothly. I learned a couple of technical lessons, like choosing a higer ISO to be able to have high shutter speeds (better noisy than blurry…), finding great window spots (north facing is best) or choosing the right distance between your subject and the background. I think a lot of these skills really develop over time, so my recipe is really to continue doing Project 365 to become better and better.

Here’s a couple of things I learned from approaching people:

  • Create your own Moo cards, choose a prebuilt design that just looks nice and have a couple of cards at hand wherever you are. First thing I do whenever I found some interesting face: give him/her the card. Then talk.
  • Wear serious clothing… really. Especially at the beginning, when you might not be too confident in approaching people, it makes a difference.
  • Choose people that interest you. Seriously… you might be tempted to just ask anyone, but it will likely fail. You’ll know best how to talk to people that interest you. And there might be a special link between you and them.
  • Have your camera around your neck when you approach people. Not in your bag. No one will buy the ‘photographer’ otherwise.
  • To look for people, go to public places. A farmer market is a great place, the people that go there are open-minded and often way more interesting that at a Safeway. Plus, it’s outside… on a cloudy day, you have perfect light.

These are just a couple of things, I am sure I can add more soon.

groovytweets update 11

groovytweets v86

Link tracking and ranking

Finally! I have been busy checking out all kinds of things and I finally spent that other hour to finish one mingeling feature in groovytweets: Link tracking and ranking.

It is a notable feature, as the newsworthyness of tweets really lies in the links that people tweet. For groovytweets, of course, these are just the links with a groovy context and out of the groovy community that we trust.

One important aspect of link tracking that I noticed early on was that trackign the bit.ly links itself does not make sense. Too many people follow the bit.ly (and others) redirects, then convert the same target url into another short url and here we go: we have to links. So link tracking in groovytweets is based on the final destination a short link takes you to… groovytweets resolves links and follows the Location: headers till the end.

And as we are on twitter, the link count itself is not enough. Someone once said, that information older than 48hrs is practically useless for the Twitter-generation. The link ranking takes the freshness of a link into account and reduces the overall ranking score over time. Older links will automatically loose a lot of ranking points just because they are old, making space for the new rising ones.

On a side note: I recently have received another request to include search into groovytweets. I am looking into it, but things just would be way nicer if I had a relational DB ‘LIKE’ etc. On App-Engine, I have to build my own search index if I want to provide a fast solution and that’s where things can get (compared to a grails app with a relational db) unnecessarily complex. I am not totally sure if I am doing it at all, but I have some ideas in mind.

So good for now!

groovytweets update 10

It’s more than 2 months ago since I blogged about the groovytweets status, but there have been numerous minor updates and improvements. The friends list (the Twitter users we collect tweets from) has been expanded to ~422 followers (and likely more when you read this), the regular expressions used to decide if a tweet is ‘groovy’ has been adapted to the changing groovy universe (like gparallelizer renamed to gpars or following vmware news now), and so it goes on.

But the real meat is a bit behind the scenes. The features you’re likely to see quite early are language detection (filtering by language) and a new link ranking. I still have to improve the quality of language detection as tweets often use English terms even if the tweet itself would be written in a different language. Larger texts submitted to the Google Translation API of course yield better results; tweets just having 140 characters makes this a bit harder.

The groovy link ranking feature can already be seen live in an early version. I am now collecting the links and tracking their usage in tweets the same as retweets for tweet. The nice thing is that I am tracking the final URL, so if someone used bit.ly to create a short version of a URL I am actually following the redirects to find the final destination. Next, I am prepared to limit the links shown in the UI to the last weeks (2 currently) and in addition the relevancy of the links degrades over time. This means a link from today having 5 mentions in the groovy community will eventually be higher ranked than a link from yesterday having 6 mentions, simply becuase time is an important factor for relevancy.

Links

Links

The real real change for groovytweets is yet to come though. As you might have heard, the new Twitter Retweet API is on it’s way. It has been changed multiple times now, based on a lot of user input flowing to Twitter and hopefully even mine. It will fundamentally change how Twitter aggregators/relevancy tools can count retweets. For now a Retweet was a community-agreed syntax, like RT @originaluser text. In groovytweets code I was analyzing each incoming Tweet to decide if it fits in one of the many retweet syntaxes and tried to find the original tweet, then tried to look that tweet up and increase the relevancy.

Well, now Twitter is making the Retweet an official concept of Twitter. They even give you a new API method to look up the total retweets of a tweet, which sounds great. The downside is that each Twitter account may currently use 150 API calls per hour. If I wanted to update 50 tweets displayed on the groovytweets homepage every minute, this means 50 Tweets * 60 Calls per hour = 3000 calls per hour. Well, I got 150. An that is not including the minutely check on new tweets coming from groovytweets friends. So: we’re in trouble here. One solution would be to get whitelisted for more API calls, but there is a better one (or two).

The one solution I still got some hope for is that Twitter will simply include a retweet count with each Tweet. The problem here, I guess, is that I am interested in the retweets within a specific community only. And providing the count only for *my* friends instead of a global retweet count (which is way less relavant some might argue) might potentially be a pretty resource intensive task for them.

The next and more likely solution involves using the Twitter Streaming API. The good thing about the API is that it will show retweets. Although the API just changed again, making the Retweet now the top element instead of the Tweet (and including a retweet_details element), it is then very easy to detect a Retweet. The bad news: Groovytweets is hosted on Google Appengine, and Appengine kills each request after about 30 seconds. So I invested some time finding a cheap vServer on which I open a permanent streaming connection to Twitter. I will then call an API over on groovytweets to feed the retweet information into the app. This splits the system into two parts, which I wanted to avoid, but it looks like the best solution.

Follow me @hansamann to get the news as it happens.

groovytweets update 9

Hover over retweetGroovytweets v59 just went live and comes with a new feature: the ability to see who actually retweeted a tweet. So far I did a simple count but then did not persiste the ‘retweet tweets’. Since about one day I am adding retweets as child entities to the original tweet. And just a few minutes ago, I completed the UI integration of this feature so that you can now hover over the green retweet button to see who retweeted this tweet.

As I just started collecting the retweets in the GAE datastore, only retweets for the messages of the last 24 hrs are available, so if you want to try it out, hover over a colored tweet of the last 24hrs.

Another quick feature that is not really super shiny but very important is that you can now directly request groovytweets.org instead having to use http://www.groovytweets.org. The solution I have found now involves a redirect to a bit.ly url which then redirects back to http://www.groovytweets.org. I know this is lame, but my domain hoster (united-domains.de) really does not allow me a redirect on the naked groovytweets.org to http://www.groovytweets.org, they fear a endless loop and don’t allow it. So… you hardly notice the second redirect and I’ll just register future domains somewhere else :-)

Enjoy, and again thanx for not clicking my Google Ads as this is against the policy…

groovytweets update 8

OAuth supportAnother feature that was blocking me from working on other things is finally out the door on groovytweets: OAuth support. It’s a big one, at least for me. Supporting OAuth in combination with Twitter means that you can now ‘Sign in with Twitter’ and once you have done this, just press the green retweet links to directly fire off retweet messages. You don’t need to leave the page and in case we successfully sent off the message, the retweet button will be somewhat transparent to indicate the retweet was sent.

Underneath, I am storing your OAuth credentials (token and tokenSecret) in the session (and in the app-engine data store to keep track of the logins). At any time, you can revoke groovytweets this right to act in your name by going to the twitter/settings page and revoking access.

That’s the great thing about OAuth: groovytweets does not store your username and password, instead we just authenticate with twitter and thereby get authorized. The user stays in full control and can revoke access for any application any time.

The OAuth signing is done with twitter4j, an excellent twitter API for java. There were some issues with regarding to serialization in app-engine, but these have been solved in the latest 2.0.9 SNAPSHOT of twitter4j.

I hope this feature makes retweeting even more popular. All you have to do now is to log into groovytweets and retweet your favourite tweets. It’s great for the community as we get a great relevance indicator and it is quicker than retweeting from your desktop Twitter client.

Enjoy!

groovytweets update 7

Preview ImagesA couple of noteworthy updates just went live as preview of groovytweets. Keep in mind that www.groovytweets.org might still show an older version without these features, click the preview link to see the new stuff.

So what has changed?

  • The user infoboxes (hover over the twitter user icons) have been refactored and this feature has been expanded to the important tweets screen, too. Still I need to show/hide some rows like bio or url, but I felt refactoring and implementing it on the important tweets screen is more important (or: call me lazy)
  • getsatisfaction.com has been integrated on all pages via a change to the main layout. This is a service to gather feedback/ideas/bugs from the users, notice the feedback box on the right hand side of the page? Just click it to see what I mean.
  • The ‘groovy’ tweet detection will now work on the pure status text of a tweet, meaning usernames will not count as statusText per se. I noticed some tweets were aggregated due to the content having a @mention like @groovyusername, which would make it pass just because of the username. This is now no longer the case. (to be exact: once I switch the preview to the default version)
  • Preview Images: yeah, for me personally, that’s the big one. Just as the infoboxes, it will require some cleanup and refactoring during the next days, but: move your mouse over any link within a tweet. You will notice an overlay appears that shows a preview of the link. The preview generation may take a while the first time someone hovers over it, after that it is cached by our webthumbs service provider. Glen from groovyblogs.org told me about this service which he considers himself. It is a really useful thing plus great eye candy. I will try to wrap the webthumbs service into a plugin so we can all have more previews :-)

Also noteworthy: groovytweets is now running on Grails 1.2M1 using the app-engine plugin 0.8.3. Had some minor hickups installing the plugin (I think the uprade reinstalled the hibernate plugin, which then had to be uninstalled manually), but the nasty EntityManagerFactory Exception seems to be gone.

Enjoy.

groovytweets update 6

shows twitter user information

shows twitter user information

Another feature of groovytweets just went live in version v38. If you move your mouse over the twitter user icon of a twitter message, you will now see a popup with some key user information like follower/friends count, location, web and bio. You can also start following that user by clicking on the large green follow link, which takes you to the twitter follow page to follow the user.

I hope you’ll like this feature. I know about certain little issues, e.g. if the user has not filled out his profile you might see a null here and there. I will clean this up the next days and only present the information that is really available of course.

I am also watching the results of the latest grailspodcast poll: What features would you like to see implemented in groovyblogs.org and groovytweets.org. One feature that will be in shortly will be the timestamps for tweets. One of the initial ideas and another reply was to create a Griffon Desktop App that pulls the tweets. I could think if a nice Growl integration, too… but let me tell you that I really first have to catch up with Griffon. I think I see my personal Griffon Pet Project coming :-)

groovytweets update 5

It’s again getting really late (early) so I am trying to keep this one short. Just today, two new cool features were added to groovytweets:

  • retweet from within groovytweets. You will have noticed the funky green retweet buttons below the twitter user screen names. Clicking these buttons will bring you directly to a twitter update status page, if you are already logged into twitter. Otherwise, you first have to sign in and are then taken to the update status page. The status is prefilled with the retweet message. There is currently no check if the actual message you are trying to retweet is retweetable, e.g. if there is enough space left to make it a retweet. If a message is too long and does not end with an URL (many do), you may now shorten the message and append … to the shortened message. Groovytweets can still detect this retweet and assign a higher relevancy to the original in this case.
  • new user scanning now includes our followers. We now scan a random follower from time to time and check how many groovy tweets he has produced over the last 200 tweets. If we find 2 tweets, we start following that user.  To make this feature work, I also had to update the data we save from the social graph, namely the followers are now also memcached and updated each hour.

That’s it for today – have a good one.

groovytweets update 4

I quickly wanted to shout out the latest features of groovytweets that were implemented that last couple of days:

  • RSS/ATOM feeds via Google’s Feedburner (I just realize I am using 100% Google services: Hosting, Feed Hosting, Ads…). There are two feeds available: a feed with all the latest tweets and one only with the important tweets. Important tweets are tweets that have been at least retweetet once (within the community). Feedburner also offers you subscriptions via Email based on those feeds. These feeds are refreshed every 15 minutes.
  • Retweeting of important messages. Once a message has reached the first relevancy level, the twitter user ‘groovytweets‘ is now retweeting this status. I had several iterations on this one, as it was first not quite clear what measures it takes not to disturb my own retweet counting, etc., but finally it seems to work. If you follow groovytweets on twitter, this will allow you so identify ‘trending tweets’ quickly. On the other hand the email/RSS feeds allow you to catch up once or twice a day.
  • Not exactly a feature, but groovytweets now increased the threshold to follow new people. There have to be at least 3 mentions in the public timeline of another current groovytweets friend to become a new friend. At the same time, we still accept friend suggestions (send me a regular message with <suggest @username>).
  • a couple new retweet formats were added.
  • minor changes: we have a favicon, important RSS feed is linked in HTML head, etc

Thank you all for clicking the Google Ads by the way. We got a nice click-through rate, which also made me some Euros so far. Believe me, this money will flow back into the service. We just reached about 40% of the compute allowance for one day. Especially the RSS feeds (hence memcaching the data) will eat up a lot more.

I am also thinking about giving groovytweets a proper open-source license. It is just not something I am particularly good at, so I will look into this topic soon. If there are some good tutorials/guidelines out there, please let me know. I also believe that the more abstract form of groovytweets really has some business potential, so I want to choose a license wisely.

groovytweets update 3

Here’s another update from groovytweets.

As you may know, the ‘important view‘ is now done. It works quite nicely (it shows the groovy tweets that were at least retweeted once, based on users groovytweets is following). Unfortunately the technical implementation is a bit crazy. I first wanted to get a list of Tweets where tweet.importance > 0, then sort by tweet.date or tweet.statusId (statusId is a ever increasing number and the highest is the latest one). Sounds easy…. but: GAE/J does not allow you to query for one column of the bigtable db, then sort by another. I even got a special index, but nope, it seems impossible. So I finally did this: get the last 500 tweets (yes, 500, each request to the ‘important tweets’). Then in groovy, check for importance > 1, populate view. This works quite nicely, who cares as long as it works?

Another update just implemented: scanning for new groovy users to follow. So far, the additions of ‘friends’ of groovytweets has been a manual process. I simply selected the people I thought were interesting. I began logging the @replies a couple of days a ago, which already gave me some interesting insight but there is one issue with that: Twitter disabled status updates in the timeline of a following user, if the @reply user is not itself a friend of that user. That’s a bummer, as it basically does not allow me to find new groovy users.

So what I did instead now is this: every 5 minutes, I pick two random users out of the existing friends list. I get up to 200 tweets from these users, apply the same groovy pattern matching to filter out the groovy tweets and then log the @replies in those groovy tweets.  This is running for the first cycles right now and based on the results I plan to then have another cron job (probably every hour) that checks how many times a twitter screen name was mentioned in groovy tweets. Above a certain treshold, I plant to start following that user automatically. But till then, I want to monitor this a couple of days longer.

GORM-JPA Plugin: I must admit I am stillusing plain Grails 1.1.1 and the app-engine plugin, but GORM-JPA should for sure be the future for using Grails as close as possible to the original promise (with GORM) on GAE/J. I will probably create another litle test app just for trying out GORM-JPA and then modify the existing code once I know it works fine.

groovytweets.org update 2

I just polished the look and feel of the site and created a basic layout for groovytweets.org. Also, there was a bug related to @username replies where the @ would no longer show up which is fixed now. In addition to linking @usernames from tweets, #hashtags are now linked directly to twitter search for that tag. I decided to keep those kind of links in the same font as the regular status text because I believe it distracts too much to see a link every five words in a tweet… but move your mouse over the text and you will see the pointer change.

What’s next?

  • I noticed a few retweet formats still have issues. For example multiple retweets migth not get recognized… I am not sure if I can make all those cases work, but I’ll try. Also tweets posted via twitlonger are currently not recongized as retweets and therefore do not increase the relevance of the original tweet. This should be quite easy to solve, as I can just search with the original fragment that is still contained in the retweet – assuming that such an fragment is still unique enough for a tweet lookup.
  • Special views. Views like only tweets with a higher than normal relevance or views only wiht links (or both). This will allow some of you to not waste time checking the groovy news by just concentrating on the relevant stuff.
  • RSS Feeds. Yes, of course. But I first need some more interesting views. I might just create one RSS feed to keep things simple that only publishes low-volume relevant tweets. I think this is what we all want: less noise! If you want to get the full scoop, just visit the website in this case.
  • Instead or in addition to creating a RSS feed, groovytweets could start tweeting the relevant news itself. All tweets would be retweets in this case (which should work 100% as only the tweets that were ‘retweetable’ can achieve higher relevance). This might be an interesting friend for people who really just want to get the top news each day without participating in the whole retweeting hell.
  • REST API. James Williams posted this idea to my inital announcement on the Grails Mailing list. All it would take is probably a ‘list’ api, e.g. ‘render tweets as JSON / XML’ I guess. This could then be integrated into a Griffon app, a desktop client for the groovytweets site. Although I must say once groovytweets starts tweeting the news itself, following these news becomes as easy as adding groovytweets to your existing twitter desktop client. But still I am interested in getting to know Griffon.

Any other ideas? Send me an email to hansamann (at) yahoo.de. I’ll be on vacation at Tahoe the next couple of days (but podcasting again on Saturday, so watch out for a new episode with some GAE/J content). I will reply once I am back.

p.s pls retweet!

groovytweets.org update

Since I announced groovytweets.org yesterday on the Groovy and Grails Mailing lists, I have received a lot of great feedback and great ideas to improve the service. I just finished a couple of updates, but let me first explain the idea behind groovytweets.org.

Glen and me run the bi-weekly Grails Podcast. To prepare the podcast, we have to keep track of all the relevant news over the last 2 weeks, compile it into a storybook for the show and then read and discuss it. We typically use Glen’s excellent groovyblogs.org, direct emails to grails.podcast@gmail.com and the Groovy Twitter Cleaner Pipe that I created some time ago.

The Groovy Twitter Cleaner Pipe scans the twitter universe for groovy/grails/griffon and then tries to remove all the non-important and non-groovy scripting related tweets. The pipe filters the results down, for example I remove all tweets not containing links as they have little news value (no source for further information).  The Groovy Twitter Cleaner pipe sometimes provides some great new hits, but quite often it also creates a lot of noise to unrelated tweets.  It is quite hard to filter links to groovy images (60s, etc.) and keep groovy scripting related tweets. For Grails, unfortunately there seems to be a music band, too. And for Griffon, EVERYTHING can be a griffon, really: dogs, jackets, etc.

So the issue with the Groovy Twitter Cleaner Pipe is clearly quality. Too much noise. That’s why I started the groovytweets.org. Just as groovyblogs.org, I begin with a manually selected group of ‘Groovy People’ in our community. If these people tweet about ‘groovy’, it is most likely really about the scripting language. After this was done, I thought about how I can measure relevancy. That’s where retweets come into the game. Retweets are kind of endorsements, if you retweet, it means you want to share some great content with your followers. So whenever I discover a retweet in the timeline of the groovytweets friends, I swallow the RT and instead lookup the original tweet and increase that tweets relevance.

These are the Retweet formats that are currently supported (I just updated this piece and added one new format):

  • RT @username <original>
  • RT: @username <original>
  • RT: @username: <original>
  • <original> (via @username)
  • ♺ @username: <original>
  • ♺ @username <original>

Most people will probably use RT @username: <original> which I also like the most. It immediately shows the source of the original and is in my opinion the most honest retweet.

The only issue with retweets is that sometimes the retweetet messages are too long, e.g. > 140 characters. In this case one can use twitlonger.com, and I plan to support this soon, too. But the best advice regarding the retweetability of tweets is really to keep the messages to around 120 characters, so others can actually retweet them easily.

Besides the new RT formats, these features were added today:

  • groovytweets is available at http://www.groovytweets.org. As naked domains are not supported right now by GAE/J domains, I have to use the www.
  • @<username> in the status text is now directly linked to the twitter profle page of that user
  • the tweet matching pattern was slightly improved, I removed /gram/ which was found too often in tweets like ‘I like programming my DVR’. I will consider using word boundaries \b if gram turns out to be a still relevant groovy technology, but I have not heard too much about it so far…
  • the still basic groovytweets UI is now not only pulling in new tweets (via AJAX), it also updates the relevance of existing tweets in the HTML page every minute.

The whole app runs on GAE/J and right now uses just about 1% of the daily compute allowance. So I got hope to keep it free, but I might consider using some google ads or so. Let’s see, this is not the most important thing right now, I am first trying to get the core service right.

I also want to upload the source code to github, just right now the groovy credentials are in and I plan to refactor the credentials into a database entity soon so I can keep the source code on github complete but leave all credentials out, too.

More about my experience with GAE/J and Grails 1.1.1 and the app-engine plugin will follow in the next podcast.

The perfect JavaOne(tm) Scripting Schedule v0.1

I finally found time to look closer at this years JavaOne(tm) sessions. Of course I had my special scripting hat on and created a scripting-optimized schedule. Groovy (including our own grailspodcast.com BOF), Scala, Ruby/JRuby are all in.

While there is no dedicated Grails session, there is the ‘Grails Integration Strategies BOF’ that all Grails lovers should visit. Followed by our grailspodcast.com Groovy & Grails (&Griffon) BOF.

Well, have a look for yourself and send me feedback and comments for alternative sessions around scripting or sessions I missed.

YouTube HD

Soon after I discovered vimeo.com, I checked YouTube for the latest news. And as it happens, they activated HD uploads just a few days ago. The annoying 10 minute limit is stil there, but files can be up to 1GB large. Not perfect, but vimeo just gives you 500 MB per week and only one HD upload. As all my videos will be HD and you can really easily hit that 500MB limit with HD videos (10 minutes was 800MB!), I took a closer look at YouTube again.

The ony freakish thing is really the YouTube address book. I just cannot figure out how to send an invite to my Gmail/Yahoo contacts, that feature does not seem to exist. Can it? This is freaking me out as I have to send around the channel address via email now and then manage the subscribers myself.

Also, it seems you have to manually select the contacts for private sharing, plus you can only share up to 25 contacts. Wow. Seems like Google does not really encourage closed communities like our family videos in this case.

Vimeo for HD videos

Just discovered vimeo.com and it totally rocks. You get 500MB of upload space a week (!) and one HD upload per week. I created a small screencast in HD format to test the quality and it is truely amazing. I previously experimented with youtube for screencasting, but the quality is way too low. Also the limitation of 10 minutes is a real issue for screencasts.

My first post from Yahoo! Mail

I am just using the new WordPress application from within Yahoo Mail (beta). What is the benefit using WordPress from within Y!Mail, why not go directly to WordPress? Well, looks like I come across my Yahoo! Mail many times a day while I constantly forget to sign in at WordPress. So I might be reminded to post more often…

The next step: all kids in preschool

Beginning next month, we’ll have 3 kids in a US preschool (or jr. preschool) in the US. It means everybody in our family will soon be +2yrs and we progress to the next step. It also means we have a bit more time whenever the kids are gone, plus we have at least the good feeling that it is good for the kids to grow up bilingually (I doubt it will last long once we moved back to Germany).

We also have about one year left in the US. Maybe a bit more, who knows, but roughly one year. There are still many things we want to see and many things we want to buy (because it is cheaper here…. and who cares about a US keyboard, just drop those German Umlauts!). Let’s see if we can travel all places we want to. My wife will soon visit friends we met here in Minnesota, plus I will soon again go to Squaw, the so far best snowboarding resort I found here (I have been to Homewood, CA, which has an awesome view at Lake Tahoe and to Kirkwood, CA so far). We’ll see if we can make a final trip up to Canada, especially to Vancouver. Vancouver is the place I did my MBA, where I still got some friends and it is a place I really fell in love with. There are probably many nice cities, but having spent so much time there and ‘knowing’ a great city more than just a tourist is indispensable.

Let’s see. We also accept visitors for 2009 now. The calendar is filling for March, June and August already. Want to visit? We’re here until 2010…

Next Stop: Munich. I miss the Saunas, really.

Winter in California

If you do not live in California, you might have noticed it really got cold outside. California was colder, too, the last couple of days, but again today temperatures were in the 20C  area and we were able to have lunch outside.

It is still too cold, as winter is a relative thing. If you are used Californian summers, winter is still….. cold. And I immediately got a strange throat infection that I am carrying around since a week now.

What would happen if you come from aCA summer directly into a German winter….. uuuh. Without some extra Sauna sessions I believe my body would not be ready.

The Dell Inspiron Mini 9

We recently bought a Dell Inspiron Mini 9, a sub-notebook with Ubuntu Linux and a 9″ display. That’s pretty small and the main idea behind this is to use it as a laptop for the kids. An adult can hardly type fast on the small keyboard, but I guess the kids will have a lot of fun with that machine. So here is my review.

The most refreshing aspect of this machine and for me personally a blocker if it would be different, is that Dell ships Ubuntu Linux 8.0.4 with that notebook. The total price was 420$ and that inclided a 5GB SSD (solid state disk, no conventional hard drive) and a 1.3 MP webcam built into the screen. I also bumped up the memory from 512 MB for the cheapest version up to 1GB which mad it some dollars more expensive. Windows would cost you more and who actually does need it by now? I’ve been working on a Mac at work the last couple of years and all my software by now is in the cross-platform/Java category. That kind of software runs both on Unix-based Macs or on Linuxes without any issues, switching back and forth from a Mac OS to Linux and vice versa is really easy.

For my daughters user account, I left the special Dell UI installed. It is an application chooser that features really big icons and makes it easier to choose your app as the selection is right on the desktop. Something I guess my daughter will soon understand and once she finds it boring I just deactivate it ans she can use the typical Ubuntu UI.

Especially for kids, the Mini 9 is awesome. Some free Tux-Games like learning the alphabet, numbers or this Tux snowboarding game are preinstalled and you don’t have to search and install it. Just turn it on and you will find some cool stuff. Of course, it comes with Wifi and as an extra with Bluetooth. I am not too sure if the Bluetooth option was a good idea, but Wifi of course is a must have. The connection to our home network was trouble-free and we were watching some full-screen YouTube videos soon after unpacking the laptop.

The 5GB SSD is of course not much. Right now we got around 3GB left but I think every user only gets a quota of that space, have to figure out how to change that. I bought a 2GB SD Card for the SD/MMC slot and put some music onto that card, which is a good solution for now. Most things anyway are on the web today, like word processing on Google Docs or online videos on YouTube, so a large disk for our use cases is not really needed.   

Java Drive

I bike to work since mid-April now and I am wondering how long I will be able to do so. The days are getting shorter, sunset is about 7PM right now. Plus it gets a bit cold in the mornings now, which might make me switch to the car next month.

Still, I am biking since mid-April. The weather here in Sunnyvale, CA, was extremely stable. I cannot remember a single day I was not able to bike to work because of rain. Not a single day… compare that to most of the rest of the world.

The final meters on my way to Yahoo! even leads me to ‘Java Dr’, so my brain already adjusts to the upcoming work :-) Wondering where Groovy Dr and Grails Dr is…

The Beast is out!

As the 2GX in San Jose was postponed, Glen and me felt like we can release the beast, aka as the Grails Podcast website, right away. So here it is, surf over to grailspodcast.com and enjoy! Most of the old content, except the polls, were transferred to the new database. We also started tagging our content now, this means we can give you special views like ‘all interviews, etc.

Right now the page still forwards to our mor.ph appspace, where we host the whole app, but I can add a CNAME forward the next days. Feed URLs and everything else should meanwhile still be good.

I guess the grails podcast website itself will become my new playground for whatever plugins and features I want to try out… I might though use another dev account on mor.ph (which is free for dev, you only pay when it goes into production) just to not risk bringing the site down for too long.

For commens or suggestions you can either skype or email me directly or just use our grails.podcast@gmail.com email address. Oh, and please follow us on Twitter (grailspodcast) for updates on groovy and grails!

Prost Neujahr!

So one year has passed now since we entered the US. I have been home about one day for the quickest transatlantic visit ever since then, besides this we were all here, in Sunnyvale, CA. It was not always easy, especially the first few months but – in general – things have stabilized somewhat and we just extended our lease, too. So what is my summary for the first year?

It was a rush, really. Time has passed so quickly, we have done and had to do so many things that often there was not time to think much about it. We met our first US friends that by now already moved away back to Minnesota (hope to visit Jen & Kyle next year), I survived the first Yahoo Mobile Winter (winter is the toughest time because of trade shows in January to June…) and my wife eagerly studies English and is doing pretty well.

Visitor’s season is just over. Our parents have visited, many of our friends and a lot of people I knew in the (mobile) IT sector came by. It’s nice to be in the Bay Area,  the silicon valley is regularly visited by most of my business friends which makes it nicer for me personally because every week or so someone you know comes by.

The Grails Podcast has also evolved quite a bit. When we arrived in the US, I was able to quickly produce some more episodes before there was a really long break. Luckily, Glen Smith contacted me and we continued the podcast together. It turns out this was an awesome idea an I enjoyed podcasting since then even more. He is now on the show and the feedback and download figures are pretty positive.

Talking about the Grails Podcast, I am working on a new website as our current podcast hosting isn’t quite the sexiest one. It will be a mixture of functionality and also my own playground for whatever plugins I want to try out in a real life project.

So far I used the excellent Feeds Plugin and the Authentication Plugin from Marc Palmer and also the JCaptcha Plugin for listener comments from Octo in France (who exactly has written the plugin?). We will definitely talk more about what we have used in the SoapBoxes (our part of the grails podcast for in depth discussions) coming up.

So watch out the next few weeks and cu at our first live podcastint event in San Jose, CA, during 2GX in October!

Beginnin Groovy & Grails

I got it, thanx to the authors for sending Glen and me a copy of that book. Beginning Groovy and Grails is teh beginners book to G&G, the readers path would be to read this book first and then dive into Graeme’s Grails book that will be finished by the end of this year.

So far I did not have too much time to look into the book, but it should get everyone with basic Java knowledge going in the Groovy & Grails world. The book introduces the reader first to groovy, then to Grails. This is similar how Graeme has done this in the first version of his book, but Beginning Groovy and Grails will go deeper into Groovy I assume.

What’s up!

So after a few weeks of silence, finally some post again. Glen just published the Grails Podcast Episode 61 (we switch the mixing job each episode, so each of us only has to do that job once per month…) and I am happy we got some much nice feedback. The outcome of the recent poll: discuss one topic in depth, so we will try from now on. You can twitter me your ideas to @hansamann.

One comment on my new test blog: I am probably too busy to work on it the next few weeks, but the integration with the Grails captcha plugin is done. Maybe I will talk about it a bit in one of the next podcasts. It is not a big thing but that’s great. The biggest issue for me was to copy the configuration example from the twiki and reformat it with Eclipse’s Groovy Plugin (no code formatting built in, so I had to use my own TAB power).

Workwise I am a bit back in the good old Java days right now. Doing a project with Spring, CXF and Hibernate, designing some SOAP API (yes, SOAP, I even believe it is the right choice for the type of app we design right now). CXF is the ‘next version of XFire’, it allows you to export an interface as e.g. SOAP API and cares about all the data binding for you. While the data binding, and interface creation was rather easy, I am still a bit worried about exception handling, or SOAP faults. CXF also converts exceptions automatically, but I believe I need some more specific exception-SOAP fault mapping here.

Besides this: we are now close to one year in the US. Interesting how time passes by really quickly (here?).

Where The Hell Is Matt dances with Yahoo! Connected Life

Finally, I am popular. Yahoo! Connected life today got a visit from Matt, a guy travelling around the world and dancing his dance. Check it out, BTW I am somewhere in the middle, can you spot me?

I am not dead…

… I am just insanely busy at work and it does not seem to get better :-(. Well at least Glen and me have been able to keep the podcasts flowing and we even got a interview wiht Andres Almiray planned for next week. Thanx BTW for all the feedback, we get more and more community involvement, that is really great and we appreciate it.

Friendly Dates

Friendly Dates

Friendly Dates,
originally uploaded by hansamann.

Do you also hate date strings on blogs that are way too accurate? Does it help if you know that User X gave his comment exactly on Wed, Jan 17, 2008 13:34:20 (maybe even showing milliseconds)? Well, I thought this does not really matter, so like I’ve seen it elsewhere my new blog will also use these ‘friendly dates’.

The basic idea is that the reader will see the comments relative to the blog post timestamp. So knowing the time the post was added to the blog together with the days/hours/minutes from that point in time is enough and actually easier to understand. In the picture left you can see how a comment that was added a few minutes later really reads as ‘A few minutes later, Person X wrote…’. I might also simplify hours and days, but for now I kept hours/days/minutes accurate. I dropped the seconds as that is just not interesting and it hardly makes sense.

New Blog Design/Concept

New Blog Design/Concept

New Blog Design/Concept,
originally uploaded by hansamann.

Here we go, click on the linked image to see the current design. As it was about 14 degrees celsius outside, the color is a rich green and it was greyed a bit because it was after sunset. The blog will integrate services like flickr for latest images, twitter and del.icio.us. That’s the services I use heavily so far, maybe more to come. Any ideas? Let me know… chat with me via skype/YIM, I would love to hear some good ideas. Also I am looking for a cheap vServer solution to host it… ideas? server4you.de gives you 384MB ram for about 16EUR/26US$ per month. Anything better?

Working on a new blog

I’ve been thinking a long time about replacing my snipsnap blog (do you remember, it was a mix between blog and wiki and it even supported one of the early versions of Groovy) but then time did not really permit putting a lot of work in it, so I found myself at WordPress. The thing just runs and for just getting the word out it is a reliable system.

But the last few days I finally found some time and although I don’t want to promise that it will replace this reliable wordpress blog, I am pretty optimistic. Recently, I had some great conversations with friends and colleages and was inspired by the idea of magically morphing the blog (web site) colors into a color that visualizes the current temperature, daylight, etc. So basically I worked on a Grails app that pulls the current weather (and more, e.g. sunset, sunrise times) for my city in California via the Yahoo! Weather API and does all kind of nice things with that. First of all, I created a color gradient to visualize the color. My gradient runs from dark blue for very cold, over to light blue, green, yellow and finally red-brown for extremely hot. The colors are morphed based on a left and right color and then calculating the intermediate color. This color is then used to set the backgroudn of my blog, which in turn influences the whole page…. I uses a lot of semi-transparent graphics and at least FF2 so far really likes it. In addition, I use the information about the sunset/sunrise times to apply a grey shading to the page which means you can guess if it is day/night in Sunnyvale where I live

I must admit that the key blog functionality is not yet implemented, I focused on design and trying out these new ideas for the blog. So give me a few more weeks to work a few hours every few days to finish that with some Grails scaffolding and some authentication… thinking the new Authentication Plugin form Marc Palmer or even easier.

Will try to publish some images later. If you got some great ideas for ‘contextual’ information that I could also use in such a blog, let me know. Uh, and yes I was thinking about Location, of course, but as I am mostly in Sunnyvale, CA, right now I found that kind of boring.

Grails Podcast Episode 53

We’re happy to announce the Episode 53, now also including some listener feedback. And I am happy to tell you we just received our first audio feedback item. So watch out for the next Episode and be sure to subscribe to our RSS feed. Shownotes in correct order for Episdoe 52 are below:

Shownotes

The Beauty of a Mac

After waiting more than half a year, I finally was able to switch to a MacBook Pro at work. This is a historic event in my work life (privately on mac since a few years…) :-) I am just downloading and installing all the developer tools you need to be happy and productive, luckily TextMate was already preinstalled.

Unluckily I won’t be able to live completely without Windows, as lot’s of the mobile Java development tools only run on Windows and Linux… at least the time it takes to get them running on Mac is not ideal. I happen to run Parallels, too, and so far am impressed by how nice Windows can be (if run n Mac hardware).

It also happens that Yahoo! Messenger for Mac just recently announced the voice feature, too! Great time to try it out and call the world. I used to use a bluetooth headset for calling but Windows mostly refused to connect to it… and if it did it was too late! So now on Mac, I can use this again, too.

Las Vegas

DSC00221.JPG

The Wynn,
originally uploaded by hansamann.

My first time in Las Vegas, I am blown away by the big hotels around me and the luxury all over this place. More photos on Flickr… We are staying with our demo team at The Wynn, the most decadent hotel I have ever seen. On the first floor, there is the Wynn Casino and slot machines all over the place. I have never placed a single quarter into one of those machines and am frightened to do so because it would flash into my mind that I could end up like one of those guys sitting there for whole days. Likely won’t happen, I better enjoy one of the five Pool/Spa areas tomorrow if we have a few hours before I will fly back to San Jose, CA.

Jott

See the post below this one. I am pretty fascinated by Jott! It allows you to call the jott number to record a message and send it to to person or another link. One of the links I chose to try out is WordPress, so that’s how the post below was created. I kind of like the idea of ‘thinking out loud’ to my blog :-)

Wow! This is my first…

Wow! This is my first Jott to WordPress. listen

Powered by Jott

Yosemite Park

Yosemite Falls

Yosemite Falls,
originally uploaded by hansamann.

So we finally did have time for some vacation and went to Yosemite Park. the park is about 4hrs from the Bay Area and the drive includes a really beautiful scenery. Take a look at all the photos, click on the image to see them all!

WATER @ BK

WATER @ BK

WATER @ BK,
originally uploaded by hansamann.

Don’t get me wrong, but you don’t see that too often. I am wondering what percentage of BK customers drink water… like I did. I figured out the burger already had too many calories. No way to justify a sugary Coke :-)

Upcoming: Grails Podcast Episode 49

I wanted to keep it quiet, but  I am fascinated that a new episode of the Grails Podcast (Episode 49) will soon be out. Glen Smith, the crazy Australian Groovy & Grails expert will provide the necessary depth of discussion while I can ask him all kinds of silly questions that people using Grails or people who are considering Grails might want to ask.

The next Episode is planned for the next 1-2 weeks, finding good recording times between the US West Coast and Australia is a bit hard, but I am sure we will soon get into a flow…

Stay tuned, expect some changes and post your questions as comments to this blog post.

The blog is dead, long live the blog!

So my old but fancy SnipSnap that many of you might have known under this URL was ageing… till the lil’ server that hosted Tomcat and the SnipSnap web application just did not want no more. So as I knew that the ‘bliki’ I used was no longer supported, I switched to wordpress now for a hosted blog. Less fancy, but managed and reliable… and with some CSS tweaking we will see how cool we can get :-)

Luckily I was mostly posting about the Grails Podcast and the data is contained in the Grails Podcast RSS feed. So on the right side, please have a look at the recent Episodes. I will soon continue podcasting about Grails together with Glen Smith, THE Australian voice for Groovy & Grails. I am very much looking forward to this and learning from his great experiences. Just the fact that two guys, an Australian from Canberra and me, a German in California, podcast about a common topic is weird enough to love it. Let’s see where it goes.

Follow

Get every new post delivered to your Inbox.