Saturday, December 31, 2011

One Day With the Galaxy Nexus

Almost two years ago I traded in my LG flip phone for an original Motorola Droid. At the time I was blown away with how customization and responsive Android could be on a device that fit on my pocket. After a solid run of daily use, ~2G monthly bandwidth usage, and countless custom roms and hacks later it was finally time to retire it.

To find a suitable replacement I started making a checklist in my head of what I wanted in a new device:

  • Qualcomm Inside
  • Dual Core 1Ghz+ Processor
  • 1Gb+ Memory
  • Android Ice Cream Sandwich
  • NFC Capability
  • HD Screen
  • Verizon 4G LTE
  • Physical Keyboard
  • HDMI Out
  • Accessories (Car dock, media dock, etc)
  • Easy to root/mod

These all started to show up in devices in the fall of 2011 when Google had a streaming online event showcase their new Nexus device and release of Ice Cream Sandwich. Along with the Nexus two other phones made a debut, the Motorola Droid Razr and the HTC Rezound. After reading multiple reviews, release delays, and countless speculation I finally decided to get the Samsung Galaxy Nexus.

The Motorola Razr had many benefits going for it. The first is after owning a Droid and Xoom I have had hands on experience with the build quality and reliability with the type of hardware Motorola produces. The Gorilla glass and kevlar backing seemed like a perfect combination for a sturdy and solid phone. Also the Razr has many accessories that would compliment it and continue the daily conveniences that I was used to with the Droid such as a car and media dock. However the lack of a NFC chip and size of the phone (width, not depth since it is a extraordinarily thin) were playing against it.

The HTC Rezound on paper seemed like a winner, especially with all the high praise the screen was getting for being the best and highest definition. It also had the bonus of having a Qualcomm Snapdragon chip in it at 1.5Ghz, 300Mhz faster than the other two. The cameras also outclass the other devices. It too lacked the NFC chip though and unfortunately previous experience with a HTC Touch Pro left a bad taste in my mouth even years after I last used it.

Finally it came down to the Samsung Galaxy Nexus. While the other two phones had the advantage in processor and build quality he Nexus had the overwhelming advantage of being a "pure" Google phone and being built specifically for ICS. While the Razr and the Rezound will most likely get ICS in the near future, they will still have the hardware buttons reminding me every time I use it after the ICS upgrade that they are outdated and useless. The NFC chip was also a major factor, not because currently it's unused, but because in the next few years it will be more used. While Google Wallet may be blocked at the moment, because it is a Google device and rooting/hacking it is easier the limitation is almost moot.

After an adventure on getting the phone, since some retailers won't sell the device unlocked for full retail, or other stores were sold out. My fiance and I finally got on at Best Buy a few minutes before they closed. Since my phone plan is through my employer (hence the Qualcomm criteria above) activating it on LTE will have to wait until approvals go through to port the number and get a SIM card. 

After using it all night and this morning on our wireless-n network I can already say I love it. It's extremely responsive and the new additions in ICS such as the soft keys, folders, and familiarity of Gingerbread really make it a pleasure to use. Strangely with folders I really only use one home screen and only have the power bar widget on the other 4 screens.


Since the phone isn't on Verizons network at the moment it couldn't make or receive calls. Since I use Google Voice I knew there must be some way to use VOIP with my Google Voice number on the device over a data-only connection. After a bit of searching I stumbled on Talkatone which allows you to use Google Chat to use your Google Voice number from your phone (you can see the app stacked with the normal dialer in the lower left menu). It works extremely well, and I had a hour long conversation using it with no interruptions (except when I was trying to play with the app settings mid call and accidently closed it).

After setting up Talkatone I know basically have a fully functioning Galaxy Nexus and have already started to love it even after only about 12 hours of use. I was at first concerned about the battery life after reading a few reviews. But apparently most of that is software related and I'm assuming with a few more patches to ICS it should last just as long as my Droid does. It also covers all the bullets points I listed above with the exception of the physical keyboard (which are rare anyway). I also originally thought it couldn't do HDMI out either, but it can do MHL (Mobile High Definition Link) that has a HDMI converter to hook up.

Even though the Galaxy Nexus may not come out on top in some categories the combination of all it's features added up to be a winner and I'm extremely pleased with it as a replacement for my Droid.

Saturday, January 22, 2011

Vim, rdesktop, external monitors, and X Forwarding on a Google CR-48

While there are my other impressive hacks going around for the CR-48 (minecraft, ubuntu) I needed a few utilities that were more pragmatic. The following assumes that your CR-48 is in developer mode and you have a basic understanding of bash, scp, and compiling source code under GNU/Linux.

Vim

When I first went into the developer shell I saw approximately 1000 different binaries to run, but not one of them was a text editor. Eventually I stumbled upon qemacs, but we're just on a CR-48 not the middle ages. It was time to figure out how to get vim up and running.

Although ChromeOS is it's own GNU/Linux distro, it appears to mimic Debian/Ubuntu and is adhering somewhat to the LSB. I first just tried a straight copy of the vim binary from a Ubuntu 10.04 system but after some investigating with ldd saw it had a lot of shared libraries that weren't available on the CR-48 (most notably libselinux.so). So the quickest way to get around this was to build a static binary on a 32-bit Debian host (Ubuntu works as well).

On a 32-bit Debian Squeeze I downloaded latest VIM source code and built a static binary with a limited set of features and disabling GUI and selinux options:

USER@DEBIAN ~ $ wget ftp://ftp.vim.org/pub/vim/unix/vim-7.3.tar.bz2
USER@DEBIAN ~ $ tar -xvjf vim-7.3.tar.bz2
USER@DEBIAN ~ $ cd vim73
USER@DEBIAN ~ $ export LDFLAGS=-static
USER@DEBIAN ~ $ ./configure --with-features=small --disable-gui --with-vim-name=vi --disable-selinux
USER@DEBIAN ~ $ make

