<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0" xml:base="http://www.screaming-penguin.com">
<channel>
 <title>Screaming Penguin</title>
 <link>http://www.screaming-penguin.com</link>
 <description />
 <language>en</language>
<feedburner:info uri="screaming-penguin" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.0/</creativeCommons:license><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://www.screaming-penguin.com/site_rss.xml" /><feedburner:emailServiceId>screaming-penguin</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site.</feedburner:browserFriendly><item>
 <title>Vega</title>
 <link>http://feedproxy.google.com/~r/screaming-penguin/~3/1oKij4x8f0Q/7745</link>
 <description>This is the tablet I am really waiting for. Again, I can't stand the limited storage, but at least it has an SD slot:
&lt;br/&gt;&lt;br/&gt;
&lt;object width="540" height="350"&gt;&lt;param name="movie" value="http://vms.slashgear.tv/sgtv/sgtv_player.swf"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://vms.slashgear.tv/sgtv/sgtv_player.swf" quality="high" width="540" height="373" allowFullScreen="true" allowScriptAccess="always" flashvars="settings=http://vms.slashgear.tv/sgtv/sgtv_embed.php?vkey=e9753913f4d435b53c30" name="SlashGearTV" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;!--break--&gt;&lt;img src="http://feeds.feedburner.com/~r/screaming-penguin/~4/1oKij4x8f0Q" height="1" width="1"/&gt;</description>
 <comments>http://www.screaming-penguin.com/node/7745#comments</comments>
 <category domain="http://www.screaming-penguin.com/taxonomy/term/3">Hardware</category>
 <pubDate>Thu, 28 Jan 2010 20:53:59 +0000</pubDate>
 <dc:creator>kebernet</dc:creator>
 <guid isPermaLink="false">7745 at http://www.screaming-penguin.com</guid>
<feedburner:origLink>http://www.screaming-penguin.com/node/7745</feedburner:origLink></item>
<item>
 <title>Obligatory Hitler</title>
 <link>http://feedproxy.google.com/~r/screaming-penguin/~3/WqFyaXXZ0w0/7744</link>
 <description>&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/lQnT0zp8Ya4&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/lQnT0zp8Ya4&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;img src="http://feeds.feedburner.com/~r/screaming-penguin/~4/WqFyaXXZ0w0" height="1" width="1"/&gt;</description>
 <comments>http://www.screaming-penguin.com/node/7744#comments</comments>
 <category domain="http://www.screaming-penguin.com/taxonomy/term/16">Humour</category>
 <pubDate>Thu, 28 Jan 2010 17:52:35 +0000</pubDate>
 <dc:creator>kebernet</dc:creator>
 <guid isPermaLink="false">7744 at http://www.screaming-penguin.com</guid>
<feedburner:origLink>http://www.screaming-penguin.com/node/7744</feedburner:origLink></item>
<item>
 <title>iPad: Maybe for thee, but not for me.</title>
 <link>http://feedproxy.google.com/~r/screaming-penguin/~3/mykizsjyL_M/7743</link>
 <description>&lt;p&gt;I have to admit, I am really disappointed in the iPad. The short summary: I want a small Mac, not a big iPod.&lt;/p&gt;
&lt;p&gt;The form factor is great. I have always thought the MID market was wrong on the size factor. 7-8" screens are too small. 9.7 is just about right. The battery life -- Apple says 10 hours, so I am figuring 6 or 7 in the real world -- seems OK, but not great. Everyone on the interwebs is talking about how fast it is, that is good.&lt;/p&gt;
&lt;p&gt;There are, however, MUTLIPLE deal breakers for me on the iPad:&lt;/p&gt;
&lt;p&gt;First, storage. 64GB is the top end, and that is worthless for a device of this class. It would have been much better if they had added another pound to the weight and put in a bigger battery and a 300GB HD. Yeah, you got a 720p screen, but you can't store more than 4 or 5 HD movies on the device. That wouldn't be bad, except, WAIT! Unlike the Apple TV, you can't do network syncing/streaming, so moving content onto the device requires doing to your desktop. &lt;/p&gt;
&lt;p&gt;Second, the fracking App store. The App store crap is 60% of the reason I left the iPhone for an Android phone, and I don't regret it at all. I certainly don't want to get into another platform where Apple rules with an iron fist. Is Apple going to reject the "Kindle for iPad" because it duplicates the functionality of iBook? I don't need this shit.&lt;/p&gt;
&lt;p&gt;Third, iPhone OS: No multitasking and background apps on this "Tablet class" computer? Drive around.&lt;/p&gt;
&lt;p&gt;Really the question for me is, "Where does this fit in my life?" I have a phone, a Kindle, an iPod and a laptop that make the trip to and from home everyday with me. If the iPad could replace two of those devices, sure. As it is, I can't see a single function that the iPad can perform better than one of the devices I already have.&lt;/p&gt;
&lt;p&gt;There are of course other questions: Why is there no user facing CCD and iChat support? Why is there no WiFi syncing? Why is there no HDMI port on the thing?&lt;/p&gt;
&lt;p&gt;Listening to Leo Laporte, his usual stable of idiots are saying this will kill the MacBook Air. Whatever. The Air is a computer, this is a PDA. Actually, if the iPad was an Air sans keyboard, THAT would be an exciting product.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/screaming-penguin/~4/mykizsjyL_M" height="1" width="1"/&gt;</description>
 <comments>http://www.screaming-penguin.com/node/7743#comments</comments>
 <category domain="http://www.screaming-penguin.com/taxonomy/term/3">Hardware</category>
 <pubDate>Wed, 27 Jan 2010 21:02:34 +0000</pubDate>
 <dc:creator>kebernet</dc:creator>
 <guid isPermaLink="false">7743 at http://www.screaming-penguin.com</guid>
<feedburner:origLink>http://www.screaming-penguin.com/node/7743</feedburner:origLink></item>
<item>
 <title>Android SQLite Basics: creating and using a database, and working with sqlite3</title>
 <link>http://feedproxy.google.com/~r/screaming-penguin/~3/CAcZZXJgHhw/7742</link>
 <description>&lt;style type="text/css"&gt;
code {
   display:block;
   font: 1em 'Courier New', Courier, Fixed, monospace;
   font-size : 100%;
   color: #000;
   background : #fff
   overflow : auto;
   text-align:left;
   border : 1px solid #5581C0;
   padding : 0px 20px 0 30px;
   margin:1em 0 1em 0;
   line-height:17px;
   font-weight:normal!important;
}

.codeish {
   font: 1em 'Courier New', Courier, Fixed, monospace;
   font-size : 100%;
   font-weight: bold;
   color: #000;
   background : #fff
}
&lt;/style&gt;

