Tags: | Categories: Blog Posted by al on 5/19/2011 11:22 PM | Comments (0)

I started looking at the source code for the open source project NuGet, besides being a fantastic template of how code should be written, is actually a great learning tool of how properly set up a open source project or even any development project on the enterprise. One thing I’m enjoying is being able to work with the new version and use it to install packages. Having always a newer version makes me smile.

Package Manager Console Host Version

The Outer Curve Foundation http://www.outercurve.org/ manages NuGet and they are doing a fantastic and responsive job for an open source project. They set up workflows that can shame many huge corporates. I may don’t like much the source control they selected, maybe because I spent too long in VSS and TFS myself. Yet looks like gets the job done nicely.

Source Control

You’ll need to install Tortoise HG that includes the Mercurial command line. You can download Tortoise from here http://tortoisehg.bitbucket.org/download/index.html

All source code for NuGet can be found and download it here using the command line. You could just create an empty directory and then call to download all source code.

hg clone https://hg01.codeplex.com/nuget

However, there are only the main core developers that have access to check in into the main branch, for this the recommendation is to go to the Source Code tab at Codeplex and click Create Fork, that will copy the latest dataset to your own branch and will provide you read and write permissions. Now you can call:

hg clone https://hg01.codeplex.com/forks/yourusername/yourforkname

then grab all the files

hg pull

Now you can work from that fork, without polluting the main branch. To push your changes, first commit and then push

hg commit –m “This is my changes for issue number 829” –u yourusername

hg push

And enter your username and password when prompt it. Now all your changes will be save on the server and will be ready to submit it for code review.

Code Review

Most companies code review is not as well organized, Nuget users reviewboard http://docs.nuget.org/docs/contribute/code-reviews that allows them to review the diff code and approve it to add it into the main branch. There is a lot of work for developers to fork the code to have their own branch, yet, nobody but the core team can break the main branch. Anybody submitting code should first post a message about what code they are going to make changes and then, after the blessing from the team, they can submit the review.

They have installed http://www.reviewboard.org/ into http://reviewboard.nupack.com/ would be nice if they used http://reviewboard.nuget.com yet we need to remember that nupack was the previous name of nuget.

To submit your review, you need to submit your fork. There are a few steps and I’m still learning those. The idea is to get an extension called postreview, then you can call the review and the best way was interactive:

hg postreview –I

I got an error so David Fowler kindly told me that I need it to merge it back to the main first. However didn’t fix the issue. I’m sure that I was doing something wrong.

hg pull https://hg01.codeplex.com/nuget

hg up default

hg merge c781935efe12 // this is the changeset number

The full error is:

** unknown exception encountered, please report by visiting
**  http://mercurial.selenic.com/wiki/BugTracker
** Python 2.6.6 (r266:84297, Aug 24 2010, 18:13:38) [MSC v.1500 64 bit (AMD64)]
** Mercurial Distributed SCM (version 1.8.2)
** Extensions loaded: fixfrozenexts, reviewboard
Traceback (most recent call last):
  File "hg", line 36, in <module>
  File "mercurial\dispatch.pyo", line 16, in run
  File "mercurial\dispatch.pyo", line 36, in dispatch
  File "mercurial\dispatch.pyo", line 58, in _runcatch
  File "mercurial\dispatch.pyo", line 601, in _dispatch
  File "mercurial\dispatch.pyo", line 406, in runcommand
  File "mercurial\dispatch.pyo", line 655, in _runcommand
  File "mercurial\dispatch.pyo", line 609, in checkargs
  File "mercurial\dispatch.pyo", line 598, in <lambda>
  File "mercurial\util.pyo", line 433, in check
  File "C:\mercurialextensions\mercurial-reviewboard\mercurial-reviewboard\mercu
rial_reviewboard\__init__.py", line 68, in postreview
    send_review(ui, repo, c, parent, diff, parentdiff, opts)
  File "C:\mercurialextensions\mercurial-reviewboard\mercurial-reviewboard\mercu
