Project 365 – the first month


It’s one month into Project 365 and of course this is the time to reflect about the past 31 days and the remaining 11 months to go.

Overall I am really happy, I had a great start, knowing little to nothing about portrait photography and approaching people at the beginning. I now am able to shoot in Manual mode more or less confidently and approached several complete strangers and got their shot. That’s pretty good I’d say and it could definitely have been worse.

There’s still way more to explore, both in terms of approaching people and in terms of technically getting the shot. I just almost messed up the shooting today, but at least was able to safe myself into another programmed mode to get the shot. I also just ordered the first 31 images at mpix.com to be able to show my work. I’ll probably carry some images right with me to convince some difficult subjects.

One thing though is the most interesting for me, something I did not plan: networking. My project offers me the most radical type of networking I have ever done so far. At work, I now begin to meet one new person every day, I chat, I develop some understanding in a couple of minutes and then get the shots. Also over the weekends, I met some people which I’ll most likely see again during the remaining time left in the US (we leave July for Germany).

I thought about having a theme of the month but I dropped the idea. I like to be taken wherever the journey goes and so far it has been a great experience. So I’ll just take chances as they come and we’ll see what happends in February!

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.

Project 365, my new year’s resolution

2006 was the year I discovered Groovy, a scripting language for the Java VM which changed great parts of my private coding and work life. 2010 will be the year I am focusing on something fairly non-technical: Photography. And just to make sure: it does not mean I am less interested in Groovy and I will also definitely continue the podcast together with Glen!

On January 1st, 2010, I joined the 365:2010 group on Flickr. Project 365 is about taking a picture everyday. My ambitious goal is to take one portrait every day and I must admit I failed miserably on day one. The challenge here is less the technicalities of taking a picture (which also can be quite complex if you want to get a good shot), but communication and approaching people. I realized this the hard way and softened my goals a but, allowing me to not feel as a complete idiot the first day of the project. My first picture is here on Flickr by the way.

Luckily, day two was better. I approached 5 people at our local market in Sunnyvale, CA, and none of the people I approached rejected my request to take a couple of shots of them. They were all pretty happy I believe. So I guess my first day’s choice of people was just simply the kind of people who would never have said yes… or at least not easily. Here is my chosen picture of day two, but be sure to take a look at the rest of the portrait pictures so far here.

I really hope to make portraiture a daily part of my life, the first days are promising and I am still fully motivated. But I realize 365 days (I think it is actually 366 2010, right?) is a long time. Even if I won’t be able to take a picture or portrait every day, I am sure it helps me develop my photography skills – simply because it already has.

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 www.groovytweets.org. The solution I have found now involves a redirect to a bit.ly url which then redirects back to 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 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 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.

Grails JUG Meeting Screencasts

I spoke at the Silicon Valley Web java User Group about Grails on Nov 18. The meeting took place at Google in Mountain View and the whole video is supposed to be on Google Video in a couple of days. Now while the content is still fresh, I will also be working on putting the exact same presentation into a three part screencast series about Grails.The idea is to have an even higher quality format where the watchers could both hear me talking the slides but also see the live demo of Grails.

Today I recorded the first part and I am currently uploading it to Google Video. Just look for Grails JUG and I am sure you will find it there.

It would be great to receive some feedback if that format (screencasting and recording both presentation and live demo) is enjoyable or if not, what could be done better (and how?). So let me know, I am all ears.

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 57: Newscast for May 24th 2008

I am crossposting here for the sake of readability. WordPress just has a so much nicer formatting than on podhost.de. Be sure to head over to our podcast blog to take the Poll of the Week!

Dynamic Languages Panel

Dynamic Languages Panel

Dynamic Languages Panel,
originally uploaded by hansamann.

I was also at the Dynamic Languages Panel, I think it is press only which could potentially make it boring. Let the crowd in I would say but I am not Sun. I is hosted by Tim Bray of Sun.

Participants:
Charlie Nutter, JRuby
Guillaume Laforge, Groovy (not confirmed)
Frank Wierzbicki, Jython
Ted Leung, Python/Jython
Greg Murray, Ajax, jMaki
Tor Norbye, Tooling

