FollowSteph Follow Steph as he posts Blog Blazer Friday

Archive for the 'Software' Category

Should You Use a Code Profiler?

If you’re a software developers, absolutely!!! No doubt about it!

Before I go on, let me just take a step back to explain what a code profiler is to those that aren’t familiar with the term since a lot of you here also aren’t software developers. And surprisingly, a lot of software developers have no idea what a code profiler is!

A code profiler is a software application that helps you find performance bottlenecks, pin down memory leaks and resolve threading issues in your software application. So in other words, it’s a tool that helps you find where your own software needs the most improvement.

You would think that with today’s amazingly fast machines you wouldn’t need to worry so much about performance or memory (threading is something you always have to worry about). Yes, that’s partially true, but not always! For LandlordMax, as the database becomes progressively larger, so does the importance of running a code profiler. As some of you may have noticed, we’ve really been pushing performance enhancements recently (for example: here and here), and there’s a reason why. When we initially ran our tests, we ran them with fairly large databases, but we’d only test one section at a time. Lately we’ve been really pushing the envelop, creating databases that are larger than any of our customers will ever have, and we’ve noticed some performance issues with these massive databases, as well as some memory issues.

So then the question becomes, why not just optimize everything? Because that’s incredibly time consuming and very expensive. But more importantly, it’s often a waste of time and money. Most of the improvements you’ll do won’t make any noticeable difference. For example, if a screen refreshes in 10ms versus 20ms, no one will notice, it’s too fast to be perceptible, even if it’s a doubling in speed! However the cost of this improvement may be significant, hence driving up the cost of the software! No one wants this, and there’s no real benefit to anyone in this case.

So what we’re left with is focusing on the main performance bottlenecks. How do we do this? Most people will think that you just look at code, it should be obvious. It’s not! Often where you think there’s a bottleneck is just plain wrong. This is one of the hardest things to do!

So where does this leave us? How do we do this? We could integrate within our application a bunch of timers, memory readouts, etc. that would continually post information out to the screen. I’d suggest against this because this is very time consuming, error prone, has the high probability of introducing unncessary bugs, and adds a lot of extra code to your application.

A better solution is to use a code profiling application. As LandlordMax is Java based, I can only talk about the Java code profiling application. There’s 4 main software solutions, all ranging greatly in price, how they tackle the problem of profiling, what features they offer, etc. They are: JProfiler, YourKit, OptimizeIt, and JProbe.

After some analysis, I narrowed our list of options down to either JProfiler or YourKit. I simply couldn’t justify the cost of OptimizeIt, and JProbe seemed still stuck back about a decade in terms of GUI (it just wasn’t friendly to work with at all).

I did personally contact both of the companies I was interested in evaluating (JProfiler and YourKit) and told them I was going to write a review here on FollowSteph.com about this topic. Both were enthusiastic about it, and each was willing to provide me with a free license to their application (thank you!) so that I could really try out their software packages. It’s great to see this kind of enthusiasm! It’s also great to see companies that really believe in their products!

That being said, after some experimenting, I’m going to say that I prefer JProfiler. YourKit was nice, but I found JProfiler’s interface much more intuitive, it provided me the information I needed in a very organized and obvious manner. This made finding the bottlenecks and memory issues much faster and easier! Therefore in my opinion, although both tools are powerful, but I recommend JProfiler as the better alternative.

To give you a few examples of some of the phenomenal improvements we got with LandlordMax, before we started using JProfiler, we ran a rent roll report that generated 521 pages of rents due (that’s a big database!) in less than 14 minutes. That seemed reasonable to us when you consider the size of the report. This same report now runs on my computer in 12 seconds!!! Yes you read that right, in 12 seconds! When we ran it with JProfiler, the performance bottleneck jumped right out at us. It was not at all where we thought it was, we had been focusing on the wrong area of code. Had we not used JProfiler for this, we could have spent many more hours, possibly days, trying to improve the performance and it would have only been minor, maybe we would have shredded one minute from the total time, nothing like what we achieved.

