Posted by: asadsiddiqi on: April 2, 2009
As a prerequisite you would require to have Microsoft Visual Studio 2008 installed on your system. Alternatively you can also have Microsoft Visual Studio 2005 with AJAX extensions for ASP.Net installed. This would be a very basic example just to get you started and will touch the basics of writing AJAX enabled web applications using Visual Studio and ASP.Net.
So What is AJAX and what is the use ?
AJAX is the abbreviation of “Asynchronous JavaScript and XML”. It is a technique in web development that is used to greatly improve the responsiveness and performance of a web application thus resulting in a great user experience. To understand how it works you should understand how the old web applications worked, how it all started, what is java script and what do we exactly mean by AJAX?
As web applications were hosted and running on a web server, the browser simply accessed the application on a server and rendered the html produced for the user.
“Ever wondered why it took a long time after you clicked a button and when you look at the status bar its slowly moving and after some time it comes back with the response”.
This was mostly the case not with static websites but web applications where a lot of processing was done on the server side based on events like pressing a button. The page would “postback” and provide the server the necessary input. On the event handler there would be some validations and then some processing and then typically another “postback” updating the user. As more users complained that the application was not responsive enough or too slow, more techniques evolved to process minor data on the client side using javascript. Typically these would be tasks like client side input validations, dynamic menus and conversions displaying time and things like that.
The end user liked the experience as the application was much more responsive and wont go back to the server to process each and every piece of information (postback) .
So this idea was refined and the AJAX technologies were introduced and including in all the major web development frameworks. If you are reading this off course you are not an AJAX Expert , you just want to know how you can use AJAX in your application to make it more responsive or just for the heck of it J .
So here is how you do it with ASP.Net using Visual Studio 2008.
1/ Create a new website and name it as AJAXExample. This can be achieved by File -> New -> Website and selecting ASP.Net Website from the installed templates.
2/ Visual Studio .Net will generate the basic skeleton application by generating the following files (pages):
Default.aspx
Default.aspx.cs
Default.aspx is the actual page where all the controls or (html elements are). The Visual Studio IDE enables you to switch between Design View and Source View. Design view is where you can look how the page looks like and the source view is the html view of the page.
3/ Be in the design view and the first control to be dragged and dropped on the page must be “ScriptManager”. This is located under “AJAX Extensions”. Visual studio will rename it as ScriptManager1 and will add the following code when you switch to source view:
<asp:ScriptManager ID=”ScriptManager1″ runat=”server”>
</asp:ScriptManager>
Note: This should be the first control in the page. It tells the asp.net worker process that this application or page uses AJAX and the required “dlls” have to be loaded in memory.
4/ Add the controls whatever is required in your application. For the sake of simplicity I will add a textbox and 2 buttons in the design view. The visual studio will generate the following code in the source view.
<asp:Button ID=”Button1″ runat=”server” Text=”Hello” onclick=”Button1_Click” />
<asp:TextBox ID=”TextBox1″ runat=”server”></asp:TextBox>
<asp:Button ID=”Button2″ runat=”server” onclick=”Button2_Click” Text=”Clear” />
5/ Define the event handlers in “Default.aspx.cs”.
protected void Button1_Click(object sender, EventArgs e)
{
TextBox1.Text = “Hello”;
}
protected void Button2_Click(object sender, EventArgs e)
{
TextBox1.Text = “”;
}
6/ Add the following code in your html before and after your controls code. So the controls you want to process without postbacks has to be wrapped around this block:
<asp:UpdatePanel id=up1 runat=server>
<ContentTemplate>
// Controls here
</ContentTemplate>
</asp:UpdatePanel>
7/ Run the application and Enjoyeee ! In the same way you can put more controls in a page like gridViews comboboxes and list boxes or even databound controls and use it without causing the application to postback.
I am copying and pasting the contents of my code files:
Default.aspx
<%@ Page Language=”C#” AutoEventWireup=”true” CodeFile=”Default.aspx.cs” Inherits=”_Default” %>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head runat=”server”>
<title>Untitled Page</title>
</head>
<body>
<form id=”form1″ runat=”server”>
<div style=”height: 295px”>
<asp:ScriptManager ID=”ScriptManager1″ runat=”server”>
</asp:ScriptManager>
<asp:UpdatePanel id=up1 runat=server>
<ContentTemplate>
<asp:Button ID=”Button1″ runat=”server” Text=”Hello” onclick=”Button1_Click” />
<asp:TextBox ID=”TextBox1″ runat=”server”></asp:TextBox>
<asp:Button ID=”Button2″ runat=”server” onclick=”Button2_Click” Text=”Clear” />
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
</body>
</html>
Default.aspx.cs:
using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
TextBox1.Text = “Hello”;
}
protected void Button2_Click(object sender, EventArgs e)
{
TextBox1.Text = “”;
}
}
Posted by: asadsiddiqi on: December 19, 2008
I implemented an expression tree in Object Oriented Style and that was one of the homework i had for a class at school.I hated it a lot, but finally when completed I liked it a lot, ahhhhhh felt really like i have achieved something. By the way this is a good example of polymorphism and inheritence and the concept of virtual functions and abstract base classes (if you know what I mean ? ) Many of us do all this stuff in school and keep it to school. We never design types like that at work or someone else doesnt because we dont have the time to spend in design (at least nowhere i worked people had the time to design) but oh well !!
The logic is as Follows:
An Expression Tree consists of Nodes.Nodes can be of different types (Operators , Constants , Variables). All nodes can print themselves and allow their derivative to be taken which also is a expression tree . The derivative has to be taken with respect to a variable and the expression tree can be evaluated by plugging in a value of the variable from a look up table or symbol table …
I am posting the code (of the header file and the driver program) just in case it interests anyone. Your comments and feedback is welcome and you can get a working copy of code if you want. Leave your email address as a comment and i will send you the copy. This is not finished as i did not implement the destructors but you will get the idea.
#include <iostream>
#include <map>
#include <string>
#include <math.h>
using namespace std;
/******************************************************************************************
Muhammad Asad Siddiqi
Making an Expression Tree Representation, given an expression
This files contains the prototype for following classes
-GenericNode
-VariableNode
-BinaryOperatorNode
- AdditionNode
- SubtractionNode
- MultiplicationNode
- DivisonNode
-UnaryOperatorNode
- NegateNode
- SineNode
- CosNode*******************************************************************************************/
class
PoorManSymbolTable {
private:
std::map<std::string,double> symbolTable;
public:
PoorManSymbolTable();
void InitializeSymbolTable();
double getSymbolTableEntry(std::string symbol);
};
//——————————————————————————————// This class represents a Generic Node
class GenericNode
{
public:
GenericNode();
virtual double EvaluateNode() = 0;
virtual void PrintExpression() = 0;
virtual GenericNode *Clone()= 0;
virtual GenericNode* TakeDerivative(std::string variable) = 0;
};
//—————————————————————————————–// This is the node that represents a constant like 15
class ConstantNode : public GenericNode
{
private:
double value;
public:
ConstantNode(doubleconstant);
double EvaluateNode();
voidPrintExpression();
ConstantNode *Clone();
GenericNode* TakeDerivative(std::string variable);
};
//————————————————————————————
// This node represents a Variable like ‘X’
class VariableNode : public GenericNode
{
private:
std::string symbol;
PoorManSymbolTable symbolTable;
public:
VariableNode(std::string variable);
double EvaluateNode();
void PrintExpression();
VariableNode *Clone();
GenericNode* TakeDerivative(std::string variable);
};
//—————————————————————————————–// This is the node that represents a binary Operator ( + , – , * )
class BinaryOperatorNode : public GenericNode
{
protected:
GenericNode *left;
GenericNode *right;
public:
BinaryOperatorNode(void);
BinaryOperatorNode(GenericNode *leftOperand , GenericNode *rightOperand);
GenericNode* TakeDerivative(std::string variable);
};
//—————————————————————————————–// This is the node that represents a unary Operator ( + , – , * )
class UnaryOperatorNode : public GenericNode
{
protected:
GenericNode *childNode;
public:
UnaryOperatorNode(void);
GenericNode* TakeDerivative(std::string variable);
};
//—————————————————————————————–// This is the class that represents a + operator
class
AdditionNode : public BinaryOperatorNode
{
public:
AdditionNode(GenericNode *leftOperand , GenericNode *rightOperand);// realize the pure virtual function
double EvaluateNode();
void PrintExpression();
AdditionNode *Clone();
GenericNode* TakeDerivative(std::string variable);
};
//—————————————————————————————–
// This is the class that represents a – operator
class SubtractionNode : public BinaryOperatorNode
{
public:
SubtractionNode(GenericNode *leftOperand , GenericNode *rightOperand);
// realize the pure virtual function
double EvaluateNode();
void PrintExpression();
SubtractionNode *Clone();
GenericNode* TakeDerivative(std::string variable);
};
//—————————————————————————————–// This is the class that represents a * operator
class MultiplicationNode : public BinaryOperatorNode
{
public:
MultiplicationNode(GenericNode *leftOperand , GenericNode *rightOperand);
// realize the pure virtual function
double EvaluateNode();
void PrintExpression();
MultiplicationNode *Clone();
GenericNode* TakeDerivative(std::string variable);
};
//—————————————————————————————–// This is the class that represents a / operator
class DivisonNode : public BinaryOperatorNode
{
public:
DivisonNode(GenericNode *leftOperand , GenericNode *rightOperand);
// realize the pure virtual function
double EvaluateNode();
void PrintExpression();
DivisonNode *Clone();
GenericNode* TakeDerivative(std::string variable);
};
//—————————————————————————————–// This would be used to negate a node
// Return a negative when evaluate is called
class NegateNode: public UnaryOperatorNode
{
public:
NegateNode(GenericNode *argChildNode);
double EvaluateNode();
NegateNode *Clone();
void PrintExpression();
GenericNode* TakeDerivative(std::string argSymbol);
};
// ————————————————————————————–
// This would be used to create a Sine Operator in the Expression Tree
// It is a unary operation and derivative is a cos Node
class SineNode : public UnaryOperatorNode
{
public:
SineNode(GenericNode *argChildNode);
double EvaluateNode();
void PrintExpression();
SineNode *Clone();
GenericNode* TakeDerivative(std::string argSymbol);
};
//—————————————————————————————–// This would be used to create a Cos Operator in the Expression Tree// It is a unary operation and uses negation in derivative
class CosNode : public UnaryOperatorNode
{
public:
CosNode(GenericNode *argChildNode);
double EvaluateNode();
void PrintExpression();
CosNode *Clone();
GenericNode* TakeDerivative(std::string argSymbol);
};
// The driver program
int
_tmain(int argc, _TCHAR* argv[])
{
GenericNode *objGenericNode , *cloneTest , *derivativeResult;
ConstantNode *var1 = new ConstantNode(45);
ConstantNode *var2 = new ConstantNode (25);
VariableNode *var3 = new VariableNode(“Xray”);
VariableNode *var4 = new VariableNode(“Yellow”);
objGenericNode = new MultiplicationNode(new AdditionNode(var3,var4),new CosNode(var2));
cloneTest = objGenericNode->Clone();
cloneTest->PrintExpression();
cout << endl <<“Printing Derivative of Expression Tree … “ << endl;
derivativeResult = cloneTest->TakeDerivative(“Xray”);
derivativeResult->PrintExpression();
return 0;
}
Notely: This is not about parsing an expression by putting it on 2 stacks using Infix or Postfix notation . This is an implementation of an expression tree where the structure of the tree is known
. I could not post the implementation but would be provided on request .
Posted by: asadsiddiqi on: November 30, 2008
And for those of you thinking where are all the while loops and pointers and my keen .Net Tutorials and object oriented designing thoughts some stuff is coming soon enough , just busy with some projects and I will put the design here for your consideration. For right now though , the focus is on the stock market (Laugh out loud)
…. Take care
Posted by: asadsiddiqi on: October 27, 2008
I am not an experienced investor at all. I wish I were. Perhaps this is one of the bad economic times and the recession seems to be a global one but should you invest now or track back and take all your money out even at a loss? There are many things that I cannot understand as far as investing money is concerned. Can anyone help me figure that out with some logic and experience after reading my point of view?
First off I am not from a very rich background so all these terms like Mutual Funds, EFTs,401 K and Money Market Savings are kind of new to me. I do have a solid understanding of how these works and what people do to diversify their portfolios. But I have my own point of view and intuition about the market and I have no short term plans.
So wherever I have read about the collapsing economy, credit crisis and recession the best advices seem to be “Take all your investments out and sit on your cash”!! Sounds pretty reasonable as if your investments are in the market especially equities they will loose their value and you will see your investments wiped out!! About right. BUT what happens when you are done with this recession and the market changes from Bear to Bull. Don’t you get all your investments back? I mean still the background info is required with company insight business domain and technical analysis of how well the company does financially but generally speaking I would think more companies do well and the market indices rise. You get more returns to your investments. So to conclude when the chips are down everyone takes their investments out, even cut back their 401 K contribution? Doesn’t sound right to me at all!!
You can make a maximum profit especially in equities if you buy at their minimum and sell at the maximum right but I wish someone could have told me when is the minimum and maximum J . Unfortunaly we never and can’t know that but that’s the job for financial analysts. I read many financial analysts and most of them seem optimistic about the future and YES everyone does admit that we are in one of the worst economic times. So to me this indicates a trading and investing opportunity. Big brand stocks on sale I should say on clearance….. Do you think that every company is going to be eventually bankrupt as we are in recession? The world is going to stop? I really don’t think so. However if you are looking at very short term I think it’s very logical not to invest in the stock market. It’s highly unlikely you get positive returns on your investments and it’s highly unpredictable. There are a number of great companies out there who will set records for profits and growth. And if you happen to be a lucky investor you might be very happy otherwise if the recession is over you will just be happier.
I am not an advocate of compelling you to invest in the stock market and I am certainly not an experienced investor as well. Being from the IT background I know what some IT companies are doing and what is in demand at this point in time … My interest lies with the Technology sector of the stock market and I plan to invest some of my savings in these companies early 2009 and leave the investments for a year and see how I did on my first investment venture. Any thoughts, ideas, plans and observations, corrections are highly welcome. Feel free to comment on my observations, discuss a trading strategy or discuss about the research that I put in for these companies. To be short things I look for to estimate the potential is the business domain, major competition, balance sheet, growth, future prospects, msn ratings, earning estimates for next year and a global presence.
· Google(GOOG)
· Adobe (ADBE)
· Ceragon Networks (CRNT)
· Quest Software (QSFT)
· BMC Software (BMC)
· Cognizant technology Solutions (CTSH)
· Synopsys(SNPS)
· NCR Corporation(NCR)
Posted by: asadsiddiqi on: October 25, 2008
I wanted to use wcf because I read about it and like the power and clean implementation which is highly configurable without a lot of effort. I have used and made many clients for web services using Visual Studio .Net and all it requires is to know where the web service is hosted. When you add a service reference and pass in a url where it is hosted (WSDL) the IDE generates a proxy class and WOW !! there you go… Call the methods in ur client, no fuss at all clean , nice and smooth. I was under the impression that WCF is esentially the same and support many other types of bindings like http,tcp blah blah ….. So i started developing the Kool WCF server client application. Little did I know about generating the client proxy class using svcutil.exe . I knew that you can generate proxy classes using svcutil.exe but that is a painful painful process. A little up and down and it gives you exceptions that are very easy to understand [ Devilish smile ] . So to save you the time and effort that you will have to put it to generate proxy classes I will show you the exact app.config file and how to use the svcutil. You can simply copy and paste it and be happy [just rename the Contracts , end point info according to your own and you are good to go] …
I have changed the font to BOLD whatever i was missing and was required by svcutil to generate the proxy class that I used.
Here is my app.config in the Hosting Application (server) from where the service would be run:
<?xml version=“1.0“ encoding=“utf-8“ ?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name=“mex“>
<serviceDebug includeExceptionDetailInFaults=“true“ />
<serviceMetadata />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name=“WCFServiceLibrary1.service1“ behaviorConfiguration =“mex“>
<endpoint address=“net.tcp://localhost:6587/Service1/“
binding=“netTcpBinding“
bindingConfiguration=“TestBinding“
name=“RoleEndPoint“
contract=“WCFServiceLibrary1.IService1“ >
<identity>
<dns value=“localhost“ />
</identity>
</endpoint>
<endpoint
address=“mex“
binding=“mexTcpBinding“
name=“MEX“
contract=“IMetadataExchange“ />
<host>
<baseAddresses>
<add baseAddress=“net.tcp://localhost:6587/Service1/“ />
</baseAddresses>
</host>
</service>
</services>
<bindings>
<netTcpBinding>
<binding name=“TestBinding“ maxBufferPoolSize=“524288“ maxReceivedMessageSize=“65536“ portSharingEnabled=“false“>
<readerQuotas maxDepth=“32“ maxStringContentLength=“8192“ maxArrayLength=“16384“ maxBytesPerRead=“4096“ maxNameTableCharCount=“16384“ />
<security mode=“None“ />
</binding>
</netTcpBinding>
</bindings>
</system.serviceModel>
</configuration>
Observe that there is an endpoint defined for metadata exchange called mex. This is used by the svcutil to generate the proxy class. The behavior node also contains a behavior named as mex. Now you are all set to use the svcutil.exe. Simply open the Visual Studio Command prompt from your startup menu à Visual Studio à tools and Command Prompt and type in the following command:
(Remember to replace the name to the service with yours as defined in the server configuration file)
Hope it helps and save you time and effort and I wish you don’t have to go through the pain of getting svcutil to work. Happy Coding !!
C:\Program Files\Microsoft Visual Studio 8\VC>svcutil.exe net.tcp://localhost:6587/Service1/mex
This will generate two files service1.cs (proxy class for the client) and output.config (the app.config for the client). Enjoy !!
Posted by: asadsiddiqi on: October 21, 2008
There is a lot of hype about new (not so new now) technologies from Microsoft and the new architectures that are now a part of Microsoft .Net development environment. These include Windows Presentation Foundation (WPF), Windows Communication Foundation (WCF) and Workflow Foundation (WF).
I will give a brief introduction about what these are just in case you are not familiar. Anyways if you are then probably this article is no good J since I just started working with these. This will help you get a quick start in case you are a starter and I have gathered the info skimming through tutorials and I want to give you something quick and easy. So to start off “What is WPF?” WPF exclusively has everything to do with the UI or user interfaces. Till .Net 2005 the Graphics were GDI (Graphics device Interface) based and in WPF they are Direct X based thus utilizing the faster video card acceleration and fast memory access as compared to the GDI. Secondly this used to be an issue when clients wanted fancy UI e.g. Elliptical buttons, Window Layouts, Animated menus and colors in controls. Microsoft made it possible with user controls to some extent but off course the mainstream developers didn’t want to get in that mess and always wanted to use the default controls with some styling that the client wont like. Customers these days doesn’t want “just another windows button” there should be something innovative about it so WPF enables you to define your own controls with XAML pronounced as (zammel).
The styles, colors, shapes, data bindings and everything that is a part of the control can be done using XAML which is simple xml just defined somewhat like html ( I always see the elements and attributes notations) whenever I see XAML.
So WPF is for UIs and probably an effective solution for at least Windows Vista if not XP. Just as with the “User Interfaces” Microsoft realized that “Services Oriented Architectures” are gaining in popularity. With Central server centric applications and Microsoft efforts to support the SOA with applications like “BizTalk”, “SharePoint” e.t.c something also needed to be done to provide a standard platform for network programming using .Net. Microsoft came with WCF which is a powerful framework for writing and utilizing or consuming web services , windows services , .Net Remoting without needing to write a whole lot of socket interfaces. The implementation is hidden in the components constituting the WCF. WCF like WPF depends heavily on configurations and it is usually a good idea to separate the business logic from the configurations or the (app.config) file. In this article I will demonstrate writing a simple client server program using WCF which will give you some bare essentials for WCF and will help you to explore more in the ever growing world of emerging technologies.
By the way just to get you started if you are not familiar with the client server paradigm, client server application that I am going to develop would be basically two applications. A Server application will let many clients connect to it and say “Hi”. Keeping in mind this is not to tell you how to design better client server applications this is all about getting you up and running with WCF. Ok my friends so don’t get angry =]
So just for the sake of simplicity just think that what the server wants to expose and client wants to consume is 1 single functionality called send message.
I consider adding the “system.servicemodel” reference a prerequisite to every WCF application so if you have not already added that do make sure the reference is included in the list of your references.
1/ Add a new interface to your solution. I named the solution as WCFServer so the namespace here is WCFServer. I named the interface as CommonInterface just to be clear what this does. This would be the API exposed for the client and would be executed on the server. Good naming convention for this would be to prefix the name of the class with an “I” so something like ICommonInterface but that’s something you know right.
namespace WCFServer
{
[ServiceContract]
public interface CommonInterface
{
[OperationContract]
void SendMessage(string msg);
}
}
Observe that there are two things here which might be new to you. The interface is marked as “ServiceContract” which is the attribute which specifies that this is the contract between the client and server.The other thing is the method is marked as “OperationContract”. For the time being just think that every method in this interface should be marked as an “OperationContract”. This method is what will be executed on the server and what the client will call from the “Client code”.
Give a meaning to the interface by implementing it in your server side code.How to do that is declare a class in your program and name it appropriately and inherit it from this interface that we defined in step 1. For our sample application I defined the server class as shown in the definition below:
namespace WCFServer
{
class Server : CommonInterface
{
public void SendMessage(string msg)
{
Console.WriteLine(“Message from client –> “ + msg);
}
static void Main(string[] args)
{
Console.WriteLine(“Starting the server …”);
ServiceHost host = new ServiceHost(typeof(Server));
host.Open();
Console.WriteLine(“Server started successfully at…Pressing a key would cause the server to shut down …”);
Console.ReadLine();
host.Close();
}
}
}
So if you look at the code closely you will find the implementation of the “SendMessage” function that will be called by the client and a message would be passed and displayed on the Server’s console window.
If you look at the Main function the first thing that we do is to declare a Service Host and specify the sever’s type. Then use the Open method of the service host to start the service.
Our server at this point is up and running and waiting for the clients to say “Hi”. How to write the clients will be discussed in the next article. Hope this helps getting you a quick start of essentially what it is and if you have any ideas, observations I would love to hear from you in the form of comments.Stay tuned for more and thanks for reading.Happy Coding !!
Here are the Configurations necessary for the configurations:
<?xml version=“1.0“ encoding=“utf-8“?>
<configuration>
<system.serviceModel>
<services>
<service name=“WCFServer.Server“>
<endpoint address=“net.tcp://localhost:5555/Server“ binding=“netTcpBinding“
bindingConfiguration=“” contract=“WCFServer.CommonInterface“ />
</service>
</services>
</system.serviceModel>
</configuration>
You can use the “svcconfigeditor.exe” to generate this so you don’t have to memorize this simply go through a wizard and save the file as app.config and copy and paste.The svccinfigeditor can be found at “C:\Program Files\Microsoft Visual Studio 8\Common7\IDE”
Posted by: asadsiddiqi on: May 30, 2008
NOTE : The content below may be offensive for some people and the language used is not very appropriate. Parental Guidance is highly recommended . This is what I realized after your response and is not a part of the original content !! All the following text is based on true experience and I am not paid by Microsoft to hate Open source , i simply dont have the time and stemina to keep going on and on forever
Hello everyone, often while going through details on this topic there are 2 groups of people who are highly opinionated and rigid about their ideas for OPEN Source Vs Licensed Software or for the sake of simplicity call it Microsoft
………………… Yah yah , i know its free [OPEN SOURCE] and the microsoft supporter wud say “You get what you pay for” hehe yah rite
…………..
Let me share a very hillarious experience with another upcoming technology called Ruby on Rails having all the nice features and a powerful framework doing all the stuff for you. I read about it , loved it for rich functionality that these guys put together for quick and rapid application development. I went ahead and checked out a”Tutorial on Ruby On Rails” that was on OnLamp.com and also saw a couple videos on you tube where they were teaching on how to configure the webrick server and get going with the MYSQL database and put in some quick data driven web applications.
I felt absolutely convinced that this is going to be the future of webdevelopment . Like configure a file (called database.yaml or something) and it wud design the UI for you with a feature called dynamic scaffolding ( what the efff !! Are you fuckin jokin ?? ). Wasnt to be for me =] so infact they were fucking joking . I downloaded the Installer i think it was version 2.6.1 or something and installed it , installed MySQL database and tried to write my Hello world application with the technology !!
Believe me it was a pain , i could not say hello at all. It had some routing issues with http/get then it could not find something and i read the forums and all that to figure it all out.After an hour’s effort or so i was able to write a “Hello World with Ruby on Rails” .
The feature i absolutely loved when i read the tutorial was dynamic scaffolding , simply write the datatypes and based on that Ruby knows ” whatch u r upto ” ? or does it ??. I instantly wanted to use it , so i declared a couple of text fields in the database , did all the stuff necessary to see my two labels and textboxes apper on the hello world page. Just refreshed and got an error !! again checked everything “Not working” :S … I was getting angry “What the eff !! ” this that and the other … gimme a break , you 10 minutes dynamic website developers !!
I was still determined to give this a shot because it was worth it , just configure the database and no code , your front end is ready with all the CRUD features , WOW , whooooooaaa !! Yeah babes
Yehhhhh !! i m Loving it (McDonalds Style) !! So i checked out the documentation of the specific version and believed that its something i m missing …. not to long after that the official website proudly said “All Ruby On Rails existing Tutorials are no more ………….. Haha (devil face)” .. We finished em all (devilish smile) … Oh yah !! we dont support any basic stuff which is the chapter 1 in all tutorials that ever existed in the History of the technology !!! “Up urs Tutorials (i mean the middle finger)”!!
Yah ?? What the eff !! hahaha u r so proud of it ? it is retarded dudes !! Cant you do it in the background !! yeah all those optimizations !! Did you realize how difficult it is to follow it for the new developers who want to use it !! ahhh U r bad and evil people !!
So this was just my experience and i hated it , hated myself for wasting 6 hours on my life on this loosing technology , i swear if it was microsoft , it would have been a big deal where every wanna B would be commenting on that on but after this “effyyy experience ” I say “Go ASP.Net” and “Go Microsoft” and I “absolutely hate open source” …..
Have a kool experience with Open Source ? Or a worse experience with Microsoft ?? I would love to hear it !!
NOTE : Some people who have similar reasons to hate OS :
http://www.adequacy.org/stories/2002.5.29.234020.354.html
http://www.madpenguin.org/cms/?m=show&id=7827
http://www.bleepsoft.com/tyler/?itemid=47
http://www.theregister.co.uk/2003/11/24/princeton_opensource_hater_a_loose/
http://linuxhaters.blogspot.com/2008/05/open-source-branding.html
http://www.lockergnome.com/linux/2006/05/03/linux-hatertraitor-turns-to-windows/
http://community.zdnet.co.uk/blog/0,1000000567,10005747o-2000460739b,00.htm
Perhaps i m not the only one :O [Check these ones out ]
Posted by: asadsiddiqi on: May 13, 2008
This post as most of my other posts is dedicated to windows developers
Many times you are in the scenario where you want to detect the Operating System Version on the client machine. I had this when i developed a windows application and wanted to deploy it on different platforms including Windows 2000 XP or whatever NT hahaha this works for all .
So i wanna share just in case anyone has the same scenario :
I have shown the message boxes for debug purposes . Feel free to use or modify it : D happy development
‘ Muhammad Asad Siddiqi
‘ This can be run by executing cscript and passing the file name in the command prompt
‘ Purpose = “To detect the current version of the windows and execute files for XP or NT
‘ This would be made a part of Fail Safe to decide on PULIST or TaskList commands
‘ Variables used in the script
DIM szTempFileName
DIM szCommand
DIM wShell , FileObject
DIM nErrorCode
DIM remoteAppFile
DIM szLine
DIM ResultNT,ResultXP1,ResultXP2
‘ Create the temporary file as C:\TEMP\WindowsVersion_CT.txt
szTempFileName=”C:\TEMP\WindowsVersion_CT.txt”
‘ Initialize the Windows Scripting Shell instance
Set WShell = CreateObject(”Wscript.Shell”)
‘ Initialize the Windows Scripting File instance
Set FileObject = Wscript.CreateObject(”Scripting.FileSystemObject”)
‘ DEBUG # 1 TODO – Remove This
MsgBox (”Starting”)
‘ Check if the file already exists delete it
if FileObject.FileExists(szTempFileName) then
FileObject.DeleteFile(szTempFileName)
End if
‘ DEBUG # 1 TODO – Remove This
MsgBox (”File System Checked”)
MsgBox (szTempFileName)
‘ Execute the ver command to get the windows info detail
szCommand = “%comspec% /c ver >”& szTempFileName
‘ DEBUG # 1 TODO – Remove This
MsgBox (szCommand)
‘ Execute the command and get the error code
nErrorCode = wShell.Run (szCommand , 0, TRUE)
‘ Check if the command is ran successfully
if nErrorCode = 0 then
‘Get a handle to the file where result of ver command is written
Set remoteAppFile = FileObject.OpenTextFile( szTempFileName , 1 , TRUE )
‘ Loop through the file till end of file character is not encountered
do while not remoteAppFile.AtEndOfStream
‘ Read the line from the file
szLine = remoteAppFile.ReadLine
‘ If the line we have read is not an empty line then check
if szLine <> “” then
ResultNT = InStr(szLine, “4.0″)
ResultXP1 = InStr(szLine, “XP”)
ResultXP2 = InStr(szLine, “5.1″)
if ( ResultNT <> 0) then
MsgBox(”Win_NT”)
elseif (ResultXP1 <> 0) then
MsgBox(”Win_XP”)
elseif (ResultXp2 <> 0) then
MsgBox(”Win_XP”)
else
MsgBox(”Unknown Windows”)
end if
End If
loop
remoteAppFile.Close()
if FileObject.FileExists(szTempFileName) then
FileObject.DeleteFile(szTempFileName)
End if
End if
Posted by: asadsiddiqi on: March 27, 2008
REST is an acronym for Representational State Transfer. REST can be described as an architectural style (not a standard) of networked systems. This architecture is vastly becoming popular with Web services. The underlying protocol which is used with web services is http and the distributed systems are connected through the web (internet). REST is an alternative architectural style to SOAP (Simple Object Access Protocol) which instantly gained popularity with the advent of web services and is the widely used standard for web services data transfer. In this essay I would highlight on the working of REST, the implementation style, characteristics, and principles and compare the architecture with SOAP and try to conclude which one might be better and under what circumstances. In the end I would explain how to use REST with web services by designing a dummy web service which follows the REST architectural style.
So what does Representational State Transfer mean?
As we all know Internet is a collection of various resources. All the resources on the internet (including the web services with a published wsdl) can be accessed through a uniform resource locator (URL) e.g. http://www.mywebsite.com/mywebservice.With Web 2.0 in action static websites are loosing visitor’s interest and we see more and more dynamic web applications like forums, interactive blogs, websites which are regularly updated by users. Example of these applications are wikipedia where the user can moderate the content instantly , youtube where users can update their videos and they immediately become available to potentially everywhere the web application could be accessed with a browser and EBAY where there is real time bidding by the users of the web applications. With REST as the underlying protocol is Hyper Text Transfer Protocol (HTTP) the application changes or transfers its state after each http request / response for each requested resource.
“So REST can be considered as an architectural style where a web application changes its state constantly and it is named as Representational State Transfer”.
Roy fielding (A researcher of this architectural style, defined the key characteristics, motivations, benefits and the circumstances where its implementation might be beneficial) explains REST as:
“Representational State Transfer is intended to evoke an image of how a well-designed Web application behaves: a network of web pages (a virtual state-machine), where the user progresses through an application by selecting links (state transitions), resulting in the next page (representing the next state of the application) being transferred to the user and rendered for their use.”
The motivation for REST was to capture the characteristics of the Web which made the Web successful. Subsequently these characteristics are being used to guide the evolution of the Web.In the beginning of the essay I emphasized on REST being an architectural style and not a standard. REST is a way in which web services can be configured to deliver data streams or we can say that client accesses a resource on the World Wide Web and is certainly not a standard like HTTP or XML. The concept is much similar to what Web 2.0 is, you want see W3C putting out a specification on the working details on REST. Same is true for the vendors of software development technology, the software giants like Microsoft, sun and other platforms manufacturers won’t come out with a REST development toolkit simply because it’s an architectural style. By architectural style I mean a way of implementing things or we can say that defining a framework using the existing technology and using it in a way which is more efficient and effective for us. Although REST is itself not an industry standard but as it works with the Web and the distributed world of internet it works in parallel with many industry renowned standards. These include HTTP, XML, HTML, URLs and various file formats like gif, jpeg, text/xml, text/html and other MIME types. Many of the services especially the web services that we use as out day to day routine for our usage and software development services are based on REST and we are even not aware that we are using it. This is because REST does not work with minor implementation details it has more to do with the overall integration of the components that make a web application or a web service work.
So what are some of the key characteristics of REST?
As we know that the model that http follows a Client Server paradigm (as it works on the internet) where the client is the consumer or requests a resource identified by a URL and located on the World Wide Web and the server is a web server which has the required resource and delivers it using HTTP. The Client Server paradigm is further classified into a pull or push based implementation Style. REST is essentially a pull-based implementation style of http where the consumer (consuming services, applications e.g. browser) or client pulls various representations (resources). Another Key characteristic that rest follows and is due to the http being the underlying protocol is it’s stateless. As we know that http is a stateless protocol so each request from client to the server in this http pull-based implementation style should contain all the information which is necessary for the server to understand the request. In other words the client cannot take advantage of any information that is stored in the server’s context and has to send the client’s info with every representation transfer. An optimization and a key characteristic that REST utilizes to overcome performance limitations and overheads is CACHING. When the web server responds to any of its clients with the requested resource the responses should have the ability to be marked as either cacheable or non-cacheable depending on the capability of client which might be an application or a service. So if the client if Caching enabled the performance can be optimized as the implementation architecture supports caching. What it means essentially is if the same resource is requested by the client again and again or for instance the same parameter or argument is passed to a method exposed by a web service the client should know what the service will return and it should directly get the desired result without going through the whole request/response process. Another key characteristic of REST is all REST implementation should follow a uniform interface .This means that all the resources located on the web server can be accessed by using a generic interface such as HTTP Get, Post, Put or delete. In a REST based implementation, each resource that is requested from a web server can be identified with a unique URL. This is pretty much how internet works, the critical components here are the Client and Server Applications, HTTP as the request/ response based protocol, and the Domain Name System (DNS) which resolves the host names to IP Addresses to exactly know where the requested resources are physically located. So it is essential to use named resources while implementing REST. Another key characteristic of REST is interconnected resource representations. This essentially means that the representations of the resources are interconnected using URLs, thereby enabling a client to progress from one state to another. REST uses Layered components which imply that intermediaries, such as proxy servers, cache servers, gateways, etc, can be inserted between clients and resources to support performance, security, or in other words using intermediary devices between the client and the server does not restrict the client from accessing the server. Etc Designing web services using REST:
What are some of the key design principles that we have to keep in mind while designing web services that makes use of REST? Primarily all the conceptual entities that the designers or developers wish to expose as services need to be identified. The design principle is not only limited to REST but it’s a general rule of thumb for good web service design. As we know, one of the characteristics of REST is using named resources. Recall that resources are named as URLs .REST uses a particular naming convention to access resources on the web server. REST proposes to use nouns as resource name instead of verbs.
E.g. URL such as http://www.bookstore.com/books/getBook?id=11234 should not be used instead the resource should be named as http://www.bookstore.com/books/11234 REST follows the phenomenon of categorization of resources. The resources should be categorized in terms of whether they can only be accessed and not changed by the client. Such resources are called Read Only Resources. With Read only resources clients can just receive a representation of the resource. In addition to this the clients can add new resources or modify existing ones. REST suggests categorizing the resources based on resource types. If they are read only resources which the client can access but not modify, only HTTP Get should be specified as an access method whereas if the clients can update the resources then HTTP POST, PUT, and/or DELETE can be used. In this context all resources accessible via HTTP GET should not have any side effects. That is, the resource should just return a representation of the resource. Invoking/calling or requesting the resource should not result in modifying the resource in any way. As from the above description it is evident that REST (Representational State Transfer) follows a state based implementation, it supports how we can drill down further into the application. REST supports navigation by supporting navigational links so the state of the request changes and recorded. For designing a REST style web service some performance optimizations are provided as the design guidelines. REST proposes not to present the whole data in one single response simultaneously to the user (client). Instead present a portion of the data with the ability to drill down information by providing navigational links so the user can drill down by again requesting a resource identified the navigational link and thus the state of the client application changes. If a web service is to be designed that uses REST as the architectural model, the format of the response data has to be defined using a standardized schema such as the Data Type Definition (DTD) or W3c schema or Schematron e.t.c For those services that require a POST or PUT to it, also provide a schema to specify the format of the response. The SOAP and REST comparison: Having discussed the working of REST, characteristics and principles of a typical application that follows a REST based architecture and knowing that it is a design alternative to SOAP (Simple Object Access Protocol) the question that comes to our mind is when to use REST and when to use SOAP , what is the key factor that answers this question ? What are the benefits of REST over SOAP and vice versa? Although there are plenty of overheads which can be immediately noticed with implementing SOAP, writing a wrapper class that puts a SOAP envelope on every request response that goes to and from the web service on the client side and configuring the service itself to parse those request may sound like a lot of work. But primarily we now have tools to do it; I have worked with Microsoft Visual Studio where if a wsdl file hosted on the internet is given as an input all the wrappers required for the web service and initializing SOAP are generated automatically, same is true for many DELPHI environments. The advantage of using SOAP is “sending complex data structures to the web service”. Development tools like Visual Studio or Delphi can read the WSDL from the web service and that gives you the "INTELLISENSE" auto completion functionality that can save a lot of coding time. The drawback with SOAP is that there is more overhead in the construction of the method request and with the parsing of the request on the web service end. When you have a web service that is serving thousands of requests a minute or second, that overheard may not be needed. This is in contrast with REST where simple HTTP Get and PUT commands are used to interact with the web service. You compose a URL for your web method request and the service sends back a response. The response is usually in XML, but that is dependant on the functionality of the web service. For web services that have relatively simple data types, using REST can provide the functionality that is needed. You also get the advantage of testing individual method requests from a browser as the method request is basic URL. Another big advantage of using REST over SOAP is by sticking to simple semantics (especially if you limit yourself to GET as much as possible); it scales much better as it can take advantage of all levels of caching between you and the server. REST takes advantage of the existing scaling mechanisms the internet has grown on top of HTTP - something SOAP cannot do. The complex data types can still be used with REST by including them as payloads - you just have to manage interpreting it yourself instead of relying on a rich library layer to make it feel like some native type in your program. So if we compare the contrasting architectural styles, REST is the way to go if you are looking for better performance and the web service consists of simple data types where as SOAP would be better if the client application has to be developed fairly quickly and Complex data structures are to be used. A REST example – An Online Library Catalogue exposing library data as a service ( A self created dummy service to demonstrate REST) : Here I would describe the whole process of how REST works and some of the common practices that are followed by developing a simple Library Catalogue Service which would define a couple methods of displaying a list of books and listing a particular book’s details. The functionality that is exposed by the service is: Generating a list of books Generating details of a particular book
Generating a list of books:
The web service presents a URL to a “Book listing” resource. For example, a client would use this URL to get the parts list:
The client does not know anything about how the listing is generated by the service. All the client knows is that if he/she submits the above URL then a document containing the list of books is returned. Since the implementation is transparent to clients, the Book’s catalogue is free to modify the underlying implementation of this resource without impacting clients. This follows two major principles or concepts of Software Design, loose coupling and encapsulation.Here’s the document that the client receives whenever the above URL is accessed:
http://www.books-online.com/books/00001
Here’s the document that the client receives:
Posted by: asadsiddiqi on: March 14, 2008
In this tutorial I would be talking about integrating databases in your .Net Applications specifically C# applications. ADO.Net is a .Net framework’s library which is essentially the same for ASP.Net for web development and other desktop applications using C#.Net or VB.Net. In my experience the database that was used most frequently was Ms-SQL Server, off course because both are Microsoft products. .Net seems to integrate with SQL Server very easily and gives better performance. (ADO.Net provides a Namespace specifically for SQL Server which might result in better performance with SQL Server. It is prescribed to use System.Data.SqlClient when using SQL Server as your back end instead of System.Data.OLEDB) Having said that .Net can connect to all the major databases systems. The ones I have worked with include Oracle, Sybase SQL Anywhere, MySQL and MS-Access. For the sake of discussion I would be connecting to SQL Server Database here to show how to connect to databases using ADO.Net and do the routine operations.In many books I have seen hard coding of ADO.Net objects and configuring the data sources and some properties of ADO.Net objects which pisses me off. Simply ask yourself the question How are you going to deploy such software? Is it easy to replicate your development environment on the Target client machine? NO !! Not at all!! It’s a nightmare. So setting all the properties in code and all the configurations in a configuration file is the mostly used conventional way of doing things.
Prerequisites for this are some knowledge of C# and I would assume that you have a DBMS available that you wish to use for your practice or running sample code against.
Connecting to Database:
The easiest way to ensure database connection is through a UDL (universal data link) file. Simply create a new text file on your desktop, open it and from the file menu choose the “Save As” Option. In the “Save As” dialogue for file type select “All files” and for file name specify “abc.udl” and save the file. When you close the file you should have a new file called abc.udl. UDL FILES are a Microsoft proprietary file format that is used to configure data sources.
Simply enter your Database info and select the “Test Connection” Button. Once you see the message box that says “Test Connection Succeeded” close the dialogue by clicking “OK” and close the “Data Link File”. Open the file with notepad or any text editor and the third line in the file is the connection string.
An Alternative approach to connection:
If the above mentioned process sounded too complicated which it is not the following connection strings can be used:
For SQL Server use:
Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;
For MS-Access use:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccess2007file.accdb;Persist Security Info=False;
For Oracle use:
Provider=msdaora;Data Source=MyOracleDB;User Id=myUsername;Password=myPassword;
For MySQL use
Provider=MySQLProv;Data Source=mydb;User Id=myUsername;Password=myPassword;
The first step to talk to databases is to include a reference to ADO.Net library in your code. You don’t need to do it explicitly. Simply use the following statements in the beginning of your code.
using System.Data;
using System.Data.OleDb;
Once you have decided what database you want to connect and what connection string you have to use then your C# code starts. I would make a small method that returns an instance of System.Data.Oledb.OLEDBConnection if a successful connection is established else returns a null.
/// <summary>/// Open the Database Connection/// There should be an entry for “Database” in the app.config
/// </summary>///
<returns></returns>
public System.Data.OleDb.OleDbConnection OpenConnection()
{
OleDbConnection conn;
string connectionString = ConfigurationSettings.AppSettings["Database"];
try
{
conn = new OleDbConnection(connectionString);
conn.Open();
return conn;
}
catch (Exception ex)
{
return null;
}
}
Executing an SQL Statement:Whenever you are designing or developing a database centric application, you have to perform database operations ( Select , Insert , Delete , Update) from various places within your application. Here we would discuss about the most common scenarios like there is a dropdown list from where the user selects one or more items. How to populate the Combo box? . We want to show the user search results in a datagrid or a datagridView in a windows forms or a web form. ? We want to add new records in the database How to do it ? Below you will find answers to all such questions. For the sake of discussion let us consider we have a table in our database called Student and the columns/attributes of the table are Name,ID,Date_Of_Birth,Address,Email , Phone and SSN. I will show you how to manipulate the table from our application using ADO objects and give you some example code to play around.
Executing a Select Statement for a dropdown list:
Suppose you have a form where you want to update the students record.You have a dropdown where you will display all the SSN of the existing student. When the user selects the SSN the form gets filled automatically by selected students information. The user can then make changes and click a button and the changes are saved to the database.
OK, the easiest way to load a combo box or a drop down list is by using an OLEDBDataReader object. The method with the code is shown below:
public OleDbDataReader ExecuteDataReader(string query)
{
try
{
OleDbDataReader reader;
OleDbConnection conn = OpenConnection();
OleDbCommand cmd = new OleDbCommand(query, conn);
reader = cmd.ExecuteReader();
return reader;
}
catch (Exception ex)
{
return null;
}
}
You can call the method , get the data reader and then loop through all the items this would be something like on the form_load event of your form: // This is how you call the ExecuteDataReader Method
OleDbDataReader dr;
dr = ExecuteDataReader(“Select SSN from student”);
cmbStudents.Items.Clear();
while (dr.Read())
{
comboBox1.Items.Add(dr[0].ToString().ToString());
}
Executing a Select Statement to show in a datagrid or DataGridView:
The process of showing some rows of the database on a datagrid or a datagridview is essentially the same process with slightly different objects and the ways you use them.I am really pretty much against hardcoding stuff in the datagrid , the conventions you find in your first C# Book probably.I learned the fact, the hard way and believe me its no good at all. Probably good to make u understand what are the properties and what objects are closely connected or work together in the architecture.Always try to set the properties from your code instead of the designer view when it comes to ADO.Net objects like DataSet,DataReader,DataAdapter,DataGrid,Connection,Command e.t.c. Whenever you want to use Datagrids or DataGridView , the essential property is the “datasource”.This requires an instance of the dataset which has the results of the query passed in. The essential ADO.Net objects here are DataSet,DataAdapter and the DataGridView itself and that is it !!Following is the example of how to use:
/// <summary>/// Given a query executes a dataset and returns the dataset
/// Ideal when to be shown on a Grid View for searching or display
/// </summary>
/// <param name=”query”>The Select query that returns a dataset when executed</param>
/// <returns></returns>
public DataSet ExecuteDataSet(string query)
{
DataSet ds = new DataSet();
try
{
OleDbConnection conn = OpenConnection();
OleDbDataAdapter da = new OleDbDataAdapter(query, conn);
da.Fill(ds);
conn.Close();
return ds;
}
catch (Exception ex)
{
return null;
}
}
This is the calling code from where this method would be called:
DataSet ds = ExecuteDataSet(“Select * from Student”);
dataGridView1.DataSource = ds.Tables[0];
Note: You would also have to use dataGridView1.DataBind() if you are programming in ASP.Net
Executing an SQL statement that updates a table:
Here we are not selecting any rows from the database rather we want to run an insert , delete or update sql statement so we don’t want anything back from the database.So the OLEDBCommand instance is treated in a slightly different way. Below is a sample method which might be used to execute and update a database table:
/// <summary>
/// executes a given insert query and returns true if query is executed ok/// </summary>
/// <param name=”query”>The insert query which does not return any dataset</param>
/// <returns></returns>
public bool ExecuteInsertUpdateQuery(string query)
{
bool toReturn = false;
try
{
OleDbConnection conn = OpenConnection();
OleDbCommand cmd = new OleDbCommand(query, conn);
cmd.ExecuteNonQuery();
toReturn = true;
conn.Close();
return toReturn;
}
catch (OleDbException dx)
{
throw dx;
}
catch (Exception ex)
{
return false;
}
}
This method can be used as: string insertQuery = “insert into student values(‘1’,’2’,’3’);
bool status = ExecuteInsertUpdateQuery(insertQuery); In a similar way delete and update queries can be passed in and the method would return a true or a false indicating whether the statement was executed properly or not. So this was a brief brief introduction and a short tutorial, I would say “ADO.Net Crash Course” and I think there is much more to ADO than what I showed. Keeping in mind these are the essentials which you should know if you want to enter the database applications world with Microsoft.Net. If you make any additions to this article or simply provide feedback so I can make the required changes, or you want free consultation with your design, leave your comments as feedback.All your feedback is warmly welcomed and I would try my best to address your issues.