It’s tough to live blog that, but I will try to outline the key questions asked.

The panel begins with an unpleasant question that is more targeted at Sun that at the panelists. Why is there a new scripting language for javaFX, why not use Groovy (or other languages that exist already, like javascript)?
Tim: javaFX is tightly coupled with Swing, easy to integrate authoring, media, etc. Groovy is more generic. Another Sun guy steps in, tries to explain why a new language was used. Bottom line: I guess groovy would have been a perfect choice, but Sun decided differently.

I think the discussion is going into a slightly unfavorable direction for Sun right now…. still all argueing why javaFX needs to be. Hmm.

The discussion now switches to debugging. Guillaume mentions that the stack is different if your are debugging Groovy, but besides this oyu can use the same tools.

Charles Nutter says that many times the test/deploy cycles are so short, that debugging has become somewhat obsolete…

I started Twitering… this is kind of difficult to blog about. Check my Twitter page: http://twitter.com/hansamann

Now I know why Twitter exists. If the quality is not good enough for blogging, you can always twitter it!

Scott Davis: Groovy – The Red Pill

Scott Davis

Scott Davis,
originally uploaded by hansamann.

I am waiting for Scott Davis’ show to begin. He is still busy signing his book, Groovy Recipes :-) and I just noticed I don’t have that book yet… what a shame, have to order or get it today. Scott is also the creator of aboutGroovy.com, a news site dedicated purely to Groovy news.

Damn no Wifi in this room… what the hell is going on with JavaOne? I better keep writing this to Stickies instead of the online wordpress blog post page.

Scott makes a bold point that Groovy/Java Integration is seamless, really seamless. Mentioning the Foreword of Groovy in Action by James Gosling: smooth and efficient integration with Java. Other scripting languages got many syntactic mismatches… for Java Developers Groovy is painless.

Rest of the session will be live coding. He covers: Method Pointers, Operator Overloading, Closures, ExpandoMetaClass (invokeMethod,methodMissing)

Uses Textmate. Starts with a Hello World Java example. Javac’s it, runs it. Now the same in groovy. Of course that’s println ‘Hello Groovy’ :-) done. He talks about some more basics of Groovy like optional parenthesis.

Method Pointers
Make a great example of method pointers in Groovy and how it helps to create dsls.

songs = [1,2]

load = songs.&add
load 3

println songs
[1,2,3]

Moves on to GroovyBeans and all the stuff you don’t have to write… semicolons, return statements, gettter/setter. Also gives an example for GStrings, you should order one.

Closures & ExandoMetaClass
Jumping into a basic closure example and then comparing for-loop in Java to Groovy’s Integer.times() method that results in sth. like 7.times {println ‘hi’}. He also covers operator overloading, example with Date and using ++ to advance to the next day. He is now extending String with String.metaClass.methodName to add a shout() method that upperCases a String. Nice eye-opener I guess. So we moved into the next topic, ExpandoMetaClass (the coolest thing on earth).

He explains why this is a great feature for testing. You can just replace calls to real functionality with a fake method. He recommends to get started with Groovy with testing… Testing as an drug.

Jumping into the goodness of the GDK, quickly showing some examples (most for java.io.File).

Whoops. We missed the TestCase. Creating one. Extending form GroovyTestCase and testing his new Ipod class he used for the previous examples. We are adding the leftShit method to add Song objects to the Ipod via << new Song().

Scott now talks about invokeMethod / methodMissing. Grails GORM methods are a good example for the methodMissing. These methods don’t exist, but Grails then parses the method name and creates the queries accordingly.

That’s the end. Scott is a very enthusiastic speaker, great session. Hope to meet him later on and chat with him. I am off to upload that text and then head to the next sesion. I think it is a press only panel about dynamic languages. I hope Guillaume can be here as he was not confirmed.

JavaOne – just arrived…

Groovy Crowd

Groovy Crowd,
originally uploaded by hansamann.

