Archive

Archive for July, 2009

Google Voice first take

July 27th, 2009 No comments

I got a Google Voice invite a few weeks ago, and since I’m also sporting an Android phone I thought this might be interesting.

In a nutshell, you get a Google phone number (I even got a local number) and you can configure the service to interact with all your other numbers – cell, home, work, etc. You can set which phone(s) ring in what order, and on Android installing Voice gives you to option to make a call from the handset from either your carrier’s number or your Google number. But here’s the issue, if you can’t port your main number, you have to go through the pain of changing your number, which is no fun at all. Google says you may be able to port over a number later on. For now, I’m not going to give out my Google number.

But here is the awesome part of Voice even if you don’t use it as a primary number – the voicemail is outstanding. I am now using it for my primary VM instead of T-Mobile. Here is how I set it up, and why its great:

1) I change my Android options to point my phone at my Google Voice number as my “voicemail” number instead of the T-Mobile default. This means that if I dont pick up my cell phone the call is sent to my GV number.

2). Set Google Voice to not forward to any numbers, and set it to go directly to voicemail when the Google number rings.

At this point if I don’t answer my cell, it forwards to google and straight to voicemail. So the caller can’t tell the different.

Now, GV has some great options to set for voice mail. It will transcribe your messages and txt or email them to you! Its not perfect, but over the few dozen messages I’d gotten so far, its close enough to know what the caller really said.

I setup GV to txt my cell when I get a VM. This is KILLER if you are in a meeting or a movie or a loud location. I can read my VM on my phone.

Second, the GV Android app will download the VM to my phone along with the transcript in the GV “inbox”. So later on I can go listen and/or read the message again.

Also, I can log into GV from any computer and get all my messages, send txts, even make calls, directly from the web interface.

Its not perfect yet, but so far its pretty amazing.

qrcode

Microsoft copies Apple Stores

July 25th, 2009 No comments

This is cool/funny/interesting.. Microsoft is coming out with retail stores apparently. This makes sense ont he level of Xbox and whatnot.. but there are no Microsoft branded laptops or desktops, and there are no Microsoft cell phones… in short MS doens’t do a lot of the HW like Apple does. So I’m curious to see how this will actually work out.

Plus, they have the Guru Bar (shameless knockoff of Apple’s Genius Bar). But what will happen here? If you have a Dell laptop with Windows Vista will they help you? That would be something pretty cool..

Oh and lets not forget the Zune HD.. I suppose those will be out in force. Maybe it is a precursor to a Zune Phone…. hmm.

qrcode

Categories: Apple, Microsoft Tags: ,

Apple Fails on Latitude

July 25th, 2009 No comments

Good read here.

Apple has made some really odd choices with regard to apps and such. I don’t get it.

Latitude is kind of a cool option for maps. It’s most useful if you are out on the town and you can see where are your “peeps” are at. Well provided they are all on an Android device. The reason why Latitude is pointless on iPhone is that it can’t run in the background, so unless all your friends are walking around with their iPhones locked in map mode, you wont get any updates.

At least with Android I can run it in the background if I want/need to.

Categories: Android, Apple, iPhone, Mobile Tags: , , ,

Open Source Mobile OS's

July 21st, 2009 No comments

This is a very interesting article: here

The bottom line is that the author things open source (or at least totally open app development) will overtake the iPhone in the end. Android is totally open source and there are little restrictions on the app store… and you can load apps without using the app store. The Pre has little restrictions on its app store as well. Nothing like what Apple does.

Plus, like I have said before, the fact that Android lets you do almost anything and access any part of the OS or hook any sort of even are huge. You want a new dialer app? Do it. Want to hook all your incoming SMS and do soemthing funky with them? Sure why not. The iPhone restricts all of this.

And of course multitasking is huge. And with better technology with batteries or display technology (shameless corporate plug: Qualcomm’s mirasol) there are so many possibilities for a true computing phone.

It's 2009, IE6 is old now. Upgrade already.

July 15th, 2009 No comments

Looks like YouTube is asking IE6 users to upgrade.  http://www.techcrunch.com/2009/07/14/youtube-will-be-next-to-kiss-ie6-support-goodbye/

And according to Stat Counter, it looks like IE6 is still a significant amount of web traffic.  http://gs.statcounter.com/#browser_version-ww-daily-20080701-20090715-bar

So upgrade already, it’s almost 8 years old now.

Categories: Microsoft Tags:

C# and Serializing Structs to byte arrays

July 2nd, 2009 10 comments

So I have a application in C# that is communicating to something else via UDP messages. The messages are byte packed arrays of data. There are several bytes of header and then N bytes of data whos format is described in the header. I might send several Ints, or a string, or whatever.

This is pretty easy to handle in C/C++ as you can get raw pointers to everything. So if each message type is a struct, I can get a char* to the address of the struct and just read N bytes and send that out.

The problem on the C# end is this isnt so easy. If I want to pull messages apart and put them back into structs I have to do this manually each multi byte field at a time. So I was left with a function call for each message type to serialize it, and then another to deserialize it, each one having to know exactly what was in each message, so if I changed a message I’d have to edit all the handling functions. What I needed was a way to jsut get the raw bytes the in the received array into a struct of the right type, and vice versa. Fortunately there are some tricky ways to make this super easy.

First, we have to make sure the structs we declare in C# and packed. Here is an example:

using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, Pack=1)]
struct msg1{
     int a;
     int b
     short c;
}

This will ensure there are no gaps between elements in the struct.

Next, we need a way to take an array of Bytes and copy it directly into the struct:

public static T DeserializeMsg< T >(Byte[] data) where T : struct
        {
            int objsize = Marshal.SizeOf(typeof(T));
            IntPtr buff = Marshal.AllocHGlobal(objsize);

            Marshal.Copy(data, 0, buff, objsize);

            T retStruct = (T)Marshal.PtrToStructure(buff, typeof(T));

            Marshal.FreeHGlobal(buff);

            return retStruct;
        }

Lets say we have a msg1 struct populated and we want to send that out over UDP. We need to serialize it back to raw bytes. This function will do just that:

public static Byte[] SerializeMessage< T >(T msg) where T : struct
        {
            int objsize = Marshal.SizeOf(typeof(T));
            Byte[] ret = new Byte[objsize];

            IntPtr buff = Marshal.AllocHGlobal(objsize);

            Marshal.StructureToPtr(msg, buff, true);

            Marshal.Copy(buff, ret, 0, objsize);

            Marshal.FreeHGlobal(buff);

            return ret;
        }

Thats it!

qrcode