Resolving bluetooth tethering issue with iPhone 4 and Windows 7

A very common issue that iPhone 4 owners experience when trying to tether their iPhone to a Windows 7 laptop is a driver installation issue related to a device called “Bluetooth Peripheral Device”.

First off, it is not necessary to install the bloated iTunes 10.x software on the laptop in order to get the iPhone to communicate with Windows properly over Bluetooth. A very simple modification to the device services will fix this issue and allow the device to communicate. Assuming that you have Bluetooth and Personal Hotspot configured properly on your iPhone and that Bluetooth is setup properly on your Windows 7 laptop, simply open up your Bluetooth devices list, right click on the iPhone and go to Properties. A new window will appear. You should see a Service tab on this window. On this tab you will be shown a list of services that are available for this device. Uncheck the Wireless iAP service and click OK. This will fix the driver issue since Windows will no longer will ask for that device. Now you can connect to the tethering services on the phone by right clicking on the device and selecting Connect Using -> Access Point.

If all goes well, you should see a notification on your phone indicating that your laptop is connected to the Personal Hotspot and you should now be able to access the internet from your laptop.

LINQ cheat sheet

Was doing some research the other day on LINQ syntax and came across a very nice compilation of LINQ examples (aka. cheat sheet). The cheat sheet also compares traditional syntax with lambda syntax. LINQ is a feature of the .NET framework that allows for powerful data querying and manipulation (similar to SQL queries).

I have attached a PDF copy below. Enjoy.

LINQ Cheat Sheet (PDF)

How and Why Computers Work The Way They Do

Early in my programming career, like most beginner programmers starting out, I learned higher level programming languages such as BASIC, Pascal, C++ (and later on C#). I soon found myself asking questions that always seemed to lead me to the lowest layer of the computer construct. It simply wasn’t enough to understand the language and the art of programming at the higher level, I desired more of an understanding of what the machine was doing at the lowest hardware layer (specifically the processor, machine code,  the various buses, and memory).

Most universities today have computer science courses (which focus primarily on the programming and software aspects of computers) and computer engineering courses (which focus primarily on hardware and electrical design of computers). This may not be a major revelation, but as a computer scientist (or programmer), the further you move toward lower level languages (i.e. Assembly Language) the more you need to understand about how the hardware was designed to function.

I have read many books on Assembly Language and the major take away from all of them was this: “Through an understanding of the lowest practical human-interpretable computer language (assembly), the programmer gains a true appreciation for the machine he is instructing. This ultimately leads toward much more efficient and streamlined programming with higher level languages.” Makes sense right? So where does one begin this journey?

Not surprisingly, in the internet-driven world we live in, I have found many excellent sources online (both video and textual) that provide a foundation for the understanding of how these extremely complex nanometer-sized machines work. Even more interesting, I have found some great resources related to the history of these machines which also seemed necessary in order to have a full appreciation for the technology and to “close-the-loop” in my understanding. If you don’t like rabbit holes, I suggest you move on to the next article, because once you start down this path, it is a longing albeit extremely fascinating journey.

The Microprocessor and its applications by D. Aspinall. (partial primer)
History of Microprocessors
Grace Hopper (pioneer of computer compilers)
Self-hosting Compilers
Self-Interpreter
Computer Interpreter
History of compiler construction
Bootstrapping compilers
Intermediate Language Representation
Transistor-Transistor Logic (TTL)
Understanding NAND Logic
Sequential Logic
MOSFET Transistors
Dynamic Random Access Memory
FLASH memory
Word Addressing
Locality of reference (temporal and spatial) with focus on memory caching systems
The art of assembly language programming (best assembly language resource I have found thus far)
Outstanding Video Series on Computer Architecture

This is a good list to get started. As I come across more resources I will update the list.