Story of Google map’s driving directions and a missing turn

Day before yesterday (29th June 2012) evening, I had to travel from a location in Margao (marked as point A in the screen-shot below) to Mickey’s in Colva (marked as point B). As I had not been to the place before, I took help from Google Maps App in my Samsung Galaxy S2 to identify the path between the two points. Google Maps marked the path as shown in the screen-shot below.

With the help of GPS tracking in google map app, I started following the path. Everything went fine till I reached the turn identified with red circle in the screen-shot above. I was surprised to notice that there was no road for the turn at that point.

Fortunately, I was little familiar with this area and thus was able to identify the alternate route which could connect me to point B. Following screen-shot will show you the alternate route.

Luckily, I was familiar with the location and thus, was able to identify the alternate route quickly. But the people who use the app to find paths/directions while travelling to a different state or an unknown location may not be so lucky.

While using the applications like google maps, we all need to remember that it is just a tool, which help us only to find a solution to the problem, but it need not be the best or the most accurate one. In some cases, we may be presented with wrong results as well.

Thus, if you are using google maps to plan your next family trip, make sure you verify all the information properly. Otherwise, your family trip may convert into an interesting adventure trip.

Airtel 3G With Samsung Galaxy S2 : My Alternate Source For High-Speed Internet

Can you imagine life without high speed internet access? Without it, we won’t be able to:

  • Enjoy services provided by sites like Youtube
  • Download free and opensource applications
  • Make video calls through services like Skype
  • Share screens and work from home (I hope you like it)

Seriously, high speed internet adds significant value to our daily life. Like most of my friends in India, I use BSNL Broadband to access high speed internet service at home. It provides pretty good connectivity in terms of speed and quality as shown in the screenshot below:

However, during monsoon period, I often face connectivity issues which can cause problems, especially if I want to work from home. Thus, I prefer to have alternate source of high speed internet connection as backup. I prefer this source to be wireless and stable while providing good internet speed.

While searching for another source of high speed internet access, I came across Airtel 3G. Following screenshot will show you the speeds that I get with Airtel 3G:

These screenshots show that Airtel 3G provides internet with speed which is half of what is provided by BSNL broadband. Depending on the quality of network, I can even get better speed.

To access this internet connection on my laptop, I make use of the “Portable Wi-Fi Hotspot” feature provided by my Samsung Galaxy S2 mobile phone. It’s a great device with lot of good features and this is just one of it.

I have been using the internet provided by Airtel 3G for around a month now and I am pretty much happy with it. Now I use it for most of my regular tasks and rely of BSNL broadband only to download large files.

RSpec Matchers: Be careful while testing boolean values

While testing methods that return boolean values in ruby (the ones that end in ‘?’), try to avoid following matchers:

method_returning_true?.should be_true

or

method_returning_false?should be_false

This is because, ‘be_true’ and ‘be_false’ matchers considers ‘nil’ to be false and anything other than ‘nil’ to be true. When we write methods in ruby which end with question mark (‘?’), intent is that the method will return boolean value. To ensure that our tests will always reflect the intent of code, use following to assert boolean values instead of using ‘be_true’ or ‘be_false’ matchers:

method_returning_true?.should == true

or

method_returning_false?.should == false

Search Google Visually

Today I came across an online tool that allows you to see the screenshot of pages in the google search result. You can give it a try at “Veesual.com

Veesual

Veesual Result

While I found the concept to be interesting, I was wondering what could be the use of looking at screenshots of pages in search result. What matters to me is getting a list of relevant search results. A thumbnail of a particular page in search result won’t help me in determining how relevant that page is to my search.

However, I do see one use for getting search results along with thumbnails. It can be used to come up with ideas for designing web-sites for a particular theme. You can search on Veesual using a keyword that describes the theme of your site and then take a quick look at the design of pages in the result. This can help you to come up with your own web-page design.

Do let me know if you can think of some more applications of Veesual.com

Simple equivalent of “With” statement in C#

Consider the following class in C#

	public class Person
	{
		private string name;
		private int age;
		
		public string Name{
			get {return name;}
			set { name = value; }
		}
		
		public int Age{
			get {return age;}
			set { age = value; }
		}
	}

