Archive for Posts Tagged ‘Google’

10

Sep
2013
Comments Off on Google is the Internet!

Google is the Internet!

That is a pretty obvious statement with the size of the company and the services it offers, but I did not have enough of an appreciation for that statement until recently. It is easy to dismiss the statement as an obvious one, but it is a little scary to me. No one company should affect the internet to this extent. What am I taking about? One of the recent projects I worked on required me to simulate being offline by not allowing my machine to talk to Google. While doing this work, I updated my hosts file to point google.com to a dummy IP address and at the end of the day, having finished work and wanting to just read up on the days event, I started browsing the internet. The only issue was that the internet did not work. Almost every page I went to would load halfway and stop. I started to suspect my internet connection and rebooted the modem, router, and computer but to no avail. Then I remembered the hosts file change that I had made. Surely, blocking Google would not stop 90% of the internet pages?….right? Well it does! And that, is way too power for any one company. Imagine, a hack, a DNS spoof, just by blocking Google, most users on the internet would have a very slow experience. I’m scared of the Google.
read more

16

May
2013
Comments Off on Google’s broken privacy policies

Google’s broken privacy policies

Privacy is a thing of the past, that is not secret. The best you can do these days is make it a little more difficult for some information to be found but sometimes even that proves to be difficult. This story started when I resold my Nexus 7 a few months back. I had had the device for a couple of months, and while I loved the form factor and size, the Android platform has never been comparable to iOS in my opinion. But that is another story. Anyways…..I sold the device though Kajiji, and I agreed to meet the person I sold it to at a location and exchange the device for the money. The device was packed with all of its original factory material and boxing, and even provided a copy of the receipt with my personal info blacked out. At this point, all we knew about each other was our email addresses which was great. I have a Yahoo email address just for situations like this. Now, a few months later, the device is not working like it should and the person I sold it to needs to get it fixed under warranty (since its still less than a year old). And this is where our troubles begin. Google does not provide warranty service to items purchased from the Play Store unless you have the original purchaser’s Name, email, and address….which means the anonymous transaction that we had had is now have to be a lot more personal. None of this info is really that hard to find with a few searches on the internet, but that is besides the point. I fail to see why this level of information is required. All you have to provide really should be the order number and the rest of the information can be looked up on Google’s side. If Google is concerned with theft, they can always send an email to the original purchaser to verify any other information. Moral of the story: Until Google fixes this big security hole, think twice before purchasing directly from the Play store.
read more

21

Feb
2013
Comments Off on Automating Android Builds

Automating Android Builds

In order to have a fully regression tested application, it is necessary to have an automated build process to ensure all checkins are validated nightly ( or whatever your schedule is). This is a simple task for most Java projects, however you may run into some issues with Android that I point out here.
  • If you started your project from Eclipse, you may not have the Ant build file and supporting properties file in your project
  • If you want to sign your application with a key, the default build keeps prompting you for the keystore password

Both of these are relatively easy to over come and here is a great article on StackOverflow. My only goal here is capture it all in one place.

Environment Setup

The first thing to do, is to make sure that your android SDK folder is on your path. In order to do that, just update your local .bash_profile in your home folder to include the following paths:
1
2
3
4
5
6
#!/bin/sh
 
export PATH=$PATH:$HOME:$HOME/Documents/Development/android-sdk-macosx/tools:\
$HOME/Documents/Development/android-sdk-macosx/platform-tools
 
export ANDROID_HOME=/Users/Kouroche/Documents/Development/android-sdk-macosx

Note the \ in the first export command. It is there to split the command over two lines, but you don’t need that in there. This will not only add the Android SDK to your path, but also define ANDROID_HOME which is used by the build file (more on that later).

At this point, you will either have to logout and login again, or source .bash_profile to make sure the changes took effect. To verify, run the following command from your home folder:
$ android list targets

Build files

In order to add the build files to your project, you can either create a new project from the command line and copy those build files to your project, or you could update you project from the command line to add in the build files.

Creating a new project

In order to create a new project from the command line, run the following command:
$ android create project --target <target-id> --name MyFirstApp \
--path <path to dev folder>/MyApp --activity MainActivity \
--package com.acme.myapp

The app name nor the package matter. The only thing you may want to match to your current application is the <target-id>.