Because I always have to re-learn this myself, I though I would write a quick reference tutorial on creating and using a database with an Android application. This isn't terribly well documented in the Android docs, and though many &lt;span style="codeish"&gt;ContentProvider&lt;/span&gt; tutorials exist (&lt;a href="http://unlocking-android.googlecode.com/svn/chapter5/trunk/ProviderWidgets/"&gt;such as the Unlocking Android code for chapter 5&lt;/a&gt;,and the NotePad tutorial included with the SDK), and these help a lot with general database concepts, they are really more complicated than what a basic application needs - a database to store and retrieve stuff.
&lt;br /&gt;&lt;br /&gt;
I will walk through the code and tools for an oversimplified example here, with the ultimate goal of inserting and retrieving some data from an application, and then examining the database using a shell and the &lt;b&gt;sqlite3&lt;/b&gt; command line tool. The entire code for this example is available here: &lt;a href="http://totsp.com/svn/repo/AndroidExamples/trunk/"&gt;http://totsp.com/svn/repo/AndroidExamples/trunk/&lt;/a&gt;.
&lt;br /&gt;&lt;br /&gt;
First, to get this rolling, we need to create an Android application that HAS a database. We could use any built in application that has a database just to explore it, such as &lt;i&gt;com.android.alarmclock&lt;/i&gt;), but we are going to create one here for completeness. After it's setup, the interface for our application will look like the screen shot shown below:
&lt;br /&gt;
&lt;img width="400" height="250" src="/images/android_examples/android_examples_main.png" alt="Android Examples" /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;!--break--&gt;
Yeah this project is ugly, and it only has one &lt;span style="codeish"&gt;Activity&lt;/span&gt;, but for our purposes here we really aren't trying to create a fancy UI (or anything that is complicated on any level). To create this project we will use the &lt;a href="http://www.eclipse.org/"&gt;Eclipse IDE&lt;/a&gt;. Along with Eclipse, we will also of course need to have &lt;a href="http://developer.android.com/intl/es/sdk/index.html"&gt;the Android SDK&lt;/a&gt; with the correct Eclipse ADT Plug-In as a prerequisite too (to get that see the instructions at the aforelinked site). 
&lt;br /&gt;&lt;br /&gt;
&lt;b&gt;1.&lt;/b&gt; To create a basic Android project, we will simply select &lt;b&gt;File-&gt;New-&gt;Other-&gt;Android-&gt;Android Project&lt;/b&gt;. On the dialog we will then enter the application name &lt;b&gt;AndroidExamples&lt;/b&gt;, and the package name &lt;span class="codeish"&gt;com.totsp.androidexamples&lt;/span&gt;, along with some other settings, as shown in the figure below:
&lt;br /&gt;
&lt;img src="/images/android_examples/android_examples_create_project.png" alt="Create Android Project with Eclipse" /&gt;
&lt;br /&gt;&lt;br /&gt;

The target we choose must be one that we have installed when we setup or configued the Android SDK. For this example we are using 1.6 because it is still the most common Android platform that user's phones are running (we are using the 2.1 SDK, with a 1.6 Target). 
We will also set the "Min SDK Version" to "4" which is SDK 1.6. This is a confusing part of the Android setup at this point (names are transposed from "sdk" to "api" and such) but the details are &lt;a href="http://developer.android.com/intl/es/guide/appendix/api-levels.html"&gt;documented somewhat&lt;/a&gt;.
&lt;br /&gt;&lt;br /&gt;

Once we have the default sample project in place, the next step will be to create a helper class that can create the database and encapsulate other SQL details. We will call this class &lt;span class="codeish"&gt;DataHelper&lt;/span&gt;. Within this class (at the end) we will include an important inner class that provides a &lt;span class="codeish"&gt;SQLiteOpenHelper&lt;/span&gt;. The full code is shown below:
&lt;br /&gt;
&lt;pre&gt;
&lt;code&gt;
package com.totsp.androidexamples;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteStatement;
import android.util.Log;

import java.util.ArrayList;
import java.util.List;

public class DataHelper {

   private static final String DATABASE_NAME = "example.db";
   private static final int DATABASE_VERSION = 1;
   private static final String TABLE_NAME = "table1";

   private Context context;
   private SQLiteDatabase db;

   private SQLiteStatement insertStmt;
   private static final String INSERT = "insert into " 
      + TABLE_NAME + "(name) values (?)";

   public DataHelper(Context context) {
      this.context = context;
      OpenHelper openHelper = new OpenHelper(this.context);
      this.db = openHelper.getWritableDatabase();
      this.insertStmt = this.db.compileStatement(INSERT);
   }

   public long insert(String name) {
      this.insertStmt.bindString(1, name);
      return this.insertStmt.executeInsert();
   }

   public void deleteAll() {
      this.db.delete(TABLE_NAME, null, null);
   }

   public List&lt;String&gt; selectAll() {
      List&lt;String&gt; list = new ArrayList&lt;String&gt;();
      Cursor cursor = this.db.query(TABLE_NAME, new String[] { "name" }, 
        null, null, null, null, "name desc");
      if (cursor.moveToFirst()) {
         do {
            list.add(cursor.getString(0)); 
         } while (cursor.moveToNext());
      }
      return list;
   }

   private static class OpenHelper extends SQLiteOpenHelper {

      OpenHelper(Context context) {
         super(context, DATABASE_NAME, null, DATABASE_VERSION);
      }

      @Override
      public void onCreate(SQLiteDatabase db) {
         db.execSQL("CREATE TABLE " + TABLE_NAME + " 
          (id INTEGER PRIMARY KEY, name TEXT)");
      }

      @Override
      public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
         Log.w("Example", "Upgrading database, this will drop tables and recreate.");
         db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
         onCreate(db);
      }
   }
}
&lt;/code&gt;
&lt;/pre&gt;

&lt;b&gt;UPDATE&lt;/b&gt;: I just noticed when glancing back at this example that I am not closing the cursors. Those should always be closed when you are done with them (or use a managed Cursor). I will update this when I get a chance, but keep that in mind - not shown here, but should be done - see &lt;a href="http://developer.android.com/reference/android/database/Cursor.html"&gt;Cursor.close&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;

This class is oversimplified, as I have said it would be, for example it's using a database with one table and one column, but, it still covers some core Android concepts. We won't go into great detail concerning this class here, it should be mostly understandable from the code, but a few important things to note are: 

&lt;li&gt;it includes an implementation of &lt;span class="codeish"&gt;SQLiteOpenHelper&lt;/span&gt; as an inner class&lt;/li&gt;
&lt;li&gt;it demonstrates two different ways of interacting with the database in code, with a &lt;span class="codeish"&gt;SQLiteStatement&lt;/span&gt; for inserts (which has the advantage of being pre-compiled, versus regular, but easier &lt;a href="http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html"&gt;&lt;span class="codeish"&gt;SQLiteDatabase.query()&lt;/span&gt;&lt;/a&gt; methods you probably also want to be familiar with), and directly by querying for selects&lt;/li&gt;
&lt;li&gt;it shows a useful pattern (though again, oversimplified here) of exposing data persistence/retrieval methods on the helper&lt;/li&gt;
&lt;br /&gt;&lt;br /&gt;
To use this class from the default &lt;span class="codeish"&gt;Main.java&lt;/span&gt; class that we let the Android Eclipse Plug-In generate, we will modify it a bit to create an instance of our &lt;span class="codeish"&gt;DataHelper&lt;/span&gt; and then use it to create and retrieve data as seen below.(NOTE: In the real world you might do this once per application, say by using the oft overlooked Android &lt;span class="codeish"&gt;Application&lt;/span&gt; class, where you could create the &lt;span class="codeish"&gt;DataHelper&lt;/span&gt; once, and then expose the reference to other classes, rather than in &lt;span class="codeish"&gt;Activity.onCreate()&lt;/span&gt;):
&lt;br /&gt;
&lt;pre&gt;
&lt;code&gt;
package com.totsp.androidexamples;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import java.util.List;