Also, remember that the time cost to fix this was extremely small, once we saw it in the “CPU Views” section, it was a no-brainer. Solving it wasn’t obvious, but locating the source of the issue was! Much like locating the leak in a pipe can be brutal, but once you know where it is, solving it isn’t nearly as difficult. With JProfiler we were able to find it in seconds, with just one pass of the report.

Although I’ve been mostly mentioning performance bottlenecks, memory leaks (or extraneous usage) can and also does happen. While running JProfiler we also found that we used more memory than necessary in many places. We immediately saw that our “instance” count was extremely high for Vector Objects (a Java library object that stores a list of other objects). Why was our instance count so high? By quickly drilling down JProfiler’s Call Tree, we immediately noticed the issue.

JProfiler Call Tree

JProfiler Call Tree

What was happening is that for each Model Object we created (a chunk of programming code that represents either a real world object or a concept), we were pre-creating several empty Vectors (lists). I know that without a context this doesn’t make much sense, so let’s give it a context. So for example, when we created a new Building Object, we would pre-create an empty Vector (list) of units, of accounting entries, and every other item that might be in the tabbed panels. There’s nothing wrong with that. When we were in the list view (where you would only see the list of buildings without the details), we only populated the basic building information so that it could be drawn in the table, not the full data (the list of accounting entries, etc.). We didn’t populate these lists (accounting entries, etc.) for every building because you might never view most of the buildings every time. Why take the performance and memory hit to pre-populate all the data if you probably will only use a small portion of it. Therefore we’d only populate the lists (accounting entries, etc.) for a building when that building was selected. This way, only when we actually look at the details of a building do we put information in our Vector Objects (accounting entries, etc.).

So how can there be a memory leak here? Well there isn’t one really. But what happens is that when we created a new Building we’d also create several empty lists (accounting entries, etc.) by creating a new Vector Object with no items in it. Still don’t see where the memory leak is? To be honest in retrospect it’s really obvious, but at the time I hadn’t really thought of it. The memory leak is that each of those empty Vectors Objects take memory. Each Vector Object has to be created (instantiated and allocated). Although the list contains nothing, the Vector Object does take up space. If you only have a few hundred buildings, it’s almost unoticeable. But now imagine that you have thousands of buildings, each with about a dozen empty Vector Objects! What about if you run a rent roll report like the one above with 521 pages of Objects each containing a dozen or so empty Vector Objects (lists)!

I wasn’t even looking for a memory issue in this area of the code, but by just running JProfiler while performing some random tasks quickly brought this to my attention. Of course, I had I run LandlordMax with a database of only a few hundred buildings I probably wouldn’t have noticed anything. You see in Object Oriented Languages such as Java, almost everything is an Object, there’s lots of Objects. Each Screen is an Object itself composed of many other Objects (Button Objects, Label Objects, etc.). There are Objects everywhere. But in this case because the database was much larger, the Object count quickly got out of proportion and it became very obvious when looking at the metrics within JProfiler.

JProfiler Instance Count

So to fix this little issue, all we had to do is go from created empty Vectors (lists) to using lazy instantiation. What that means is that we don’t even create an empty Vector, all we basically do is say this is where the list will go in memory. We don’t actually put a list there, not even an empty one. In Java, we assign it the value of “null”. Without getting too technical, variables generally point to the Object in memory, they don’t store the actual Object (pass by reference rather than pass by value). So when we put “null”, we don’t need to worry about allocating that Vector Object right now, we can deal with it later if need be (or never if we don’t need to). if you want more details this article explains it in a lot more detail. Anyways, doing this greatly reduced the amount of memory we used everywhere. Had I not run a code profiler like JProfiler, I don’t think I would have noticed this. It’s not a show stopper, but the less memory your software uses the better, and generally the faster it is. It didn’t need to create and destroy all these empty Vector object instances for nothing.

Another great benefit we quickly got with JProfiler is that it showed us our data entry screens needed some performance boosts. Up until now, we generally focused on the list views, as those are the ones that contain the biggest amount of data. But JProfiler quickly brought to our attention that the combo boxes can be performance issues. For example, when I go to create a new accounting entry where the database contains over 2000 tenants, 2000 buildings, 2000 vendors, etc., each of these respective combo boxes need to be redrawn (in case any data updates were made). Each combo box requires a database call. Each combo box requires some Objects to be created and destroyed as they are updated. This quickly added up and became really apparent with a large database just by looking at the screens within JProfiler.