Once the project is created, copy over the following files to the root of your own project and then delete this app folder.
  • ant.properties – This is where you store your project specific properties for Ant
  • build.xml – This is the generic build file provided by the Android SDK and will most likely not need changing
  • local.properties – This file contains the path to your SDK, but I prefer not to copy it over since it may get checked in by mistake.
  • progaurd-project.txt – This file contains ProGaurd rules if you choose to obfuscate your code, and more can be found here about that.
  • project.properties – This file contains the target for your project and is most likely already part of your project.

Updating your existing project

This is probably your best bet since it is less of a hack and should add the same set of files to your project.
$ android update project --name <project_name> --target <target-id> \
--path <path_to_your_project>

Once again, make sure to use the same <target-id>

Customizing the build

Now that you can use Ant to build your project, you may want to customize the build process to meet your needs. For example, I always include a build ID somewhere in the application so users can report which build they are on when reporting issues, or you may want your release build to point to a different backend server than your debug build. In any case, the Android SDK makes this also very easy. Looking at the build file, it optionally imports a custom_rules.xml file that you can create in your project root folder to hook into the build process. The build file even lists out the targets for your to include. Here is a sample one I created:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?xml version="1.0" encoding="UTF-8"?>
<project name="custom_rules" default="-pre-compile">
    <target name="-pre-compile">
 
        <!--  get build ID to automate inserting it -->
        <tstamp>
		<format property="buildId" pattern="yyyyMMddHHmm" locale="en,US"/>
	</tstamp>
	<replaceregexp byline="true" file="${source.absolute.dir}/com/acme/app/Constants.java">
        	<regexp pattern='String\s*_VER\s*=\s*"\d*"'/>
        	<substitution expression='String _VER = "${buildId}"'/>
        </replaceregexp>
        <!-- Depending wheather this is release or not, update the host file to match -->
        <if condition="${build.is.mode.release}">
            <then>
                <property name="use.server.host" value="https://production.acme.com" />
            </then>
            <else>
                <property name="use.server.host" value="${server.host}" />
            </else>
        </if>
        <replaceregexp byline="true" 
            file="${source.absolute.dir}/com/acme/app/ConfigurationUtil.java">
        	<regexp pattern='String\s*HOST\s*=\s*".*"'/>
        	<substitution expression='String HOST = "${use.server.host}"'/>
        </replaceregexp>
	</target>
</project>

What this does, is to update the build ID in my constants class, and also update the backend server my app talks to depending on whether it is a release build or not.

Signing the app

One of the issues I mentioned early on, for the need to have build automation, was having to provide a password each time the app needed to be signed. Well, the key to solving this problem is the ant.properties file which includes your project specific properties. Unfortunately, i have not found a way around having to include your password in plaintext in some form or fashion so that it can be used, but if your an individual or have a designated build person or machine, you can lock the file down pretty good. So, to get back to the issue at hand, include the following four lines in your ant.properties file and you are good to go:
 key.store=<path to your keystore file>
 key.store.password=<your keystore password>
 key.alias=<your keystore alias>
 key.alias.password=<your alias password>

If you have been building with Eclipse for while and don’t recall your keystore alias, an easy way is to go through the export process in Eclipse to release the app and see what the keystore alias is.

The build command

OK, so now that it is all set, the easy part is building the application. You can run either of the following commands to build the app for debug or release respectively.
$ ant debug
or
$ ant release
Good luck.
read more

29

Oct
2012
Comments Off on Google’s Got Nothing on Apple

Google’s Got Nothing on Apple

I’ve been reading some articles recently, comparing Apple’s productions to Google’s Nexus line, and it just seems bizarre to me. It just reminds of when AMD had come up with the first true multi-core processor and was trying to educate us not to compare its processors to Intel’s on just the CPU speed. Its the same thing here. Comparing Apple to Google, is quite literally comparing Apples and Oranges. Yes, its true that the Nexus 7 may have a much faster processor than iPad mini (which is the same as the iPad2), but the experience is not on par. As an owner of both devices (iPad2 and Nexus 7), I can tell you that even for the most basic of tasks, such as internet browsing or watching YouTube videos from your browser, Apple’s products are a par above everyone else, and there is a simple reason for it: Apple controls both the hardware and software so it tweaks its software to get the max out of the hardware and it does a better job than Google throwing twice the hardware at Android. To boot, Apple’s devices are created with way better craftsmanship than anything else out there. I always say that Apple is to Tech what Bang & Olufsen is to Audio. Just stunning hardware that works. When it comes down to it, consumers should not care which has more RAM or more processing power, but rather which provides the best user experience (i.e. just works right all the time). That is why it is sad to see tech bloggers write such articles and misinform those who do not have the personal experience to know better. So before you buy the hype, make sure to go out to a store and experience it for yourself and see why Apple can demand the premium that it does.
read more