rial_reviewboard\__init__.py", line 127, in send_review
  File "C:\mercurialextensions\mercurial-reviewboard\mercurial-reviewboard\mercu
rial_reviewboard\__init__.py", line 214, in new_review
    raise util.Abort(_(msg))
  File "mercurial\i18n.pyo", line 39, in gettext
AttributeError: 'ReviewBoardError' object has no attribute 'split'


Coding Guidelines

Simple code guidelines with examples is what keeps developers successful and without stressing out on making sure all their code fulfills all requirements.

Issue Tracker

The NuGet project uses codeplex for issue tracking and discussion of new features. By having the issue tracker at codeplex, because very visible to anybody to find out what bugs are standing and to vote in the bugs to be fixed. Before working on an issue of feature request, you should add a comment to let the administrators that somebody is taking care of it. So 2 people don’t work in the same issue.

Continuous Integration

This is properly the coolest part of all, we all started projects and set up automated builds and tests, yet most of the time, let’s face it, takes too long to set up and we avoid that step. The NuGet project is making it look very easy by using TeamCity, a very simple continuous integration tool that many companies should start using. You can see their TeamCity server installed here http://ci.nuget.org:8080/

I do believe that any developer should get involved in the NuGet project for the simple reason of learning. It’s as essential as doing some training or watching some presentations on the latest MVC 3 Razor markup changes. NuGet is how any development project should be approached.



Tags: , , | Categories: Blog Posted by al on 5/6/2011 8:00 PM | Comments (0)

Spring is here and love is in the air, I have fallen in love with EF Code First, not database first like other people that likes to design databases. I like to write code and somebody else can create the database for me that looks like my classes and properties, this time my DBA’s name is Entity Framework 4.1 Code First, that will create the database to store my data represented with my classes.

Now, because code is very flexible, I can do it in many ways it seems, I’m afraid to be doing it wrong.

First I create my classes, instead of products and blogs like other people, I’ll do something more exciting, twitter users Winking smile Under the directory model I add the TwitterUser.cs class

   1:  namespace Sample1.Models
   2:  {
   3:      public class TwitterUser
   4:      {
   5:          public string ID { get; set; }
   6:          public string Username { get; set; }
   7:          public DateTime LastPull { get; set; }
   9:          public virtual ICollection<Follower> Followers { get; set; }
  11:          public virtual ICollection<Unfollowers> Unfollowers { get; set; }
  12:      }
  14:      public class Follower
  15:      {
  16:          public virtual TwitterUser TwitterUser { get; set; }
  17:          public string ID { get; set; }
  18:          public string Username { get; set; }        
  19:      }
  21:      public class Unfollowers
  22:      {
  23:          public virtual TwitterUser TwitterUser { get; set; }
  24:          public string ID { get; set; }
  25:          public string Username { get; set; }
  26:          public DateTime FoundTime { get; set; }
  27:      }
  29:      public class TwitterUserContext : DbContext
  30:      {
  31:          public DbSet<TwitterUser> Tweeps { get; set; }
  32:          public DbSet<Follower> Followers { get; set; }
  33:          public DbSet<Unfollowers> Unfollowers { get; set; }
  34:      }
  35:  }

Yes the classes do not need to be inherit from any other class, that is cool, yet I would like to set an attribute to tell it to create a table from that class, instead I use another class that inherits from DbContext to add them into a DbSet. This is confusing to me, I would just prefer to use attributes. Looks like the patters sometime chance at Microsoft.

Once the 3 classes be added at the DbSet as properties, now let’s start using it.

