Sunday, July 27, 2014

Unlocked iPhone in Iceland Results

In an earlier post I detailed the process I went through to unlock my iPhone 5 in preparation for my trip to Iceland. So I thought it might also be helpful to provide a recap of how it actually went.

Finding a SIM Card

After reading over the great post over at iheartreykjavik.net called To buy or not to buy an Icelandic SIM card, I decided to go with a Simmin card. Upon arriving at the Keflavik airport I immediately went to the Elko electronics store in the main shopping area and asked an employee there if they had Simmin SIM cards, they only had Ericcson brand, which I didn't want because of the coverage outside of Reykjavik. After getting my bags and seeing the signs for the Simmin cards on signs at the baggage claim I stopped by the Duty Free store, which also only had Ericcson. Finally, I took my chances at the 10-11 convenience store in the main lobby of the airport and they had a couple Simmin Nano SIM cards left. I bought the 2000 krona prepaid card, which I vaguely remember coming to 2900 krona. I didn't really care, I was just excited to have found the card at the airport. Here is the packaging.



Installing the SIM Card

I convinced my wife to stop for a couple minutes so I could try to get the SIM card installed and thankfully she obliged. I found a corner of the floor where I could spread out my bag and got to work. The whole package was about the size of the credit card and opened up to reveal the 2000 krona prepaid card, a card with the SIM card and some instructions. The instructions were useless to me because they were only in Icelandic. So I guessed at it and did this:
  1. Removed my AT&T SIM card using a paper clip, because despite having had 5 iPhones in our house, I can't locate a single SIM card removal tool.
  2. Popped the Simmin SIM card out of the packaging.
  3. Placed it carefully in the iPhone 5 SIM card tray (metal side down)
  4. Slid the tray into the phone.
  5. Once it was inserted the phone prompted me for a PIN, which I found by scratching off a spot under the word PIN on the card that had the SIM card attached to it. Next to the PIN on the card is also the PUK number, which I believe is the Icelanding phone number for the SIM card.
  6. After entering the PIN it took a minute or so and the Simmin name appeared in the top left and I was off to the races. The card also has a PUK spot next to

The User Experience

The first stop of our trip was in Reykjavik for breakfast, with plans to drive to the hotel in Vik on the south coast that evening. I used the phone a couple times while in downtown Reykjavik for maps and various social media updates. During the drive it came in handy for a couple good searches and the service never fell to less than a couple circles formerly known as bars. At some point in the drive I got a text message in Icelandic, which I was quick to disregard. I finally made it to a scenic spot a few hours later and attempted to send a text message with little success, which I attributed to lack of signal because it was in the middle of nowhere. However, later on I learned that the phone wasn't receiving any form of data anymore. During the drive I tried to play some songs via the Music app with little luck, it appeared like they were playing, but no sound was coming out. I remained perplexed until I stopped and switched the phone into Airplane mode and tried playing music again with great success. I had found my aha moment!! I am an iTunes Match subscriber and even though I had downloaded a few albums for the trip, the phone was still trying to use the data connection for the songs. Since the music playing had worked earlier in the day I figured out that I had used up all of my prepaid data at that time.

Now that I had some idea about what was happening I went to the Simmin website to try and figure out how much money was left on the prepaid card, but couldn't really figure it out. Instead I just went to the Simmin Top Up Page to add more data, I went with the 1GB mobile month long data plan for 1290 krona. All I needed to do was enter the PUK number from above and enter my credit card information before I was back in business. The rest of the trip I made sure to flip to Airplane mode when playing music to avoid falling into the same trap again. The card worked fine for the rest of the trip.

Funny note, on the second to last day of the trip I ended up translating the Icelandic text I had received on the first day and it translated to "Your credit is down to 100 krona."

Saturday, July 19, 2014

Time Zones and Aperture

I recently took a trip to Iceland and took photos with both my iPhone and DSLR camera.  The iPhone pictures made it into Aperture via My Photo Stream and I imported the DSLR photos manually.

After looking at the timestamp on the photos I saw that all of the iPhone photos have a time stamp of the local time, but the time zone is EDT instead of GMT.  The iPhone seems to know the local time, but for some reason the camera is using the old time zone. For example, one of the photos I took at 7:37 GMT had a timestamp of 7:37 EDT. In order to fix this in Aperture you can use the Batch Change functionality under the Metadata menu.

  1. Select the pictures you want to update
  2. Click Metadata > Batch Change...
  3. In the Time Adjustment radio select Adjust Time Zone
  4. For Camera's Time Zone set it to the time zone where the pictures were taken, in my case Atlantic > Reykjavik
  5. For Actual Time Zone set it to the time zone seen in the timestamp before doing this, in my case America/New York
  6. Click OK to update the photos, this will put the photos in your local time zone with the appropriate time. In the example I gave before the timestamp now says 3:37 EDT.
  7. Click Metadata > Batch Change...
  8. In the Time Adjustment radio select Adjust Time Zone
  9. For Camera's Time Zone set it to the Actual Time Zone from above.
  10. For Actual Time Zone set it to the time zone where you actually took the photo.
  11. Click OK to update the photos, this will correctly adjust the time so the time and timezone are correct.
