Tuesday, October 28, 2014

Introduction to GIT

This week at CodeRage 9 I will be presenting.  "Introduction to Distributed Version Control"

My session covers the basics of how a Distributed Version Control System works.   I focus is on GIT but it applies to Mercurial - Hg.

Here is a link to the slides I used for the first 10 minutes of the presentation.

I used 3 clients in the Demo.

I highly recommend learning the command line tools,   there are two great demos for GIT available that I reference in the presentation.

What I don't cover heavily in the introduction is branching.  Understanding this allows you to really leverage the power of Distributed Version Control.  Atlassian has a great tutorial on GIT but the best part of this document is how it compares the various workflows you could use with GIT.

If your coming from SVN and moving to GIT I created this cheat sheet to remember the common commands.

Another thing I wanted to cover but did not have time was options when it comes to hosting your git repositories that I have used.

Public and Private Repositories outside your firewall:

  • GitHub
    Great visibility for open source projects.
    Priced per Private Repository, with unlimited users.
    Public Repositories are free.
  • BitBucket
    Good Visibility for open source projects
    Priced per user, with unlimited repositories.  5 and under users are Free.
    Public Repository with unlimited users are free.
I have found that I create several small repositories,  and the pricing for BitBucket works well for that.      So I tend to put my private repositories on BitBucket and my Public Repositories on GitHub.

There are several products that are designed for behind the firewall.  I have only used the free Bonobo Git Server.    Really want to switch to Stash, but I have to wait right now due to budget limits.

Friday, September 12, 2014

VCL or FireMonkey - XE7

In a previous blog post I mentioned we are starting a rewrite of an existing application using Delphi XE7 .     One of the comments was raised if we are going to use VCL or Firemonkey.

It was decision we took quite seriously.    Using Delphi  we spent a few days developing Firemonkey sample applications and compared them to what we could do in VCL.    Firemonkey is quite nice.   It has some really nice way of presenting data.  However, ultimately we have decided on writing our application using the VCL.  

Primary reasons we to considered using VCL
  • Existing libraries that can be reused.
  • We have written 30+ Custom Controls, that we can reuse.
  • Still maintained and enhanced.
Reasons we considered Firemonkey
  • Can create some really pretty applications, animations, etc... that are more time consuming to create under VCL.
  • Gets most of the new features in the Delphi libraries.
  • Gives a potential to go cross platform   However, we have no requirements for this.
Reasons we choose the VCL over Firemonkey.
  • We have no need to go cross platform with this application
  • VCL applications look like the belong on windows, Firemonkey applications look like that are made to work on Windows.
  • Firemonkey is a fast moving target, and Delphi upgrades may be more difficult if we skip versions.   
  • VCL is still getting improvements (But since it's mature it's not as difficult to adapt)  but it's easier to upgrade between Delphi versions.
  • Existing code libraries can be reused.
  • Cost we don't have to buy or develop controls we already have.
  • Specific VCL controls - (Where we could not find a equivalent in Firemonkey)
    • TImageScrollBox in the Envision Library  (Really nice way to view images)
    • TRichViewEdit from the TRichView Library (Any RTF editor may work)
    • TTrayIcon support 
    • TWebBrowser - HTML Viewing Component for desktop, we see it there for mobile.
The good news is that XE7 supports both and I have a decision to make.    I know some have said get rid of one or the other.    I personally like having the choice, they each meet a different set of needs.   

That being said part of my hope is that some of the reasons we chose VCL or Firemonkey are removed are removed in future releases.  I also really want supported interactions that allow us to mix Firemonkey and VCL Code, such as a TFrame in VCL or Firemonkey being able to be embedded into VCL or Firemonkey form.      

Regardless of the the framework choice,  XE7 appears to be a good choice for development and has compelling reasons to use over XE6.

Thursday, September 4, 2014

Product/Component Vendors and XE7 Support