public class Main extends Activity {
    
   private TextView output;
   
   private DataHelper dh;
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        this.output = (TextView) this.findViewById(R.id.out_text);
        
        this.dh = new DataHelper(this);
        this.dh.deleteAll();
        this.dh.insert("Porky Pig");
        this.dh.insert("Foghorn Leghorn");
        this.dh.insert("Yosemite Sam");        
        List&lt;String&gt; names = this.dh.selectAll();
        StringBuilder sb = new StringBuilder();
        sb.append("Names in database:\n");
        for (String name : names) {
           sb.append(name + "\n");
        }
        
        Log.d("EXAMPLE", "names size - " + names.size());
        
        this.output.setText(sb.toString());
        
    }
}
&lt;/code&gt;
&lt;/pre&gt;

For this class to work, we also need to change the &lt;span class="codeish"&gt;main.xml&lt;/span&gt; layout file it relies on. We need to include one additional &lt;span class="codeish"&gt;TextView&lt;/span&gt; for the output, as seen below:

&lt;br /&gt;
&lt;pre&gt;
&lt;code&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;
&amp;lt;ScrollView 
  xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"&amp;gt;
  &amp;lt;LinearLayout xmlns:android=
     "http://schemas.android.com/apk/res/android"
      android:orientation="vertical" 
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"&amp;gt;
    &amp;lt;TextView android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:text="@string/hello" /&amp;gt;
    &amp;lt;TextView android:id="@+id/out_text"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:text="" /&amp;gt;
  &amp;lt;/LinearLayout&amp;gt;
&amp;lt;/ScrollView&amp;gt;
&lt;/code&gt;
&lt;/pre&gt;