As for the DSLR, I never updated the clock on it so all the pictures had my native timezone of EDT.  In that case you just have to start at step 7 above and change them from EDT to GMT.

Tuesday, June 24, 2014

Unlocking an AT&T iPhone 5

In preparation for my upcoming trip to Iceland I started to research using my iPhone abroad.  
Apparently there are three ways to go:

  1. Don't do anything and pay high international roaming fees to AT&T.
  2. Change my AT&T billing information to include some sort of international data plan.
  3. Purchase a prepaid SIM card from a carrier in Iceland
The last option seemed the most interesting to me and the prepaid SIM card also gives me a clear idea about how much it will cost me to use my phone in Iceland instead of being surprised when I get back home. However, since I bought my iPhone from AT&T it is not unlocked, which means I can't use it with the SIM card from a different carrier.  The good news is AT&T will let you unlock your iPhone for free if you meet certain restrictions.  Below are the steps I used to unlock my AT&T iPhone 5.



AT&T Unlock Request

The process to request that AT&T unlocks your phone.
  1. Go to the AT&T Unlock Request site
  2. Fill out all the fields
    1. The IMEI number is a unique identifier for the phone that the cell companies use when activating to determine if the phone is stolen or is allowed on different carriers.
    2. You can your iPhone's IMEI number by going to Settings > General > About.  It is towards the bottom of the list.  Also check the phone number on that list too, because it will be the same one you enter on the form.  In my case, I was unlocking my wife's phone and it only worked if the IMEI and Phone Number's matched in the unlock request.  The email and password should match the account owner.
  3. Submit the form.
  4. Check your email and click on the enclosed link to confirm that you want to unlock your iPhone.
  5. After a period of time, in my case it took just a few minutes, you will receive another email from AT&T stating that the unlock request was received. The email means their records now have the IMEI number for that phone as being unlocked.  It also includes instructions for how to actually unlock the phone

Unlocking the iPhone

The process of actually making your phone recognize that it is unlocked.

  1. Take it back to the old school and fire up iTunes.
  2. Plug your iPhone into your computer.
  3. In iTunes go to the Summary page for the iPhone.
  4. Click the "Back Up Now" button to back the iPhone up to your computer.
    1. You may be prompted to transfer app purchases, which you probably want to do.
  5. After the back up completes, click the "Restore iPhone" button up near the top, not the "Restore Backup..." button. This will clear the contents of the iPhone and update the firmware if necessary.
  6. After the phone finishes the restore you should see a message on screen that says, "Congratulations your iPhone has been unlocked."
  7. Click the "Continue" button to set up the iPhone.
  8. At this point you can restore from the backup you just saved.
Now your iPhone should be unlocked and you can insert the SIM card from another carrier and successfully make calls.

Friday, January 24, 2014

My Photo Management History

Floppy Disks

I bought my first digital camera, the Sony Mavica FD-83 back in 1999.  It is laughable now, but this little guy used 3.5" floppy disks, which at maximum image quality would hold 4-6 photos.  At the time it was cutting edge and it really kicked off my love of taking photos. 14 years and almost 50,000 photos later and I have saved practically every single photo I have taken.  Fortunately the specs on my cameras is dramatically improved these days with my iPhone 5 taking photos that wouldn't fit on five of those floppy disks and I can't even imagine how tall the stack of disks I would need for the RAW photos taken by my digital SLR.

Simple Beginnings

Initially managing all of these photos was easy, because I could only carry so many floppy disks around with me.  On my PC I simply created a folder called Pictures and within that folder was a folder with a date and some sort of clever name describing the subject of the photos. For example, 1999-08-07 Misc or 1999-08-08 Rockport Trip.  I even took it a step further and renamed each picture with the name of the people in the photo, which ended up being quite tedious. For example, KeegMike.jpg, KeegMike2.jpg, Keeg.jpg.  I carried on with this methodology for quite a while and it worked out pretty well.  It wasn't always easy to find certain pictures, but at least it was organized.

iLife