7

Aug
2012
Comments Off on The Curious Case of the Missing YouTube App

The Curious Case of the Missing YouTube App

Yesterday Apple released the  latest beta version of iOS6, and with that the blogosphere went a little crazy over conspiracy theories as to why the YouTube app is no longer part of iOS.  There were lots of speculations, but I think the case is clear cut.  It had much less to do with the history between Apple and Google, and much more to do with Apple’s decision to not include Adobe Flash when the iPhone was released. When the iPhone came out in 2007, it was the first one of its kind.  It was truely the first smart phone; where you could do more than browse WML sites (remember those?) and store contacts with more than just one phone number.  But, Apple had decided that Flash was too resource intensive and it would not be part of the OS.  At that time, nearly 100% of all video on the internet was using Flash and the only way to get around that was for Apple to work with Google to include the most popular video site of the time (YouTube). It is now 2012 and even Adobe has given up on Flash for mobile, not to mention that most video sites on the internet now make sure to support video formats that are compatible with the iPhone due to its popularity.  Case and point, Apple does not need to write a YouTube app.  YouTube works perfectly well through Safari, and if Google feels compelled, it can provide an iOS specific YouTube app. Furthermore, as some bloggers have pointed out, this is much more beneficial to Google since it can now monetize YouTube on iOS by including ads.  
read more

26

Jul
2012
Comments Off on Feed Your Sweet Tooth With Jelly Bean!

Feed Your Sweet Tooth With Jelly Bean!

The Jelly Bean (4.1.1) update for the Nexus S is finally here. I got the update notification yesterday and I must say that Google has done a tremendous job of turning things around with Android 4.x. Even though the Nexus S is now and old phone by all standards, it is snappier now on Jelly Bean than it ever was with its original Android Gingerbread (2.3.x). Also, one the new features, missing in iOS, is the Google Now (pictured here) feature which shows you weather, traffic, transit, calendar and everything else in one view based on your day’s outlook. I bought my Nexus S about 18 months ago when it first arrived in Canada and while the hardware was good, and I loved the AMOLED screen, the Android OS was very disappointing. Everything from the browser to the keyboard to the unintuitive interface was very annoying; specially coming from an iPhone. After about a month of constant use, I put it aside and never touched it again until Ice Cream Sandwich was available. There are two main faults still that exist with phone (both hardware and software) which I mention below, but otherwise the improvements are night and day. The animations are smoother, the interface is much more intuitive as well as better looking, and it is all thanks to Google hiring Matias Duarte.

Issues prior to 4.x

  • Unintuitive application navigation –  The best example for this was google’s own Google Voice app.  Sometimes you could get into say a text chat, and have no way to go back to your inbox sine the back button just closed the app.  There were many other examples.
  • Horrible keyboard – Although lots of folks love the swift keyboard and have learnt to type by swiping across the keyboard, I am still old fashioned and like to use my thumbs to type.  The old keyboard besides being inaccurate, also had the problem of the touch keys below it (Nexus S specific).  Since the back, menu, search and home buttons are all touch sensitive, and they are just below the keyboard, you could easily press one of them by mistake and be out of the app you were typing in.  I use the same thumbs on my iPhone and never had this level of inaccuracy.
  • Horrible browser – The default Android browser was horrible for HTML5 web apps and was just slow.  I tried many others, including Firefox beta and Dolphin browser, but none were as solid as Safari on the iPhone.
  • Overall Stability – Apps frequently crashed or would be terribly slow to respond.  Besides the fact that I have yet to see an app that looks better on Android than it does on the iPhone, apps on Android occasionally crashed which did not help the user experience.

