Thursday, May 26, 2005

I was reading another great article by Joel on the Law of Leaky Abstractions.  Simply stated, programming advances by creating abstractions of complex processes.  ASP.NET makes web development simpler.  However, it does not relieve us of having to learn CSS, XML, XSLT, XHTML, javascript and C#.  Instead we must learn all of these technologies and having done so, we are able to develop web sites more rapidly but we must now know more then we had to before. 

This concept is probably best illustrated by TCP/IP Socket programming.  No matter how well a library is written you should still learn TCP/IP to use it effectively.

I believe that this is the reason that even as tools, techniques and hardware constantly improve, software quality is not improving at the same rate.  The troops in the trenches have to keep elevating thier game to keep up. 

The article:

http://www.joelonsoftware.com/articles/LeakyAbstractions.html

Thursday, May 26, 2005 9:40:01 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Monday, May 23, 2005

In Prometheus I have a system schema xml file that defines the classes in the target system.  For code generation I have found it useful to classify the classes into subtypes. There are generally utility classes such as Lookup which provides the lookup table functionality, common classes such as name, address, email etc which are re usable common classes and then there are business objects.  The business objects are the main classes of the system where most business logic is concentrated.  Common types like Address may contain some simple validation but not too much if any system level business rules.  However a particular instance of Address may have some additional logic. 

An Example:

A Home object is one of the main objects in the system.  A home has an address.  A home also has a customer (buyer) and the customer (buyer) has an address.  Address is the common type and Home is the business type.

So here is the topography:

Home.Address

Home.Customer.Address

We have a business rule that says the customer should be able to update his/her own address but not the address of the Home they are buying.  This is a place where field level security can be useful.  Based on the topography listed above the customer role would have access to Home.Customer.Address.* but not Home.Address.*.  The asterisk indicates that the user can have permissions to all fields (value or object type) of the parent object.  Our topography gives us a context in which to view two similar objects in a different way.  Even though both objects have similar validation and are saved in the same address table they can have different permissions and/or functionality as needed.  

This is just one more step in the 80/20 code generation solution.  If I can achieve 80% of the functionality I need through code generation and the rest through custom coding then I can greatly enhance my productivity.  Code generation is nice in many ways but in this case it allows us to apply a consistent set of generation rules and build hierarchies of objects to which permissions can be applied in a consistent manner. 

Monday, May 23, 2005 2:33:17 PM (Central Standard Time, UTC-06:00)  #    Comments [0]

Here is a web site that aggregates price data from all the major online book sellers and makes its money from referrals to these sellers.  I always like to see new and interesting business ideas that can make my life a little easier.

http://isbn.nu/welcome.html

Monday, May 23, 2005 1:19:48 PM (Central Standard Time, UTC-06:00)  #    Comments [0]

A book list with some very interesting entries.  Some I've read, some I'm looking forward to reading.

 

http://www.joelonsoftware.com/navLinks/fog0000000262.html
Monday, May 23, 2005 9:05:43 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Tuesday, May 17, 2005
I think that java is good for .net in that the designers where able to look at java and make design decisions based on what is right and what is wrong with the java implementation.  On the other hand .net is good for java because many of the great features of .net will find their way into java via open sources projects and/or additions to the language.

One place where java is lacking is XML serialization of objects.  In .net this is very trivial and the whole thing can be controlled by attributes.  In java attributes are new to 1.5 and there is no built in serialization.  Fotuneately, java has a huge open-source community.  I've found a product named Xstream which makes object to xml serialization very easy.  A couple caveats: version 1.1 does not handle serializing properties to attributes.  Also, serialization must be controlled through code as java just got attributes so you can't mark a property with an attribute in the code to control serialization. 

I've used Xstream and it is very easy to use.  If you are looking for a very easy serialization library for java then Xstream is your best bet.  I have not found another library that works like this and is at a production level. 

Here is the link:  http://xstream.codehaus.org
Tuesday, May 17, 2005 9:00:05 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
I have made some signifigant progress on the ACL security in CHT.  At this point the security is implemented using the visible and enabled proeperties of the controls on the form.  I have wrapped the label, input (textbox, etc) validators and help controls in a an asp:panel (which renders to a div) so that I can simlply hide the whole thing if the user does not have view rights to the object.  For the edit rights I simply disable the input if they do not have edit rights.

At the collection level there are add and delete permissions.  These are pretty easy to establish a link for add and delete just needs to be hidden/visible based on permissions.

An additional issue will be the view permissions in the collection (list) view of the objects.  This could either be handled with templates or with the same visible = true|false scheme. 