I bought my first MacBook in April of 2007, just a few months after my son was born, and immediately fell in love with iPhoto.  Its not that iPhoto was the best of the best out there, but it sure did beat trying to manage photos using Windows Explorer.  I quickly imported all of my photos into my iPhoto Library and at first things were great.  Evenings were spent making albums, photo books and reliving all my old photos again.  However, as time passed and the number of photos in the library grew, the performance of iPhoto started to suffer.  I did my research and found a great little program, iPhoto Library Manager, that would let me split my main library into several smaller libraries.  Logically it seemed best to break the photos up into equal sized libraries, which meant the older/smaller photos would end up containing several years of photos, while the newer/larger photos ended up being divided into individual years.  Once the libraries were separated order was restored to iPhoto and it was once again a joy to work with.

AAA Rating

At the end of 2007 I wanted to create a calendar with the best photos from the year, but after about an hour of trying to find the "best" photos I realized I needed to start using iPhoto's star rating system going forward.  The rating system in iPhoto is very simple, a photo can have between 0 stars (unrated) to 5 stars.  I decided to start small and for the first pass of photos to just use the first 3 stars:
  • 1 star - Bad quality, out of focus, bad lighting, crap, etc...
  • 2 stars - Good photo, worst out of group of similar photos, average
  • 3 stars - Great photos, would share with family or friends, best out of group of similar photos
Once I finished rating all of the pictures for the current year as a 1, 2 or 3, I created a Smart Album with the 3 star photos and culled a little deeper by setting the 4 and 5 star photos. 
  • 4 stars - 3 star photos that really stand out from the rest
  • 5 stars - The very best 3 star photos, with memorable moments or quality
Once I finished rating all of the photos it was much easier to create a calendar because I only had to look through 300 photos rated with 4 or more stars instead of 3,000 unrated photos. From that day forward I have continued a similar rating system every time I import any new photos.  I usually do the first pass 1-3 rating immediately and then once every couple months I will go through the 3 star photos and bump some of them up to 4 or 5.  I created a Smart Album called Unfinalized with two criteria: Rating >= 3 AND Date > {some date}.  Every time I finish going through this album I update {some date} to that date so I remember where I left off last time.

Places to Go

The rating system was working out really well and definitely made finding and sharing good pictures much easier.  I then started wondering if I should take advantage of other iPhoto metadata to make it easier in the future.  So I went back and added both Places and Faces for all of my newly imported photos.  The places part was pretty easy, but the Faces was a real pain in the ass, because there weren't any good keyboard shortcuts and if you had a picture of people in a crowd it would ask you to tag all of the people.  However, once I got the hang of it, having that extra metadata on the photos was huge.

Smart Filters
Now that all the photos were rated, tagged and located, it was really easy to set up a system for processing them after each import.  I created a few Smart albums, that I would go through after each import to make sure I was up to date.

  • Unrated shows all photos with no rating
  • Unplaced shows all photos without a place set on them
  • Unfinalized shows all photos with a 3 rating or better after a specific date.  These are the photos that haven't been given the 4 or 5 start test.  Once I finish going through these I update the date portion of the filter to the current date until next time.
Next time I will talk about my move to Aperture and some adjustments it caused me to make in my rating system....

Monday, November 25, 2013

Debug Flex Application Against Different Server Machine

Once in a while one of my server co-workers will ask me to test something on my current version of our client Flex application.  Generally they are asking me because they will use the same version of the client application as long as possible, which in some cases could be a couple weeks.  They also know that every morning I get a fresh copy of everything and always try to run the "latest greatest".

The other day I received one of these  types of queries, but with a twist; they wanted me to use my client application against their server.  Oddly enough this had never come up before, so I set out to get this working.  Oddly enough it took me a bit of searching before I found the solution, considering the end result was so simple.  Going forward I will refer to my machine as Machine A (client) and my coworkers machine as Machine B (server).  So if you jumped right in and tried to point your client right at Machine B you would get this error,  SecurityError: Error #2123: Security sandbox violation, because Flash is not happy about trying to access a server on a different machine.  However you can set up a cross domain file to allow this type of access.


  1. Create a new xml file named crossdomain.xml on Machine A.
  2. Download my sample cross domain file sample-crossdomain.xml (note these values allow any domain to access your server so you should fine tune it for your case if in a production environment). 
  3. Change the name to crossdomain.xml
  4. Send the crossdomain.xml file to the person using Machine B.
  5. On Machine B place the crossdomain.xml into the ROOT folder of the app server, so you can go to http://MACHINEB/crossdomain.xml and see the file from Machine B. 
  6. Open up the main application mxml file of your Flex application.
  7. Add an initialization event handler to the application if one doesn't already exist.
  8. Add this line to the initialization handler:  Security.loadPolicyFile("http://MachineB/crossdomain.xml");
  9. Finally wherever you have defined the URL for your AMF channel needs to be updated to point to Machine B.
Additional Resources

Friday, November 8, 2013

Flash Builder 4.7 Freezes Opening MXML