Issues after 4.x

  • Keyboard – The keyboard is still an issue and it is pretty much the only one left.  Unless you use a third party keyboard that works well, the default keyboard is still way too inaccurate.
  • Browser – While the default browser that ships with Android is still not up to par with Safari, Chrome for Android is a much better choice.  As a second alternative, the Dolpin browser has some  great features like gestures and voice commands that are fun to play with.
  Prior to Android 4.x my opinion was that anyone who bought an Android phone was only doing it to be “different” and not have the phone everyone else has.  The iPhone was by far the better phone.  With the 4.x updates, Google is much closer in competing with Apple so we better see some impressive hardware come this fall for the iPhone 5 (or the new iPhone, if they go with the iPad naming scheme).
read more

19

Jul
2012
Comments Off on Configure Witopia VPN on DD-WRT

Configure Witopia VPN on DD-WRT

I like using a VPN service for a more secure browsing experience and I have used Witopia for the past little while with great success. The only issue was that I had to install it on all the PCs that I wanted to use it with and then remember to turn it on, etc which I did not like very much. So after a decent amount of googling, I decided to get a second router that supports DD-WRT and set that up to always be connected via VPN. This way, it is just a matter of switching my wireless connection from any device. After some research I settled on Buffalo AirStation WHR-HP-G300N (bought from Newegg) which is a tiny little router that comes with DD-WRT installed. The only downside, I later found, is that since it’s got smaller memory on-board it does not support OpenVPN. Witopia itself does provide a Cloakbox Pro device itself which is a higher end Buffalo router pre-configured to VPN, but I wanted to do it my way. So keep in mind as you read the instructions below that my setup is using a VPN router that is behind my main router.

Setup Instructions

  1. Add Google’s public DNS servers as static DNS servers for the DHCP server. Note that since my main router is using 192.168.1.x, I put this router on 192.168.11.x to make sure there is no complications.
  2. Configure the wireless access point on the router so that it does not conflict with your main wirless connection (i.e. give it a different name and use a different channel to be extra safe).
  3. Enable and configure the PPTP client on the router to connect to your favorite VPN location. You can get a list of the VPN location for Witopia here. For the Server IP or DNS Name I put in the IP address of the vpn server I wanted to connect to (e.g. pptp.chicago.witopia.net).
  4. Add a startup script to the router to configure it to use the VPN connection properly. The script below will wait until VPN is connected and then update the router’s routing appropriately. Note that 192.168.1.1 is the internal IP of my main router, not the VPN router which is 192.168.11.1.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    echo "echo \"Startup Config started\" >> /tmp/mylog.txt" > /tmp/startupConfig.sh
    echo PPTPSERVER=$(/usr/sbin/nvram get pptpd_client_srvip) >> /tmp/startupConfig.sh
    echo PPTPGWY=192.168.1.1 >> /tmp/startupConfig.sh
    echo "/sbin/route add -host \$PPTPSERVER gw \$PPTPGWY" >> /tmp/startupConfig.sh
    echo "#/sbin/route del default" >> /tmp/startupConfig.sh
    echo "/sbin/route add default gw \$PPTPGWY metric 100" >> /tmp/startupConfig.sh
    echo "/sbin/route add default dev ppp0" >> /tmp/startupConfig.sh
    echo "/sbin/route del default" >> /tmp/startupConfig.sh
    echo "/sbin/route del default" >> /tmp/startupConfig.sh
    echo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE >> /tmp/startupConfig.sh
     
    echo "ifconfig ppp0 > /dev/null" > /tmp/whileLoop.sh
    echo "RC=\$?" >> /tmp/whileLoop.sh
    echo "echo \"Checking ppp0: \$RC\" >> /tmp/mylog.txt" >> /tmp/whileLoop.sh
    echo "while [ \$RC -ne 0 ]; do" >> /tmp/whileLoop.sh
    echo "  sleep 5" >> /tmp/whileLoop.sh
    echo "  ifconfig ppp0 > /dev/null" >> /tmp/whileLoop.sh
    echo "  RC=\$?" >> /tmp/whileLoop.sh
    echo "  echo \"Checking ppp0: \$RC\" >> /tmp/mylog.txt" >> /tmp/whileLoop.sh
    echo "done" >> /tmp/whileLoop.sh
    echo "echo \"Running startupConfig.sh\" >> /tmp/mylog.txt" >> /tmp/whileLoop.sh
    echo "ifconfig ppp0 >> /tmp/mylog.txt" >> /tmp/whileLoop.sh
    echo "sh /tmp/startupConfig.sh" >> /tmp/whileLoop.sh
     
    sh /tmp/whileLoop.sh &