So far, so good...
Tuesday, May 17, 2005 8:48:46 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Monday, May 16, 2005

I’ve implemented two things that will enable a fair amount of progress.

The first is a lookup table implementation.  Any name/value pairs can be stored and retrieved from the persistence engine (database, etc).  This makes population combo boxes, list boxes etc very easy.  The search is performed on the object and field.  So for instance a type of car could be search by car & category and then all matching values will be returned.  I have built this into the generation code so that all properties that have an attribute=”choice” will have their UI code load the choices.  This is a possible candidate for caching.

The second system wide feature is field level security.  This is a typical role based security system where each user is assigned one or more roles and each role is assigned permissions to each object, method and field.  This is context driven so that that a customer.name has different permissions then a builder.name.  I’ve built an AccessControlList table in the database and then each field can be queried by its distinguished name i.e. customer.name.  This feature is still experimental but should allow a very manageable security infrastructure for CHT.  This is another candidate for caching.

Monday, May 16, 2005 2:32:31 PM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Tuesday, May 03, 2005
The code generation project Prometheus continues to evolve.  I have the general ASP.NET UI generation completed.  However as I move forward there are some advanced features to add.  One of these is support for lists.  DropDownLists or ListBox controls are the first and foremost issue.  It's fine to generate them but the current issue is how to indicate the datasource for the values to populate the list.  This is more of a conceptual problem then a technical problem as I know serveral ways to do this but I need to determine a nice clean way to make this work with the rest of the site.
Tuesday, May 03, 2005 7:51:22 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Monday, May 02, 2005
I spent a good deal of time working on the CHT product over the weekend.  I made some tweaks to the menu system and added a help system.  It works fairly well if I do say so my self.   I was running through a test and I found something interesting.  ASP.NET out of the box has very spotty support for browsers other then IE.  You probablly don't think this is much of a suriprise as #1 IE and ASP.NET are both MS products but from another perspective issue #2 is the adoption of IE.  It has an overwhelming market share and any company catering to the web market needs to look at its user base and see what the market is needing or wanting.  A product that works with IE is going to hit a large portion of the target.  Also most people using an alternative browser still have IE installed just in case (or b/c they can't get rid of IE ;>).

This brings me to the point of this post.  I have decided to postpone official support for Firefox until at least the next release of CHT.  I have been testing the product in both browsers to ensure the widest widest possible. 

Here are a few issues I ran into supporting Firefox:
  • ASP.NET considers all other browsers as down level, meaining that it renders tables instead of DIVs and some other annoying issues  This can be fixed with a browsercaps section in the web.config file.  Google on it.
  • ASP.NET client-side validation does not work on Firefox.  This is because of the validation script used by ASP.NET validation controls.  There is a work around for this.  It also involves the browsercaps issue mentioned above but you must also use custom validation controls of which there are a few out there.  A link to a great article on the topic.
So my alternatives are to use hacks in ASP.NET 1.1 or wait until 2.0 comes out with the official fixes for all this.  Considering the limited market share of Firefox and a foreseeable fix I think I will dealy official support for Firefox.  However I will continue to test against Firefox just to see what my CSS and HTML look like in another browser.  I will continue to use the browsercaps hack for correct rendering but I will have to leave cross-browser validation for another day.
Monday, May 02, 2005 1:22:11 PM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Friday, April 29, 2005
Another great article by Joel.  One thing that is glaringly obvious is that I need to add a bug tracking database.

Number 8 is especially impoortant and seems to be the one thing that managers and/or management in general doesn't understand about knowledge workers.

Here's the post
Friday, April 29, 2005 7:47:08 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Thursday, April 28, 2005

This is a great alternative to Access.  I've used this database for web sites and desktop apps.  There are drivers for virtually any major language (.net, java) and also ODBC drivers.  There are some nice visual front ends for this database but the command line utility is elegantly simple to use. 

Don’t expect features like stored procedures here as this is a very compact and light weight database.  Also the data typing is rather loose so don’t rely on the database to verify data types (which you shouldn’t do anyway).  It appears that PHP is including this in the distribution so this database will become widely available. 

This is a great database to use for prototyping and distributed or mobile applications.  Of course it lacks enterprise features but that may be a bonus in some situations.  The speed of the database is unbeatable so this is definitely a tool to look at if you need a fast light weight portable database.


http://www.sqlite.org/
Thursday, April 28, 2005 2:13:50 PM (Central Standard Time, UTC-06:00)  #    Comments [0]