Because of this, we’ve now added some caching to LandlordMax which will be available in the next major release. As I mentioned earlier in this article, we could have cached everything, but because of JProfiler we focused on only caching the combo boxes that had performance and memory bottlenecks (which ended up only being 5 combo boxes). Talk about a time saver! I can’t imagine having created caching for everything! By analyzing the metrics, we found that 99% of the performance bottlenecks could be attributed to only 5 combo boxes, which is a lot less than hundreds of potential combo boxes, labels, prefilled data entry fields, etc.

As a quick side note, those of you who aren’t familiar, caching is a way of storing information in memory so that it doesn’t have to be retrieved from the database each time (and also a way of re-using the same Object instances rather than re-creating new ones each time). Because of this, if no changes occur between screens (for example no tenants are added, removed, or modified), the combo box is virtually instantaneously drawn and consumes no extra memory. If a change do occur (a tenant’s name is modified, etc.), we now just update the cached tenant list so that it still doesn’t require a full database call or the creation of new objects. If you have thousands of tenants, buildings, units, vendors, etc., this can quickly add up.

JProfiler CPU Hotspot

Before I finish this article, I just wanted to point out JProfiler’s “Hot Spot” functionality which is available for memory and performance analysis. This is basically a feature within the software that tries to actively point out to you where the bottlenecks are, so that you don’t have to look any further. Think of it as a summary of where you should look next, where you should look to enhance your software. It’s a nice little feature. Now that I think about it, it’s almost like it generates a “to do” list for you on where you should focus your time and money to enhance performance.

So have I convinced you that you (at least you software developers and software company owners) that you should run a code profiler for your software application if you haven’t already done so? I hope so! These were only some of the highlights we got from using JProfiler, there were others (I didn’t even mention any of it’s thread analyzing capabilities!). As you can tell, I really benefited from using JProfiler, so I definitely recommend them, especially if you’re coding in Java. The value in terms of time, cost, and benefits is definitely worth it!

4 Simple Steps to Protect Your Data From 99.9999% of all Computer Failures.

We all know it’s important to backup our computer data but rarely do we actually do it. Well let me tell you from personal experience from this weekend, hard drive failures do happen! And was I ever glad that my backups were almost completely up to date. I lost a little bit of information (about 1-2 days worth of work), which is considered very good for a catastropic computer failure.

What happened is that over the weekend my most important drive, the one containing all my data files (I dedicated one hard drive only for data to simplify the backup process) started acting up. At first it started to do some random clicking sounds. It didn’t sound too good, but ok, there was nothing I could really do about it. Then suddenly the drive disappeared from “My Computer”. Not good! Then on reboot it came back. Ok… At this point I decided to double-check all of my backups. Almost everything had been backed up to about 1-2 weeks ago. Not too bad, but I decided to manually run a backup just in case. Lo and behold, last night my critical hard drive completely crashed for good! 250GB of data could have been completely lost had I not been proactive!

Which brings us to today’s posting. Having gone through the experience of a computer failure for the umpteenth time, I’m now getting pretty good on how to protect myself and get back up and running quickly. So without further ado, here are the 4 steps you need to do to protect yourself from computer failures.

1. Create a disk image of your C: drive. Nobody wants to go through the process of re-installing Windows/Linux/Mac OS again, updating the OS with all the latest security patches, re-installing all the software, etc. This can easily cost you many days of wasted time. Luckily for us there are software packages to create disk images of your hard drives.

For those of you who don’t know what a disk image is, it’s basically a complete copy of your hard drive in it’s exact state. This way, if for some reason your computer crashes (for example because of a virus) and you need to do a complete re-install, you can just “restore” your last disk image in a matter of minutes and you’re ready to go. No need to re-install everything, it’s an exact duplicate of your hard drive (hence the name disk image).