Once all this is setup, connect to the wireless for the VPN router, and go to IP Location Finder and make sure that it reports your location correctly. If it is still reporting your current location, then VPN is not working and you have to get your hands dirty and login to the router itself and poke around. That is beyond what I wanted to get into here, but I am sure you can find your solution on the internets.
read more

13

Nov
2011
Comments Off on Android Browser is the IE of the mobile Web

Android Browser is the IE of the mobile Web

For years Web App developers have dreaded the browser fragmentation and having to support IE. It required a lot of extra finess in both Web frameworks and Web App code to make sure things worked close to intended across all browsers specifically IE. Now that the focus has shifted to the mobile web, history is repeating itself. While HTML5 is generally supported on all modern Smart phones, and the most popular browsers are Web-kit based, it seems that those in charge have not learnt from the lessons of the past. In my personal experience with various mobile web frameworks, the Android platform in general and the fragmentation between Android devices is a huge problem. Once of the current best mobile web frameworks, Sencha Touch, works like a dream on the iPhone, but the same code on Android is unpredictable at times. This is exactly why with its second release, Sencha is concentrating on addressing performance and specifically for Android. Needless to say, this is only part of the issue with The Android platform and its fragmentation. Writing native apps, or even working with ubiquitous frameworks like Appcelerator Titanium is also a nightmare when it come sto Android. Don’t get me wrong, I think Android has potential, but as I have said before, if you can’t control the Hardware and Software, you cannot reproduce the experience of the iPhone. Here is hoping that with its aquisition of Motorola Mobility, Google can create a better Android, cuz the alternative is to suffer the same fate as IE has.
read more

21

Aug
2011
Comments Off on Google NaCl

Google NaCl

Google recently announced a new beta version of Chrome that supports NaCl, or Native Client. It allows C/C++ code to be natively executed inside the browser with restrictions. The new API is called Pepper, but it sounds much like the plagued ActiveX technology that Microsoft offered with IE a few years ago. What do you think?
read more

13

Nov
2010
Comments Off on Why there is STILL no iPhone killer!

Why there is STILL no iPhone killer!

And there probably won’t be one anytime in the near future. For anyone that doubts this, let me just say that Apple just surpassed Microsoft this past quarter in revenue and that is no small feat. Well it seems pretty simple enough to answer, right? Apple has a very simple formula:
  • Make it simple
  • Guarantee the experience
  • Provide a single app store
  • Have a clear product lifecycle
 

Make it simple

This is a very important success factor for Apple. Everyone, from my 7 year old daughter to my Dad can use the device without instructions. The finger is a natural utility we all know how to use and the rest is just a click away. Granted the other mobile OS platforms have made a lot of progress here, but Apple started it and it is the simplest one to use.

Guarantee the experience

This is perhaps THE most important success factor for Apple. By controlling both the software and hardware, they basically guarantee you the experience you are going to have. There is only one iPhone, but there are 10s or 20s of each other device. You can get an Android phone from LG, Samsung, Motorola, HTC, just to name a few and they each provide various versions with different specs and their own experience. The same is true for Windows Mobile, WP7 and even palm and RIM. While it is good to have a variety and everyone likes to be unique, it could change your mind about a operating system, device manufacturer, or both if you end up with a device that does not perform. The best example is Nokia. They are still the biggest phone manufacturer on the planet and for the longest time they have what I thought was the best phone factor (until I saw the iPhone). I am talking about the Nokia Communicator. I bought the Nokia 9500 Communicator as soon as it came out and was very excited about it, until I was let down by Nokia. For a $900+ phone, the browser was lousy, it crashed often, took too long to start (along with every other app) and never got any software updates. The worst was the promise to support the BlackBerry platform which never came except to certain European regions. Worst yet, Nokia abandoned that version of the Symbian platform. Not that the iPhone is without fault, but at least I know it will work fast. This was the one thing that impressed me enough to change my mind about the iPhone and touch screen devices. Before the iPhone, I had had such a bad experience with Windows and SonyEricsson touch screen phones that I would not buy a phone unless it had a physical keypad/keyboard. That is mainly why I skipped the original iPhone and waited for iPhone 3G.