If I want to set the value of Name and Age property on the instance of Person class, I’ll need to refer to that instance for every property I need to set in the code. For example:

var person = new Person();
person.Name = "Super Man";
person.Age = 30;

It would have been great if C# had an equivalent of VB’s “With..End” statement, where we could refer to the instance of Person class only once and then refer to properties only.

Today, I came across this post “mucking about with hashes…“, which shows how C# lambdas could be used as hashes. Using this concept, I implemented a simple extension method that simulates the behavior of VB’s “With..End” statement to some extent.

Here is the code for extension method:

	public static class MetaExtensions
	{	
		public static void Set(this object obj,params Func<string,object>[] hash){
				foreach(Func<string,object> member in hash){
					var propertyName = member.Method.GetParameters()[0].Name;
					var propertyValue = member(string.Empty);
					obj.GetType()
						.GetProperty(propertyName)
							.SetValue(obj,propertyValue,null);
				};
		}
	}

Using this extension method, we can set the value of properties on instance of Person class as follows:

var person = new Person();
person.Set(
	Name => "Super Man",
	Age => 30
);

Isn’t that cool?

Fixing SyntaxHighligher plugin in WordPress Blass2 theme

Yesterday I installed and activated Blass2 theme for this blog. I liked this theme as it was very simple and free from any extra graphics. After installing the theme, I discovered that “SyntaxHighlighter Evolved” plugin which I use to display code segments, was not working. I searched for other themes which are similar to blass2 and can run syntaxhighlighter plugin, but couldn’t find anything better. Finally, this is how I fixed it.

To fix it, I had to edit ‘footer.php’ of Blass2 theme using inbuilt theme editor of WordPress (Appearance > Editor). The original ‘footer.php’ looked like this:

<div id="footer">



 <p>&copy; <?php echo date("Y")?> <!-- Please leave this line intact --><?php if (is_home()) : ?><?php bloginfo('name'); ?> | Theme <a href="http://1000ff.de/wordpress-theme-blass-english-version/">Blass</a> by <a href="http://1000ff.de/">1000ff</a><?php else : ?>Theme Blass by 1000ff<?php endif; ?> | Powered by <a href="http://wordpress.org/">WordPress</a></p>

</div>

To fix the plugin, you need to add a call to ‘wp_footer’ function in ‘footer.php’.

<div id="footer">



 <p>&copy; <?php echo date("Y")?> <!-- Please leave this line intact --><?php if (is_home()) : ?><?php bloginfo('name'); ?> | Theme <a href="http://1000ff.de/wordpress-theme-blass-english-version/">Blass</a> by <a href="http://1000ff.de/">1000ff</a><?php else : ?>Theme Blass by 1000ff<?php endif; ?> | Powered by <a href="http://wordpress.org/">WordPress</a></p>
<?php wp_footer() ?>
</div>

After making this change, syntaxhighlighter plugin started working again.

After file and photo sharing, it’s time for “code sharing”

If we want to share a file or photos while chatting with our friends on internet using IM tools like GTalk, we use file sharing services available online. These services allow us to upload a file to their servers and give us a link which we can share with our friends. But what if you are a developer and want to share a small piece of code with your friend? You are left with following choices:

  • Paste it in your chat: I know most of us do this when we quickly want to share the code. However, its annoying as it becomes unreadable and makes your code look as if its obfuscated :)
  • Email: This approach is better compared to previous approach, however the recipient wil need to manually compile the code and run it if he wants to know the output.

I won’t say these approaches are useless. But I would like to have a place, where I can put my code fragment and then share it using a link. I can use this link in my gtalk status, chat or even in twitter posts.

Luckily, there is a site called “codepad” that allows us to do exactly the same thing. It allows us to share a piece of code using a small url.

You can try it now at “http://codepad.org/” or take a look at this example code posted by me at “http://codepad.org/XZpSNngW

Finally, one thing I would like to see is support for C# code.

Missing attachment detector in Gmail