Now, as I was saying, there are software packages to do this. The two main competitors are Norton Ghost and Acronis True Image. I used to personally use Norton Ghost but I’ve changed since the last version update (version 10). I’ve found that it really slowed down my computer and it would hog up a lot of unnecessary resources. I now use Acronis True Image. If you’re interested in comparing the two, here’s a really great head to head review of Acronis Versus Ghost.

2. Create backups of specific folders and data files. Why not just use a disk image? You can, it’s just that I also like to make specific backups, I’m a little on the paranoid side from experience. For example, if you only have a disk image, what happens if that file is corrupt (although unlikely it can happen)? By backing up specific folders, I spread the risk. My best example is with my pictures. I take a lot of digital pictures, and I mean a lot. So what I do is create a disk image of the hard drive and I create a backup for each month. This way should something catastrophic happen to one my backups, I won’t lose everything since it’s isolated to that backup (I’d only lose the pictures for that month rather than all of my pictures). I also do this with all extremely important data, such as my LandlordMax and FollowSteph files and folders. I’d rather lose a part than the whole. For this I use a software called Genie-Soft Backup. It’s the best software package I found and it encrypts all of my backups on the fly.

3. Use an external backup hard drive. I strongly recommend buying an extra external hard drive to only use for backups (you don’t want it on all the time, this negates its purpose). Again, this hard drive is only to be used to periodically backup all your important data. This way, should you have a failure (hardware or software), you’re sure to have a local backup. In the old days, I would use CD’s, and even DVD’s, but the amount of data that needs to be backed up now just makes this impractical. I would need in the order of 2-3 dozen DVD’s and 100’s of CD’s to backup my data. This would take a lot amount of time and the number of points of failure substantially increase. It’s just not practical anymore. If you consider that the price of a backup external hard drive can be had for as little as $100, it’s just not worth using CD’s and DVD’s for backup anymore.

The other benefit of an external hard drive is that should something happen, you can quickly restore your data. Try restoring everything from CD or DVD. I hope you have a lot of patience. With an external hard drive, the data transfer can be done relatively quickly.

4. Remotely backup all your data. I can’t say this enough, backup your data to an external source outside of your home or business. It’s critical! This is your last defense. This protects your data from your property burning down (for the same reason you buy fire insurance, in the unlikely event?). This protects you from flooding and a number of natural disasters. How many times have we heard “I’ve seen it happen to others, but I never imagined it would happen to me”. Not only that, should your computer have a horrible malfunction, say a power surge, then you’ll be protected from this as well. This also protects you from the odd time that you’re external hard drive will also fail. Make no mistakes about it, the external hard drive is a hard drive, so it too will eventually fail (it should fail very very rarely as you should only be using it for backups).

Fortunately services that offer remote backups aren’t too expensive. Often the costs of losing the data far outweigh the cost of preventing the loss. What would happen if you lost all your digital pictures? I know I now have about 5 years worth of pictures. I can’t imagine losing all my kids pictures! Think of all the people affected by hurricane Katrina. Only those who use a remote backup service were probably able to save their pictures and data. What about my company LandlordMax? Can you imagine if a company has no remote backup of their data? I could easily see a company going bankrupt over it. The data is often many many times more valuable than the cost of the hardware on which it’s stored.

For this we currently use BQ Internet which charges which charges $20/100GB of space. We picked them because the price was good and this is their sole business. I have to admit we’ve had some network issues where the connection would get slow (or we’d entirely lose the connection) in the wee hours of the morning when everyone else is also backing up their data. But other than that it’s been good so far for us (we just now backup our data at an alternative time). The other service we looked at is Gnax.net Backup Service, which charges $0.50/GB a month. They seem to be a higher end service and the reviews look good. Either way, both are good options depending on your needs.

All in all, doing these 4 simple steps will protect you from 99.9999% of all computer failures. The odds of having all 4 steps fail at the very same time are extremely low. If I had to increase the odds even more, I could only suggest adding other alternative remote backup services. Other than that, the odds that your computer fails, your backups are corrupt, your external hard drive fails, and the remote service fails, all at the same time, are extremely low.

Backups are a necessity. I was again reminded this weekend of this by having my most critical hard drive fail on me. It can and will happen. Am I ever glad I followed these steps!!!