Why does Flash Builder 4.7 freeze when I try to open an MXML file?
There is a bug in the Flash Builder compiler when processing MXML components that are nested so that a component has a child that contains a reference to the parent component's type.  Adobe did send me a fix for this issue.
Steps to fix the issue:
  1. Close Flash Builder
  2. In Windows Explorer navigate to the c:/Program Files/Adobe Flash Builder 4.7/eclipse/plugins/com.adobe.flash.compiler_4.7.0.349722/AIRSDK/lib
  3. Copy the compiler.jar file to a directory in case you need to replace it.
  4. Download the patched compiler.jar I received from Adobe to the directory above
  5. Start Flash Builder

Compile Flash Builder Project Against a Different PlayerGlobal

I have always struggled with the limited right click functionality in Flash Player.  There are several Javascript workarounds for intercepting the click before Flash Player receives it, but depending on the wmode this might not work.  Using the out of the box context menu lets you add some basic menu items, but there are limits to the number of menu items and you always get the standard menu items at the bottom of the list.

So when Flash Player 11.2 was announced I was excited to read about the new functionality added for right and middle click events. See Flash Player 11.2 Release Announcement. I updated the Flash Player in my browser to 11.2 and then went to Flash Builder to try out the new right click functionality.  Unfortunately I ran into several problems and only after much trial and error and searching was I able to get it working.  I am using Flash Builder 4.7 with Flex SDK 4.6.23201.

Things I learned

  1. The Flex SDK has a minimum version of player version it will work with defined in the frameworks/flex-config.xml file of the SDK.
  2. The Flex SDK comes with at least one version of playerglobal.swc library which contains the class information for the version of Flash Player. The versions can be found in the frameworks/libs/player directory of the Flex SDK
  3. Each version of playerglobal.swc has a specific swf version that needs to be used when building your Flex swfs.
  4. Flash Builder can compile against any of the player version defined in the frameworks/libs/player directory of the Flex SDK
  5. The swf projects in Flash Builder need an additional compiler argument -swfVersion={XX} in order to compile correctly.

Steps to follow in order to get it working

  1. Get the PlayerGlobal.swc 
    1. Go to Adobe's Archived Flash Player Versions Page 
    2. Find the PlayerGlobal.swc Archives section.
    3. Download the playerglobal.swc library for the version of Flash Player you want to compile against.  
  2. Install the PlayerGlobal into your SDK
    1. In your OS navigate to the frameworks/libs/player directory of the Flex SDK.
    2. Create a new directory with the name set to the version of Flash Player you are trying to compile against.
    3. Copy the downloaded playerglobal.swc file into the new directory.
    4. Rename the file playerglobal.swc.
  3. Update your Flash Builder Project to compile against the new Flash Player version
    1. Open up Flash Builder.
    2. Right click on the project you want compiling against the new version of Flash Player
    3. Select the Properties menu item from the context menu to show the Properties Window
    4. Click on the Flex Compiler item in the list
    5. In the Adobe Flash Player Options box select the Use a Specific Version radio button
    6. Enter in the version of the Flash Player you want to compile against.
    7. Look up the correct SWF version
      1. Go to Chart of Flash Player and SWF Versions. If the version you want to use is not here then you will need to do a web search for it
    8. In the Additional Compiler Arguments enter a new argument -swfVersion={version from above}
    9. Click the OK button to save the changes
    10. Close the project
    11. Reopen the project
    12. Select Project > Clean... from the menu bar and clean the project
At this point you should be all set to use the new Mouse Events.  


Here are some errors I received along the way
Error Message: unable to open 'C:\dev\tools\adobe\sdks\4.6.0.23201\frameworks\libs\player\11.3\playerglobal.swc' Unknown Flex problem
Reason: The Flex SDK didn't contain the version I entered in the Adobe Flash Player Options specific version field of the project properties.

Error Message: TypeError: Error #2007: Parameter type must be non-null.
Reason: The swfVersion argument was missing from the additional compiler arguments of the project properties.

UPDATE:
Here are some details on deploying the playerglobal.swc to Maven for use by FlexMojos 4.

Run this command to install it in your local repository
mvn install:install-file -Dfile=playerglobal.swc -DgroupId=com.adobe.flex.framework -DartifactId=playerglobal -Dversion={FLEX_SDK_VERSION} -Dpackaging=swc -Dclassifier={FLASH_PLAYER_VERSION} 

Run this command to deploy it to your repository manager
mvn deploy:deploy-file -Durl={repositoryURL} -DrepositoryId={repositoryID} -Dfile=playerglobal.swc -DgroupId=com.adobe.flex.framework -DartifactId=playerglobal -Dversion={FLEX_SDK_VERSION} -Dpackaging=swc -Dclassifier={FLASH_PLAYER_VERSION}