With that, we have an application that we should be able to launch and run in the emulator, and it should look like the first screen shot we saw above - a basic black screen with white text and a few names as output. The names come from the database, which now exists, and now we can move on to using &lt;b&gt;sqlite3&lt;/b&gt;. 
&lt;br /&gt;&lt;br /&gt;
Android uses &lt;a href="http://www.sqlite.org/"&gt;SQLite&lt;/a&gt; as it's built in embedded database. If you need to store local application data, rather than going to simpler mechanisms like the file system, or more complicated means such as the network, you use the database. 
&lt;br /&gt;&lt;br /&gt;
To examine the database we can login using the shell provided by the &lt;b&gt;Android Debug Bridge&lt;/b&gt;. To use this we need the "tools" folder of the SDK on our path (see the SDK documentation if you need more information about that). If we start the app in Eclipse (Run As-
&gt;Android Application), and leave it running, we should then be able to login with the command:
&lt;br /&gt;
&lt;code&gt;
&lt;pre&gt;
ccollins@crotalus:~$ adb -e shell
# 
&lt;/pre&gt;
&lt;/code&gt;
&lt;br /&gt;
The -e option tells ADB to use the emulator, rather than a possible connected device (and returns an error if more than one emulator is running). The "#" is the command prompt, we are logged in. 
&lt;br /&gt;&lt;br /&gt;
Once logged in we can browse around with the "ls" command. The directory we are interested in is &lt;b&gt;/data/data/com.totsp.androidexamples/databases&lt;/b&gt; (each application has a directory at the path /data/data/PACKAGE_NAME). We can change to that directory with the "cd" command. Once there we can use the command line SQLite tool, &lt;b&gt;sqlite3&lt;/b&gt;, to examine our database, as follows:
&lt;br /&gt;
&lt;code&gt;
&lt;pre&gt;
# sqlite3 example.db
SQLite version 3.5.9
Enter ".help" for instructions
sqlite&gt; select * from sqlite_master;
table|android_metadata|android_metadata|3|CREATE TABLE android_metadata (locale TEXT)
table|table1|table1|4|CREATE TABLE table1 (id INTEGER PRIMARY KEY, name TEXT)
sqlite&gt; 
&lt;/pre&gt;
&lt;/code&gt;
&lt;br /&gt;
We login with "sqlite3 [database_name]" and then we can run basic SQL commands that are supported by SQLite (see the documentation there for full details). One handy table is the &lt;b&gt;sqlite_master&lt;/b&gt; that we can see shows all the other tables inside our database. 
&lt;br /&gt;&lt;br /&gt;
Some other interesting commands are:
&lt;code&gt;
&lt;pre&gt;
sqlite&gt; .schema
CREATE TABLE android_metadata (locale TEXT);
CREATE TABLE table1 (id INTEGER PRIMARY KEY, name TEXT);
sqlite&gt; .tables
android_metadata  table1          
sqlite&gt; select * from table1;
1|Porky Pig
2|Foghorn Leghorn
3|Yosemite Sam
sqlite&gt; 
&lt;/pre&gt;
&lt;/code&gt;
&lt;br /&gt;
We can use &lt;b&gt;.help&lt;/b&gt; from within the sqlite3 shell (it has it's own shell, apart from the emulator shell we are logged in to), to see a full list of commands. commands that start with "." are built in, and perform a function - such as .schema and &lt;b&gt;.tables&lt;/b&gt; that we see above. SQL commands themselves can also be run directly by typing them in - something we also see above (typed commands are run as soon as a ; is encountered and you press enter). 
&lt;br /&gt;&lt;br /&gt;
With that, we have the basics. We have an application that creates a database and stores and retrieves data using it, and we have done a bit of exploring with the SQLite tools in ADB. In the future I hope to expand on this article and add some more involved tables, and further examples such as Android unit testing (another not so well documented, but extremely useful, part of the platform).&lt;img src="http://feeds.feedburner.com/~r/screaming-penguin/~4/CAcZZXJgHhw" height="1" width="1"/&gt;</description>
 <comments>http://www.screaming-penguin.com/node/7742#comments</comments>
 <category domain="http://www.screaming-penguin.com/taxonomy/term/17">Tutorials</category>
 <pubDate>Sun, 17 Jan 2010 19:48:47 +0000</pubDate>
 <dc:creator>charlie.collins</dc:creator>
 <guid isPermaLink="false">7742 at http://www.screaming-penguin.com</guid>
<feedburner:origLink>http://www.screaming-penguin.com/node/7742</feedburner:origLink></item>
<item>
 <title>Google. Wow.</title>
 <link>http://feedproxy.google.com/~r/screaming-penguin/~3/PPcc9fWunSs/7741</link>
 <description>&lt;p&gt;Never thought I would be posting about Google in the "Politics" topic, but hey.&lt;/p&gt;
&lt;p&gt;In response to a wide ranging attack on Google's infrastructure, that is never &lt;b&gt;explicitly&lt;/b&gt; blamed on the Chinese government, they are threatening to take their ball and go the fuck home:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
Second, we have evidence to suggest that a primary goal of the attackers was accessing the Gmail accounts of Chinese human rights activists. Based on our investigation to date we believe their attack did not achieve that objective. Only two Gmail accounts appear to have been accessed, and that activity was limited to account information (such as the date the account was created) and subject line, rather than the content of emails themselves.&lt;/p&gt;
&lt;p&gt;Third, as part of this investigation but independent of the attack on Google, we have discovered that the accounts of dozens of U.S.-, China- and Europe-based Gmail users who are advocates of human rights in China appear to have been routinely accessed by third parties. These accounts have not been accessed through any security breach at Google, but most likely via phishing scams or malware placed on the users' computers.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
These attacks and the surveillance they have uncovered--combined with the attempts over the past year to further limit free speech on the web--have led us to conclude that we should review the feasibility of our business operations in China. We have decided we are no longer willing to continue censoring our results on Google.cn, and so over the next few weeks we will be discussing with the Chinese government the basis on which we could operate an unfiltered search engine within the law, if at all. We recognize that this may well mean having to shut down Google.cn, and potentially our offices in China.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Seriously. I am awestruck. The Chinese have seriously pissed off The Google. I honestly can't think of another company that would look Wall Street in the face and say, "We are going to tell China to sit and spin."&lt;/p&gt;
&lt;p&gt;I have, in this space and personally, defended Google.cn's filtering of search results. They comply with local laws whereever they operate, which includes filtering neo-Nazi material in Germany. God knows what the Auzzies are going to end up with in their current debacle. This, however, really is about the collective Google being pissed. These attacks don't change the nature of legal compliance with filtering, but speak directly to the nature of Rule of Law in China -- only if you work under the presumption that these attacks were the work of the government. I don't know that "Don't be evil" changed between yesterday and today. What changed was redefinition of the rules, and the stirring of ire.&lt;/p&gt;
&lt;p&gt;"This far, no farther." Wonder where my Nexus One was fabricated.&lt;/p&gt;
&lt;p&gt;I am, however, concerned what Google unilaterally deciding to not filter Google.cn result means to their employees in China. If they have put their staff in a position of facing retribution from the Chinese government, that is galactically irresponsible.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/screaming-penguin/~4/PPcc9fWunSs" height="1" width="1"/&gt;</description>
 <comments>http://www.screaming-penguin.com/node/7741#comments</comments>
 <category domain="http://www.screaming-penguin.com/taxonomy/term/22">Politics</category>
 <pubDate>Wed, 13 Jan 2010 00:50:03 +0000</pubDate>
 <dc:creator>kebernet</dc:creator>
 <guid isPermaLink="false">7741 at http://www.screaming-penguin.com</guid>
<feedburner:origLink>http://www.screaming-penguin.com/node/7741</feedburner:origLink></item>
<item>
 <title>Nexus One Review</title>
 <link>http://feedproxy.google.com/~r/screaming-penguin/~3/LObOi8hfDqQ/7740</link>
 <description>&lt;p&gt;So I have had the &lt;A href="http://www.google.com/phone/static/en_US-nexusone_tech_specs.html"&gt;N1&lt;/a&gt; for two days now, and I think I am ready to post my thoughts.&lt;/p&gt;
&lt;p&gt;First, this is a great phone. It can't be overstated what a difference the 1gHz Snapdragon makes coming from the 528mHz ARM on the MyTouch3G. It feels wonderful to use, and even with all the animations all the way up, apps just fly by without even a little bit of thought. Android 2.1 isn't much different than the 2.0 the Droid has. Of course, there is the animated wallpaper. And in keeping with Android trends, the first batch is pretty tasteless. The smoke one is nice once you pick a non-assy Lime green that is the default. Seriously. Google needs a few more people with some taste working on this stuff.&lt;/p&gt;
&lt;p&gt;Physically, the phone itself is the first phone I have seen that I would say squarely bests the iPhone in the "how does it feel in your hand" test. It has a good weight to it (slightly lighter than an iPhone), and the big flat battery inside gives it a good balance. The OLED screen is, literally, mindblowing. The contrast ratio is great. Full brightness and blacks are midnight-in-a-cave-for-Ray-Charles black. The white is not-quite paper white, but doesn't have that yellow lean a lot of the mobiles seem to have. The part that looks like it is metal on the case isn't. It is plastic, but feels pretty good. The back is covered with that grippy polymer felt stuff, so it has the feel of a mid-90s ThinkPad. I love that.&lt;/p&gt;
&lt;p&gt;The buttons on the bottom are capacitive, and that was a frakking idiotic call. I hate capacitive buttons because it is much, MUCH to easy to accidentally press one. The also seem to not buffer presses when the phone is busy like a hardware button, which means sometimes you might "miss" a press. That sucks.&lt;/p&gt;
&lt;p&gt;Battery life isn't nearly what is advertised, but seems comparable to the iPhone 3G and MT3G I have had in the past. It does seem to take a long time (3hours or so?) to get a full charge from empty.&lt;/p&gt;
&lt;p&gt;The audio on the headphone jack doesn't get loud enough for my taste. At max volume it still won't drown out street noise. It does use 3 core mini jack headphones, which is good. It comes with a pair that have a mic and FF, Play/Pause/RW buttons on it that are pretty good.&lt;/p&gt;
&lt;p&gt;I know that seems like a lot of complaints, but really, I am thrilled. Using the phone, it just feels like a million dollars, and Android just FLIES on it. Apps come and go and you wait for nothing but network IO. There have been some small improvements to the browser, and with the new CPU, it feels much faster than any other phone I have ever seen.&lt;/p&gt;
&lt;p&gt;I also wonder why, this phone marketed by Google, didn't just come with all the Google apps preinstalled. I still had to go DL Sky Map, Goggles, Translate, Listen, Scoreboard, Finance, yadda, yadda, yadda from the store. Why not just dump the entire Google experience. Also, the "mutliple Gmail accounts" works, but the multiple account support doesn't carry over into Calendar or the other apps.&lt;/p&gt;
&lt;p&gt;5.0 out of 5.2.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/screaming-penguin/~4/LObOi8hfDqQ" height="1" width="1"/&gt;</description>
 <comments>http://www.screaming-penguin.com/node/7740#comments</comments>
 <category domain="http://www.screaming-penguin.com/taxonomy/term/3">Hardware</category>
 <pubDate>Thu, 07 Jan 2010 22:47:15 +0000</pubDate>
 <dc:creator>kebernet</dc:creator>
 <guid isPermaLink="false">7740 at http://www.screaming-penguin.com</guid>
<feedburner:origLink>http://www.screaming-penguin.com/node/7740</feedburner:origLink></item>
<item>
 <title>Dumb as we wanna be</title>
 <link>http://feedproxy.google.com/~r/screaming-penguin/~3/ZfG5NFzhVjc/7739</link>
 <description>It has been a while since I have gotten on the soap box, but the way Americans seem to think everything is a "debate" just chaps my hide, so here goes. 
&lt;br /&gt;&lt;br /&gt;
Everything is NOT a debate. At least not in the sense that most people that question scientific evidence mean it. Here I am talking about global warming, evolution, vaccines, and every other such fact ignorant people choose not to "believe." It's not about belief jackass, it's about evidence, and science, and frankly, reality. 
&lt;br /&gt;&lt;br /&gt;
Here is an excellent video that does a much better job than I can, of explaining what I mean:
&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/T69TOuqaqXI&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/T69TOuqaqXI&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;!--break--&gt;
&lt;br /&gt;&lt;br /&gt;
If you feel we should "question conventional wisdom," and by that you mean, just make shit up and search for stuff on the interwebs that agrees with you, and from there buy in to conspiracies and theories that are based on no evidence at all (but happen to make you feel better by validating a current behavior or belief you already have), then you are profoundly ignorant at best.
&lt;br /&gt;&lt;br /&gt;
Science matters, it is our only real view of truth. It's not a perfect view, no, but that is by design, there is no perfect. Even so, there is overwhelming and incontrovertible evidence that, just for a few examples: global warming is real and is caused by man, evolution is a fact and humans have a common ancestor with apes and monkeys and shrews and worms, and childhood vaccines save lives and protect entire populations and there is no evidence whatsoever that they "cause" autism. 
&lt;br /&gt;&lt;br /&gt;
Yet people not only feel free to "question" these things without bothering to even attempt to understand the science. They also feel so confident about it that they espouse these views openly. And not just everyday joes (for whom there is still no excuse, by the time you are about 10 years old you should understand how to process information, most of it in the world being bullshit, and form an informed point of view), but congresspersons, "journalists," pundits, and so on. It's ludicrous. It's one thing to question something and say "I am not sure about that, I would like to find out more about it," and another to take the opposite stance of the overwhelming majority of science, and call something into question in public from a point of influence or power.
&lt;br /&gt;&lt;br /&gt;
The recent &lt;a hre"http://www.wired.com/magazine/tag/vaccine/"&gt;Wired Magazine article on vaccines&lt;/a&gt;, and the responses they got, are what set me off on this rant (this time). One responder put it much more eloquently than I can:
&lt;br /&gt;&lt;br /&gt;
&lt;cite&gt;“It’s about what Tom Friedman calls the modern American ‘dumb as we wanna be’ attitude, which combines stunning intellectual laziness, the erroneous concept that all information is equal, and the Internet to create a witches brew we’re using to commit national suicide. Vaccines are just the tip of the iceberg. The same mentality has led to catastrophic stasis—or at best tepid action—on the key issues of our time: climate change and health care reform.”&lt;/cite&gt;
&lt;br /&gt;&lt;br /&gt;
Nail, meet head. "&lt;b&gt;Stunning intellectual laziness&lt;/b&gt;" - that is what I mean by people don't bother to try to check in with reality. Combined with "&lt;b&gt;the erroneous concept that all information is equal&lt;/b&gt;" - exactly, it's not, and at an early age people should be able to tell that. 
&lt;br /&gt;&lt;br /&gt;
I think part of it is cognitive dissonance. Part of it is wanton ignorance, Part of it may also just be stupid, but lazy is more comfortable for me. People aren't really that dumb, they are just that lazy. Either way though, it's very dangerous. 
&lt;br /&gt;&lt;br /&gt;
Why is it dangerous? Well, if you don't believe in vaccines you endanger the rest of the herd (people even responded incredulously to the Wired article saying "I don't see how I am endangering you" - exactly, you don't see). If you don't "believe" in evolution and you want to change school curriculums to put in equal time for bullshit like "Intelligent Design" you are at best wasting everyone's time, and at worst dragging learning within society backwards. If you don't "believe" in global warming you probably contribute to more of it and you aren't willing to help put forth the political will to do something about it and that puts others at risk as well.
&lt;br /&gt;&lt;br /&gt;
Keep in mind, these are just three examples off the top of my head, the bigger issue is the entire culture of intellectual laziness - there are many more issues just like these where people are choosing to ignore evidence.&lt;img src="http://feeds.feedburner.com/~r/screaming-penguin/~4/ZfG5NFzhVjc" height="1" width="1"/&gt;</description>
 <comments>http://www.screaming-penguin.com/node/7739#comments</comments>
 <category domain="http://www.screaming-penguin.com/taxonomy/term/15">Rants</category>
 <pubDate>Tue, 29 Dec 2009 16:13:46 +0000</pubDate>
 <dc:creator>charlie.collins</dc:creator>
 <guid isPermaLink="false">7739 at http://www.screaming-penguin.com</guid>
<feedburner:origLink>http://www.screaming-penguin.com/node/7739</feedburner:origLink></item>
<item>
 <title>New themes for Screaming-Penguin.com</title>
 <link>http://feedproxy.google.com/~r/screaming-penguin/~3/1v-ZwNw47jM/7738</link>
 <description>&lt;p&gt;End of the year. Have run all the backups, and updated all the server software - including Drupal. Since it seems like the themes are finally catching up to 1.6 now (some decent ones), I am going to try out a few different things. &lt;/p&gt;
&lt;p&gt;Really, I should roll my own using the blank slate style themes they provide (for example, Zen), but other things are higher priorities. &lt;/p&gt;
&lt;p&gt;Hence you might see some different layouts and colors around here. Hopefully anything I decide on will be for the better, but everything I have tried thus far has good and bad, so who knows. &lt;/p&gt;
&lt;p&gt;If you have a preference, feel free to make it known - &lt;a href="http://drupal.org/project/Themes" title="http://drupal.org/project/Themes"&gt;http://drupal.org/project/Themes&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/screaming-penguin/~4/1v-ZwNw47jM" height="1" width="1"/&gt;</description>
 <comments>http://www.screaming-penguin.com/node/7738#comments</comments>
 <category domain="http://www.screaming-penguin.com/taxonomy/term/4">The Internets</category>
 <pubDate>Thu, 24 Dec 2009 15:40:05 +0000</pubDate>
 <dc:creator>charlie.collins</dc:creator>
 <guid isPermaLink="false">7738 at http://www.screaming-penguin.com</guid>
<feedburner:origLink>http://www.screaming-penguin.com/node/7738</feedburner:origLink></item>
<item>
 <title>Wrapping an Eclipse PDE Build with Maven</title>
 <link>http://feedproxy.google.com/~r/screaming-penguin/~3/8RqPysp1N_c/7728</link>
 <description>&lt;p&gt;A few months back our team at the office decided to buckle down and create an automated repeatable build for a new Eclipse RCP app we are working on - because it's the right thing to do. What follows is most of an article I wrote back then, and never got around to publishing here. This article isn't polished but if I don't hit submit right now, it will never see the light of day again - and I think it *might* help someone somewhere sometime even in less than perfect form, so here goes.&lt;/p&gt;
&lt;p&gt;&lt;cite&gt;(I updated the CODE and README for this project today - 01.07.2009, haven't really written a proper article yet, but README is better, and tested setup on multiple platforms, win32 and lin32. Check out the screen shot, Windows! Trying to make it nice for the people, since a few of you asked, even as much as I loathe said OS ;).)&lt;/cite&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;My life with PDE Build&lt;/b&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Fortunately, Eclipse comes with a lot of support for automating builds in terms of the PDE (Plug-In Development Environment) project which includes an Ant based set of Eclipse Plug-In build tools. Even though Eclipse provides this, we normally use Maven for our builds, so we set out to find a way to use Maven to manage Eclipse PDE. Hence the saga began . . . &lt;/p&gt;
&lt;p&gt;&lt;img src="/images/pde_build.png" alt="PDE-Build Maven" /&gt;&lt;/p&gt;
&lt;p&gt;The task ended up falling to me after a few others made initial attempts, and didn't get as far as we had hoped. Enter the painful and overly complicated, but ultimately successful, process I used to build our RCP app from Maven (wrapping Eclipse PDE-Build). &lt;/p&gt;
&lt;p&gt;To start with I decided to look at existing Maven plugins for the job. Naturally enough, the others at our office that tried the build began here too - none of us could get anything resembling a working build. We tried 4 or 5 Maven plugins. A few were promising (including &lt;a href="http://mojo.codehaus.org/pde-maven-plugin/pde-mojo.html"&gt;pde-maven-plugin&lt;/a&gt; over at Mojo) but all had various issues we couldn't get past. Then we tried other more specific projects like &lt;a href="http://docs.codehaus.org/display/M2ECLIPSE/Tycho+project+overview"&gt;Tycho&lt;/a&gt;, and although again promising, these also stalled based on one roadblock or another and we just couldn't get a solid build. &lt;/p&gt;
&lt;p&gt;I thought this might all be hogwash and we had to be doing it wrong (which may still turn out to be the case, but we sure tried to do it right, and follow instructions where possible, maybe we will learn more about using the existing tools in the future). So I set out to find some blog posts or other documentation that had this nailed down. Surely this was a very common thing and others had pinpointed exactly what to do, right?&lt;/p&gt;
&lt;p&gt;Well, with the disclaimer that I am not an Eclipse RCP guy (and frankly don't *want* to be), I found existing information to be about as varied as possible, and often less than helpful. Oh there are many blog posts about different aspects of this (among the best are &lt;a href="http://www.vogella.de/articles/EclipsePDEBuild/article.html"&gt;Eclipse PDE Build Tutorial by Lars Vogel and Dominik Zapf&lt;/a&gt;, &lt;a href="http://knol.google.com/k/lukas-zapletal/automating-eclipse-pde-build/1as80wv4bdzca/4#"&gt;Knol by Lucas Zapletal&lt;/a&gt;, and "troubleshooting" guides such as &lt;a href="http://liangzan.net/index.php/2009/06/10/troubleshooting-an-eclipse-pde-build/"&gt;Troubleshooting an Eclipse PDE Build&lt;/a&gt; by Wong Liang Zan, and &lt;a href="http://intellectualcramps.blogspot.com/2009/09/common-eclipse-build-failures-and.html"&gt;Common Eclipse Build Failures and Causes by David Carver&lt;/a&gt;), but there was nothing in my case that solved our problem in one shot. Also, along the way, while searching for articles on this topic, I found many many posts that seemed to echo what I was experiencing - this is harder than it should be, it takes WAY too long, it's very confusing for many people that attempt it (many people put it less tactfully than that, I am trying to be nice ;)).&lt;/p&gt;
&lt;p&gt;Ultimately I decided to punt AGAIN (after trying Maven plugins and other Maven approaches, and then using third party guides and tips) and just fall back to the *official* Eclipse documentation. I checked there to begin with, but the documentation there is sparse, and didn't relate to Maven, or to an outside of Eclipse build at all really (non-headless is where I was trying to end up),&lt;br /&gt;
so I initially glanced at it and then tried to move on to blog posts and tutorials that I thought were more appropriate and more detailed. I was wrong. The documentation, while not great, should have always been my "lowest common denominator" starting point.&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://help.eclipse.org/galileo/index.jsp"&gt;official docs&lt;/a&gt; helped, from there I at least got &lt;a href="http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.pde.doc.user/tasks/pde_product_build.htm"&gt;a command line build running via a headless Eclipse using the Ant tools built into PDE&lt;/a&gt;. Nevertheless, I was disappointed. I couldn't do this outside of a headless Eclipse environment (it's not just Ant, it's an Eclipse ant runner that brings in all the environment and OSGi stuff, etc), and it was just a sample and didn't include a lot of what I need in a real build (check out the code, manage the dependencies, run on multiple platforms, run without a bunch of custom setup on each machine, etc). I needed to next step up to a real project, and incorporate Maven. &lt;/p&gt;
&lt;p&gt;Long story short, I used the basic PDE stuff as a starting point and ended up with an approach that goes like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create all the structure PDE needs with Maven via Ant &lt;/li&gt;
&lt;li&gt;Checkout RCP plugins and stuff with Maven via Ant&lt;/li&gt;
&lt;li&gt;For each RCP plugin we also have a Maven build - fork and run that on each&lt;/li&gt;
&lt;li&gt;Run headless Eclipse build with Maven via Ant&lt;/li&gt;
&lt;li&gt;The result - automated build that produces a zipped up RCP build (for multiple platforms in one shot)
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;A working sample of the build we now use (we use it on a much larger project with multiple plugins) is here: &lt;a href="http://totsp.com/svn/repo/SamplePluginBuild/trunk/"&gt;http://totsp.com/svn/repo/SamplePluginBuild/trunk/&lt;/a&gt;.  &lt;/p&gt;
&lt;p&gt;This is complicated, more so that in it should be it seems (like I stated earlier), but once I got this setup working it has been doing the job well (and we don't have to worry about it anymore). &lt;/p&gt;
&lt;p&gt;One important (and potentially confusing) step I should note is that each of our plugins, such as the &lt;a href="http://totsp.com/svn/repo/SamplePlugin/trunk/"&gt;SamplePlugin&lt;/a&gt; used in this build has it's own separate Maven POM - and we fork and exec to run Maven on each during the outer Maven build. We are nesting Mavens. Our plugins do this because we don't like to check stuff in to a local "lib" folder and repeat it everywhere - so the plugin POM is used to pull in the dependencies before other build steps proceed. We also use these separate POMs when developing different plugins day to day to pull in and update the deps (outside of the big build). &lt;/p&gt;
&lt;p&gt;Also, on the build machine you still do need a local copy of Eclipse (the RCP enabled flavor "Eclipse for RCP/Plug-In Developers", must have the PDE build plugins, etc). The POM refers back to it as the property "eclipseLocation" and uses it for the build files and dependencies when running the headless PDE build. This sucks, but it has to be there (it can't just pull in X dependencies - not without herculean effort anyway).&lt;/p&gt;
&lt;p&gt;We are basically doing the standalone PDE Ant based build, we are just wrapping it all with Maven (to create the structure, check out the code, etc). &lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Jump back to now, rather than what I wrote a few months back (and didn't complete). &lt;/p&gt;
&lt;p&gt;Check out the README file in the SamplePluginBuild project for more information. Also, one last time, I know this article isn't complete or as detailed as it should be, but again, I just don't have time to clean it up at the moment and I don't want to just trash it either. If it helps it helps, if not, sorry. This build process is being used on a production RCP app at our shop now, and so far so good (as long as you aren't the one who has to set it up ;)).&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/screaming-penguin/~4/8RqPysp1N_c" height="1" width="1"/&gt;</description>
 <comments>http://www.screaming-penguin.com/node/7728#comments</comments>
 <category domain="http://www.screaming-penguin.com/taxonomy/term/17">Tutorials</category>
 <pubDate>Tue, 22 Dec 2009 18:12:05 +0000</pubDate>
 <dc:creator>charlie.collins</dc:creator>
 <guid isPermaLink="false">7728 at http://www.screaming-penguin.com</guid>
<feedburner:origLink>http://www.screaming-penguin.com/node/7728</feedburner:origLink></item>
<item>
 <title>An Atlanta GTUG (Google Technology User Group)?</title>
 <link>http://feedproxy.google.com/~r/screaming-penguin/~3/5-OCWx8AlX8/7737</link>
 <description>&lt;p&gt;I am seriously considering firing up an Atlanta GTUG.  Why, you might ask?  Ok, maybe you wouldn't ask that, but I asked myself, so I will answer my own question, whether you care or not ;). &lt;/p&gt;
&lt;p&gt;&lt;b&gt;1.&lt;/b&gt;&lt;br /&gt;
There are so many great Google technologies now - several that I use on a regular basis, there is enough content - and it's all very interesting stuff IMO. Just off the top of my head we have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Google Collections&lt;/li&gt;
&lt;li&gt;Guice&lt;/li&gt;
&lt;li&gt;GData APIs
&lt;/li&gt;&lt;li&gt;Android&lt;/li&gt;
&lt;li&gt;Wave&lt;/li&gt;
&lt;li&gt;GWT&lt;/li&gt;
&lt;li&gt;Google Ajax APIs
&lt;/li&gt;&lt;li&gt;AppEngine&lt;/li&gt;
&lt;li&gt;Google Code Hosting&lt;/li&gt;
&lt;li&gt;Maps&lt;/li&gt;
&lt;li&gt;I am sure I am forgetting a ton more (and I am skipping over stuff like Earth and SketchUp on purpose, more user tools those are, but still very interesting technologies)&lt;/li&gt;
&lt;li&gt;Ok, yeah, I looked, and I did miss a ton: &lt;a href="http://code.google.com/more/"&gt;http://code.google.com/more/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;2.&lt;/b&gt;&lt;br /&gt;
There isn't one already, as far as I can tell.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;3.&lt;/b&gt;&lt;br /&gt;
They make it nice for the people. Pretty easy to setup, Google seems cooperative. They even have sample agendas and such. &lt;a href="http://www.gtugs.org/"&gt;http://www.gtugs.org/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;4.&lt;/b&gt;&lt;br /&gt;
Fun. Yeah, it's pretty geeky, but I think it could be a lot of fun and I might learn something. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;5.&lt;/b&gt;&lt;br /&gt;
There is one in Omaha and not Atlanta - WTF? We can't let Omaha school us on this fancy dancy technology stuff? (Nothing personal Omaha, you got us beat on steaks, you can't win em all.)&lt;/p&gt;
&lt;p&gt;Not quite sure where I am going with this yet, I am already more busy than I need to be - but as I said earlier, seriously considering firing one up. Wondering if there is any interest in Atlanta outside of me? (Oh, and Bruce Johnson, who gave me a thumbs up on Twitter - but he is a bit biased ;).)&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/screaming-penguin/~4/5-OCWx8AlX8" height="1" width="1"/&gt;</description>
 <comments>http://www.screaming-penguin.com/node/7737#comments</comments>
 <category domain="http://www.screaming-penguin.com/taxonomy/term/6">Development</category>
 <pubDate>Fri, 18 Dec 2009 02:07:14 +0000</pubDate>
 <dc:creator>charlie.collins</dc:creator>
 <guid isPermaLink="false">7737 at http://www.screaming-penguin.com</guid>
<feedburner:origLink>http://www.screaming-penguin.com/node/7737</feedburner:origLink></item>
<item>
 <title>This is so spot on</title>
 <link>http://feedproxy.google.com/~r/screaming-penguin/~3/5rCO0U8eN4E/7736</link>
 <description>&lt;p&gt;&lt;img src="http://www.globalnerdy.com/wordpress/wp-content/uploads/2009/12/howfanboysseeoperatingsystems.jpg" alt="how fan boys see operating systems" /&gt;&lt;/p&gt;
&lt;p&gt;Provided by Global Nerdy: &lt;a href="http://www.globalnerdy.com/2009/12/16/how-fanboys-see-operating-systems/"&gt;How Fanboys See Operating Systems&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And I have to admit, I am squarely in third row category there - absolutely. I love Macs, best all around desktop/user platform in my opinion - and I own several, but I buy them refurbished (apple store refurbished, your tip for the day, same warranty, big savings) or second hand or such, too damn much money for what you get with the new ones ;).&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/screaming-penguin/~4/5rCO0U8eN4E" height="1" width="1"/&gt;</description>
 <comments>http://www.screaming-penguin.com/node/7736#comments</comments>
 <category domain="http://www.screaming-penguin.com/taxonomy/term/16">Humour</category>
 <pubDate>Thu, 17 Dec 2009 20:03:25 +0000</pubDate>
 <dc:creator>charlie.collins</dc:creator>
 <guid isPermaLink="false">7736 at http://www.screaming-penguin.com</guid>