I create in MVC 3 Refresh 1 a controller to request for user details.

   1:  public ActionResult Details(string sUserName)
   2:          {
   3:              Database.DefaultConnectionFactory =
   4:                   new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0");
   6:              Sample1.Models.TwitterUserContext dbContext = new Models.TwitterUserContext();

At line 3 and 4 you can see I force Code First to use the Compact Database instead of the default Sql Express. It’s your preference, as well you can make a change to your web.config so you do not have to use code. However in today’s blog post, everything is about Code First.

Now first issues I see with EF Code First, in line 1 below, I have to put a try and catch, as first time that creates the database the dbContext.Tweeps will be not just null will actually throw and exception when trying to run it. Looking if the dbContext is null as well, yet the database is already being created the first time that I try to access it. Should I check any property to see if the database is being created? I see that there is an initialize property.

   1:              try
   2:              {
   3:                if ( dbContext.Tweeps != null )
   4:                  if (dbContext.Tweeps.Count() > 0)
   5:                  {
   6:                      List<Models.TwitterUser> userlist = dbContext.Tweeps.ToList();
   7:                      foreach (Models.TwitterUser us in userlist)
   8:                      {
   9:                          if (us.Username == sUserName)
  10:                          {
  11:                              myUser = us;
  12:                              break;
  13:                          }
  14:                      }
  15:                  }
  16:                }
  17:              }
  18:              catch { }



Creating a new Twitter User is simple and so elegant in the sample, is the part that got me hooked into CF. Its as simple of adding into a collection, the essence of .NET.

   1:              if (myUser == null)
   2:              {
   3:                  myUser = new Models.TwitterUser()
   4:                  {
   5:                      Username = sUserName,
   6:                      ID = Guid.NewGuid().ToString()
   7:                  };
   9:                  dbContext.Tweeps.Add(myUser);
  10:                  dbContext.SaveChanges();
  11:              }



Now, modify is confusing to me, I would think that if you change any property, the item gets marked as dirty and then when calling SaveChanges, will make the update.  Line number 2 below should be redundant, I know that because I created the class and the properties, they cannot add a dirty flag at the set, yet I would like something that I do not need to flag the item as modified. However this is how you have to do it.

   1:  myUser.Username = "alpascual";
   2:  dbContext.Entry(myUser).State = System.Data.EntityState.Modified;
   3:  dbContext.SaveChanges();



Now, I hope you are not cut and pasting my code, as the one below has to be wrong, must be a better way to delete one by one the items on my table.

   1:  while (myUser.Followers.Count > 0 )
   2:  {
   3:           Models.Follower foll = myUser.Followers.ElementAt(0);
   4:           dbContext.Entry(foll).State = System.Data.EntityState.Deleted;                        
   5:  }
   7:   dbContext.SaveChanges();

Can I use LINQ to delete? I would like to delete only a few based on a query.

In any case, Code First is the coolest thing, I cannot wait for learning it and improving it until I do it right. A few places to learn. I would start from this 2 below. Scott Guthrie and Scott Hanselman.

Scott Gu’s blog post about EF Code First tutorial

Scott Hanselman presentation as always entertaining about EF CF



Tags: , , | Categories: Blog Posted by al on 5/5/2011 9:47 PM | Comments (0)

This year I have been learning Objective C and mobile development in general to see the possibilities of the new mobile platforms. As I see it there are 3 major platforms.

- iPhone/iPad

- Windows Phone 7

- Android

I have tried the 3 below, and I have discovered quite a lot. Android even the one with the most powerful SDK and flexibility is JAVA and does not feel right for me to use the Java IDEs. There is no much guidance.

Windows Phone 7 has the Silverlight SDK, is fast and easy to create an application, yet the API is very limited still and the deployment still not complete, there is more work that Microsoft needs to do and is missing many features, like for example, rejecting a binary is not possible on the website. They should add the functionality of managing the apps in VS2010.

iOS development is all in objective-c, even being a hard language, the story is complete from Apple. The tools are great, besides debugging, and the deployment is easy. SDK is clear and fantastic documentation. When a new SDK comes out, none of the apps break. It is a development dream.

Now, as a independent developer, people want to learn what is the most regarding market and will provide you with the biggest revenue. I submitted the same application for Windows Phone 7 and iOS with the same price to test the revenue.

Simple kids game in Windows Phone 7:



Simple kids game in iOS iPhone and iPad:


Here is the list of available apps.


You can install it from here Conference Vault.


Store all the conference call numbers and access codes and with a click, let the iPhone login into the conference call without having to enter the number manually.

