<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Shaun Abram &#187; google</title>
	<atom:link href="http://www.shaunabram.com/tag/google/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.shaunabram.com</link>
	<description>Java and Technology weblog</description>
	<lastBuildDate>Wed, 18 Jan 2012 00:39:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>OSCON Day3 &#8211; Google App Engine</title>
		<link>http://www.shaunabram.com/oscon-day3-google-app-engine/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=oscon-day3-google-app-engine</link>
		<comments>http://www.shaunabram.com/oscon-day3-google-app-engine/#comments</comments>
		<pubDate>Sat, 24 Jul 2010 23:43:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[googleAppEngine]]></category>
		<category><![CDATA[oscon]]></category>

		<guid isPermaLink="false">http://www.shaunabram.com/?p=961</guid>
		<description><![CDATA[I have seen several talks on Google App Engine before, but have still not used it in anger, so this talk, Introduction to Google App Engine, acted as a refresher. It was given by Ikai Lan, a software engineer working for the Developer Programs groups at Google. Google App Engine is a way to run [...]]]></description>
			<content:encoded><![CDATA[<p>I have seen several talks on <a href="http://code.google.com/appengine/">Google App Engine</a> before, but have still not used it in anger, so this talk, <a href="http://www.oscon.com/oscon2010/public/schedule/detail/13769">Introduction to Google App Engine</a>, acted as a refresher. It was given by <a href="http://www.oscon.com/oscon2010/public/schedule/speaker/94899">Ikai Lan</a>, a software engineer working for the Developer Programs groups at Google.  </p>
<p>Google App Engine is a way to run your applications on Google infrastructure. You push your code to App Engine and it gets scaled out depending on how many instances you need.</p>
<p>My notes from the talk are below, but you can find the full slides <a href="http://slideshare.net/ikailan">here</a> or <a href="http://www.oscon.com/oscon2010/public/schedule/detail/13812#">here</a>.</p>
<p><span id="more-961"></span></p>
<h2>LAMP Setups</h2>
<p>The motivation for using Google App Engine is due to the limitations or constraints of a typical LAMP (Linux, Apache, MySQL and Perl/PHP/Python) setup.</p>
<h4>1) Single Server</h4>
<p>A single server running the LAMP stack is not scalable and has a single point of failure.</p>
<h4>2) Separate web &#038; database server</h4>
<p>The next step would be to move the Apache server and the database to separate servers. You may get better performance but this is still not a highly scalable solution and you now have two single points of failure.</p>
<h4>3) Multiple web servers</h4>
<p>You can provide a more scalable solution by adding multiple Apache web servers, but now you need load balancing and the database remains as a single point of failure.<br />
In order to utilize the multiple web servers, you can use round robin load balancing. Register the web server IPs with DNS; DNS record is cached with a TTL (Time to Live). But the TTL takes time to propagate down and may not be respected, so if a web server goes does, you can still have problems. Additionally, the database remains a single point of failure.</p>
<h4>4) Master Slave Database</h4>
<p>The next approach is to use a Master Slave database. Note that this approach was also discussed at the Database Scalability Patterns talk, and the Database Sharding talk. This Master Slave database approach improves read throughput, but the Master is now a single point of failure for writes and may die before replication takes place.</p>
<h4>5) Partitioned Database</h4>
<p>So, you can migrate to a partitioned database where you will (hopefully) have better read <em>and </em> write throughput, but where you now have more machines and more management and you may need to update your application logic, queries and schema.</p>
<h2>Google App Engine to the rescue</h2>
<p>So, in order to avoid all the hassle of above, Google propose using the Google App Engine.</p>
<h4>Cloud Computing landscape</h4>
<p>App Engine fits into the Cloud Computing landscape as follows:<br />
Software as a Service: Google Docs, saleforce.com<br />
Platform as a Service: <em>Google App Engine</em>, force.com<br />
Infrastructure as a Service:  Amazon Web Services, Rackspace, VMWare</p>
<h4>App Server</h4>
<p>The App Server component of Google App Engine:</p>
<ul>
<li>Hosts application code</li>
<li>Handles concurrent requests</li>
<li>Enforces isolation for app safety</li>
<li>Maintains statelessness</li>
<li>Supports Python &#038; Java runtimes (and in fact any language than runs on JVM, including Scala)</li>
</ul>
<p>It also supports the following services &#038; APIs</p>
<ul>
<li>Memcache &#8211; Distributed, very fast, in-memory cache</li>
<li>Datastore</li>
<ul>
<li>Uses Bigtable</li>
<li>Distributed, partitioned data stored</li>
<li>Arbitrary Horizontal Scaling to &#8216;Internet Scale&#8217;</li>
<li>Replicated and Fault Tolerant</li>
<li>Predictable query performance with no deadlocks</li>
</ul>
<li>URL Fetch &#8211; Simple Http communication with GET/POST to external services; Allows integration with 3rd party REST APIs</li>
<li>Mail &#8211; Inbound &#038; Outbound mail</li>
<li>XMPP &#8211; Instant messaging</li>
<li>Task Queue &#8211; Background &#038; scheduled computation and processing infrastructure</li>
<li>Images</li>
<li>Blobstore &#8211; Upload and distribute large files</li>
<li>User Services &#8211; User account support including federated login (via Google accounts)</li>
</ul>
<h2>Open Source Implementation &#8211; TyphoonAE</h2>
<p>The presentation finished with a code demo, but the presenter also pointed out that there is an open source implementation of Google App Engine called <a href="http://code.google.com/p/typhoonae/">TyphoonAE</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.shaunabram.com/oscon-day3-google-app-engine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OSCON Day3 &#8211; The Joys of Engineering Leadership</title>
		<link>http://www.shaunabram.com/oscon-day3-leadership/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=oscon-day3-leadership</link>
		<comments>http://www.shaunabram.com/oscon-day3-leadership/#comments</comments>
		<pubDate>Sat, 24 Jul 2010 23:39:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[leadership]]></category>
		<category><![CDATA[oscon]]></category>

		<guid isPermaLink="false">http://www.shaunabram.com/?p=958</guid>
		<description><![CDATA[The first talk of Day 3 at OSCON was &#8220;How to Lose Friends and Alienate People: The Joys of Engineering Leadership&#8221; by Brian &#8216;Fitz&#8217; Fitzpatrick and Ben Collins-Sussman, both from Google. What is an engineering leader? Serves the team Eliminates roadblocks Provides advice, guidance and helps get job done Mutual respect/Mutual trust Promotes technical and [...]]]></description>
			<content:encoded><![CDATA[<p>The first talk of Day 3 at <a href="http://www.oscon.com/oscon2010">OSCON</a> was &#8220;<a href="http://www.oscon.com/oscon2010/public/schedule/detail/13245">How to Lose Friends and Alienate People: The Joys of Engineering Leadership</a>&#8221; by Brian &#8216;Fitz&#8217; Fitzpatrick and Ben Collins-Sussman, both from Google. </p>
<p>What is an engineering leader? </p>
<ul>
<li>Serves the team</li>
<li>Eliminates roadblocks</li>
<li>Provides advice, guidance and helps get job done</li>
<li>Mutual respect/Mutual trust</li>
<li>Promotes technical and social health</li>
<li>Leadership is not a waste of time&#8230;</li>
<li>Being a team leader is a way of scaling yourself</li>
</ul>
<p>The speakers broke their talk on how to be a good leader down in to two sections, which were (in good coding tradition) patterns and anti-patterns&#8230;</p>
<p><span id="more-958"></span></p>
<h2>Anti patterns for leadership</h2>
<p>1. Be everyone&#8217;s friend<br />
Don&#8217;t try to be everyone&#8217;s friend because you still need to be a hard-ass sometimes. Instead, just try to maintain a healthy, working relationships. For example, try having lunch with your team regularly.</p>
<p>2. Treat reports as children<br />
Give responsibility and trust.</p>
<p>3. Micromanage<br />
Micromanagement breeds co-dependency. If you are off for a day, the team can&#8217;t work. They should work on their own initiative, without your commands.</p>
<p>4. Hire pushovers<br />
Don&#8217;t hire people that are dumber than you! If they are smarter, you will build and better team and learn more from them.</p>
<p>5. Compromise when hiring<br />
Don&#8217;t just just hire the top 10% of candidates you interview &#8211; they might not be good enough.</p>
<p>6. Ignore low performers<br />
Do not ignore them! Low performers are the obstacle in the road. They will not go away. Try to motivate them. Maybe need to more-micro-manage. Have an &#8216;acceptable&#8217; level bar.</p>
<p>7. Ignore human problems<br />
Don&#8217;t assume the team has no life outside of work. Keep morale up.</p>
<h2>Patterns</h2>
<p>1. Be honest<br />
There is no such thing as a temporary lapse of integrity!<br />
Deliver criticism directly, constructively and with empathy.<br />
Be honest about your motivation for making decisions.</p>
<p>2. Be a wise zen master<br />
If someone asks hard questions, you can respond with questions.<br />
Don&#8217;t try to manage people!</p>
<p>3. Lose the ego<br />
You don&#8217;t need to be the smartest person in the room. Trust others and respect their abilities.</p>
<p>Appreciate any inquiries the team has; Accept feedback and don&#8217;t be scared to apologize. Humility != Doormat</p>
<p>To influence, be influenceable.</p>
<p>4. Get your hands dirty<br />
Lead by example and understand the problems the team is going through.</p>
<p>5. Delegate<br />
Delegate even if another team member can&#8217;t do a job as well (or as quickly) as you think you can.</p>
<p>6. Seek to replace yourself</p>
<p>7. Make waves<br />
When you lease want to make waves, this is probably the time you should be making most waves.</p>
<p>8. Shield your teams from bureaucracy</p>
<p>9. Succeed and fail as a team<br />
Public praise, private criticism as everyone already knows when someone messed up.</p>
<p>10. Be a catalyst, a teacher and a mentor</p>
<p>12. Set clear goals<br />
Make sure everyone agrees on the milestones and the plan for a projects.<br />
Otherwise you get feature creep and get side tracked.</p>
<p>13. Track happiness &#038; careers<br />
If someone is not happy,find out why.<br />
What do team members want to be doing?<br />
Ask them what they need?<br />
Get everyone to work on fun stuff &#038; dull stuff. Change it up.</p>
<p>Give Autonomy &#038; Trust<br />
e.g. the 20% time @ Google</p>
<p>Mastery<br />
People want to grow; Always want to master new things; Give people a sense of purpose</p>
<p>Managing your manager<br />
Act like a grown up. Encourage people to take responsibility</p>
<p>Pursue responsibility<br />
Do more than is required. Deliver 110%<br />
Take calculate risks</p>
<p>If you fail &#8211; learn. And document the process and what was learned.</p>
<p>Communicate!!</p>
<p>Point out obstacles</p>
<p>Argue<br />
Good leaders don&#8217;t want yes men<br />
Give back structured criticism</p>
<h2>Conclusion</h2>
<p>3 words:</p>
<ul>
<li>Serve</li>
<li>Respect (give more, get more)</li>
<li>Motivate</li>
</ul>
<p>Stop being a manager, be a leader!</p>
<p>Finally, the speaker recommended checking out a talk by Dan Pink on Intrinsic vs Extrinsic Motivations. I think <a href="http://www.ted.com/talks/dan_pink_on_motivation.html">this</a> is it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.shaunabram.com/oscon-day3-leadership/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JUG Meetup: Joshua Bloch (Effective Java)</title>
		<link>http://www.shaunabram.com/svwebjug-joshuabloc/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=svwebjug-joshuabloc</link>
		<comments>http://www.shaunabram.com/svwebjug-joshuabloc/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 06:45:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[JUG]]></category>

		<guid isPermaLink="false">http://www.shaunabram.com/?p=652</guid>
		<description><![CDATA[I had the chance tonight to see Joshua Bloch speak at the Silicon Valley Web JUG meetup down at the Googleplex in Mountain View. I have read and blogged about his great book &#8220;Effective Java&#8221; &#8211; probably the single best book I have read on Java &#8211; so it was great to hear him in [...]]]></description>
			<content:encoded><![CDATA[<p>I had the chance tonight to see Joshua Bloch speak at the Silicon Valley Web JUG <a href="http://www.meetup.com/sv-web-jug/calendar/10878461/">meetup</a> down at the Googleplex in Mountain View. I have read and <a href="http://www.shaunabram.com/effective-java/">blogged</a> about his great book &#8220;Effective Java&#8221; &#8211; probably the single best book I have read on Java &#8211; so it was great to hear him in person. The talk covered a couple of examples from his <a href="http://www.amazon.com/gp/product/032133678X">Java Puzzlers</a> book as well as a discussion on some of the items from the Effective Java book. As expected, he was a great presenter, both insightful and funny.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.shaunabram.com/svwebjug-joshuabloc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GTUG Campout Demos</title>
		<link>http://www.shaunabram.com/gtug-camp-out-demos/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=gtug-camp-out-demos</link>
		<comments>http://www.shaunabram.com/gtug-camp-out-demos/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 17:15:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[campout]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[gtug]]></category>
		<category><![CDATA[wave]]></category>

		<guid isPermaLink="false">http://www.shaunabram.com/?p=545</guid>
		<description><![CDATA[Last night saw the end of the Google Technology Campout weekend, with about 25 or 30 groups giving demos of a lot of cool Wave apps. I particularly liked the robot/gadget that analyzed when it was time for a group of wave participants to leave the wave and meet in real life, supplying a list [...]]]></description>
			<content:encoded><![CDATA[<p>Last night saw the end of the Google Technology Campout weekend, with about 25 or 30 groups giving demos of a lot of cool Wave apps. I particularly liked the robot/gadget that analyzed when it was time for a group of wave participants to leave the wave and meet in real life, supplying a list of possible venues to meet based on the participants&#8217; physical location. A vocabulary analyzer from a group of brothers also looked pretty good. I also liked the h3lp application, kind of like an Onstar four your mobile phone, which pushed out alerts to selected contacts in case of an emergency. In the end, the winner was the video sharing team. </p>
<p>The demo for our BlipWiki project (which I blogged about <a href="http://www.shaunabram.com/gtug-campout-followup/">here</a>) unfortunately had technical difficulties so our presentation didn&#8217;t go so well. One of our 2 browsers couldn&#8217;t seem to connect so we didn&#8217;t get to show our Wiki updating in real time in the way we would have liked. Still, I think we had a great application at the end of the weekend, and I certainly learned a lot, met a lot of great people, and got to know Google Wave much better. A great weekend&#8230;</p>
<p>There are photos and videos from the weekend posted <a href="http://sites.google.com/site/svgtugcampout/video-and-photo">here</a> and a write up in the San Jose <a href="http://www.mercurynews.com/ci_13027427">Mercury News</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.shaunabram.com/gtug-camp-out-demos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GTUG Campout Follow up</title>
		<link>http://www.shaunabram.com/gtug-campout-followup/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=gtug-campout-followup</link>
		<comments>http://www.shaunabram.com/gtug-campout-followup/#comments</comments>
		<pubDate>Sun, 09 Aug 2009 10:12:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[campout]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[gtug]]></category>
		<category><![CDATA[wave]]></category>

		<guid isPermaLink="false">http://www.shaunabram.com/?p=510</guid>
		<description><![CDATA[I&#8217;m currently at the Google Technology User Group Camp out weekend down at Google&#8217;s offices in Mountain View. The objective of the weekend is to form a team and develop an application, using Google technologies. The demos are Sunday afternoon. I joined the Blip Wiki team. A Blip is simply a single message within a [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m currently at the <a href="http://www.meetup.com/sv-gtug/pages/GTUG_Campout:_Silicon_Valley/">Google Technology User Group Camp out</a> weekend down at Google&#8217;s offices in Mountain View. The objective of the weekend is to form a team and develop an application, using Google technologies. The demos are Sunday afternoon.</p>
<p>I joined the <a href="http://tr.im/blipwiki">Blip Wiki</a> team. A Blip is simply a single message within a &#8216;Wave&#8217; conversation. A Wiki, of course, is a software tool that allows users to easily create, link and collaborate on documents. So, our goal with the &#8216;Blip Wiki&#8217; project was to bring the incredible collaboration capabilities of Google Wave (real time updates, autocorrect context sensitive spelling etc) to the easy document setup and linkability of a Wiki.<br />
Although Wave can certainly be used to collaboratively create documents as it is, Wave is inherently conversation focused. We wanted Blip Wiki to be inherently Document focused.</p>
<p>To do this however, we needed to use our own instance of a Wave server i.e. use the <a href="http://code.google.com/p/wave-protocol/">Google Wave Federation Prototype Server</a> rather than the regular Wave server hosted by Google. We also needed to come up with a new client (something like <a href="http://www.tiddlywiki.com/">tiddlywiki</a>) and, most importantly, ensure our client can communicate with the server. Our project won the award for the most ambitious pitch at the start of the weekend!</p>
<h3>Federation Prototype Server and example client</h3>
<p>We got off to a good start by getting the Wave Prototype Server downloaded, building and running (it runs on top of <a href="http://www.igniterealtime.org/projects/openfire/index.jsp">OpenFire</a>, a real time collaboration server that uses XMPP/Jabber). We then got the <a href="http://code.google.com/p/wave-protocol/wiki/ConsoleClient">demo wave client</a> running and talking to our server. We managed this by late Friday evening.</p>
<h3>Client/Server protocol</h3>
<p>Next, we created our own demo client and tried to get it interacting with our Wave server. That is when we started running into problems. First, the client/server protocol has not yet been formalized, and there don&#8217;t seem to be any definite plans to do that yet either. For example, although this <a href="http://www.waveprotocol.org/whitepapers/internal-client-server-protocol">Client Server Protocol White paper</a> describes a protocol and data model, it does not give any details on the format that should be used, or suggestions on how to use it. There is a lengthy discussion in the <a href="http://groups.google.com/group/wave-protocol/browse_thread/thread/a2de2480e4c3beeb/28e7f75f428ad9f3?lnk=raot">Wave Protocol Google Group</a> about this. For example, someone suggests that the client server protocol is just <a href="http://code.google.com/p/protobuf/">protocol buffers</a> &#8216;over the wire&#8217;.  But a protobuf is really just a simple data format, and while I assume &#8216;over the wire&#8217; means RPC, it is all a bit vague.</p>
<h3>Submitting changes</h3>
<p>The client/server protocol used in the example client (a &#8220;toy&#8217; text client) is for &#8220;illustrative purposes only&#8221;, according to this <a href="http://groups.google.com/group/wave-protocol/browse_thread/thread/618ff4e9ef477e80?tvc=2">doc</a>. We couldn&#8217;t seem to find much documentation for it, perhaps because it is not supposed to serve as a standardized example. As a result, we found it difficult to reverse engineer. So, we ended up resorting to using the Client example code to marshal our data to and from the server. The example client code in effect became a sort of interface to the server for us. A client side stub, if you will. (We had this running in the web tier servlet layer).</p>
<h3>Receiving updates</h3>
<p>So, after we had used the Client example code to submit changes (blip updates) to the server, our next hurdle was understanding the data that gets returned. Ideally, we would like a &#8216;delta&#8217; of the data. That is, after the server has done it <a href="http://www.waveprotocol.org/whitepapers/operational-transform">Operational Transformation</a> magic, we would just like the latest and greatest version of the data to display on the client. However, this proved difficult to get from the server. Instead all I could seem to get was a non-delimited complete history of the blip. I admit that this was done using pretty hacky code. I am sure there must be another, better way!</p>
<p>So, we ended up taking a similar approach to the example client, and just displaying the latest submissions.</p>
<h3>Demo ready &#8211; almost&#8230;</h3>
<p>Right now, we have a working client and server with updates made on one user&#8217;s WikiBlip automatically showing up in another users.</p>
<p>It would have been really nice to be able to deploy our local Wave Server to app engine, but apparently this isn&#8217;t possible since the OpenFire jars required aren&#8217;t on the whitelist of allowed jars.<br />
It also would have been nice to experiment with our local Wave server talking to the real Google Wave server (e.g. to have a regular wave client user be able to interact with a blip wiki), but apparently this is not possible due to authentication issues.</p>
<p>So, we chose a very difficult task for the weekend! But, we have a working version ready to demo and it has been a great weekend all in all.</p>
<h3>Thank you&#8217;s</h3>
<p>A big thank you to
<ul>
<li>Sriram and Sreejith, my BlipWiki teammates </li>
<li>Kevin and Van from the GTUG</li>
<li>Stephanie, Brian, Fred and all the all Googlers who made the weekend possible and great! </li>
</ul>
<p>I will post again later with the results of the demo&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.shaunabram.com/gtug-campout-followup/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Google Technology User Group Campout</title>
		<link>http://www.shaunabram.com/gtu-campout/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=gtu-campout</link>
		<comments>http://www.shaunabram.com/gtu-campout/#comments</comments>
		<pubDate>Sun, 19 Jul 2009 20:13:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[googleAppEngine]]></category>
		<category><![CDATA[gtug]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[wave]]></category>

		<guid isPermaLink="false">http://www.shaunabram.com/?p=433</guid>
		<description><![CDATA[I have signed up for the Google Technology User Group (GTUG) Campout. It is a weekend (August 7-9, 2009) of designing and coding an application, as part of a team, using Google technologies. As far as I know, Google &#8216;technologies&#8217; can include things like GWT, Android, OpenSocial etc, but there will be a particular emphasis [...]]]></description>
			<content:encoded><![CDATA[<p>I have signed up for the <a href="http://www.meetup.com/sv-gtug/pages/GTUG_Campout:_Silicon_Valley/">Google Technology User Group (GTUG) Campout</a>. It is a weekend (August 7-9, 2009) of designing and coding an application, as part of a team, using Google technologies. As far as I know, Google &#8216;technologies&#8217; can include things like <a href="http://code.google.com/webtoolkit/">GWT</a>, <a href="http://www.android.com/about/">Android</a>, <a href="http://code.google.com/apis/opensocial/">OpenSocial</a> etc, but there will be a particular emphasis on <a href="http://wave.google.com/">Google Wave</a> (due to members of the Wave team being out and about to help), and hence <a href="http://code.google.com/appengine/">Google App Engine</a>.</p>
<p>I am not too familiar with Wave yet, so this should be a great opportunity to get to know it better, meet a bunch of fellow techs, and hopefully produce something cool by the end of the weekend. Looking forward to it&#8230;</p>
<p>Registration is free, so if you are interested you can sign up at <a href="http://gtug-campout-sv.eventbrite.com/">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.shaunabram.com/gtu-campout/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SF JUG: Android UIs</title>
		<link>http://www.shaunabram.com/sfjug-android/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sfjug-android</link>
		<comments>http://www.shaunabram.com/sfjug-android/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 05:22:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[JUG]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://www.shaunabram.com/?p=416</guid>
		<description><![CDATA[There was another great San Francisco JUG meeting tonight down at the Google offices. It was all very well organized as usual by Sasa. The speaker was Romain Guy from Google&#8217;s Android UI team. He gave his talk from Google IO: Turbo-charge your UI: How to Make your Android UI Fast and Efficient. The presentation [...]]]></description>
			<content:encoded><![CDATA[<p>There was another great <a href="http://www.sfjava.org/calendar/10674274/">San Francisco JUG</a> meeting tonight down at the Google offices. It was all very well organized as usual by <a href="http://www.sfandroid.org/members/3329273/">Sasa</a>. The speaker was Romain Guy from Google&#8217;s Android UI team. He gave <a href="http://code.google.com/events/io/sessions/TurboChargeUiAndroidFast.html">his talk</a> from <a href="http://code.google.com/events/io/">Google IO</a>: Turbo-charge your UI: How to Make your Android UI Fast and Efficient.</p>
<p>The presentation slides can be found <a href="http://dl.google.com/io/2009/pres/Th_0230_TurboChargeYourUI-HowtomakeyourAndroidUIfastandefficient.pdf">here</a>.</p>
<p>I thought Romain was an excellent presenter and did a top job of talking on his area of expertise: Android UI development. He covered the issues you need to be aware of when developing Android UIs if you want them to be performant, best practices and work-arounds for the gotchas, as well as useful tools that can be used for development. Personally, I would have benefited from more of a broad overview and introduction to Android, but that is more a reflection of my own lack of knowledge on Android! Maybe the newly created <a href="http://www.sfandroid.org/">Android User Group</a> will provide an &#8216;Intro To&#8217; type talk at some point&#8230;</p>
<p>First, Romain covered the Andriod UI terminology (like Canvas, Drawable, Surfaces and Views) before covering the architecture.</p>
<p>The bulk of his talk covered how to make sure you UI runs fast, including:</p>
<ul>
<li> Avoiding runtime scaling of background images</li>
<li> Avoiding invalidating (i.e. redrawing) the entire screen and instead only invalidate the small part of the screen that has actually changed.</li>
<li> Minimizing the number of views you use (ideally have &lt;100, which seems pretty reasonable for a tiny phone screen!) and talked about some techniques to help with this including using ViewStubs and recycling views</li>
<li> Avoid allocating memory (apparently the Garbage Collector is slow and pretty much stops the world when it is running)</li>
<li> Use SoftReferences (objects that only have soft references to them will be kicked out of memory if the Garbage Collector needs more memory) and WeakReferences (which can help to avoid memory leaks) when possible</li>
</ul>
<p>He also talked about some neat dev and debug tools including <a href="http://android-developers.blogspot.com/2009/02/track-memory-allocations.html">Allocation Tracker</a> (which monitors objects being created, memory being allocated etc) and <a href="http://developer.android.com/guide/developing/tools/hierarchy-viewer.html">Hierarchy Viewer</a> (which shows you all the devices/windows/views you have how long things are taking to render).<br />
He also mentioned the <a href="http://developer.android.com/guide/developing/tools/emulator.html">Android emulator</a> that can be used for testing your apps.</p>
<p>Some of the questions from the Q&amp;A session included:</p>
<p>Q: Will Android support languages other than Java?<br />
A: Romain mentioned that there is a version of Scala and python that work on Android, but currently all APIs are in Java.</p>
<p>Q: Does Flash work on Android?<br />
A: Development is on-going and the Android team is working with Adobe.<br />
(I found more on the web about this topic here: <a href="http://gizmodo.com/5300800/flash-for-android-webos-landing-in-october">http://gizmodo.com/5300800/flash-for-android-webos-landing-in-october</a>)</p>
<p>Q: Can JavaFX be used on Android?<br />
A: Code might be hard to run on the phone and may not be performant.</p>
<p>Q: Apparently, Sony Ericsson are also building an Android phone. How do you plan to avoid fragmentation as other companies start shipping Android phones?<br />
A: CTS &#8211; Compatibility Test Suite<br />
You cant ship a phone as &#8216;Android&#8217; if it doesn&#8217;t pass the CTS.</p>
<p>Other links:<br />
<a href="http://d.andriod.com">http://d.andriod.com</a><br />
<a href="http://source.android.com/">source.android.com</a><br />
<a href="http://android.git.kernel.org/">android.git.kernel.org</a><br />
<a href="http://code.google.com/p/apps-for-android/">code.google.com/p/apps-for-andriod</a><br />
<a href="http://android-developers.blogspot.com/">http://android-developers.blogspot.com/</a><br />
<a href="http://forum.xda-developers.com/">http://forum.xda-developers.com/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.shaunabram.com/sfjug-android/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

