FrostWire for Android 1.0 preview: Quickly checking what files are shared.

Try it now on your Android (Before the rest gets it on Google Play)

Now when you’re browsing “My Files”, you will see indicators on the top right corner of the screen letting you know how many files are shared and how many files are not shared. If you touch the indicators, FrostWire will show you only the shared ones, the un-shared ones, or all the files.

Very useful if you just shared a file and you want to unshare it, or viceversa, specially when you have hundreds or thousands of files in your device.

Quick Peek at the next generation of FrostWire for Android (1.0.x)

Try the Android 1.0.0 beta installer

Here’s a sneak peak of the next generation flagship file sharing client for the mobile world.
This next generation will include a brand new user interface with a more streamlined experience, you’ll be able to search, access and consume your files better than ever with FrostWire for Android, which will integrate tightly with FrostWire for Desktop, no matter on what operating system you run, with absolutely no setup required, just run and share.

Get the current version of FrostWire for Android free today, as soon as 1.0 is out you will receive the update message.

DON’T UPGRADE YOUR VERIZON 4G THUNDERBOLD FIRMWARE, JUST ROOT IT

So I had to work outside today, and as usual I wanted to use my Verizon 4G Android (Thunderbolt) to connect my laptop using the Wi-Fi hotspot feature, as I’ve been doing since I got the phone, it’s been a real life saver many times.

This morning I saw that there was a firmware update, and I gladly accepted it, after that upgrade, now dear Verizon has decided to charge 4G users with $30 A MONTH to use the Hotspot feature that was free on my phone.

Really Verizon…?

So well, the outcome is that, NO, I’m never gonna pay you $30 a month to use my own Wi-Fi card to share my internet connection, but instead I’ve gone and signed up for Clear’s 4G hotspot, which allows me to connect up to 8 computers.

Verizon, I was happy with you until now, you suck balls, Android users are not stupid, this is pure evil. I guess my $250 a month on my line and my family’s lines are not enough for you.

So, if Clear ends up working well for me, what I think I’ll do at the end of the contract will be radical and I hope more and more people will do the same, I’m gonna get rid of my phone line, bye bye stupid 10 digit numbers, bye bye dynamic monthly bills, bye bye Verizon. I’ll just have it connected to my Wi-Fi hotspot, I’ll have faster internet access, and if I need to make a phone call, I’ll use either GTalk or Skype, fuck it. I don’t answer the phone anyway, I’ll send everyone straight to Google Voice.

How to convert Android GPS coordinates into X,Y coordinates.

Without further math bullshit about all the conversion systems, when you have a bunch of Android GPS coordinates (which are compatible with Google Earth and Google Maps), and you want to draw them on a finite 2D plane, here’s what worked for me.

[java]
int x = (int) ((PLANE_WIDTH/360.0) * (180 + lon));
int y = (int) ((PLANE_HEIGHT/180.0) * (90 – lat));
[/java]

Android: How to obtain the WiFi’s corresponding NetworkInterface

Let’s say for some odd reason in the world you do need to get the corresponding NetworkInterface object of the Wifi on your android, in my case I needed to have my WiFi device send multicast packets, and I wanted my MulticastSocket to only send packets through the WiFi device (not 3g, or maybe even ethernet). The android API does not provide functionality to know what “NetworkInterface” your WiFi is using.

Here’s a solution proven in tens of different android phones, seems to work 100%.

[java]
public static NetworkInterface getWifiNetworkInterface(WifiManager manager) {

Enumeration<NetworkInterface> interfaces = null;
try {
//the WiFi network interface will be one of these.
interfaces = NetworkInterface.getNetworkInterfaces();
} catch (SocketException e) {
return null;
}

//We’ll use the WiFiManager’s ConnectionInfo IP address and compare it with
//the ips of the enumerated NetworkInterfaces to find the WiFi NetworkInterface.

//Wifi manager gets a ConnectionInfo object that has the ipAdress as an int
//It’s endianness could be different as the one on java.net.InetAddress
//maybe this varies from device to device, the android API has no documentation on this method.
int wifiIP = manager.getConnectionInfo().getIpAddress();

//so I keep the same IP number with the reverse endianness
int reverseWifiIP = Integer.reverseBytes(wifiIP);

while (interfaces.hasMoreElements()) {

NetworkInterface iface = interfaces.nextElement();

//since each interface could have many InetAddresses…
Enumeration<InetAddress> inetAddresses = iface.getInetAddresses();
while (inetAddresses.hasMoreElements()) {
InetAddress nextElement = inetAddresses.nextElement();
int byteArrayToInt = byteArrayToInt(nextElement.getAddress(),0);

//grab that IP in byte[] form and convert it to int, then compare it
//to the IP given by the WifiManager’s ConnectionInfo. We compare
//in both endianness to make sure we get it.
if (byteArrayToInt == wifiIP || byteArrayToInt == reverseWifiIP) {
return iface;
}
}
}

return null;
}

