Thursday, October 13, 2011

IOS 5 iCloud Dilemma and solution

If you're like me you have your awesome former mobileme, whatever@mac.com or me.com . You like that email address. But..... before there was a mobileme you had also been purchasing apps , music , movies, dark matter from that nasty email address that was tied to your itunes account when you were 17, and using hotmail or comcast as your email.

Of course Apple still refuses to offer any sort of merging of accounts. So you get IOS 5, on setup it asks for your iCloud account, well I didn't really know which account to give it, so I gave it the one that I knew purchases were associated with, hoping I could add additional accounts as well. So I do that, and everything is fine, except I can't change the primary iCloud account!!! I can change random stuff like iMessage from , but a lot of the functionality is directly linked to the primary account.

Solution:

On initial IOS 5 setup, using your iCloud account that you want to use. Then later, go to the Store options, under Settings, and change that account to your account that all of your purchases are associated with.

Saturday, August 6, 2011

Social network change

I've decided to change the technology to build the site from ASP.Net MVC 3, I've decided that the sort of people I'd like to use my site, wouldn't be very appreciate of it being built from a Microsoft project, I think i'm going to looking into using RoR, i've used it in past projects and would probably be a pretty good choice.

Thursday, August 4, 2011

Social Network


I'm considering creating a social network for developers. I know such things sort of exist with applications such as git hub or stack overflow, but I"m thinking of something that sort of blends several elements from different social networks together. Neither of the above sites have truly social feel (as the way Facebook for instance does). I'm going to attempt to create a site that blends Facebook with Linked IN with Github. A place people can collaborate on projects that they find of interest or simply to learn about areas that they might be interested in. More details to come.

Monday, February 21, 2011

Memory Management

So I've been working on several projects involving ASP.NET 4. I've relied heavily on LINQ to talk to my SQL database. I've been curious though about how to deal with my dbml object in a code-behind C# file. For instance usually I just declare a global instance of it in my file, and reference it directly in functions that are called through out the lifetime of the page object. I didn't know if it was better to declare local instances of this object in functions instead. I posted some forum posts about this and I got an unexpected answer. Instead of using either of the above mentioned methods, I should instead use the using statement in C#.
http://msdn.microsoft.com/en-us/library/yh598w02(v=vs.80).aspx

With a 'using' statement, I can create a local instance in my function, and essentially immediately dereference it from memory as soon as my code has left the scope of my 'using'. This provides for much better memory management especially in website's with high user activity, as otherwise your server will continue to load instances of the object through your memory, and you're at the mercy of the garbage collector for when those memory allocations are destroyed.


Saturday, February 5, 2011

Duplicate iTunes So Lets Write some Code!


So once again new computer. My iTunes library is on a external hd connected as a network device. Since I don't want to actually bother mounting the network hd to my mac when I want to use iTunes I just wanted to add external music files to my local hd. An hour later, it's done, but practically every song is duplicated. I checked my network drive, and sure enough every song on it is doubled(not sure why). Regardless of reason I want to resolve this issue. Now of course I could use the 'find duplicate song' from the itunes menu, but that dones't quite solve the issue, as I still have to manually delete the duplicates. PLUS.. the songs are still duplicated on the network drive, so I'd have to do this again when I got another computer. There's a few software solutions out there that I could buy and try. But frankly I don't want to risk it messing something up. Instead why don't I make use of a perfectly good Sat night/sunday morning and script it myself. Open up terminal, g++ here we come! I'll post source code once I've finished it. I'll probably try to take a safe route. Write some recursive function, probably start at a top level directory. If there is another directory go into that. If not go through songs, if next song is duplicate of current song(account for something like a balhblah(1).mp4 ) remove it. Then terminate call. Recursion handles rest.

Blogging from android app

Google has now released an official blogger app. So far looks pretty simple and good. We'll see once I actually post this. Sorry for the lack of usefulness in this post.

Monday, January 24, 2011

Fun with RFID


Recently I've been attempting to take advantage of the fancy new hardware packed into the Nexus S. More specifically reading rfid cards using the Nexus's nfc hardware. This turned out to be a bit more tricky than I thought.

Easy part:

Google provides source code for a demo application that will greatly aid you in figuring out the api. The android.nfc btw is stupid simple. In fact you don't have to worry about connections, listeners, any of that stuff. The google nfc service is always on, constantly polling for new card scans. When it detects a card, it issues a nfc intent. You just have to make sure that your applications manifest file, is setup for that intent.

As in: Make sure to have this in your main activity.

<intent-filter>

<action android:name="android.nfc.action.TAG_DISCOVERED"/>

<category android:name="android.intent.category.DEFAULT"/>

intent-filter>

Also make sure you enable nfc permissions and hardware requirement.

<uses-permission android:name="android.permission.NFC" />

<uses-sdk android:minSdkVersion="9">uses-sdk>

<uses-feature android:name="android.hardware.nfc" android:required="true" />


Next in your main activity all you have to do is use the getIntent() to retreive information picked up from a scan. Once again , 'YOU DONT HAVE TO WORRY ABOUT LISTENING FOR SCANS ' which is awesome!


byte[] byte_id = getIntent().getByteArrayExtra(NfcAdapter.EXTRA_ID);


This one above line, retrieves the unique id from the rfid chip, and pushes it into a bytearray.


Tricky Part:


Now that you have your card_id in the array, you cant just push it out to screen. By default android attempt to convert the bytearray to UTF-8, so you would get some weird symbols. In my case I needed the hexadecimal from that to store in a DB. I'm going to list the exact sort of rfid chip I dealt with, in hopes that this will help someone else attempting to do something similar. This is because there is 0 information on the internet that will help you figure this out otherwise. With the exception of a technical specification document that I'll link.



My card type and rfid chip:

High quality CR80 30mil white PVC RFID

cards HF Icode SLI

CR80ICODESLI

Operating frequency 125KHZ


Link to documentation: http://www.nxp.com/acrobat_download2/other/identification/SFS052611.pdf


Your chip type is important, because it will let you know how to read your uid. In the case of my chip, it's a 64 uid, with MSB as the left most.

This is very important in being able to correctly convert your bytearray to binary, hex whatever. There's several code examples of how to convert to hex, but unless you know if you're dealing with little endian, big endian, where your lsb, msb is, it won't work, even though you'll get a hex output.

In my case I used the below function

//Modified from function, I found on internet to suit specific needs.(Not trying to take credit :) )

public String ConvertbyteArrayToHexString(byte in[]) {

byte ch = 0x00;

int i = in.length-1;


if (in == null)

return null;


String HEXSET[] = {"0", "1", "2","3", "4", "5", "6", "7", "8","9", "A", "B", "C", "D", "E","F"};

//Double length, as you're converting an array of 8 bytes, to 16 characters for hexadecimal

StringBuffer out = new StringBuffer(in.length * 2);


//You need to iterate from msb to lsb, in the case of using iCode SLI rfid

while (i >= 0) {

ch = (byte) (in[i] & 0xF0); // Strip off high nibble

ch = (byte) (ch >>> 4); // shift the bits down

ch = (byte) (ch & 0x0F); // must do this is high order bit is on!

out.append(HEXSET[ (int) ch]); // convert the nibble to a String Character

ch = (byte) (in[i] & 0x0F); // Strip off low nibble

out.append(HEXSET[ (int) ch]); // convert the nibble to a String Character

i--;

}

return (new String(out));

}


Using this, I was able to successfully parse though the bits of my 8 bytes, and convert all necessary to hex. I really hope this helps someone, and I'm sure there are many glaring inefficiencies with this code, and any comments left with suggestions to improve it are greatly appreciated.