You can install Spelling Bee here


For kids learning how to spell, this game has more than 400 words for 1st to 3rd grades to practice how to type and spell words with clear voice guidance from Ashley, Dakota and Ryan Pascual.

Install the Device Alarm App here


This application will enable the device alarm so people cannot borrow the device or move it without you knowing it.
Place the iPhone or iPad in a surface, switch the alarm to on and wait, if any or your family or friends tries to move the device, even an each, a loud alarm will sound for 5 seconds to let you know.
Great for protecting your device in a public place or great party trick as well as fun for the whole family.
The phone will be checking the compass, accelerometer and GPS for any changes on the heading. any changes will make the alarm to go off for 5 seconds.
You can also set it up to call you for a move quiet way to alert you.

Install the Math Tutor here

Available for Windows Phone  as well Windows Phone 7


Kid Math Tutor was design by Ashley, Dakota and Ryan Pascual to help learning math for 1st to 3rd grade students in a way of a test, helping them from easy to difficult test and voice to let them know the results.
If you want your kid to learn basic math, this is the app for you.

Install Green Business Cards at the Apple App Store here. 

Available for Windows Phone 7 as well


Create a digital Business Card to share around conferences and meetings without printing them out, you can send them from the application and anybody with that application close to you will receive it. Also a great way to collect Business Cards in conference as you can drop your Green Business Card in a location of the conference.
Printing business cards every year is a huge cost for the environment, as well as organizing those takes time and room. By just being able to send the card by pressing one button to somebody that is close to you, will save a few trees and makes it easier to keep organized.
The Green Business Card application works in location based, when you send your card, will be drop in that location for 1 hours, anybody close 100 feet from that location will be able to pick up your business card.

Install Event Meet Up here


All the Conferences events at your finger tips when you need them.
Allows you to check all events for the Mix, PDC, DevConnections and Tech Ed.
All details for the events and dates are being updated on your iPhone or iPad

Install the Microsoft MVP Events here


List of all events and news at the Microsoft MVP Summit 2011
The latest news happening at the MVP Summit 2011 delivered to you without delay. If you are attending all the events and news will show in a sorted list, if you cannot attend, stay up to date with all news and events.

Install the US State Tutor App here


Learn the United States using a map in this fun game with voice prompts and 3 different settings of difficulty.
All voices from children: Dakota and Ashley.
Good way to learn the US States.
- An education tool to learn where the location of the states.
- Explore the US map.
- Tested with a 4 and 7 years old.
- Created with the interaction of the results of how the kids learn geography.


Tags: , , | Categories: Blog Posted by al on 4/21/2011 11:07 PM | Comments (0)

Introducing Visual Studio 2010 was a great step forward for Microsoft, introducing the out of band releases make us all dynamic as well as disconnected from everybody else in our team. Now when somebody can install Visual Studio 2010 SP1 may not have the same tool that me that already installed Visual Studio 2010 SP1 KB983509. Or better yet, Microsoft Visual Studio 2010 SP1 Tools for ASP.NET Web Pages.


Ah! what is all this? I feel like  when I set up a new development computer I need to spend one day making sure I have the latest and refreshes of the latest. I do believe is getting out of hand. When I work in a team the whole team needs to have the same versions of everything in order to compile. In that case we created a road map for installation and then out of the blue, Microsoft will “refresh” one of those tools!

The Web Platform Installer 3.0 is a great tool in order to make sure you got the latest MVC 3 and then the ASP.NET MVC 3 Tools Update release at the Mix, yet I feel we need a way in Visual Studio to call that and will let us know if there is an update that we should install.

Now I want to use await, I need the Visual Studio Async CTP that will work now with SP1. Confused?


This is getting out of hand and adding more tooling is not the answer for developers to stay up to date, instead integrating into Visual Studio should be the way to go. Anybody with me?



Tags: | Categories: Blog Posted by al on 4/7/2011 7:44 PM | Comments (0)