public static final int byteArrayToInt(byte[] arr, int offset) {
if (arr == null || arr.length – offset < 4)
return -1;

int r0 = (arr[offset] & 0xFF) << 24;
int r1 = (arr[offset + 1] & 0xFF) << 16;
int r2 = (arr[offset + 2] & 0xFF) << 8;
int r3 = arr[offset + 3] & 0xFF;
return r0 + r1 + r2 + r3;
}
[/java]

Reviewing the Nokia N900, User and Developer opinions.


Playing with it from the User Perspective
– Virtual keyboard is deactivated by default, not good if you have one hand busy, however I can see why it’s this way (the virtual keyboard sucks). When it comes out it covers the entire screen, and the experience with it is not there yet in comparison to the virtual keyboards of the iPhone or Android.

Physical Keyboard feels great.

Not sold on the stylus, I think I might loose it. However it comes in handy when clicking on tiny links.

– Web browsing experience is clumsy if you try to use your fingers and you’re used to Android or iPhone where dragging occurs on a light touch. With the N900 you have to Tap harder to begin to drag, probably like that intentionally. I must admit I find myself making mistakes on the Droid maybe because it’s too sensitive.

Using forms on the browser is inconvenient. There’s no way to move from form field to form field except using the stylus. Keyboard arrows won’t work to switch focus between form fields, and the lack of virtual keyboard (when you’re using the real one) implies that you won’t have a “Next” button to move through the form (or at least I couldn’t figure out a field hopping mechanism).

Zooming in and out on a web page will be extremely unintuitive. Thanks to patents on multitouch gestures you’ll have to either double tap, or do a ridiculous tap+hold and twirl clockwise zoom in (in a controlled way), or tap+hold and twirl counter-clockwise to zoom out… wtf.
Nokia has to put up a fight on this, natural multi-touch gestures are a must on today’s smartphones.

– I still don’t know how to select, copy and paste text from a website. Very hard to quote text and twitter it.

– Default timeout for screen auto lock is way too short.

It has a stand on the back, which as a developer I appreciate. It’s a pain to debug apps on the nexus one, you always kind of need to pick it up or create some sort of desktop apparatus to have the phone facing you while you test hands free.

Multimedia
Video and audio playback were perfect. Droid and Nexus One have nothing to envy, so it’s not a selling point. Watch the 3 phones playing the same video.

– Navigation is convenient with top left corner control. It took me a few seconds to figure it out being used to Android’s back and Home Button and of the one physical button on the iPhone.

– The Media player comes with pre-installed internet radio streaming app. On Android I had to download one from the Market.

Didn’t have to install Flickr photo uploading app, already comes with OS.

OVI Store experience frustrated me. Should be an app, not a web page. I got asked for an HTTPS certificate while trying to install a Twitter plugin, it was basically the same exception you get on a web browser. The regular user would get lost adding the certificate and the security exception. Then after that I got asked to signup for the OVI store, and I gave up. Installing apps should be a breeze. Setting up your OVI Store account should be done as part of the phone setup process on an App.

The more I use the phone the more I think, Nokia’s hardware is hot, but they’re wasting their time with competing on software. Nokia running Android would kill everybody else, let’s hope it will happen sooner than I think, they just need to test with one cool device and feel the market.

Unboxing Pictures
[flickr-gallery mode=”photoset” photoset=”72157623986709513″]

Playing with it as a Software Developer
– No SDK for Mac environment, or at least not a very accessible or official version of it. The only solution seemed to be installing the SDK on a Virtualized Linux (e.g. VirtualBox).

– Maemo SDK not compatible with Ubuntu 10.4 64bit, it seems it’s only 32bit.

The project page confirms this:
“The development environment for Maemo running on the desktop is called Maemo SDK. You can only install Maemo SDK on a Linux operating system. Maemo SDK currently supports the following Linux distributions: Debian, Ubuntu”

Tried installing Scratchbox on my Mac with no luck.

– It was a little surprising to see the Nokia documentation for developers talking about GTK+ in all their examples and not Qt, given the acquisition of Trolltech by Nokia in 2008. However you go to the Qt page and it says that it’s the defacto SDK for Maemo devices.