The developer guarantee

The second aspect of the experience guarantee is what developers got. One platform, one resolution, one set of features, and one place to advertise. We will talk about the latter point later, but these are also very important. Again, with almost any other platform every developer has to worry about what devices to support, what resolutions they may have and what features they may have, which ultimately means that the user experience for end users will not be the same on every phone. And this is not accounting for the programming difficulties to support these variations. I must end this section by saying that Windows Phone 7 has made great strides here, but I still do not see it as the same since the hardware is not controlled which would mean that every manufacturer will do something different to make its phone more attractive to end users.

Provide a single app store – One Store to rule them all

Now this is arguable the most controversial aspect of the iOS ecosystem. Originally, I disliked the fact that I was not free to put any software I liked on the phone, but now I see the value of it. Before the App Store, almost everyone was skeptical over buying mobile software for various reasons. Chief among these was the fact that it was relatively expensive, and almost always tied to your particular phone, so you had to repurchase it if you upgraded your handset (even if it was just a newer model of the same phone). The iPhone addresses all of these, plus it provides a single great place to promote and sell your app. The approval process has its faults and there are many, but again it too protects users to some extent so they can shop with some sense of security. As for the other potentials now, their app stores are segmented at best which just damages their potential.

Have a clear product lifecycle

At the risk of sounding like a broken record, this also is critical to Apple’s success. The current product lifecycle for any iPhone so far has been two years, which is a year and half more than any other device. I say this jokingly, but it is almost true. Every other phone maker, has such diversity in their phone offering that they do not care about the hardware. Its all disposable, except the money we put down to get it. The only thing that has changed recently is that Google’s Android has been upgradable on some phones (mainly its own G1 and Nexus One), and even at that, you are at the mercy of the device manufacturer as to when and if they will support newer versions of Android. With the iPhone its a clear message. An iPhone will be upgradable to the latest version of the iOS platform for two years. I have to say that Microsoft again is trying to catchup here, and they announced that WP7 phones will be upgradable over the air, and they specifically mentioned this regarding the cut and paste that will be added to WP7. IF they execute well here, they could have this one nailed down.

What to take away

Having said all of this, there has been some changes in the iPhone ecosystem with the iPhone 4 having a retina display, but you can be certain that iPhone 5 will not support a new resolution, and there is a compromise to be made between consistency and advancing. The only two manufacturers that I see with a true potential to compete with the iPhone are RIM and now HP. They are the only two that control the software and hardware so they can control every aspect of the user experience. For the others it is much harder. Here are a few pointers for the other manufacturers if they are listening:
  1. Reduce your hardware offering, and instead concentrate on fewer devices with a longer lifecycle. If users know that they are buying a phone that will be supported for a year or two, they will be more inclined to make that investment
  2. Related to the first, make sure you do provide software updates for your phones. This buys brand loyalty when combined with a good user experience
  3. There is a fine balance between performance and battery life. But for a smartphone, the performance has to be snappy, otherwise no one will care that the battery lasts 5 days.
  4. Provide consistency between your devices. You can provide a touchscreen phone, one with a physical keyboard, and even a clamshell, but make it easy for developers to develop one code for all your devices
  5. Related to the last point, provide a single portal for users to buy applications. Users should not have to jump from shop to shop depending on what they need. Granted this is difficult with some service providers such as Verizon insisting on its own App Store.
  6. (Personal Agenda) For goodness sake, provide a GSM version of your phone with global support. The rest of the world runs on GSM and users want to know that they can use their phones everywhere.
  7. (personal Agenda) Do not lock your phones to a provider. We are already tied to contracts to get the phone with huge ETF fees, and most people don’t like to jump providers just for the heck of it. But we do like to be able to put in a local sim when traveling abroad and not have to spend the kids’ tuition fund on mobile fees.
How else can others compete with the iPhone? Get vocal in the comments.
read more

Page 1 of 212