<feedburner:origLink>http://www.screaming-penguin.com/node/7736</feedburner:origLink></item>
<item>
 <title>Wave Gadget Example - flickr recent photos</title>
 <link>http://feedproxy.google.com/~r/screaming-penguin/~3/nDtkHK8jlMY/7735</link>
 <description>&lt;p&gt;The ubiquitous example yet again, a &lt;a href="http://www.flickr.com"&gt;flickr&lt;/a&gt; photo explorer. I know there are hundreds of these of different types, but get over it. The reason there are so many is, it's cool, and it's interesting as you are developing an example to get new and different visual content each time, plus the flickr APIs make it nice for the people.&lt;/p&gt;
&lt;p&gt;So, on with the show. This evening I created a quick non-complicated &lt;a href="http://code.google.com/apis/wave/extensions/gadgets/guide.html"&gt;Google Wave Gadget&lt;/a&gt; to demonstrate how it's done, and to start hashing out examples for the next book I am writing for Manning Publications - Google Wave in Action (shhh though, that is still sort of an under the radar thing, and if *both* of you that read this blog keep it under your hat, we can keep it that way). &lt;/p&gt;
&lt;p&gt;The gadget itself simply allows you to get the last 10 recent photos on the flickr photostream, and to refresh (Ajax style, not page refresh).  It looks like this:&lt;/p&gt;
&lt;p&gt;&lt;img src="/wtemp/flickr_gadget.png" alt="flickr_gadget" /&gt;&lt;/p&gt;
&lt;p&gt;And, if you want to try it outside of Wave, it works as a regular web page too - that is hosted here: &lt;a href="http://www.screaming-penguin.com/wtemp/flickr_gadget.html"&gt;http://www.screaming-penguin.com/wtemp/flickr_gadget.html&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;If you want to check out the gadget inside Wave (meaning you have a Wave account, of course), the Gadget URL is: &lt;b&gt;http://www.screaming-penguin.com/wtemp/flickr_gadget.xml&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;To add a Gadget to a Wave, open the Wave, then start a new reply and then click the green "Add Gadget" button in the toolbar:&lt;br /&gt;
&lt;img src="/wtemp/add_gadget.png" alt="add gadget" /&gt;&lt;/p&gt;
&lt;p&gt;I have to give props to &lt;A href="http://rpheath.com/posts/392-some-of-the-flickr-api-in-jquery"&gt;Ryan Heath&lt;/a&gt; for the main part of the JavaScript code. I started out to do this manually, and then thought, wait, somebody has wrapped this with a nice JavaScript API, maybe even using JQuery or such, and sure enough, &lt;a href="http://github.com/rpheath/jquery-flickr"&gt;Ryan has&lt;/a&gt;. I modified a bit of the code (reset button) and trimmed it to keep the example ultra short, but no big deal thanks to Ryan and JQuery and flickr.  &lt;/p&gt;
&lt;p&gt;I plan to add several more features to it before I publish it as an official Wave Gadget (search by tag or by flickr user, display different sizes, animate to larger image in same document rather than link to images externally, and the like), but it's a start.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/screaming-penguin/~4/nDtkHK8jlMY" height="1" width="1"/&gt;</description>
 <comments>http://www.screaming-penguin.com/node/7735#comments</comments>
 <category domain="http://www.screaming-penguin.com/taxonomy/term/6">Development</category>
 <pubDate>Sun, 13 Dec 2009 01:40:49 +0000</pubDate>
 <dc:creator>charlie.collins</dc:creator>
 <guid isPermaLink="false">7735 at http://www.screaming-penguin.com</guid>
