Tuesday, October 03, 2006
Suggestion: Windows Update Foundation
It is obviously important that applications be able to update themselves on the fly especially in today's internet environment with security patches etc... But I believe that software developers should focus on what they (think) they do best - developing their actual program and not worrying about creating little updater icons - they usually leave it to the end and throw together some thing that is usually not very well behaved etc...
Therefore I suggest that Microsoft take a large part of the burden off the regular developers like this.
Microsoft already has the whole windows update infrastructure - They should extend it a bit to support 3rd party applications - this is the scenario I imagine.
3rd Party Developers would create their applications.
They would log in to a special (free) Microsoft portal
They submit there company name. Application name - exe name etc..
They receive a special unique GUID for their application
In the install for their application they register that unique GUID for their application with the "Windows Update Foundation".
The vendor logs onto the Microsoft portal and indicates that the latest version for this application is lets say 1.0.2.0.5.2.3
When the regular windows update runs it sends the uniqueid and the current version of the app to the windows update service - Windows will notify the user that updates - either windows or third party applications.
The user can then decide what to update and what not.
WUF would then kick off the applications BITS downloader from the vendors site.
Obviously there are security implications -
but I think it would make the whole windows experience more seamless for the user and for the software developer
Wednesday, September 20, 2006
Case Sensitivity in VB.net
As a C# developer I am used to the usual case sensitivity issues. However recently I have been involved a project in vb.net that is being worked on by a couple of devs.
While we try to strive for consistency in casing (mostly for code readability). this is VB.net and the compiler does not look over our shoulder and warn us of case mismatches we sometimes miss these miscasses and things work just fine.
But we have been bitten by 2 scenarios in this project where case sensitivity was a issue - had this project been in c# we would have realized the mismatches right away - but since we were debugging using a vb.net mindset the case mismatches didn't appear to be the cause of the problem which led to some head scratching.
These were the 2 issues we came up with:
- Viewstate: Viewstate indexes must be case sensitive which is the opposite of the Session list (go figure)
- In form/user control declarations the inherits (at least in v1.1 must be case sensitive)
Thursday, August 24, 2006
Connection String Values # 2
At here http://aim48.blogspot.com/2006/06/suggestion-sql-c... I was wodering if the SQL team could add connection scope variables to the connection string to allow web app level user logging - it seems that there already is one that you can use. In your connection string you can hijack the "application name" setting and pass in the user id and then in TSQL you can retreive that value using the APP_NAME() function.
Application name isn't really ever used anymore (in fact by default .net applications send "SQL Native client etc....." So I don't think there would be a major problem using it
Monday, June 26, 2006
Suggestion: SQL Connection Scope Properties
Wednesday, May 17, 2006
Suggestion: Add Reqired to all ASP.Net validators
Nice... The only problem is that (as I see it) there are 2 kinds of validators the RequiredFieldValidator and the rest of them
Requiredfiledvaildator makes sure that the field is filled in in general - while the others make sure that what was filled in follows a specified format - So I have a form with a bunch of fill in boxes , now I have to add 2 validators to each item , a reqed and a data format.
While I can underatand that there are times that the data does not have to be there but if it does it needs to be valid - many other times (if not most) both are needed.
So my suggestion - Add a property to all validators (via BaseValidator) called ??IsRequired?? - so that one validator can do everything needed.
Sunday, April 02, 2006
Suggestion: Search Engines - "Context Sensitive" punctuation Inclusion
So my suggestion to the search engines - use the context of the search request to filter out the punctuation for example if the request has a programming language name in it for example JavaScript or c# then do not strip ; and give more weight to pages that contain the exact text I requested because we can assume the if I am asking for a programming concept - while at the same time if I type some thing like "VB.net is the new vb;" then the ; would be stripped because the VB "context" does not contain a ;
This can work in areas outside of software development where punctuation is used as part of actual wording (scientific notation etc...)
Sunday, February 19, 2006
Suggestion: Desktop Search Shell Command Extension
So these are the steps that I had to go thru to find the phrase I wanted.
1. Type the search phrase into the msn bar at the bottom of the screen
2. Wait for the result window to open
3. Find the right file from all of the returned files
4. Double click the file to open it.
5. hit ctrl f in Microsoft word
6. Retype the search phrase into Microsoft word
7. Click Find to find the item.
7 Steps to find something from the command line. What if we could smoothen things out so that we could stop the process at 4.
So the process is now only :
1. Type the search phrase into the msn bar at the bottom of the screen
2. Wait for the result window to open
3. Find the right file from all of the returned files
4. Double click the file to open it.
at this point Word would open and immediately search for the search phase and highlight it.
How do I suggest this happening? Like thus.
Applications can define commands to run against their associated document types so for example if you right click on a word document you would have Open,Edit,New,Print etc...
My suggestion - apps would define another command type called "Search". When a user clicks on a document in the windows desktop search window then search will open the app passing the command line defined in the registry key and the name of the document and the search term.
When the app (any app - I was using word as an example) - received the search command it will load the specified file and immediately do a search for the appropriate phrase.
Thursday, February 09, 2006
Suggestion: Built in factories
The problem with the actual factories are that they are hard to implement and thus are usually not implemented unless you see a clear need in the future for abstraction. The rest of the time you just new up objects and use them.
What happens in the future when you realize that things are not that simple and you are going to require a factory to decide which object to create - then you must replace all of the news all over the place.
My suggestion: repurpose the new keyword to call a static method that will allow the method to choose the object to create. If that method is not implemented (or returns null?) then new will actually create the new object - else it will pass along the object created by the static method.
So for example - if I had a car object that had calls to create a car and it was called like this until now
car c = new car("Camry")
c.AddWheels(4);
c.BuildEngine();
etc..
but eventually we realize that hybrids have a totally separate engine process - so we create a new called Hybrid car and we leave Car as is but we override the hybrids BuildEngine() method to create a hybrid.
Now all that has to be changed is that we add a new static method to the class
(perhaps something like this)
public static Car Car(string CarType)
{
if (CarType="Hybrid")
{return new HybridCar();}
return null;
}
Saturday, November 26, 2005
Suggestion: RAD Ajax
In most of them you need to define client side javascript etc.... blecch....
My suggestion for MS re ASP.net. Make it simple.
This is how it would work:
When the page is first generated the value of RenderControl should be sent for the defualt settings (or settings that were set before the rendercontrol is called.
Each control should receive it's own little viewstate on the page wrapped in a
Then the user presses a button. A XMLHTTP message is sent to the server contining the postpack values of the page - THE PAGE ITSELF IS NOT CHANGED - just a postbak is simulated.
The developer responds to the On.... events by setting properties on the controls
A quick pool of the page is made to see which controls have had properties changed.
These properties are then JSONed out to the page again
Friday, November 25, 2005
Suggestion: Validation Framework
That got me thinking that you are limiting a very useful and powerful piece of functionality to one small piece of the .net framework.
There are many situations where a developer would need to validate values (not necessarily input) and once you have the basic structure – why not extend it.
Here is a suggestion that I had.
Rebuild the entire validation structure totally separated from the web control process. You can have web validation controls implement this feature – however so can others.
For example a programmer would be able to do something like this
If (Validator.Range(someInt,20,300))
{
// good
}
Else
{
//Bad
}
Or this would be great for parsing data types before you try to run a convert. (although the new TryPArse does help)
However I think one of the most interesting features can be from settting up a attribute system. A developer would be able to write something like this
[RangeValidated(30,100)]
Int I;
If a value out of range is assigned to I then a exception gets thrown (this can be thought of as built in Unit Testing)
Thursday, November 24, 2005
Sugggestion: "Secure Unicode" drawing function
Hi. I actualy tried finding the correct blog post to submit this response too - but I couldn't
Anyways - A while ago you had a couple of posts on internationalized text esspecially in the browser however you also mentioned how it can be used to cloak a bad file in explorer etc...
Would this make any sense at all?
In vista- Create a "Secure Unicode" Rendering function - Sort of a "overriden" implemetation of drawText that will draw a little squiglly under any unicode charecter that is deemed suspious (You linked to a RFC that had some good ideas there) - this suiglly would be draw in the sane pen as the font and it would look similiar to the squiggly that word draws under misspelled words.
In any situtation where a unicode char might be used to fool the user into doing something he probablyu does not want to do Windows ,(and third party apps0 can use this version to ensure that the user is notified when a charecter might not be exactly what it looks like.
I can see this being used in windows explorer for file listings - or perhpas in login text boxes etc, email address boxes (I can send yo a link asking you to send sensitive info to a email address that looks similiar to an address you trust) etc....
Just a thought (obvioussly..)
Suggestion: SecureWebString
string s = Request.QueryString["ItemID"];
Yes we forget. And now Microsoft has introduced the ObjectDataSource - which allows you to specify a querystring parameter or a cookie to automaticlly pass to the databinding routine. Where is that going to get validated if the databinding happens automaticlly
Introducing the (suggested) SecureWebString class:
My suggestion is that all web collections/Property bags get rewritten to return a SecureWebString. The secureWebString will encapsulate the actula string containing the parameter and will cry foul (A security exception) if you try to access the value without having validated it.
How do we validate?
The collection or page or global class will have a validateSecureString event that will fire whenver the string is first accessed - this event will receive a non secured version of the string to validate - if the string is valid or it can be corrected by the handler then the string is marked as validated so that it can be acessed by the page code.
This adds a noninvasive auto validation regimin to all the "dangerous" strings out there. So the new objectdatasource will be vey welcome going ahead and reading a querystring parameter - because validation will take place..
A certain level of backwards compatibiliy can be acheveid by overing the = operator to retrurn the string.
Y
Suggestion: WBF - Windows (Vista) Backup Foundation
On the other hand the windows backup interface is useable - but just barely - definatly more then the internet backup stuff I am trying to set up.
So , My suggestion - Seperate the backup interface from the backup engine. Make a central windows backup information store from which any backup application can read. Then all these companies whould not have to reimplement the same functionality every time. You would also be able to reuse the info between apps ( a tape backup and a remote backup)
On the other side you can now have a third party come out with an even better backup interface then the one built into windows and have that replace the windows one.
An added benifit is that since you now have a single point of backup information - application developers can now plug into that and specify the file extensions that do need to be backed up for that extension type and you can now specify the applications to backup rather then directories. Apps can also provide a backup export type of functionality
Monday, November 14, 2005
Krypton Toolkit

The Krypton Toolkit has been released.
It provides user interface controls for Windows Forms.
It is targeted at Visual Studio 2005 and .NET Framework 2.0.
It is free for commercial use
http://www.componentfactory.com/downloads.php
Sunday, April 10, 2005
Presenting: ME - An AJAX Pioneer!!!!
I actually went as far as builidng a rudimentry browser that could load a chat, shop cart or stock quote page. I also worked a bit on a server based framework that allowed a developer to respond to events fired from the client (similiar to the way ASP.Net does it). But then someone pointed me to "asp+" (the precursor to ASP.NET) and while it did not have the out of band communication features it did have a robust RAD tpe development model that was way better then what I had envisioned (I had envisioned the developer hand writting the HTML (or APML as I called it) with the APML controls inline with event handling attributs (i.e. HandleOnClick = "true" etc...) as if they were regular controls - then the deveoper would run this file thru a pre processer and the pre processer would output a delphi source code file with stubs for the developer to fill in. The end result would be similiar to asp.net in basic functionality (you would set the text property by saying label.text = etc...).
Here is a simple introduction that I wrote describing my ideas in Dec 2000.
--------------------------------------------------------------------------
AMAP/APML
Active Markup Application/Application Presentation Markup Language
What is AMAP
AMAP is a method of delivering and executing a browser based client server application over a Internet type network connections. AMAP applications have 2 parts (1) The Server (2) The Client.
The Server:
The Server software is a CGI or ISAPI DLL that runs behind a standard Internet HTTP Server and provides APML pages to clients that request it using standard http URL requests. Once the client has loaded the APML page the server then stands by to service any events transmitted by the client. These events also arrive in standard HTTP requests and the server responds to them by passing any property changes or procedure calls
The Client:
There are 2 possible client types:
Special Browser:
An AMAP client is a specially equipped web browser that requests APML pages from a AMAP Server and displays the formatting and control layout described in it. The client starts a session in which it monitors the controls on the page for any events that would be transmitted back to the server. When such an event takes place the event is transmitted to the server together with any other properties of objects that were specified (Probably using XML). When the call is returned the client updates any control property changes that may have been sent by the server and executes any script code returned. This data stream is separate from the stream used to originally download the page.
Standard browser
Controls are embedded in the HTML file as plugin objects. The plugins communicate with a background DLL that keeps all the controls together, and will do the actual communication.
What is APML
APML is a SGML type markup language that describes an applications look and behavior. It contains standard HTML markup to describe the text formatting of the page and any html Links. It also describes where and how APML controls should be created and what their properties are. AN APML control can respond to many unique events. For Example a button can respond to a click event while a TextBox can respond to a change event. Etc… Controls declerations are similar to HTML input declarations except that the
Differences between HTML and AMAP/APML
HTML uses a static connection to the server. When the user enters the web address a web page is retrieved and displayed by the browser. The connection is then cut off. In order to transmit the form data back to the server the user must submit the information in a HTTP Post (or similar) event. There is no connection between the client and the server during the time that the user is actually entering the information into the controls and the web page. If the information on the web page needs validation then that has to be done either in the actual webpage using a scripting language or on the server after the whole page has been submited. If some data was not entered correctly then the webpage has to be downloaded all over again and filled out.
APML on the other hand provides feedback to the server on every action the user takes. Once the APML browser downloads a webpage it can restart a connection to the server any time a specified event takes place. The server can then change a controls property or take other action that will be reflected on the webbrowser. This allows for instant data validation. This connection is in the background and does not affect the current page as a whole.
Take for example a case in which the user enters an invalid credit card number and clicks the submit button. In standard HTML the whole page is transmitted to the server and then validated. If the number was invalid then a new web page would be transmitted back to the user with a message that the number was incorrect and a input box to type the new information. In a typical APML session when the user clicks the submit button – only the credit card information is sent and validated. If the credit card is incorrect then the server sends the client a set of commands – this could include a command that a message box be displayed notifying the user that the number was incorrect and that the text box with the incorrect information be blanked out and have the focus. (alternately the color of the box can be changed to indicate error). All this is done without the page reloading.
The apml page can also specify a interval where the client will contact the server for any updates to apply to the page.
Differences between a Java Applet and AMAP/APML
A JAVA applet is a self contained program that is downloaded and run in the browser. APML is an enhanced webbrowser that contains enhanced standard controls. (there is no need to download extra controls (as in ActiveX)). If plugin controls are used then they have to be downloaded only once. Their behavior changes based on the properties and javascript embeded in the control declaration and on the code and properties sent during events. ActiveX and Java require that you download a separate control for each webpage containing the specified behavior for that page.
An Analogy
Suppose you were applying for a passport or other document. When you approach the counter there are 2 ways to do it. The HTML or the APML way.
In the HTML scenario you would ask the clerk for the required application then you would go to one of the tables at the side and fill out the form. After you had completed filling out the form you would line up again at the counter. When it was your turn to see the clerk you would give the clerk your application and the clerk would scan it for any mistakes. If there were mistakes the clerk would hand you a new form to fill out and send back to the tables to fill it out again. This process would continue until you had satisfactorily filled out the form and the clerk accepts it.
In the APML scenario you would approach the counter and fill out the form there, under the clerks watchful eye. The clerk can notify you of your mistakes as you write them and correct them for you or inform you of the need to correct them.
A Sample Use
Lets take a typical session On-line shopping and explore how it would be executed with HTML and how it would execute with APML.
Typically an on line shopping session requires you to add items to your “Shopping Cart”. Using HTML every time you would hit the “Buy This” button the entire web page would clear and be sent back to the server. A new and updated webpage (including all of the advertisements and formatting information) would then be downloaded with an updated shopping cart and price line. To remove something from the shopping cart you would have to click on the link next to that item and again the whole process would repeat itself, the webpage would be sent to the server where the processing would take place and then an entire new webpage would be downloaded.
Using APML , when a user hits the “Buy This” button an invisible message is sent to the web server and the webserver instructs the webbrowser to add that item to the “Shopping Cart” part of the site and update the price line. No new page downloads are needed. The same applies for removing an item from the shopping cart ,the user clicks the remove button and that item gets removed from the shopping cart.
--------------------------------------------------------------------------------------------
those were the days - I actually thought about patenting this thing :-) )
Thursday, March 03, 2005
EasyCare2 Architecture Guidelines? - Any Good.
General Development Plan
This document will serve as a guide to the process used for developing EasyFrame.
General Overview:
Easyframe is developed as a SOA (Service Oriented Architecture). All application parts are free standing and do not require any other part of the system to work. Rather messages are passed around via wbservices or database updates.
Each module/application specializes in its tasks and that is the only task it does.
Each application itself is going to be built on a loosely coupled object structure in which different layers are used to separate functionality on a common level.
A layer can only communicate with the layer below it. Not with the layer above it or with a layer 2 levels below it. This ensures that functionality is implemented in the appropriate areas. The dataaccess layer does not need to know what the interface looks like. Because the data access layer will be used by several different process. Vice versa the Presentation layer must not access the database directly rather it must call the layer below (UIP if applicable and then the BLS etc…) This will allow us the freedom to switch datasources in and out (i.e. we might decide that MS access is enough for the facility database or that data should be accessed directly thru a webservice ) then we just have to recode the data access layer or add another layer with a well defined interface in between the BLS and DAL
The following is a diagram of the Data Layer interactions
Here is a greatly expanded view of the layers to be used.
In the physical DataBase
DSL – Data storage layer:
This is the actual data tables. Table triggers are also considered as being at this layer. Triggers should be limited only to data maintenance operations such as row level logging and basic data cleaning
DSAL – Data Storage Access Layer
The DSAL has 2 components
DSPL (data storage procedure layer) – These are the CRUD (create , retrieve , update , delete) stored procedures generated by the O/R Mapping tool used – these (and the DDAL) should be the only access points to the data. NO DIRECT SQL STATEMENTS into the database, they lead to unmanageable code as you cannot easily determine where data is retrieved from etc…
DDAL (data direct access layer) – Specialized stored procedures to retrieve specialized queries from the data base that cannot be easily retrieved via the DSAL. All specialized queries have to go thru a stored procedure – exceptions can be made for rare circumstances. May also modify database data (for example a bulk data update).
DAL – Data Access Layer
The DAL has 2 components
OAL – Object Access Layer. This layer is generated by LLBLGen Tool. This creates a object type for each table in the database. The object contains a property for each column in the table. You load a row into a object by setting the primary key on the object and calling the selectOne() method. You can update a datarow by changing the property values and calling the update() method. Adding a new record is done by calling the Add function and Deleting by calling Delete(). These functions call stored procedures in the DSPL to do their work. NOTE: DO NOT INSTANSIATE ANY OBJECTS FROM THIS CLASS. The tool does not declare them as abstract however they should be. Rather use BRL classes that inherit directly from these.
PAL – Procedure Access Layer. Contains method to access stored procedures in the DDAL layer. These are customized stored procedures. These methods are generated by DALHelperPlus and pasted into the code files. The DALHelperPlus tool takes care of all the SPROC calling code including parameter assignments. The tool allows you to specify a wide range of return types including DataReaders and integers,strings etc…
BRL – Business Rules Layer
The business rule layer is where all the actual work is done. Each data type inherites from the OAL and extends it to provide specific logic for that object. In order to work with a data row you would create an object of this type and manipulate its properties. Logic for working on this object is contained in here. For example suppose we wanted to add a item to a shopping cart – there are several logic steps involved. We must detect for example if this item is available for this customer, or if the user already has one of these in his shopping cart then we just combine the order. It does not matter – the calling code (probably directly from the GUI) calls ShopCart.AddProduct(new Product(12121)) and the shop cart takes care of all logic required.
PL – Presentation layer.
The presentation layer is the actual application face as the end user sees it. The UI works either with a BRL instance or with a DataReader to bind with.
UIPL – When we are doing a long process (such as shopping cart checkout) – we can insert another layer in betwwn the gui and the BRL. This layer will allow us to control the process flow.
Tuesday, November 23, 2004
I am not a geek - Update
I use Tables in my HTML pages (extensively)
Tyranny of the geeks
Sunday, October 31, 2004
My. Wrapper for C# et. All
OurSharp is an My. wrapper in c#. It is a small class that does some basic wrapping of some of the My. Objects. I named it our "Our" because in contrast to VB.net's "MY" this is accessible to all .net languages.
HOW TO USE:
1. Add a reference to Microsoft.VisualBasic.Dll
2. Add "Using Our;" to the top of all source files you want to use this in.
3. To use the My/Our functionality type Our. and select a object from the codecompletion window
The following My classes have been implemented:
Application
Computer
User
The other classes in VB.net MY are dynamically generated as you code - so a VS.Net addin would be required to get that done --- Maybe in the future.
The Source file is posted here
Sunday, October 24, 2004
DALHelperPlus - New
This is a rebuild of the original DALHelper.aspx developed by Alex Lowe.
The original was appealing in its simple ness - it was a simple aspx page that would list all available stored procedures and it would put together a method that you would just have to paste into your DAL module. No external libraries needed (if you wanted you could choose an option to attach a parameter builder library but it was not the default and not required) All you did was choose your procedure – choose your return type (Dataset/DataReader) – Choose your language (C#/VB) and hit generate – you were done.
I looked at several other generators; most of them required other moving parts for example the stored procedure application block etc… This however was fast efficient and easy to use.
I used to have an instance of ASP.NET web matrix with the page open running in the background and I would just have to alt-tab to get access to it. However my webmatrix install recently got corrupted – and I could not (easily) run it in VS.net. So I decided to port the code over to a (always available) win forms based app.
I started playing with the code and I kept all of the database retrieval and parameter parsing from the original. However the code generation part I redid using the .net CodeDOM. The CodeDOM is a real pain in the neck to program against. It is very verbose and long winded; I almost gave up after 2 or 3 days. But then I found Refly a codeDom wrapper by Jonathan de Halleux that makes codedom programming much easier.
Using the CodeDOM brought another benefit. Where as the original used string building to build 2 different versions for vb.net and c# - here I only had to implement it once using a codedom tree. Further more, the app checks the machine.config file for all available .net compilers and allows you to generate the code for any one of them (you select the language from a drop down). On my machine I have c#,vb.net,javascript.net,J# I am also planning on playing around with Delphi 2005 (Diamodback) when it comes out and I will have a ready made Delphi code generator.
Another key feature of this app is the ability to control where DB connections come from - they can be built from connection strings (global/Local/Embeded/Resource Files) or from code snippets or from connection parameters passed on the command line - this all can be chosen from a drop down box.
You can also specify how you want the return values. Of course there is DataReader and DataSet - but there is also DataTable ,ArrayList (the first column of the resultset), HashTable ( First Column = second column) and primitive types such as int,float bool, (string) which return the first column of the first row typecasted as the appropriate type.
At first the app did not support OUTPUT parameters - that was because Refly did not support ByRef/Ref parameter calling - However a quick email to Jonathan got that fixed and OUTPUT parameters are now supported.
Besides for a desktop application I have also integrated the generation engine as a VS.NET plugin (VS.NET makes it so easy) and the generated code will get written directly to where the caret is in the open document.
You can download the current version (1.1) here.
I am also thinking about opening up a got dot net workspace for this.
Friday, September 03, 2004
I am not a geek
But what really knocks me out of the running for geekhood is ........... I don't even have a GMAIL account!!!
Update - I now do have a gmail account.
Monday, July 12, 2004
I am a Delphi, Java, C#, SQL, XML, etc..... Developer / architect / administrator etc.....
I have approx 7 years experience in Software Development.
I am not the best programmer around. Furthermore %50 of what I say - I know what I am talking about and the other %50 I do not - The problem is that I don't know what belongs in each 50 - So, Reader beware...