LandlordMax Size and Complexity

There are many ways to measure the size and complexity of a software package, and all of them have their pros and cons. Although not entirely accurate, lines of code is one such standard metric, it allows you to see how large the program is growing. For those of you not familiar with lines of code, this is the count of the total lines of written computer language in a software application.

Of course I understand it’s not accurate, every developer writes code differently. For example one person could write a piece of code in 10 lines and another the same piece of code in 100 lines. Maybe one developer’s code is brutal to read and the other easy. Another’s is convoluted, overly complex, or is overly written because of bad architecture (or vice versa). For you non-developers, think of it this way, how many lines does it take you to tell a story? For Tolstoy (War and Peace anyone?), probably a lot. For another writer maybe it only takes a small fraction, a few pages.

In any case, it’s a good enough metric for us because we really push high quality code that is succinct, maintainable, and standard (for lack of better term). We prefer to refactor when the architecture is no longer sufficient. We don’t like to leave loose ends or to keep a larger code base (the code base is the total amount of programming code to make LandlordMax possible).

That being said, here’s LandlordMax’s lines of code growth curve over the last 4 major releases (omitting the minor updates) :

LandlordMax Property Management Software: Lines Of Code

I have to admit that I myself was quite surprised at the “linearnous” of the graph (how straight it is). I suspected it was going to be much less linear, with “jumps”. But it makes sense if you think about, as we release each new version the code base gets more and more complex (there’s simply just more code) so it takes a little longer to build up on it. This is especially true when we need to make architectural refactorings that result in significant code changes with little or no additional lines of code added (sometimes the lines of code even get reduced). We had at least two of these significant architectural changes that I can quickly think of in the last major release: we changed the database engine and implemented table column sorting throughout.

Anyways, it’s just interesting to see how much LandlordMax has grown over time. The total lines of code may seem small for some developers/projects, but I think that’s because we spend a fairly larger amount of time on the architectural aspects of the software. I’d rather spend X amount of time now so that we save a larger amount of time adding new features today and tomorrow. Otherwise you can quickly and easily get caught always writing quick fixes and patches for one more feature after another until the system becomes completely unmaintainable. Not to mention that adding each new feature in the interim in such a system becomes exponentially more expensive!

If you’re interested in measuring your projects lines of code and you use cvs for your source code repository, there’s a great open source framework called Cvsplot which can produce some amazingly detailed graphs and text data file reports.

HelpSpot Versus FogBugz

Although the title of this entry is HelpSpot Versus FogBugz, I really don’t think it’s exactly appropriate even though almost everyone seems to want to compare the two head to head (and I have to admit I was somewhat guilty of this last year too). Even Ian, the creator of HelpSpot, goes so far as to say that HelpSpot and FogBugz are 80% similar. I’m going to disagree with him and say the reverse, that they’re only about 20% similar. My company LandlordMax currently uses both of these systems and they’re both great, they both help us tremendously. I can’t imagine being without either.

Now the first thing you should notice is that I said we’re both using them simultaneously. How’s that possible if they’re competing products? The truth is that they do have some overlapping features, there’s no doubt about it, but their core competencies are very different. HelpSpot‘s core competency is customer service. This includes support (email and online form), customer facing (presentation), user manuals, forums, etc. FogBugz is mainly about bug tracking and project management (which in themselves are huge). The overlap is because FogBugz also includes as part of their package a customer service system, and this is where the confusion begins.

When we initially were trying to decide, we went with FogBugz for the simple reason that we got a customer service system with a bug tracking and project management system. We basically were able to get a lot of bang for a lot less buck. FogBugz does a great job of project management and bug tracking. It lets you create multiple projects, move cases between projects, set priorities, estimate times, capture screenshots and create new cases directly in the system, link your cases to your version control, create release notes from the cases, link the cases internally, etc. This is all great! it’s saved us a tremendous amount of time and really helped streamline our development process. The only thing I’d like see is more reports, right now this is very basic or you can purchase a third party software such as Case Detective and DBxtra for FogBugz.