Create a digital Business Card to share around conferences and meetings without printing them out, you can send them from the application and anybody with that application close to you will receive it. Also a great way to collect Business Cards in conference as you can drop your Green Business Card in a location of the conference.
Printing business cards every year is a huge cost for the environment, as well as organizing those takes time and room. By just being able to send the card by pressing one button to somebody that is close to you, will save a few trees and makes it easier to keep organized.
The Green Business Card application works in location based, when you send your card, will be drop in that location for 1 hours, anybody close 100 feet from that location will be able to pick up your business card.







Categories: Blog Posted by al on 4/1/2011 1:00 AM | Comments (0)

There are many API’s that use the OSM rest end points to create features, I didn’t find much in C# or VB.NET and I wanted to make sure all the changesets I uploaded got delete it. I use the ArcGIS Editor for ArcMap as a baseline to write this code to make sure I clean up a changeset.

I thought to put the code here for people that is looking in how to download a changeset from OSM or delete nodes.

   1:  public static void DeleteChangeSet(string ID, string sUsername, string sPassword)
   2:          {
   4:              WebRequest request = WebRequest.Create("http://www.openstreetmap.org/api/0.6/changeset/"+ID+"/download");
   5:              Console.WriteLine("Called ChangeSet " + ID);
   7:              request.Timeout = Timeout.Infinite;
   9:              WebResponse response = request.GetResponse();
  10:              Stream dataStream = response.GetResponseStream();
  12:              StreamReader readerst = new StreamReader(dataStream);
  13:              // Read the content.         
  14:              string sResults = readerst.ReadToEnd();
  16:              Console.WriteLine("String Back from the ChangeSet with bytes " + sResults.Length);
  18:              XmlDocument xmlDoc = new XmlDocument();
  19:              xmlDoc.LoadXml(sResults);
  21:              // Create the changeset            
  22:              WebRequest client = WebRequest.Create("http://www.openstreetmap.org/api/0.6/changeset/create");
  23:              client.Method = "PUT";
  24:              // Start a delete changeset session
  25:              //http://www.openstreetmap.org/api/0.6/changeset/create
  26:              string sXmlChangeSet = "<?xml version=\"1.0\" encoding=\"us-ascii\"?><osm xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" version=\"0.6\" generator=\"ArcGIS\"><changeset id=\"0\"><tag v=\"ArcGIS Editor for OpenStreetMap (1.1 beta4)\" k=\"created_by\" /><tag v=\"Cleaning Arkansas from changeset" + ID + "\" k=\"comment\" /></changeset></osm>";
  27:              client.Credentials = new System.Net.NetworkCredential(sUsername, sPassword);
  29:              //string sChangeSetID = client.UploadString(new Uri("http://www.openstreetmap.org/api/0.6/changeset/create"), sXmlChangeSet);
  30:              Stream requestStreamclient = client.GetRequestStream();            
  31:              StreamWriter mywriter = new StreamWriter(requestStreamclient);
  33:              mywriter.Write(sXmlChangeSet);
  34:              mywriter.Close();
  36:              WebResponse clientResponse = client.GetResponse();
  37:              Stream readStream = clientResponse.GetResponseStream();
  38:              StreamReader streamReader = new StreamReader(readStream);
  39:              string sChangeSetID = streamReader.ReadToEnd();
  41:              Console.WriteLine("Created ChangeSetID " + sChangeSetID);
  43:              // Get the nodes and start deleting
  44:              XmlNodeList nodes = xmlDoc.ChildNodes.Item(1).ChildNodes;
  45:              dataStream.Close();
  46:              readerst.Close();
  47:              streamReader.Close();
  49:              foreach (XmlNode node in nodes)
  50:              {
  51:                  string sID = node.ChildNodes.Item(0).Attributes[0].Value;
  52:                  string sVersion = node.ChildNodes.Item(0).Attributes["version"].Value;
  53:                  string lat = node.ChildNodes.Item(0).Attributes["lat"].Value;
  54:                  string lon = node.ChildNodes.Item(0).Attributes["lon"].Value;
  56:                  //<?xml version="1.0" encoding="utf-8"?><osm xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="0.6"><node lat="33.8952356958747" visible="true" lon="-117.309384882913" changeset="7717855" version="1" id="1225499422" /></osm>
  57:                  string sXmlToDelete = "<?xml version=\"1.0\" encoding=\"utf-8\"?><osm xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" version=\"0.6\"><node lat=\""+lat+"\" lon=\""+lon+"\" id=\"" + sID + "\" version=\"" + sVersion + "\" changeset=\"" + sChangeSetID + "\"/></osm>";
  59:                  Console.WriteLine("Deleting Node " + sID);
  61:                  WebRequest delete = WebRequest.Create("http://www.openstreetmap.org/api/0.6/node/" + sID);
  62:                  delete.Credentials = new System.Net.NetworkCredential(sUsername, sPassword);
  63:                  delete.Method = "DELETE";
  65:                  Stream requestStream = delete.GetRequestStream();
  66:                  StreamWriter stwriter = new StreamWriter(requestStream);
  68:                  stwriter.Write(sXmlToDelete);
  69:                  stwriter.Close();
  71:                  WebResponse deleteResponse = null;
  72:                  try
  73:                  {
  74:                      deleteResponse = delete.GetResponse();
  75:                  }
  76:                  catch (Exception e) { Console.WriteLine("Cannot delete node " + e.Message); }
  78:                  stwriter.Close();
  79:                  if ( deleteResponse != null )
  80:                      deleteResponse.Close();
  81:              }
  83:              // Close change set 
  84:              string sClose = "http://www.openstreetmap.org//api/0.6/changeset/" + sChangeSetID + "/close";
  85:              WebRequest closeRequest = WebRequest.Create(sClose);
  86:              closeRequest.Method = "PUT";
  87:              closeRequest.Credentials = new System.Net.NetworkCredential(sUsername, sPassword);
  89:              WebResponse closeResponse = closeRequest.GetResponse();
  90:              closeResponse.Close();
  92:              Console.WriteLine("Close ChangeSetID " + sChangeSetID);
  94:          }
