Wednesday, December 3, 2008
Toolbox Bitmap for Control - when icon not showing?
Love coding!
Friday, November 7, 2008
How to track users when cookies are deleted? Super Cookies?
Take for instance Bank of America. According to their Privacy & Security statement they (also) use flash objects to remember your computer. Even when you delete your cookies, cache and temp files they can still recognize your user ID (when you opted to remember the computer) and bypass the security question. There are others that do similar techniques, like INGDirect and so on.
If you are wondering where the information is getting stored, then look under "C:\Documents and Settings\YourUSERID\Application Data\Macromedia\Flash Player\#SharedObjects". And to see how to set your preferences, check this article here.
While this is a neat technique to overcome ordinary user's cookie deletions, the technique is subject to concerns regarding how well it's being used to secure the data. Unlike cookies, flash cache is not something all the users are aware of. Hence before using this technique we need to ensure that the users are educated on risks if using a public machine and leaving a trail of flash cache.
Love coding!
Tuesday, October 28, 2008
Implement p3p headers - Cross-Site (Domain) iFrames
If privacy is set to low then this might no be an issue; but since most users would have it set to medium the browser won't let the iFrame to write cookies if that's from a different domain than the parent. To resolve this problem, we need to let the browser allow the cookies from the iFrame site and this can be done with p3p headers.
To do this in a .Net application, we can use the Application_BeginRequest event to set the custom http header to allow p3p.
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext.Current.Response.AddHeader("p3p", "CP=\"CAO PSA OUR\"");
}
A rather easier way to do this in general, even for classic asp, is to set this in IIS. Go to site properties - HTTP Headers - Add Custom HTTP Header:
Name: p3p
Value: CP="CAO PSA OUR"

Love coding!
Friday, October 10, 2008
Trouble shooting? May be try 5 Whys
Just recently saw a team struggling to get their application running properly. They had too many issues and saw them applying patches feverishly to make it work. I can understand the pressure under tough time lines and sympathize with the team. That's when I was thinking about the 5 Whys. As simple as it sounds, it is an effective way of getting to root cause of the problem.
On the lighter side, we have seen many times, teams get to the root cause and term it as bad initial design (so have to live with it...).
There is no one solution that fits all or solves all problems. Go by what we can do the best given the limitations but use the right tools (& force) to solve the problems we trouble shoot.
Love coding!
Wednesday, October 8, 2008
ASP.Net Data Cache & Oracle Database Change Notification
A good web application design has data caching built to it. It is always a fine balance to find out what’s the optimal level to keep the cache and the refresh intervals. In most of my designs I compartmentalize these into various types like 24 hour windows, specified number of hour windows, user types with specified number of hours… etc.
OracleCommand cmd = new OracleCommand("Your SQL", con);
con.Open();
// Register notification with command object if result changes.
// When an OracleDependency instance is bound to an OracleCommand
// instance, an OracleNotificationRequest is created and is set in the
// OracleCommand's Notification property. This indicates subsequent
// execution of command will register the notification.
OracleDependency dep = new OracleDependency(cmd);
// Allow the change notification handler in the database to persist
// even after the first database change
cmd.Notification.IsNotifiedOnce = false;
// Add the event handler to handle the notification.
// The OnDatabaseNotification method will be invoked when a notification
// message is sent from the database
dep.OnChange +=
new OnChangeEventHandler(OnDatabaseNotification);
OracleDataAdapter da = new OracleDataAdapter(cmd);
// Do your data stuff here...
// This event gets triggered on Database Change Notification
public static void OnDatabaseNotification(object src, OracleNotificationEventArgs args)
{
// Call your cache refresh method here...
}
Love coding!
Tuesday, October 7, 2008
Visual Studio - Web Project vs Web Site
To help you to make an informed decision, here are some really nice articles that address this topic:
MSDN Article
Mike Hacker's Blog
Maor David's Blog
Damieng's Blog
Anthony Grace's Article
Love coding!
Wednesday, October 1, 2008
WCF Services - starters basic trouble shooting
I will keep this list growing and if anybody has any suggestions/questions/additions I will be glad to include.
Love coding!
Thursday, September 25, 2008
Using javascript to enable/disable Asp.Net validators - plus a trick to force the validity
ValidatorEnable(document.getElementById('<%=rqrdtxtCCNumber.UniqueID.ToString().Replace("$", "_")%>'), true);
Plus a trick I used recently with this method is to force the validity of a required field. To extend the same example above, if say we have JavaScript to copy address for CC from other fields when you check address is same check box and if we have required validators on the CC address fields, you may notice when you check (which copies) and uncheck (which clears) the our error indicator appears on those fields. To overcome, just call the same method like above in your copy or clear javascript - it works!
Love coding!
Wednesday, September 10, 2008
Membership Profile read updates LastUpdatedDate
This is in reference to custom membership provider we built for Oracle but the concept is similar to SQL Membership. Found that the profile table has both LastActivityDate and LastUpdatedDate getting updated. A little digging into it took me to the root cause of the problem - usage of Profile to read custom Profile properties (XML).
For example, any place we use Profile.LastName to get the last name then it's updating the LastActivityDate (as expected) and also updates LastUpdatedDate. Which is not intended. The idea is to update the latter column only when the user modifies and saves their profile.
ProfileCommon myProfile = (ProfileCommon)ProfileCommon.Create(HttpContext.Current.User.Identity.Name);
ProfileCommon myProfile = Profile.GetProfile(User.Identity.Name);
And then to get your LastName property, just use myProfile.LastName.
Thursday, August 7, 2008
Windows Service InstallUtil - Service not showing up in services list
Love coding!
Wednesday, June 11, 2008
Access UNC file share with credentials
An easier way I figured to work around this is to login to the server using the local account that runs the job. Map the UNC file folder to a drive; when windows prompted for credentials, used a valid network account and made sure to reconnect at logon. Well, there you go! It seems to work for me. Don’t know if there’s a better ways to do it but this is simple enough to let it work for now.
Love coding!
UPDATE 07/21/2008:
Well, found a better way :-) Just use Net command to set the connection credentials. For Example,
net use \\MyServer\D /user:domain\myUserID MyPassword
XCopy ....
It works!
Friday, June 6, 2008
Passing credentials to URL - when reading content from a url using System.Net namespace
// Using System.Net.WebClient
WebClient webClient = new WebClient();
webClient.Credentials = new NetworkCredential("userName", "password");
// I set my proxy with webProxy method and use it if needed
//webClient.Proxy = this.webProxy;
using (Stream stream = webClient.OpenRead(url))
{
using (StreamReader reader = new StreamReader(stream))
{
string response = reader.ReadToEnd();
return response;
}
}
// Using System.Net.HttpWebRequest
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Credentials = new NetworkCredential("userName", "password");
// I set my proxy with webProxy method and use it if needed
//request.Proxy = this.webProxy;
using (Stream stream = request.GetResponse().GetResponseStream())
{
using (StreamReader reader = new StreamReader(stream))
{
string response = reader.ReadToEnd();
return response;
}
Love coding!
Thursday, June 5, 2008
Visual Studio 2008 & Crystal Reports Redistributable package
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages\CrystalReports10_5
Love coding!