Tuesday, December 07, 2004
Podcasting
Podcasts do have one down side, they are not regulated and so you have to be careful about all the locker room humor and other offensive material. Free speech is good but at the same time is this the kind of thing we want our children listening too. Well, it is not all bad and as time goes on it seems to be getting better. Now that .Net Rocks has cleaned up its act, I would recommend it.
If you would like to get started Podcasting, download iPodder. iPodder is a tool that allows you to easily subscribe to different Podcasts and will download them to your computer. It works with iTunes and will work on Windows or Mac. Even though it is called iPodder you don't have to have an iPod, as long as you have iTunes you will be find. Most of the files are MP3. This makes it possible to download them to your Pocket PC, Palm or other portable devices.
Friday, December 03, 2004
Avalon 3D
This stuff looks really cool and will raise the bar on application development. This has the potential to change the way we interact with computers. It could make the user interaction with computers a much richer and pleasurable experience.
I really think this is cool stuff. Watch the MSDN Video to see the demo of Avalon 3D.
Thursday, November 25, 2004
John von Neuman
I am currently taking a Java course at Harvard University (taught by Charlie Sawyer) and in a discussion about threads we happened to run across John von Neumann. John von Neuman is the one credited for coming up with a lot of ideas about computers that exists in modern day computing architectures. There is also the "von Neumann bottleneck" which is a limitation on the idea that data must travel between memory and CPU a word/instruction at a time.
See Also:
http://www.csupomona.edu/~hnriley/www/VonN.html
http://en.wikipedia.org/wiki/John_von_Neumann
Tuesday, November 16, 2004
SetGlobal
SetGlobal is a command line application that I wrote a while ago. It is a useful application that allows you to manage environment variables. Ever since I discovered that you can create an environment variable and then launch it from your address bar in windows, I have found this to be a useful way of creating shortcuts to launch applications, websites, and directories. I like the idea of attaching a short friendly name to a long URL or directory. Then from my address bar on my desktop I can type %myvar% to launch a URL or directory. I suppose you can do the same thing with Windows shortcuts, but then you need to find the shortcut and click on it. For things that I use often, I find this faster and less cluttered. (See the tutorial for example on how to do this.)
SetGlobal is a way for me to create a list of variables in a batch file so that I can manage variables across different machines. You could just use control panel/system but I like this better. I like to have a separate file containing all my variables.
SetGlobal does the same thing as the set command in DOS except that it persists the environment variable.
It is your own personal Shrinkster for your desktop.
There are other uses of environment variables and by all means SetGlobal is a useful way of managing any environment variable. (Note, currently only user variables can be created. I thought this would be less dangerous).
Disclaimer: Setting environment variables can overwrite variables that other applications rely on causing those applications to not work properly. It is always a good idea to check to see if a variable is in use before creating a new one. SetGlobal will not let you overwrite standard Windows variables.
%cool%
Thursday, October 14, 2004
Four-Wheeled Segway
I must get one. For no reason other then it looks so cool.
http://news.com.com/Segway+may+go+off-road/2100-1041-5407205.html?part=dht&tag=ntop&tag=nl.e433
:-( I will probably never be able to afford it.
Tuesday, September 28, 2004
Another Windows XP SP2 Problem
Monday, September 20, 2004
Windows XP SP2 and Firewalls
Friday, September 10, 2004
4GL?
The software industry is about to change. There have been a lot of changes as of late, however with all of the change we are still building software that is error prone, expensive, and unreliable. This however is about to change. There is a push in the software industry to build better software more efficiently and effectively. The answer is with things like code generation, application blocks and software factories. I am excited to think what this will turn into. Will 4GL finally bcome the main stream or will we have to redefine 4GL. Perhapes it will just be 3.5GL. Anyway the future will be interesting.
- Code Generation
- Application Block (Logging Application Block)
- Software Factories
Friday, September 03, 2004
Great Hackers
I would also like to say that I disagree with ideas that great hackers only use Linux, Open Source software and Perl. I do agree with the idea that great hackers like control and with Open Source you have more control you can go in and change things because you have the source code. However, if you have well documented and well thought out software that is mature then that software may be wiser to use then open source. If it is easier to use and less buggy and will result in getting the end result up and running quicker then it is better. Also when it comes to operating systems and languages it is the one that allows you to do the most things that makes it better. And with that in mind it may just be the one that the hacker has the most knowledge about that makes it the better choice.
Friday, August 13, 2004
Desktops
Friday, July 23, 2004
Postmortem Document
The following is from the book "Coder to Developer" by Mike Gunderloy. I found if very interesting because I am currently working in an environment where projects often get handed off from one group to another with little documentation from the people that actually wrote it. I think this type of document would be very useful. (Although I am not sure that I could be disciplined enough to write it for every project.)
The purpose of the postmortem is to record the lessons that the teamor the manager learned in the course of building the software (or thethings that they wish they has known before they started). A typicalpostmortem might include these sections:
- Overall description of the project
- Who was involved on the team
- How the projects' scope and features changed from initial design to final ship
- A list of things that were done well during the project
- A list of things that could have been done better
- A list of the tools used, along with en evaluation of their quality
- A list of tools that team members wish they had had available
- A list of important project documents with their location
- Recommendations for the next project: How can things be done better?
Thursday, July 15, 2004
Coder to Developer
Friday, July 09, 2004
Reorganizing
- Falsely attributed to Petronius Arbiter; more likely Robert Townsend
Wednesday, July 07, 2004
Project Task Scheduling
Tuesday, July 06, 2004
Bye Bye to Mr CIO Guy
If only someone would come up with a Rapid Application MAINTENANCE tool.
Friday, June 04, 2004
Pocket PC and Movie Viewing
I have two thoughts on this. One, computers need to get faster. When we can edit a 2GB file easily then we will have a good video-editing machine. Second, why doesn't the manufacture of my TV tuner card have the ability to save to a version that I could then view on my Pocket PC. They have the ability to save me a lot of time.
Well I did, in fact, find that I could save from my TV tuner directly to an mpeg-1 file. It was not the same as the 100mb file that I mentioned above, it was about 300mb. But it is easier to deal with, and saves me the 4-hour conversion.
Wednesday, May 19, 2004
The Rule of 3
Friday, April 30, 2004
Google's IPO
Sunday, April 11, 2004
Channel 9
Thursday, April 01, 2004
Adventures of Seinfield & Superman
Tuesday, March 30, 2004
Security is great until it breaks something
Monday, March 29, 2004
Computers Suck
Sunday, March 28, 2004
Building Better Applications
Good job NewsGator.
Thursday, March 25, 2004
Why is code maintenance so difficult?
Stay away from form inheritance. Languages like Delphi have the concept of form inheritance (creating a base window and then inheriting off it). Although this can be great in the initial creation of applications, allowing you to create many forms quickly, it is hard to maintain. What if there is a button that is no longer needed, and that button lives on the base form. You can not delete the button because that would delete it on every descendant form. So you end up hiding it. Now you have controls that in design time clutter your designing window. The problem gets worse when you need to radically change your window’s visual appearance. Now what do you do? Hide more controls or start over? Well in this case the two options are not ideal. You will end up with more confusing un-maintainable code or you will waist time rewriting the window. I think rewriting it to the way to go. Rewrite it to the way it should have been in the first place, with out inheritance.
Try not to inherit more then three levels deep. Unless your objects are created perfectly and no one will need to maintain it, inheritance is not your friend. When it comes time to extend functionality it becomes very confusing to figure out where the code belongs. Does it belong in the base or at what level? Fixing bugs can also be difficult; trying to follow the call stack as it jumps from one level to the next can be tricky. There are times that each level is very straight forward however most times the lines get blurred and functionality ends up existing at levels it shouldn’t.
Minimize the amount of code files. If you have inherited objects that exist in multiple files think about putting them into one file. If someone need to make changes it is easier because everything is in one place. Organization can go a long way. Another solution is to create a directory that holds common files.
Try not to wrap objects for the sake of making things simpler. Of course there are times that you need to wrap DLL’s or COM objects. However, if you are trying to create easier access to code by writing more code this is probably not a good thing. The less code the better. Unless you have a really good reason to do it, don’t do it.
If you have a frame-work, document it well or better yet buy one. If in your project you try to make thinks easier by writing a frame-work that you can just plug-in objects, this may seem like a good idea, just make sure that you document it well. Everyone must understand it and be able to maintain it. If you can buy a framework you are probably better off. Developers are more likely to adopt a third-party solution then one created in house.
Diagram your software. A picture is worth a thousand words and a code picture is worth a thousand lines of code. Diagrams can make things easier to understand they can show relationships very well, and can go along way in helping others to understand what your code does.
Try to teach others your coding ideas. If no one understands what you are trying to do then know one will be able to maintain your code. Also in the process of documenting or teaching others you may find code that could have been written better. This is a great opportunity to make your code more understandable.
Top Down VS. Bottom Up
The top down approach is faster. Most prototypes and simple applications are written this way. You can develop it quickly, get feed back and get it to market in a relatively short amount of time. And if the code is not very complicated it is easy to maintain. The problem is when things become more complicated. As time goes on and requirements grow and the amount of code written reaches a level that makes the code difficult to comprehend, maintenance becomes difficult. And if you are working in a team environment probably only the initial developer will be able to maintain the code in a decent manner. Also bug can start appearing because of the complexity of code. Because decisions are based on how the user uses the UI chances are that not all users will agree, some users will want to do things one way while others will want to do things another. This leads to switches and settings in your code that over time can result in spaghetti code, because things are not thought out the end result is very difficult to maintain and error prone. There is also the problem of adopting newer technologies. Because the code base is all tied together chances are that any changes to components will be significant, you will probably have to test everything before you redeploy because you may not know what the impact of the change will be.
The bottom up approach may be slower at the start but more maintainable in the long run. You have to think about what you are doing. If you happen to be wrong you run the risk of wasting valuable time. You also must be careful not to over think things. However, your code will be more maintainable. If you create UML diagrams, this can act as a blue print of your software. Much like database administrators use ERDs (Entity Relationship Diagrams) to view their relationships in their databases, a UML class diagram can show the object relationships of your software. UML can also be used to show the flows of messages through different objects or give a high level overview of how the different sections relate to one another. Further more, as new requirements come in developers are forced to think about how this will affect the core application. Most of the bugs that I see are caused because developers are not thorough when adding new functionality. There are also many benefits to having your UI separate from your object model.
- You can build test scripts to test your object model. This can test the core functionality of your application. Although it can not test everything it can catch some bugs early on and help the developer maintain a reliable code base.
- You can migrate your code. Because you have a separation of UI and objects you have a place to start migrating code. If the UI must change you know that this will not impact the core. Perhaps you are trying to move your application to the web, or perhaps you would like a fancier UI. Furthermore if you would like to move your application to Linux or .NET moving the objects first is easier. Most portability problems are in the UI controls. You may have to rewrite parts of the UI but this is far better then having to rewrite your business logic.
- You can turn your object model into a stand alone API. Perhaps some users would like the ability to create their own UI or may want to integrate your functionality into one of there own applications. This can make your code more valuable and more useful.
I would suggest only using the top down approach in cases when you want to get your software to market quickly and don’t care about long term maintenance. For more serious projects I would suggest the bottom up approach. It may require more time up front however the time saved in maintenance will be well worth the effort.
Why is TDD so boring?
http://www.ftponline.com/weblogger/forum.aspx?id=9&Date=3/22/2004