Tags: , , , | Categories: Blog Posted by al on 3/19/2011 10:35 AM | Comments (0)

Besides all sessions and courses found in the agenda there are events happening around that you will miss, those events are being published and index in this iPhone & iPad app for you to find the parties or external events around the conference that otherwise you will miss.


Download it for free here if you are going to the Mix, DevConnections, TechEd or Pdc this year.



Tags: | Categories: Blog Posted by al on 2/7/2011 11:28 AM | Comments (0)

I’ll be presenting at the Dev Meet Up in Phoenix on Thursday February 10th, 2011. This event is Free, drinks and finger food will be provided.

You can also win a Zune!

Keynote by James Fee,

  • James works for WeoGeo helping people organize, share and monetize their geo-content.

This Dev Meet Up is a social gathering for developers to discuss geospatial technologies, complementary third-party tools, and development platforms (e.g., Silverlight, Java, Flex, JavaScript) that are supported by Esri. Presentations run the gamut of our community: from Web development to mobile location development for iOS, Android and Windows Phone 7 to automating tasks with Python.

Developers of all levels of expertise are welcome, from seasoned GIS professionals to those new to geospatial development.

At these meetups, you can:

* Demonstrate your application or framework.

* Present an interesting concept or idea.

* Share your experiences.

* Connect with other developers.

Sign-up for a Lightning Talk!

You can also submit a topic for a 10-minute lightning presentation. There are generally only time for 4 per meetup so be sure to submit them as soon as possible!

See you there!


Bluewater Grill

1720 E. Camelback Road

February 10, 2011

5:00-5:45 PM Registration and Social 6:00 - 6:30 PM Keynote: James Fee 6:30 - 7:30 PM Lightning talks 7:30 - 8:30 PM Raffle

How to Register? : http://esriurl.com/dmuphoenix

More information:


If you are a developer around the Phoenix area I would recommend you attend this one.



Tags: | Categories: Blog Posted by al on 12/16/2010 8:00 PM | Comments (0)