In the end I decided to install it on a 32bit Ubuntu VirtualBox image on my Mac and deal with the performance hit, I couldn’t just return the phone without compiling something, otherwise I’d be speaking out of my ass right?

Hello World in GTK

Hello World in Qt4, exactly the same code I would’ve used for a desktop Qt4 app.

compilation is the same thing as if developing a regular Qt4 app on linux
[bash]/scratchbox/login
fakeroot apt-get install libqt4-dev[/bash]

create your helloworld.cpp… then make your project
[bash]qmake -project
qmake
make
run-standalone.sh ./qt_helloworld[/bash]

If you’re used to Linux development with GTK or Qt4 you will feel right at home, and you probably know right off what’s the most comfortable set of tools to code. If you’re not, it seems like Nokia has left the whole thing way too much on the hands of the Maemo community.

Documentation seems a little all over the place, unfinished Wikis, not very welcoming for non-linux developers, I’m talking about companies that come from actually making money on iPhone OS or Android, looking to port their apps to Maemo. The first impression won’t be the best and you’ll think that things aren’t as well prepared as for iPhone with X-Code or Android with the Eclipse extension which let’s you deploy a signed installer in just a few clicks.

It seems that Nokia is relying way too much on the Linux community for all of this, I’m not sure if this is going to get very far with mobile shops, specially after seeing how many hurdles a user has to go through sometimes to get an app from the OVI market (in comparison to iPhone or Android’s markets simple purchasing processes).

SDK experience Screenshots
[flickr-gallery mode=”photoset” photoset=”72157624248900230″]

Conclusions

First of all thanks to Nokia for sending the N900. My final conclusions which are mostly thinking from the consumer perspective might not be one you’ll like much (you=Nokia), but you probably need to hear this (I’m guessing this is why you sent the device in the first place).

In my case after being a faithful Nokia consumer I felt dissapointed with the software side when I chose the N95 over the iPhone, newer Nokia phones came, but the same shitty platform was running on them, I thought Maemo would change that but now I know it’s nowhere near what smartphone users today expect. Then Android came along to truly compete with the iPhone.

Now as an Android user when the time comes for me to upgrade my phone I’ll be looking for another Android device.

Let’s imagine what’s going to happen when my Droid is too old, by that time there will be even more Android phones to choose from also a richer Application ecosystem, if I were the kind of person that installs paid apps I’d probably like to keep my “investment” for my next phone, however even if there’s a myriad of Android phones out there, the only brands I’ll consider are Motorola, HTC, LG and SonyEricsson, I’m not too fond of any of them so I’ll have to research what each of the phones they’ll be offering will suit my needs.

An Android based Nokia smartphone would certainly make my decision a lot easier. As of now you’re entirely out of the picture, there’s no way I’m switching to Maemo, and Moblin is way too new to tell if it’s going anywhere.

Nokia, Stop playing outside the garden, don’t get cocky with your current numbers and admit you’re slowly decaying, if you don’t do something about it once Android is on every cheap phone you’re gonna die. Android could use some Nokia.

Follow the geek.

[SOLVED] Eclipse can’t see my Android Device on Ubuntu

Are you seeing this on eclipse when you plug your Android device to your Ubuntu box?

Serial Number: ??????????
AVD Name: N/A
Target: unknown
State: ??

Here’s the solution:

1. Create a script to fix this next time it happens, let’s call it “android_device_reset” and save it on a folder contained on your $PATH environment variable.

[bash]
#!/bin/bash
# android_device_reset script
sudo adb kill-server
sudo service udev stop
sudo adb start-server
sudo adb devices
[/bash]

Save it and make it executable
[bash]chmod +x android_device_reset[/bash]

2. Open this file /etc/udev/rules.d/51-android.rules

Make sure it looks something like this
[bash]
SUBSYSTEMS=="usb", SYSFS{idVendor}=="0bb4", MODE=="0666"
SUBSYSTEMS=="usb", SYSFS{idVendor}=="22b8", MODE=="0666"
[/bash]

Each line represents a different android device. If you have just one, the file should be one line long.

On that example I’ve configured the rules for a Motorola Droid and a Nexus One.
If you need to know the idVendor numbers for your Android device go here
developer.android.com/guide/developing/device.html#VendorIds

3. Whenever the problem happens, just open a terminal and type
[bash]android_device_reset[/bash]

It’ll ask you for your password, only administrative users will be able to execute the script.

Hope this helps.