This will make a static binary called vi in the src directory. On the CR-48 in /home/chronos/user make a directory called bin and scp the vi binary to it.

Try and execute it, but you'll get a Permission Denied error because by default the /home/chronos/user directory is mounted with the noexec option. Fix this by remounting it with exec.

chronos@localhost ~ $ sudo mount -i -o remount,exec /home/chronos/user

Now the binary will run and you have a basic vi editor.

rdesktop

Rdesktop is much easier to put on the CR-48 since all of the libraries are available. From a 32-bit Debian/Ubuntu host, or by downloading the rdesktop i686 package from packages.debian.org, copy the rdesktop binary to the /home/chronos/user/bin directory. If it's mounted with exec then it will just run. Pass it whatever options you like, and it will open a new GUI window on the CR-48, completely independent of the Chrome UI and any shells.

chronos@localhost ~ $ ~/bin/rdesktop -u USERNAME -g 1280x800 -K -z -r clipboard:PRIMARYCLIPBOARD HOSTNAME

Copy/paste works well, although the arrow keys may not function properly due to the keymap not getting set correctly. This may be due to a libiconv issue and I'll need to spend some more time figuring it out.

External Monitors

While the CR-48 works just fine with it's VGA output without much tweaking, you'll either need to sign in/out or reboot the laptop for it to display to an external monitor. In dev mode xrandr is available making it easy to switch between display resolutions.

Mirror to a monitor that can do 1024x768:

chronos@localhost ~ $ xrandr --output LVDS1 --mode 1024x768 --output VGA1 --mode 1024x768

Turn off the external display and reset the CR-48 display back to the default 1280x800:

chronos@localhost ~ $ xrandr --output LVDS1 --mode 1280x800 --output VGA1 --off

X Forwarding

The simplest piece to enable is X-forwarding from a remote X client. Connect over ssh with the& -Y option and run any X applications:

chronos@localhost ~ $ ssh -Y USER@HOSTNAME

Bringing It All Together

Now that all the binaries are in place let's set it up so they work across reboots.

Edit /home/chronos/user/.bashrc with our new vi editor and append the following:

#Setup our environment
source ~/.bash_aliases
PATH=$PATH:~/bin

#Remount /home/chronos/user as exec so anything in ~/bin runs
sudo mount -i -o remount,exec /home/chronos/user

Create a /home/chronos/user/.bash_aliases and add in any aliases:

alias rdesktop-home='~/bin/rdesktop -g 1280x800 -u USER -K -z -r clipboard=PRIMARYCLIPBOARD HOSTNAME'
alias projon='xrandr --output LVDS1 --mode 1024x768 --output VGA1 --mode 1024x768'
alias projoff='xrandr --output LVDS1 --mode 1280x800 --output VGA1 --off'
alias ssh-host='ssh -Y USER@HOSTNAME'

Now you have a much more flexible environment to add your own aliases, functions, and binaries.

Wednesday, January 19, 2011

I Read A Lot Online

While working my way through Google Reader today I accidentally clicked the trends link on the left hand menu. I don't know if it just appeared recently or I just never noticed it before, but there's some interesting statistics there of items read, clicked, shared, etc. It even has friends stats for anyone you share or read items with through Reader. The stat that caught my eye though was total of items read since I started using Reader the end of 2005... almost 150,000... that's a big number.


Saturday, January 15, 2011

Hulu and Netflix on Android

Last night I was able to get my Droid to play Hulu and Netflix using the Playon server using UPnPlay and VPlayer. Unfortunately it's only over local wifi and it won't run over 3G, although the Playon team has made mention multiple times they are working on an Android app similar to the iPhone app that can play over 3G. Until then this works relatively well if you're on your local wifi network and want to use your Android phone or tablet for streaming Hulu, Netflix, and a variety of other channels Playon provides.

What you need:
  1. Install and setup Playon on a local media server
  2. Install UPnPlay from the Android Market
  3. Install VPlayer from the Android Market
Connect to the wifi network that has the Playon server, start up UPnPlay and start browsing until you find the content you want. A prompt will come up asking what app to play the media with, select VPlayer and it should start playing. The usual Playon streaming rules apply here; pause/rewind works and fast-forward only works if the content has already buffered to the server.

Playon channel list and Netflix queue:

Video Demo:


Technical Notes:
Motorola Droid 1 running Android 2.2 Froyo
Is rooted with custom kernel but stock Droid ROM
Apps are available in Market and don't require a rooted phone

Wednesday, January 12, 2011

Droid Screenshots

One of my favorite games last year was Assassin's Creed: Brotherhood, and one of the cool things that came with the collectors edition was a concept art book. Today while reading Kotaku I came across a link to the concept artists Donglu Yu's blog and found they make excellent Android wallpapers.

The panning affect when moving between workspaces is really cool, and below I tried to replicate it with a few screen shots from my rooted Droid. I should also note that I used my excellent Chrome cr-48 netbook and the cloud photo editing site Picnik putting these images together.

Saturday, January 01, 2011

TW Cable Modem Status Chart

Chart of our Time Warner cable modem going on and offline. Someone is coming out to replace the line from the alley to the house which hopefully fixes it.


Script that generated data, originally was so I could tell the cable tech when the connection dropped and then I used the data over a few days to make the above graph.
watch.sh

#!/bin/bash
IP=8.8.8.8

while true; do
DATE=`date +"%D %r"`
if ping -c 1 -W 2 ${IP} 2>&1 >/dev/null; then
echo "${DATE} - Ping successful"
else
echo "${DATE} - Ping unsuccessful"
fi
sleep 60
done