<feedburner:origLink>http://www.screaming-penguin.com/node/7735</feedburner:origLink></item>
<item>
 <title>Wave Embed example</title>
 <link>http://feedproxy.google.com/~r/screaming-penguin/~3/GbLchvCSc7s/7734</link>
 <description>&lt;img src="/images/wavelogo.png" alt="wavelogo" /&gt;
&lt;br /&gt;&lt;br /&gt;

&lt;script src="http://wave-api.appspot.com/public/embed.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
    function initialize() {
      var wavePanel = new WavePanel('https://wave.google.com/wave/');
      wavePanel.loadWave('googlewave.com!w+3HZh0dxyC');
      wavePanel.init(document.getElementById('waveframe'));
    }
&lt;/script&gt;

&lt;div id="waveframe" style="height: 100%; width: 600px; padding: 5px; border: 1px solid black"&gt;&lt;/div&gt;
&lt;br /&gt;&lt;br /&gt;
Let's see if I can get this to fly. If you have a Wave Preview (not Sandbox) account, and are logged in, press the button to embed the Wave:
&lt;br /&gt;&lt;br /&gt;
&lt;form&gt;
&lt;input type="button" value="go"
onClick="initialize(); this.disabled=true"&gt;
&lt;/form&gt;
&lt;!--break--&gt;&lt;img src="http://feeds.feedburner.com/~r/screaming-penguin/~4/GbLchvCSc7s" height="1" width="1"/&gt;</description>
 <comments>http://www.screaming-penguin.com/node/7734#comments</comments>
 <category domain="http://www.screaming-penguin.com/taxonomy/term/6">Development</category>
 <pubDate>Fri, 04 Dec 2009 19:04:21 +0000</pubDate>
 <dc:creator>charlie.collins</dc:creator>
 <guid isPermaLink="false">7734 at http://www.screaming-penguin.com</guid>