It is really embarrassing to send an email with an attachment and actually forgetting to attach the file you were supposed to mail along, isn’t it? In my case, I often forget to attach files to emails if I’m typing it in hurry. Sometimes, I even end up receiving replies from recipients of those emails requesting me to eat food instead of attachments. It’s really embarrassing when you are working as a professional or interacting with your teaching assistant while studying through online universities.

Luckily, today I came across a feature in Gmail Labs, which helps you to identify missing attachments as soon as you press send button. This small functionality in Gmail warns you if you have written something like “I’m attaching” or “I am attaching” or “I have attached” in your message body and you haven’t actually attached any file. I’m not sure if it is capable of identifying any other patterns in email text which suggests that you wanted to attach something. However, I tested for above 3 patterns and I’m good with it.

To enable this feature, you will need to login to your Gmail account. Then go to Settings -> Labs, and enable ‘Forgotten Attachment Detector’. Don’t forget to click on ‘Save changes’ after that.

I would like to thank Mr. Jonathan K, for creating this useful feature in Gmail lab. It is definitely an important feature for me, and for many other people who like to eat attachments instead of food.

Fixing NTLM authentication in Windows 2003

We had an application written in C# .Net, which used to communicate with Alfresco Enterprise Document/Content Management System. The application was using Alfresco’s NTLM component for authenticating users against their AD (Active Directory) user account.

The application worked perfectly while we were testing it on Windows XP system. However, on Windows 2003 64 Bit system, the application started failing as it could not authenticate users on alfresco server using NTLM.

So we had a situation where NTLM authentication used to fail only when our application was running on Windows 2003 Operating System. We tried disabling “Internet Explorer Enhanced Security Configuration”, but it didn’t help. Finally, after spending a lot of time on Google, we came across following article on Microsoft Knowledge Base:

You may experience authentication issues when you access a network-attached storage device after you upgrade to Windows Server 2008, to Windows Vista, to Windows Server 2003, or to Windows XP

This article talks about configuring the system to use appropriate NTLM version. In our Windows 2003 system, the value of “lmcompatibilitylevel” (Under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA subkey) was set to 2. We just changed this value to 1, and the client application started working properly in Windows 2003 system as well.

If you are also facing a similar issue on Windows 2003, then you can try the solution mentioned here. If setting the value of “lmcompatibilitylevel” to 1 makes no difference, then change this value to 0, which is the default value of “lmcompatibilitylevel” in Windows XP.

Be careful while using ‘replaceAll’ and ‘replaceFirst’ methods of String class in Java

Most of the time, while trying to replace a substring in a given string, either all its occurrences or just the first one, java programmers tend to use ‘replaceAll’ and ‘replaceFirst’ methods provided by String class in Java. Java programmers like to use these methods to replace substrings as compared to ‘replace’ method of String class because of different reasons like:

  1. ‘replaceAll’ and ‘replaceFirst’ methods use regular expressions instead of character sequence. It is pre-assumed most of the time that using these methods will allow us to replace a given pattern in future, instead of just replacing a substring.
  2. ‘replaceAll’ and ‘replaceFirst’ methods are named such that they clarify the intent of their execution.

However, while using these methods, we need to be very careful while providing the string value which would replace a given substring or a pattern. Let’s understand why with the following example:

Run the following java code:

public class StringReplace {

public static void main(String[] args){
String stringValue = "test1 test2 test1 test3";
String replaceValue = "test";
stringValue = stringValue.replaceAll("test1", replaceValue);
System.out.print(stringValue);
}

}

This code works properly. But now try running the same code by changing the value of variable ‘replaceValue’ as:

String replaceValue = "$100";

This would result in an exception of type ‘IndexOutOfBoundException’. This is because the ‘$’ symbol is used to identify a group from the regular expression which is the first parameter of ‘replaceAll’ or ‘replaceFirst’ method. We can solve this problem by:

  1. Using ‘replace’ method: This would be the good choice if you want to replace a string literal and not a pattern.
  2. Escaping ‘$’ symbol: If you need to a use regular expression, and your pattern has no groups identified, then you can escape any group identification symbols from your replace string as shown below:

String replaceValue = java.util.regex.Matcher.quoteReplacement("$100");