And the first thing that happened I bumped into Dierk Koenig and Adam Bien. Dierk Koenig is the author of Groovy in Action and Adam is a known Java Author, too (EJB books, projects like GreenFire, etc.). Unfortunately had to find out that Graeme Rocher, Grails Project Lead, is ill and at home in London. So the planned interview with im and Guillaume won’t be possible, but let’s see if I can find Guillaume later.

My first session will lead me to Scott Davis, it is called Groovy the Red Pill and is abou Mopping up Groovy – Groovy & it’s Meta Object Protocol.

Grails Podcast Episode 53

Yeah, the first two audio feedbacks in this show. Unfortunately the shownotes formatting at podhost is totally broken right now, we have to investigate. nevertheless the links should be good… enjoy. Oh, and be sure to head over to the podhost.de site and take the poll of the week.

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.

Grails Podcast Episode 51: Newscast for March 29th 2008

We’re thrilled to announce the first Grails Podcast (of the next 50 ones till we reach 100) with tons of Groovy and Grails news. Here we go with the shownotes:

ShoZu rocks!

I discovered ShoZu a long time ago, one of their sexiest features at the beginning was to send photos captured by your mobile phone to your flickr account. Lately I checked ShoZu again and saw they were adding tons of ‘destinations’ or ‘links’ (like Jott calls them). One of them is WordPress, so here we go with a first post to my blog.

Posted by ShoZu

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!

Grails Podcast Episode 50 – Tons of news!

Wow… we reached Episode 50… this is kind of amazing and a great outlook for the next 50 episodes together with Glen. This Episode covers a lot of news going on in the Groovy & Grails Community. Especially the Grails Plugin Community is vibrant like never before. We also would like to get more interactive and introduce listener feedback. We can both be reached via grails.podcast@gmail.com and will be happy to receive your feedback. Please also use this mail address for interesting things you want us to talk about (Blog Posts, Events, Groovy&Grails Sites and Developments, etc.)

Shownotes

Grails Podcast Episode 49

After a loooong long time finally a new Episode of the Grails Podcast is out! Glen Smith from the Grails Team will from now on be joining me and we podcast together every two weeks or so. We still need to set up some common infrastructure like a single feedback email address but that’s all details… This also means the style of the podcast is changing more into a conversational one, a change that I really welcome and I hope all our audience will enjoy, too!

So the first episode together just catches up on some of the great news over the past few months, grailseXchange, G2X, and some general Groovy&Grails news. Here are some of the links we talked about, more to come for the next shows.

    Glen has a great blog full with Groovy & Grails stuff, check it here.

    Grails Podcast Blog – including Flash Players for all Episodes and direct downloads.

    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.

    Life in the US – the first 6 months

    This is more a personal post, one for my friends around the globe. Luckily I still got contact with most of you, thank you Skype, thank you Sipgate for German VOIP numbers that lead directly to Sunnyvale. After we spent some time in temp housing during the first month, we soon moved on to our final housing destination here in Sunnyvale. We now live in a nice but expensive apartment community, we got an outdoor pool that is heated all year long (what an incredible waste of energy…) and it is just 10 minutes to work for me.

    By now we did practically master most common situations… like having to go to the emergency room because a kids was quickly getting sick or just paying the gas / water / electricity (‘utilities) bills. Not to mention the opening of various banking accounts for checking, savings, etc. Most my profiles on all the web2-ish services around the web have been updated and more or less I would say: “We have arrived, finally.”

    California is a great place, especially for kids. It is warm and sunny, so the kids get less often ill. As a parent, you don’t have to dress/undress you kids all the time, a shirt will just be fine… maybe some sunscreen. In a restaurant, nobody smokes, no problem for the kids. And everyone here just arrives or leaves. Most are foreigners like you, most are happy to share their ideas and give good tips to make live easier. Life is moving quickly here, nothing compared to a German suburb.

    We did have some time to do smaller trips to Monterey, Santa Cruz, San Francisco. Check the Flickr images and ask to be added to my friends list to see them all.