Initially for customer service we also used FogBugz through email. That is as it received emails it would then classify them as new cases within the Inbox (which is basically the same as creating a new case for project called “Inbox”). From here you can treat it as another project case, with the added ability to respond to it (i.e. email the customer).

This worked for us for a while. In the last month or so we started to notice that several of our customers weren’t receiving their reply emails. The issue was because some of the larger email services started to classify some of our emails as spam (probably because they contained terms like mortgage, real estate, etc. – remember our domain is property management software) and move them to their junk folders, at which points many people simply didn’t see them there. I can understand this, it’s the reality of emailing and spam. However understanding and dealing with it were two seperate issues. In our case, it ended up with me sending them a personal email from this domain (FollowSteph.com) explaning what was happening. After several of these, we decided we needed to take more proactive actions.

Initially we looked at FogBugz to help resolve this as it had served us well in the past. However after some emails with the FogBugz support staff and a lot of digging, we found that FogBugz was limited in two respects for us. The first was that if we were to put an online form, FogBugz only has the option of sending an email with the link to the response page. It’s not possible to immediately forward the user to the response webpage (so that they can bookmark it and return to it later should the email get wrongly filtered). Secondly, we quickly found out that FogBugz was not designed to be customer facing. As soon as we started to try to change the look and feel of the system it got very difficult. There are a lot of files to modify with a lot of code and it he presentation logic appears intertwined with the backend logic. For example, a lot of the code goes through a default.php file which is very large file.

All things considered, I can completely understand why FogBugz never really took the time to design their system for customer facing. Remember their core competency is bug tracking and project management, both internal functions. Customer service is mainly done through email, which you can see if you deal with FogBugz themselves. They do provide the functionality but I personally wouldn’t present the interface as it is to the client, even assuming that the layout looked the same as your website, because it’s a fairly advanced user interface.

This brings us to HelpSpot. We re-evaluated HelpSpot and we noticed it did this and much more in regards to customer service. It’s core competency is customer service. Ian, the founder, even mentions that HelpSpot can forced to be a bug tracking system, but it’s really not meant for that. HelpSpot is a customer service system. It provides all the functionality for email support (for example you can have part of the request be private whereas in FogBugz everything is public). It provides enhanced request support, reporting, etc. It also has an easy to use method of tracking tickets online, so that if the customer’s email is filtered as spam and therefore missed, they can just go back to the response web page (with a bookmark) to see if their request has been answered. HelpSpot also offers automation rules on just about anything, which is very handy for customer service (for example we have it that tickets that have no activity from either us or our customers for at least 7 days get automatically closed).

HelpSpot also really shines when it comes to customer facing. Because it’s core competency is customer service, it’s expected that many of HelpSpot’s customers will want their support system to be accessed directly online by the public, so this has been built into the design. HelpSpot calls it “Portal” functionality, which in essence means that they’ve built the ability to template it. What’s great about this is that it’s really easy (I did the customization of HelpSpot for LandlordMax myself) to change the look and feel in minutes. All the files are located in folder called “custom-templates” and there are about a dozen. As far as I remember, almost all of the files are down to one page and self-explanatory, containing only the presentation logic. They aren’t litered with all kinds of business logic. So for example, if you decide you want to move the search form to the top of the page, all you need to do is copy/paste a line to the location you need. If you want to “skin” the website, there is one header, footer, and navigation files which you can edit. The beauty is that you don’t really need to understand the backend or worry about moving around the code, it just works.

The other part where HelpSpot shines is the “Knowledge Books“. This might not seem like such a big feature at first, but once we integrated the LandlordMax User Manual into it, the whole user manual was searchable. Not only that, we’re also in the process of adding our FAQ (Frequetly Asked Questions) and it will search through both documents showing all the results. This is very handy since a lot of our customers often ask similar questions. For example some of the most common pre-sales questions are: How many units can the software handle? Do I receive any upgrades with my purchase? Both are answered on the first page but not directly (for example “No need to worry about getting the latest version. You get every release for 1 year”). In either case, since people ask us these questions, it means that we’re not answering them clearly enough (we’re continually working on this). The good news though is that if you go to the “Get Support” page, you will be able to enter in the search field (coming this week) “How many units can the software handle?” and one of the first search results you’ll see is “FAQ ~ How Many Units Can I Enter?” (as well as several references to other similar topics).