<feedburner:origLink>http://www.screaming-penguin.com/node/7734</feedburner:origLink></item>
<item>
 <title>Wave developer FAQ now up</title>
 <link>http://feedproxy.google.com/~r/screaming-penguin/~3/V6oAlYzqeX0/7733</link>
 <description>&lt;p&gt;Google recently put together a Wave developer FAQ based on common stuff from the groups and notes from a hackathon: &lt;a href="http://wave-api-faq.appspot.com/" title="http://wave-api-faq.appspot.com/"&gt;http://wave-api-faq.appspot.com/&lt;/a&gt;.  In it are a few new tidbits that weren't previously well documented. &lt;/p&gt;
&lt;p&gt;Also, the have added an articles section to the API docs, it has some new stuff too, such as debugging robots and gadgets, and communicating from robot to gadget and vice versa - &lt;a href="http://code.google.com/apis/wave/articles.html" title="http://code.google.com/apis/wave/articles.html"&gt;http://code.google.com/apis/wave/articles.html&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/screaming-penguin/~4/V6oAlYzqeX0" height="1" width="1"/&gt;</description>
 <comments>http://www.screaming-penguin.com/node/7733#comments</comments>
 <category domain="http://www.screaming-penguin.com/taxonomy/term/6">Development</category>
 <pubDate>Fri, 04 Dec 2009 16:24:46 +0000</pubDate>
 <dc:creator>charlie.collins</dc:creator>
 <guid isPermaLink="false">7733 at http://www.screaming-penguin.com</guid>
