Friday, June 03, 2005

Do you call yourself a Java developer or a .NET programmer?  Do you think a carpenter calls himself a handsaw carpenter or a table saw carpenter or a belt sander carpenter?  The point, if it is not obvious, is that you should not pigeon hole yourself into claiming that you’re only a one trick pony.  Could you imagine a carpenter getting a job if they walked into contractor’s office and said “I use a hand saw really well but I’ve never really messed with this hammer stuff?”  That carpenter would be laughed out of the office. 

One thing some of the language evangelists forget is that a language, IDE, framework, OS and the hardware it all runs on are just tools.  Humans advance by making tools and then making better tools.  Imagine if we had stopped at the flint axe because the flint axe evangelists said that the flint axe was the best axe ever made.  At that point it probably was but eventually we moved from the Stone Age to the Iron Age and the Steel Age and now you can buy nice steel axes at Home Depot for reasonable prices.  Of course you can also buy a chain saw and save yourself a lot of hassle. 

So what does this mean for you, the sophisticated computer programmer of today?  It means that you should think of yourself as a programmer.  It may be acceptable to think of yourself as web developer or enterprise software developer who is fluent in many of the tools of your trade.   Don’t get stuck in the rut of your current tool of choice.  VB6 programmers learned this lesson all too (or should have) well when Microsoft decided that VB as they knew it was no good and needed to be replaced.  Goodbye VB6, COM+, COM, etc, hello .NET, good bye knowledge, hello training classes. 

A good craftsman uses the best tools for the job.  If a new tool comes along that can make a job faster, easier or results in better end products, you can bet that it would be adopted.  However there are always the Luddites that believe nothing new can be better.  So the advice is to stay agile and keep learning.  If you catch yourself bashing another technology without having used it, maybe you should reconsider after all right now you could be out hunting bison with a stone axe, instead of sitting in a nice climate controlled office sipping lattes and reading this excellent article.

Friday, June 03, 2005 11:32:55 AM (Central Standard Time, UTC-06:00)  #    Comments [2]
 Wednesday, June 01, 2005

I’ve been in the habit (well I’ve usually not had a choice) of learning a new language each year or so.  I’ve always had an interest in scripting languages, this is not unusual as I started my programming life as a system administrator and I used VB scripting edition for all kinds of things.  I’ve since learned quite a few languages and some I’ve enjoyed and some I have not.  I looked into PERL last year as it is used where I work and I had read about it in The Pragmatic Programmer.  I was a little bit disappointed.  What a mess.  It seemed like a patched together hack and I was not much more productive then if I had simply used Java or C#.  With that out of the way, I was surprised to see a book published on-line by the authors of The Pragmatic Programmer. 

Programming Ruby is a book dedicated to the Ruby language.  Ruby is supposed to be simple to use and very object-oriented.  I have decided that this is the next language I will dive into.  One reason I am interested is the productivity promised by the Ruby on Rails framework. 

 
Here is a list of what I am expecting:

  • Easy to learn
  • Easy to use
  • Minimal hassle
  • Minimal quirks
  • Free to use
  • Good for web developing

 
Some things that I am interested in finding out:

  • Data Access capabilities
  • Availability of editors (code completion, etc)

 I will post again once I have read the book and coded enough to form an opinion of Ruby.

Wednesday, June 01, 2005 9:21:17 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Tuesday, May 31, 2005

For anyone who has used Norton Ghost to build an image, Acronis True Image Pro 8.0 will be a breath of fresh air.  Here are the features:

  • Easy to use GUI interface
  • Can be used inside Windows XP, no need to boot into DOS
  • Reasonably priced, I purchased my copy for $32.50 from newegg.com, Norton Ghost appeared to be priced about twice as high
  • Can mount images as drives and browse the contents.

I downloaded it, installed it and made an image in about a half hour.  I did not need to create any 3.5" floppy boot disks ala Norton.  Everything was done inside Windows XP.  I love it when you can buy software quickly, it does what it says its going to do and you can go on with your life.

*one note, the software is $50 on Acronis' site but can be had cheaper on newegg.com or a similar site.

www.acronis.com


Tuesday, May 31, 2005 9:43:04 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
This weekend I had some time so I decided to wipe my PC and start from scratch.  I wiped off my current XP Pro build and installed it from scratch.  This time however I created an image of my clean install once I had downloaded and installed all the updates, security patches and service packs for Windows.  I installed a minimum number of drivers so that I can use the build if my devices change. 

All in all it is a pretty smooth transition.  I keep all of my data on a seperate drive from my OS so the transition was pretty straight forward.  I need to start doing this every few months just to keep things clean.
Tuesday, May 31, 2005 9:34:12 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
 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]