Keezel review

The Keezel is another interesting technology item that I backed on Indiegogo, and so after using it for a while both at home and on the road, I thought it might just be time for a Keezel review.

The Keezel device is a VPN device that allows you to secure your wi-fi communications. After you power it up, you connect to it and then use a web browser to go into the device’s administration panel. From there, you can set up what wireless access point and VPN you want to connect to. In addition, it can function as a spare battery pack as well, powering any mobile devices that charge through a standard USB port.

Right out of the box, I had some issues trying to get the Keezel registered with my Premium activation code that was included in the box. No matter what I did, it still did not think that it was registered. After a couple of emails with Keezel support, it was working just fine. I suspect that there is some kind of issue with the Keezel software or with their back end managing the subscriptions, and that they did something manually on their side that enabled it to connect up.

Once set up, the device worked great at home. On the road, though, it did not work quite as well, but even then I suspect that it had more to do with the quality of the wi-fi on the road I was trying to connect to, than a problem with the Keezel device or software. Toward the end of my trip, the device was knocked out of commission because the wi-fi log in page that I was trying to use would not come through to the user, they would just get an error message in the browser.

Rating: 4 stars out of 5

Pros:

  • Compact and light
  • Good battery life
  • Fast response from support

Cons:

  • Can be a bit touchy
  • Location of supported VPNs does not include all locations

BTW, Happy Birthday to Clint Hurdle, manager of the Pittsburgh Pirates.

Error 404 on web service with map route

If you are getting an error 404 on your web service with a map route decorator on your methods, you might want to check your IIS settings to make sure that it is configured correctly.

Apparently, your app pool must be set up in integrated mode as opposed to classic mode in order for the routing to work.

BTW, Happy 10th Anniversary to the iPhone.

GPD Pocket review

I don’t usually do reviews, but with certain products that I think are particularly interesting or innovative, I will make an exception. As a result, here is my GPD Pocket review.

GPD Pocket: 7.0′ UMPC-Laptop with Windows 10

I saw this campaign pop up on an email to me from Indiegogo in February of this year, and thought that the idea was intriguing. So I backed the project and received the device about 4 months later, which in terms of some Indiegogo campaigns, is practically overnight. (I’m looking at you, Fusion Guitar.)

For an inexpensive device, I do like the build quality. The case is an alloy case that feels very solid and light, which hopefully translates to durability in the long run.

The screen is a 7 inch screen at a resolution of 1920×1200, and from what I have seen so far, is very good for most traditional uses. This device is not advertised as a gaming machine, so I have not tried to do anything crazy complicated with it yet.

Atom processors are notoriously sluggish, but the one in this device seems snappy enough, although the caveat again here is that I have not tried running anything challenging. I suspect that the 8 gigabytes of RAM configuration that I opted for is helping out on this front quite a bit.

On such a small device, the keyboard is always going to be a problem, and the GPD Pocket is no exception here. The biggest problem I have been having so far is that the number keys are off to the right by about one key, or in other words, on a normal keyboard, I go for the 3 key with my E finger, but on GPD Pocket, the 2 is right above E. As a result, I have to stop myself when going to the numbers row.

The one thing that I wish this device had was a MicroSD card slot to expand the device beyond the 128 gigabytes of storage that it comes with on the internal drive.

For the price that I paid (about $400 as an early adopter), I think it is a great device that I will make a lot of use of. That said, if the retail price goes up significantly from there, I am not sure if it has the same appeal.

Rating: 4 stars out of 5

Pros:

  • Compact and light
  • Good battery life
  • Good build quality

Cons:

  • Hard to touch type
  • No MicroSD card slot to expand storage

BTW, a posthumous Happy Birthday to Bob Keeshan.

They say it’s your birthday…

No technology related news or views today, just wanted to wish Joe Bonamassa a Happy 40th Birthday!

Watch out for #ifdef TARGET_IPHONE_SIMULATOR