As for discussion forums it appears that HelpSpot is more advanced, but I can’t say for certain as I haven’t used it. I have used the FogBugz discussion forum in the past for FollowSteph.com, at least until I converted it over to WordPress, and it worked as expected. It’s a very easy and simple discussion forum. I have no complaints, it did what I needed it to do.

As you’ve probably noticed from this entry, I’ve talked a bit more about HelpSpot, and that’s because I’m trying to write a HelpSpot Versus FogBugz entry, which means I need to focus on the similarities. Overall, where they overlap, HelpSpot seems to be ahead. That being said, do remember that FogBugz’s core competency is not on the aspects that they overlap. HelpSpot is about customer service and FogBugz is about project management and bug tracking.

At the end of the day, my recommendation is this. If you need a project management system and bug tracking system use FogBugz. If you need a customer service system, use HelpSpot. In retrospect, I believe we made a mistake in our initial decision of just purchasing FogBugz, we should have purchased both systems initially rather than to try and save a few dollars. We would have been much further ahead as we needed both. So plain and simple, use each system for what they are meant to be used for. We use them both because we need both functionality and prefer to have better tools. It might be a little more expensive than just using one, but the difference in functionality and how much they can help you is definitely worth it!

The Database Engine Used by LandlordMax Will Now Come Bundled in the Java Language

It’s just come out recently that the next Java version (Mustang) will include Derby as part of the language itself, calling it “Java DB“. Yes, you read me right, it will be part of the actual programming language! Apparently the Java committee is so impressed with Derby that they are going to integrate it into the language itself and therefore support it. As far as I can tell, the main development effort will continue to be done by the Apache Derby Group, but it will then be repackaged as “Java DB” into the Java language.

This is great news! It definitely validates our choice of using Apache Derby as the database engine for LandlordMax. It means that Derby will continue to received substantial development efforts as it’s now going to be part of the actual Java language. If you think about, it also means that Derby has to be a pretty good database engine to become part of the language…

How will this affect the continuing development of LandlordMax? Although I can’t say for certain, I suspect that this was a great stroke of luck for LandlordMax! It can only positively affect the functionality and quality of our embedded database engine (thereby making LandlordMax an even better product).

It’s great to get such a positive boost of good luck out of nowhere once in a while!

An Adventure in Solving a Difficult Software Bug

Today I just came accross a good article written last week by Neville Franks, the author of software Surfulater (which I might add is a great product I personally use for offline storage and information management of webpages). In his article he articulates very well the trouble of first finding a difficult to find software bug, then in finding the actual cause, and not to mention solving the issue. What I particularly liked about it though is that even if you’re not very technically literate, it gives you a good appreciation of some of the issues software developers face.



LandlordMax Property Management Software

LandlordMax is the EASIEST
Property Management
Software available!
Try it for free!

Real Estate Pigeon

Real Estate Pigeon
The place to ask and answer
all your real estate questions

Blog Blazers: 40 Top Bloggers Share Their Secrets to Creating a High-Profile, High-Traffic, and High-Profit Blog!

Blog Blazers is a book that
features secrets from the
Top 40 Bloggers on the web

How to Generate Traffic to Your Website ebook

How to Generate Traffic to
Your Website
is an ebook for
to you achieve success


More resources from Stephane Grenier:
For people who work on the web
Blog Blazers
How to Generate Traffic to Your Website
The EASIEST Property Management Software available!

Copyright @2003-2024
LandlordMax Property Management Software

Disclaimer: This is a personal blog about my thoughts, experiences and ideas. The contents of this blog are for informational purposes only. No content should be construed as financial, business, personal, or any other type of advice. Commenters, advertisers and linked sites are entirely responsible for their own content and do not represent the views of myself. All decisions involve risks and results are not guaranteed. Always do your own research, due diligence, and consult your own professional advisors before making any decision. This blog (including myself) assumes no liability with regard to results based on use of information from this blog. If this blog contains any errors, misrepresentations, or omissions, please contact me or leave a comment to have the content corrected.