The VS2010 SP1 Beta has been released from Microsoft and with it a few bugs got fix, like the bug with the weird copy and paste issue inside VS2010. Read all about it in my previous post here: Problems with copy and paste in VS2010

I have received this email from Microsoft:

VS2010 Copy / Paste functions are not working as expected which you submitted at the Microsoft Connect site.

Hi everyone, I'm writing to let you know that this cut/copy/paste bug is fixed in the Visual Studio 2010 Service Pack 1 Beta, which was just released last week, so we're resolving this bug as Fixed. We would encourage you all to download the SP1 Beta from http://go.microsoft.com/fwlink/?LinkId=207130, which should eliminate the sporadic copy/paste failures you're experiencing. If you still see issues after installing VS 2010 SP1, please file a *new* Connect bug so that we can investigate separately. Thanks again for your feedback […]

Before you install VS2010 SP1 Beta, you may want to read this post from Scott Hanselman about the implications of going Beta.



Tags: | Categories: Blog Posted by al on 12/11/2010 7:08 PM | Comments (0)

We all agree that everything can be found on the web, I keep meeting parents of young and older kids with the same stories about their kids accessing websites that were not appropriate for their age. The most interesting part of the story is when the parents find out by accident that one of their kids we surfing the web and found something not appropriate. The unknown part is how many times, parents didn’t find out when the kids in the house accessed a few website, that were not that appropriate for their kids.

As my kids are getting older and they learn more everyday of how to access the internet, I grow as well more concerned on avoiding the kids individual curiosity and get them exposed to things that we all prefer having the opportunity to be the one to explain to them.

There are many things that parents do and believe will be enough; they talk to their kids to give them a few rules, they locate the kids computer in the living room, they add a parental control on the Windows or Mac machines. If you have tried the later, setting up each computer with a block software, even the one that comes with Windows 7, can be a painful experience to maintain. Now when in a house there are plenty Windows, Macs, portable computers, iPads, iPhones and other devices capable to access the web, the problem is the maintenance and support of each different software, and you cannot chain all computers in one location, or expect to be always there when your child surfs the web.

Eventually becomes a nightmare for the parent to keep blocking or unblocking websites or ports for the family to use the internet. As a geek and a parent, I would like to share a solution I found that works the best for a house full of devices capable of accessing the Internet. I use a DNS solution to filter all traffic back and forth from the web.

DNS filtering also keeps a log of all websites your kids access, this way you know what are they doing in Facebook, Twitter, or any chat application they use with their friends.

What’s a DNS filtering? (Geeks can skip)

For any device in your house to access the internet, there is a router in your house, that your Internet provider gave you, or geeks like me have one, that gives you wireless Internet as well as wired Internet. When any computer access a website from a browser or another program, the request goes to a DNS server that translates the address “http://www.gooogle.com” for example to a unique number know as an IP number. Those DNS servers numbers are also provided by your Internet Provider. The DNS Filtering replaces those numbers on your router to send them to a server that filters and allows or declines the request depending on your rules. So all traffic from your house will go over the rules you set up. The numbers for those DNS servers are stored in that router.

(Geeks can come back to read here)

The solution that seems to work better for me in a DNS filtering is called Open DNS, there are other ones that you can check out of course, yet, I’ll show you how easy is to set it up at your house this simple solution. Even people without much computer knowledge will be able to follow the simple instructions and set it up without much ado.

The solution is free or if you want more control there is a cheap solution as well. At least they provide a free solution for you to try.

Follow this simple steps:

Create an account at http://opendns.com

Then just setting up your router is easy, will walk you thru the different routers, if you are a geek, you know where the dns servers number are in your router. You need to make sure the Internet Provider gave you the password of your router.


The addresses for Open DNS are and always are the same:



Once you have change the dns numbers on your router, there is a screen on http://opendns.com that will allow you to see and register your public IP address, the number that is assign to your house (router). Then you can start setting up your filtering settings as well as seeing the traffic that is coming from your house to the internet.

Hope this guide helps some parents.



Follow me in Twitter