Archive: April 2013

Google Chart API

I can’t believe I have never seen this before – Google has a Chart API available publicly to display bar graphs, pie charts, and various other data visualization tools in HTML5. It’s clean, fast and judging from the examples quite easy to use.

Definitely going to use this on any future web projects that require any kind of graphs.



SharePoint Custom WebParts and list views

It looks as though I’m on a sharepoint-roll; this time I will explain how I put together a custom web part which essentially extends the existing functionality of a list view (SPListView) to execute a custom filter, which in my case required the list view to display only items made by the current user AND users in the same group as the current user (based on a group filter). So for example, let’s say you have a list of grades for a class that has group assignments. I want the list view to display only my own grades and my groupmates’ grades but ignore all others (not as a security thing, but as just a filter thing since I’d have read only access to all the grades in this example). (more…)

SharePoint Custom Claims Provider

Recently one of our customers needed a way to move incoming claims from SiteMinder/ADFS into the user properties of the person logging in. In our case, it was critical to have the e-mail claim be passed into the “Work E-mail” user property on a private SharePoint portal. While it is true that there exists built-in functionality in SharePoint 2010 that will map user properties from Active Directory to user properties and synchronize them, it will not work for the ADFS authentication claims. In our case the users we were concerned with were not the users on our customer’s active directory server, but on an external server. For this reason, any incoming claims, including the e-mail claim, were just simply ignored by SharePoint.

Microsoft advised us to develop a custom claims provider, and the task ultimately came down to me. This was entirely alien to me as I had never done anything like this before, but I managed to pull it together in about a week’s time. Given how much documentation I had to search through to achieve this seemingly simple goal, I would like to save someone out there the trouble by disclosing some of the techniques I used to achieve this. (more…)

Android ‘No Valid Tethering APN’ Issue (Resolved)

ERROR: There is no valid tethering APN. Please contact the customer service to update your tethering APN.

The Issue Explained

I bought an unlocked Motorola DEFY to use on Canada’s Rogers network. It didn’t have any APNs set, I knew that, so I set them up according to the details provided on some forums. My data plan worked fine and everything was accessible but as soon as I tried to enable “Internet Tethering” in the settings menu I got an alert that said “There is no valid tethering APN. Please contact the customer service to update your tethering APN.” No problem, Rogers support is generaly not that bad so I gave them a call. After going through the usual “maybe your plan doesn’t have tethering, let me check” and “your phone is not from Rogers so maybe that’s why” kind of stuff I was able to confirm that the APN details were, in fact, correct. So then why did tethering not work? Strange…

I googled around and pretty much the only people with a similar problem seemed to all have the same phone as me. I started to fear the worst, that the phone was just incapable of tethering or something and I had no way to return it. I refused to give up and kept searching. Mind you, I was trying to set up the connection with Bluetooth at the time so when I came across the suggestion to use the “3G Mobile Hotspot” app instead of bluetooth tethering I was intrigued. Not really the solution I wanted, but if it worked, then sure why not? I fired it up. Unfortunately this gave an error message along the following lines: “cannot establish data link”. So no dice there.

I also up until that point had an interesting run in with the bluetooth tethering on windows 7 where clicking ‘connect’ actually started the PPP dialup process and got as far as “Registering your computer on the network” but then it would time out and give me an error 734 (I forgot the exact message but basically it just didn’t connect).


Introduction to Prolog

Prolog is what’s called a “Logic Programming Language”. Instead of telling the computer what to do and how to do it, you tell it facts and then query those facts. Here is a very basic example of what working with prolog is like, in plain English:
You: Alice is a female.
You: Bob is a male.
You: Charlie is a male.
You: Charlie is the child of Bob.
You: Charlie is the child of Alice.
You: X is the son of Y if X is male and X is a child of Y.
You: Who is Bob's son?
Prolog: Charlie.

There are many software packages that use this language, each with their own variations, so for the purposes of this document I will be referring to a very common one called SWI-Prolog.


Approximation of Solutions to Linear Systems Using the Jacobi and Gauss-Seidel Methods

When one has a linear system that requires to be solved, sometimes finding the solution directly is too time consuming and processing intensive, and an approximation must be used. The Jacobi and Gauss-Seidel methods are two very similar ways to approximate the solution to a linear system. This document will explain the Jacobi method first, then Gauss-Seidel.