Here are the most prominent 3rd Party components(That don't ship in the Rad Studio/Delphi products) that we use.   We may or may not use these in the application we will be rewriting in Delphi XE7 as we have make lots of decisions first such as VCL or Firemonkey.

2 Days after XE7 was released and some people are are on top of there game.

The following already support XE7

Patiently waiting on Support for XE7 

I really like what TMS did for upgrading to XE6 and now they have done the same for XE7.

Wednesday, September 3, 2014

XE6 Upgrade Story, Now on to XE7...

We started the Delphi XE6 so early in the process we had to convert all the 3rd party components we used to XE6 without help from the vendors.  Our plan was to upgrade Delphi XE6, and move to ContinuaCI.  We also rewrote our FinalBuilder scripts from scratch, keeping in mind we would be upgrading more often.    This project was scheduled to go from April and release at the end of September.    We actually finished development in mid June and released after regression testing on Aug 7th.    The release went really well we had ONE new bug reported in Production    We also had less than 15 reported bugs during the development cycle.    Comparing it to our last major upgrade from Delphi 2007 to XE we were over schedule,  we lost count on the number development bugs, and we had many more problems in production.  
Testing our application suite takes apx 1.5 months to complete.    Due to the time it takes to completely retest the application we tend to have to isolate areas and focus on them for release.    This allows us to have faster testing time as we don't have to as thoroughly test all areas.   A luxury we don't get when upgrading Delphi as all area of the code need to be retested.

Because testing time is such a major part of development, we have been slowly but surely increasing the number of of unit tests.    We also have some research going on in GUI Automation Tools, but we are not pleased with our current options here.     We are also researching adding GUI testing to DUnitX.  Each has benefits and drawbacks that are obvious and others that we will only find out by trying.

That being said our team will not be able to upgrade our whole product suite to XE7 as 3 months of QA time a year to do Delphi Upgrades is too costly.     So we will have to wait for XE8  and maybe even XE9 for our whole product suite to be upgraded.  

That being said XE7 still appears to is a very compelling upgrade.

Our very first Delphi application that was developed here (long before I arrived) is showing it's age, it was originally developed in Delphi 3.    It came complete with every bad programming practice I have ever seen. Global variables, events containing all the business logic, the worst being it's desire to use hidden TEdit as variables.  Granted it was the first Delphi application written by that team, and they were learning the language on this project.... But it's just not worth trying to fix.  Not to mention that the business has evolved and wants something different that what it did.

The last version of Delphi that will touch this application is XE6.  

Today we are starting a project that will rewrite this application, were we will be using XE7.  

Tuesday, May 6, 2014

Support and how it should work.

During our XE to XE6 upgrade project, we felt it was time to redo our build process.

We are using FinalBuilder and ContinuaCI produced by VSoft Technologies in Canberra, Australia.

During the process we ran into some minor bugs, in the product.    We also had some major and minor feature requests.

Anytime I ran into one of these, I would shoot off an email to the product support email address.  

Sending an email to them would result in a automatic Ticket Number response email from the FogBugz software they are using.   I don't know much about FogBugz, but as customer I love the interaction and being able to see the status of the emailed ticket at any time.

Then after sending the email, I would then leave for the day,  the next morning I would come in and have a response to my ticket.

What made me happy about these responses was most of the time they contained a link to a build with a fix to the problem I was experiencing.     If I had made a minor feature request, that commonly was also implemented in the same time period.     For major feature requests, I was informed that the request was placed on the list to implement, some times with follow up questions to ensure they knew what I was asking for.

Typical response time for a bug fix: < 24 hours.
Longest I remember waiting on a bug fix < 2 weeks.

As a customer I have never felt my opinion or bug was under valued or should be discounted because of some other mitigating factor.    A behavior I commonly get from other companies.

I could be getting lucky with my requests, but I highly doubt it as we have seen this behavior several times over the years we have been using their products.   I am sure sooner or later something nasty will come up that will take longer, but I know it won't just be sidelined, it will be worked on, and I will be kept informed of what is going on.

My point is, VSoft Technologies really has support covered.   I wish other companies, I work with had that level of support.

Friday, April 18, 2014

XE6 - New Look and Feel

One of the first things long time Delphi Developers may notice about XE6 is that it has new look and feel.

One thing I have learned over the years is that when you change the user interface in any way you will get a divergent number of opinions.    My opinion of this change is simple:   I like it.

I have made two similar screenshots of XE5 and XE6, so you can compare the differences.

Wednesday, April 16, 2014

Delphi XE6 - Easy to upgrade

Delphi XE6 was just released yesterday!   My team of 10 Delphi Developers has been moving fast.

Several Open Source Libraries that my team uses have been updated to support XE6.  

We were able to internally update our commercial libraries such as TMS, SmartInspect, Envision, RichView, FastReports and few others because we did not want to wait.    The latest version of FinalBuilder already supports XE6 so that made our build easy.

We now have our primary application working with XE6.   It was quite easy to do.    

Our code base is over 2 million lines of code.    We have 178 Packages (all have been converted)  We have 650+ DPR, several of these have been converted.   Finishing all of the secondary applications (DPR's) right now, and expect to have our conversion complete in the next 3 weeks. 

This has been a VERY EASY upgrade.   We were upgrading from Delphi XE.

I had some headaches with the license registration, but once you get past that the product works well.

Monday, February 17, 2014

pfSense - Network Performance

I am lucky enough to live in an area where I can get a fiber connection to my home.
I pay for 100 GB and 100 GB down.   However, I was never able to achieve this performance levels.   About a year ago I took a bandwidth speed test.    This is what I was able to get get.   My wife was on the phone (VOIP) at the time and my kids were watching Netflix.    So I had competing traffic.

At home I have been using a Dlink 665 Router for a long time, and it worked for my needs.

But then I wanted to do the following
  •  Block all DNS Query traffic that is not going to "Approved" DNS Servers.
  •  VPN into my home network.
  •  Monitor bandwidth by device on my network.
I have been researching options on what could provide provide these, including:
  • Devices
  • Aftermarket firmware for existing devices.
  • Using Linux or FreeBSD and spending hours configuring it.
After not having much luck finding something that would meet my needs, in my price range.
asked a co-worker what he used.     He pointed me to pfSense.    

pfSense is a Open Source Firewall based on FreeBSD.

I add a second NIC to an older spare machine I had.   Then I installed pfSense, it was a very easy to install.   I had it running with the base configuration, a few minutes after inserting the CD and starting the install.   

I then spent a few hours to get it configured as desired, but it was really easy.    Most of the time was spend readdressing my home network, as I desired a more structured ip address layout compared to random undocumented method that I had before.

I expected to get the features I was after, but one took me by surprise.
I noticed our connection seemed much faster than before.

So I took another speed test,  I had my son watch Netflix like he was before.


Granted lots of things could have changed in a years time.    So some of the differences may not be attributable to pfSense.     However, I am not about to install the Dlink 665 again to find out out the true differences.

But since I noticed the improvement, without the speed test, I thought I should post a glowing review of pfSense.     All of the features I wanted have been working really well, and it has more feature than I will ever need, allowing me to expand to meet my needs.

If you need need a better firewall at the your home or office.   It's worth looking into pfSense.