I just wanted to take a moment before the sands of time in the April hourglass run out for a friendly reminder for those iOS developers who are working in older Objective-C code bases. Watch out for #ifdef TARGET_IPHONE_SIMULATOR, as at some point, a newer version of the iOS SDK broke this check. In the current TargetConditionals.h file, TARGET_IPHONE_SIMULATOR resolves to either a 0 or a 1 (eventually, see below), which means that no matter where you run the code, TARGET_IPHONE_SIMULATOR will be defined, hence the code inside the #ifdef will always run.

The solution is of course to use the following line instead:

#if TARGET_IPHONE_SIMULATOR

Keep in mind that TARGET_IPHONE_SIMULATOR itself is marked as deprecated in the iOS 10 SDK TargetConditionals.h file, so I suppose to be future-proof, you should instead use:

#if TARGET_OS_SIMULATOR

BTW, Happy Honesty Day to my U.S. readers. All you need to know about Honesty Day is that I think it is one of the best days on the calendar.

macOS VPN adventures

I use a VPN to connect for work, and have been having some macOS VPN adventures with my MacBook Pro. Mostly my problem was that, on occasion, the internet connectivity would not work, as I could connect to the VPN just fine, but any internet requests would just return with a failure.

The way I found to work around this issue was to go into the advanced settings for the VPN and hard code the DNS server of 8.8.8.8 in there. After doing that, it seemed to work much more solidly.

As a bonus tip, if you happen to use VMware Fusion on your Mac to run a Windows VM, I would also recommend going into the network adapter settings for your VM (all of them if you have more than one) by launching your VM and selecting Settings from the Virtual Machine menu, and select the Internet Sharing “Share with my Mac” setting instead of going directly to your Wi-Fi or Autodetect under Bridged Networking, or otherwise your VM will not communicate through the VPN you have running on your Mac at the same time.

Find the bundle ID of an app in the App Store

Have you ever had to find the bundle ID of an app in the App Store? Well if you have, there does not seem to be a direct way to do it, so here is how I found the information.

First, use the iTunes Link Maker to search for iOS apps, find the app you need to discover the bundle ID for, and click on it. This will pull up a screen with an embed code link, find the numeric ID code.

Then, visit this link, replacing the X’s with the numeric ID you just found:

https://itunes.apple.com/lookup?id=XXXXXXXXX

After you plug in your numeric ID, the Apple site should spit back a JSON file in response, look for the bundleId entry.

BTW, I am a day late, but Happy 40th Anniversary to Slap Shot, one of the finest cinematic masterpieces of all time.

Eliminate noise from the iOS Simulator console

If you find that you are getting a lot more stuff showing up on the console when debugging your app in the Simulator, you are not alone. Luckily, there is a way to eliminate noise from the iOS Simulator console output.

To do this, go into the scheme editor for your target, select the Run Debug option on the left, select the Arguments tab on the right, and under Environment Variables, click the + button to add a new one called OS_ACTIVITY_MODE, and set its value to false.

BTW, a posthumous Happy Birthday to the King, Elvis Presley.

Advent of Code 2016

Well folks, it is the holiday season once again. That only means one thing… Advent of Code 2016 is upon us!

Once again, I have decided to do this undertaking in Swift to help me get familiar with the language and the transition from Swift 2 (that I used in last year’s exercise) to Swift 3.

It seems harder this year than last, as I am struggling to keep up. If you want to check out my lame progress, please visit:

https://github.com/Wave39/AdventOfCode2016

BTW, Happy Holidays everyone!

Log all SQL statements in an Android app

If you are using SQLite as your data store in an Android app, and you want to try and trace through the SQL statements that are occurring, it can be painful, especially if you are working with a large code base that you may not be 100% familiar with.

Luckily, there is a super easy way to do this with no code changes. Once you have opened the simulator, go to the terminal and execute these commands:

adb shell setprop log.tag.SQLiteLog V
adb shell setprop log.tag.SQLiteStatements V
adb shell stop
adb shell start

Then, in the Android monitor, you will probably want to filter by SQLiteStatements to see the relevant entries.