<feedburner:origLink>http://www.screaming-penguin.com/node/7733</feedburner:origLink></item>
<item>
 <title>Android examples</title>
 <link>http://feedproxy.google.com/~r/screaming-penguin/~3/kYSQpol6-Zg/7732</link>
 <description>&lt;p&gt;I answer questions on the Android developers mailing list (&lt;a href="http://groups.google.com/group/android-developers" title="http://groups.google.com/group/android-developers"&gt;http://groups.google.com/group/android-developers&lt;/a&gt;) from time to time. Often when doing so I point people to the code examples at the Unlocking Android gCode site. &lt;/p&gt;
&lt;p&gt;Just to repeat it, so that maybe more people will realize it's there, all the code for UAD is at the site: &lt;a href="http://code.google.com/p/unlocking-android/" title="http://code.google.com/p/unlocking-android/"&gt;http://code.google.com/p/unlocking-android/&lt;/a&gt;.  &lt;/p&gt;
&lt;p&gt;You can browse it by chapter and go right to the examples. It was written for Android 1.1, but all the examples still run fine on 1.5 and 1.6 (I haven't tried them in 2.0 yet, but plan to). &lt;/p&gt;
&lt;p&gt;Also, Frank and Robi (co-authors) are working on a 2.0 update to the book. This involves a lot of updates, and a bunch of new stuff. Should be out early next year (I think, I am not really involved with the update, too much other stuff going on, no time).  Anybody that already owns the eBook will get free updates (and presumably the code site will get updated too).&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/screaming-penguin/~4/kYSQpol6-Zg" height="1" width="1"/&gt;</description>
 <comments>http://www.screaming-penguin.com/node/7732#comments</comments>
 <category domain="http://www.screaming-penguin.com/taxonomy/term/17">Tutorials</category>
 <pubDate>Wed, 02 Dec 2009 15:04:16 +0000</pubDate>
 <dc:creator>charlie.collins</dc:creator>
 <guid isPermaLink="false">7732 at http://www.screaming-penguin.com</guid>
<feedburner:origLink>http://www.screaming-penguin.com/node/7732</feedburner:origLink></item>
</channel>
</rss>
