I am one of the lucky developers (one of the 5000) that can attend Google I/O 2010. I watched many videos from youtube, so I was very prepared for the sessions, but the overall experience was something well beyond my expectations. Below you can find the things I wrote during the three day marathon. Most of the items the things I will check out until the next Google I/O.
And finally, my resolution for the next year is to have a couple of Android apps on the market (maybe a game who knows).
Keywords — that I took note during the sessions
- Google Web Elements — http://www.google.com/webelements/
- Google Code Playgorund — http://code.google.com/apis/ajax/playground/#hello,_earth
- Google Ajax APIs — http://code.google.com/apis/ajax/
- KML Tutorial — http://code.google.com/apis/kml/documentation/kml_tut.html
- Google Maps js API V3 — http://code.google.com/apis/maps/documentation/javascript/
- Spring Roo – Framework from VMWare that can easily be integrated with a GWT frontend — http://www.springsource.org/roo
- Google Chrome Web App Store — http://blog.chromium.org/2010/05/chrome-web-store.html
- http://www.openclipart.org
- Lots of things start or finish with enterprise enterprise enterprise (boooring…..)
- Draconian Future (from Keynote Day 2 — referring Apple and Steve Jobs I guess
— http://en.wikipedia.org/wiki/Draconian
- V8 Javascript Engine — http://code.google.com/p/v8/
- Sunspider javascript benchmark — http://www2.webkit.org/perf/sunspider-0.9/sunspider.html
- qik — video sharing site — well, I have heard qik before, but when you use it, with live streaming and instant sharing stuff, it really is amazing
- Dalvik VM — http://en.wikipedia.org/wiki/Dalvik_%28software%29
- VP8 — video codec — http://en.wikipedia.org/wiki/VP8
- What is Android? — http://developer.android.com/guide/basics/what-is-android.html
- What is OpenGL ES ? — http://www.khronos.org/opengles/
–
Sessions I attend
The following three are from the Bootcamp which is one day before the io. I was fast enough to register for the event, that I can enter. This was like a warm up for the actual thing.(Bootcamp Schedule — https://sites.google.com/site/iobootcamp/schedule)
- Introduction to Google App Engine
- Mapping in 3D: Tips and tricks for Google Earth API and KML
- The Big Picture and How to Get Started
–
And these are from the session in io:
- Ignite Google I/O (http://code.google.com/events/io/2010/sessions/ignite-google-io.html) — the ones I like the most are,
-
- Matt Harding (Where The Hell Is Matt?
- Bradley Vickers – How to Row across the North Atlantic, Ration Food and Not Have Your Teammates Eat You
- Casting a wide net: how to target all Android devices (http://code.google.com/events/io/2010/sessions/casting-wide-net-android-devices.html) — way to technical for me, I am not an Android developer (yet). Also next room, there was another session of Paul Graham, it was full
next time pg
- Architecting GWT applications for production at Google (http://code.google.com/events/io/2010/sessions/architecting-production-gwt.html) — Presentation smells like enterprise which I am far from interested. Also, I am not sure about all these code generation stuff for DTOs (Spring Roo), also Vmware&spring is not my favorite source of inspiration (although I play with Grails lately)
- HTML5 status update (http://code.google.com/events/io/2010/sessions/html5-status-chrome.html) — Last session of the i/o 2010. Two product managers of Chrome made a good summary of HTML 5 features and their perspective on the spec.
Keynotes that I can not attend since I was sleeping at that time
- Day 1 — http://www.youtube.com/watch?v=a46hJYtsP-8&feature=player_embedded#!
- Day 2 — they haven’t put a full version yet…
Day One After Party
This was a real nerdvana. a 8 leg giant spider that you can literally drive, pac man, food (like a lot), beer (free as in a lot free), huge screens with geeky videos, a toy like thing that you can control it with your mind and try to fly a ball by focusing sth sexy!, robots that play football, Tesla (sexy electric car), beer, remote control robot that try to demolish balloon with its tail, red wine… 
Toys, Food, Drinks, T-shirts
Nexus One, HTC EVO, t-shirts, lots of Pepsi, Starbucks Coffee
@Remotespots project was started a couple of months ago and and after some time all the technologies were updated to their current versions (Grails 1.2.2, GWT 2.0 which is a huge change from 1.7, and finally grails-gwt 0.5). Since we were busy w/ the features we ignored the upgrade but time has come to sent Remotespots to the wild, and we want it to be ready to its limits. Below you can find the steps and obstacles we encountered during the upgrade process. (I switched to Ubuntu from Windows XP, my headphones are still not working but at least I can open Eclipse under 60 seconds! so the things below is tested on Ubuntu 9.04)
- Download and change GRAILS_HOME to new grails version (1.2.2)
- Run grails upgrade
- Run install-plugin gwt (so that it installs 0.5)
- First obstacle
Error executing script CompileGwtModules: No such property: usingGoogleGin for class: _Events
gant.TargetMissingPropertyException: No such property: usingGoogleGin for class: _Events
at gant.Gant$_dispatch_closure4.doCall(Gant.groovy:329)
at gant.Gant$_dispatch_closure6.doCall(Gant.groovy:334)
at gant.Gant$_dispatch_closure6.doCall(Gant.groovy)
at gant.Gant.withBuildListeners(Gant.groovy:344)
at gant.Gant.this$2$withBuildListeners(Gant.groovy)
at gant.Gant$this$2$withBuildListeners.callCurrent(Unknown Source)
at gant.Gant.dispatch(Gant.groovy:334)
at gant.Gant.this$2$dispatch(Gant.groovy)
at gant.Gant.invokeMethod(Gant.groovy)
at gant.Gant.processTargets(Gant.groovy:495)
at gant.Gant.processTargets(Gant.groovy:480)
To solve it, run grails clean command and empty ~\.grails\1.2.2\scriptCache folder. I found this solution from this link.
grails GWT module ... may need to be (re)compiled
To solve it, run grails compile-gwt-modules command and refresh firefox w/ ctrl+f5 OR alt+shift+r
For the remotespots project, we developed a notification panel which is very similiar to Stackoverflow notification bar. So, what this bar provides is the a HTML message and a close bottom at the right end.
For the close button, instead of adding a hyperlink from the java code, this time we used JSNI which enables you to integrate JavaScript directly into your application.
We have a class called GenericNotifcation in the package org.remote.dogan.client. When a noticition bar is needed,
public static void showNotification(String message, int seconds)
is called.To hide the bar the following method is called,
public static void hideNotification()
So, to make the JSNI close method call from js, we need to call the hideNotification java method from js.
To do this, we add amethod to register hideNotification method a js method for the handwritten javascript
public static native void exportStaticMethod() /*-{
$wnd.closeNotification =
@org.remote.dogan.client.GenericNotifcation::hideNotification();
}-*/;
As a second step, we should call the method exportStaticMethod() to actually make the registration of the js method. We do this in showNotification method but for a generic case, onModuleLoad is good candidate.
public static void showNotification(String message, int seconds)
{
GenericNotifcation.exportStaticMethod();
...
}
So as the last step, we add the js call in the html template like the following:
<a title=”close this notification” onclick=’closeNotification()’ />x</a>
For further information, the documentation for GWT JSNI is here.
Using GWT Listbox with Unicode
In our new project remotespots.com, we use GWT for the front end. Since remotespots supports two languages (English & Turkish), with a listbox we enables users to select which language they are going to use.
GWT’s Listbox is a combo box basically. GWT support HTML in most of its widgets, but this is not the case for ListBox. You can only add String instances to a listbox.
This cause problems with characters which are non-english like ö ü ç
In such a case, to overcome the problem, unicode representation should be used.
ListBox lb = new ListBox();
lb.addItem("English", "en");
lb.addItem("T\u00FBrk\u00E7e", "tr");
The full list of the unicode representations, this link can be used. (http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/TURKISH.TXT)
Using Twitter oauth on GAE/J
Twitter supports oauth and there are many libraries for it, for Java(twitter4J)(oauth-signpost), most of the time you see examples of a desktop version, so it can take time to implement it on a web application (it did take time for my case).
Step 1. Get a Twitter account and create a Twitter application from http://twitter.com/apps (don’t forget to check in browser and enter a valid callback url. 
Step 2. Download twitter4J add the library (in my case twitter4j-core-2.1.1-SNAPSHOT.jar) to project and update classpath
Step 3. Create a web application (I assume you have the Google plugin for Eclipse )
Step 4. Add the following servlets and update your web.xml. First servlet will handle login part. It will create a RequestToken which will create the magical aggrements between the consumer(your application) and provider(twitter). First servlet save the token and secret token since we will need them later.
String token = requestToken.getToken(); String tokenSecret = requestToken.getTokenSecret();
Step 5. You forget to update web.xml didn’t you, update the web.xml
Step 6. Enable session by adding
<sessions-enabled>true</sessions-enabled>
to appengine-web.xml.
You can see my version from http://90.latest.denemekaya.appspot.com/login
ps. don’t forget to set the callback in Twittter to the url of the servlet for callback.
Links:
- http://www.pakzilla.com/2009/10/03/tutorial-java-based-twitter-app-on-google-app-engine/
- Explain the same procedure with Grails — http://blogs.bytecode.com.au/glen/2009/12/08/log-into-your-grails-app-using-your-twitter-credentials.html
Smashing Magazine karsilastigim cok guzel bir yazinin, Turkce ozeti sayilabilecek bir post. Elbette cok cok kisaltilmis bir ozetidir. Yazinin orijinal hali burada.
1. Form yaratirken iki kolonlu tasarim yerine, dikey tasarim kullanin, cunku kullanicilar formu yukaridan asagiya tarayarak doldururlar. Bir diger noktada form’daki aciklama yazilari koyu renk (bold) olmamali.

2. Kullanicilar yuzlere odaklanir. Eger yuz bize degilde, ekranda baska bir yere bakiyorsa, yuzden sonra kullanicilarin bakacagi diger nokta, bakis dogrultusudur.


3. Tasarimin kalitesi, guvenirliliginizi arttirir. Okurlar kitabin kapagindan kesinlikle etkilenirler, bu web icinde gecerli. Eger tasarimdaki yerlesim, tutarlilik, tipografi, renk, still uyumluluk gosteriyorsa, bu ziaretciler uzerinde olumlu etki yapacaktir.

4. Kullanicilar scroll kullanmazlar. Kullanicilarin %77 scroll arayuzunu kullanimiyor, bu yunden sayfanin yuklendiginde gorunen kismi cok onemli.

5. Linkler icin gecerli renk MAVi.
6. Arama kutulari icin ideal genislik, 26 karakter.

7. Beyaz alanlar algiyi arttirir.

8. Sadece 5 kisiyle yapacaginiz kullanilabilirlik testi, sitenizdeki kullanilabilirlik sorunlarinin %85′ini cozecektir.

9. Urunleriniz icin bilgi acisindan aciklayici sayfalar hazirlayin, sadece kisa bir sure bakacak olan ziyaretciler icin bile daha gecerlidir.

10. Kulanicilarin cogu reklamlara (ya da reklama benzeyen ogelere) karsi kor gibidir.



















