UtterAccess.com
X   Site Message
(Message will auto close in 2 seconds)

Welcome Guest ( Log In | Register )

 
Reply to this topicStart new topic
> Sell an application, with a subscription based system    
 
   
GilP
post Mar 28 2009, 01:53 PM
Post #1

UtterAccess Member
Posts: 22



Hi,
I have an application that I worked on for a long time. I want to try to distribute it. I am thinking of a payment scheme based on subscriptions. That way users will be required to pay a small amount once a year or so, in order to be able to continue using my application. They will be sure I am motivated to provide them with good service since otherwise they will quit using the application, and they know I will not want that. And from my perspective, I will be able to get continued income for my extremely long and hard iinvestment in the product. I realize that I am putting the carriage in front of the horses here, so to speak, because I have no customers for the application yet, but for what its worth, I want to try and set everything right and do the maximum I can to enable this to work.

Can anyone please share some ideas about how to achieve this? I assume an internet site will have to be set up and the application will have to automatically check for a valid active registration code when it will be launched? Or is there an easier way?

If anyone has some ideas or experience with such a system I would be so grateful.
Thanks so much
Gilad
Go to the top of the page
 
+
HiTechCoach
post Mar 28 2009, 06:29 PM
Post #2

UtterAccess VIP
Posts: 18,396
From: Oklahoma City, Oklahoma



(IMG:http://www.utteraccess.com/forum/style_emoticons/default/welcome2UA.gif)

Welcome to Utter Access!

I do think that Software as a Service (SaaS) will become a lot more popular in the future.

If it were me, I would do some research and see what potential customers think. Depending on the type of application, in some areas subscriptions are starting to become more common from established vendors.

I would like to recommend checking out the support for shareware publishers. There are services available that may be a possible option. At least this will give you some ideas.

You may also want to check out: KeyedAccess

Would you mind sharing with use some details about your application? What is the name and what does it do?
Go to the top of the page
 
+
GilP
post Mar 31 2009, 01:45 AM
Post #3

UtterAccess Member
Posts: 22



Thanks for the reply. I prefer to try and code this myself and not have to depend on a third party tool.

To answer your question, I actually began with an application that was intended for managing academic journals. These journals publish articles that are peer reviewed. Authors submit papers to the journal’s office, the editor selects anonymous reviewers, and they then receive an anonymous copy of the paper and return their anonymous evaluation. The editor, or a designated acting editor, then decides if the authors should be asked to make corrections and the process starts over again until the paper is either accepted or rejected. There are more steps to the process but this is the nut shell.

I developed a very good application that really makes all this easy, including sending pre-formatted emails to the various “players” in this game, depending of the stage of the process. The problem is that distributed applications took over this field. I don’t know if I am using the correct term, but I mean those applications that are internet based. Authors load their manuscripts on-line, reviewers download them on line, etc.. I think that this is a good example of a task that greatly benefits from this type of application, because the various “players” are very distributed and are dispersed all across the globe. My access application, which I called “Journalizer” is actually much better then these applications in terms of speed of information retrieval, and in terms of the level of detail that the manager can get. The rich interface is far better then what you can get via the browser (these programs make no use of sub forms for example). But it does not have the advantages of internet access so it will not prevail I guess. I am still waiting to see what Access 14 will have to contribute to this matter, but I assume this is a goner.

So I decided to try developing a shareware application for a different field altogether. It involves the music business, and does not require so much the advantages of the internet, as the application above does. I don’t want to say exactly what it is because there are not too many applications that have been built for this purpose on the market and I want to play it safe. I realize that this is a fantasy on my part, but for what it’s worth, I want to make an effort and see if I can manage to produce a product that will compete in the market.

There is one application that I found that is currently ruling the market. It is not written in Access, but rather in Fox pro. From what I managed to see it is a horrible application, so complicated you need a PhD just to install it, not to mention use it. I know that what I have already built is so much better and more user-friendly. So I want to give it a shot.

The problem now is that distributing an access application is still a nightmare. I do hope that the Access team will come to grips and rise to the challenge of making this easier on developers.
I also noticed that there are some gurus out there that managed to accomplish the task of building a shareware application already, so it is possible, although very difficult to do so with the current versions of Access and what they offer in terms of backward compatibility and deployment issues.

So, that's my story
Gilad
Go to the top of the page
 
+
AlbertKallal
post Mar 31 2009, 06:39 PM
Post #4

UtterAccess VIP
Posts: 1,776
From: Edmonton, Alberta Canada



I been selling and deploying access applications to customers that I never seen for met in person for quite a few years now.

While I don’t use a subscription based model, one important aspect of such a subscription based system would be that of some kind of time based or some type of licensing scheme or mechanism is built into your software. If you look at the following screen shots in my application, you can see there is a time based expire date.

(IMG:http://www.kallal.ca/ridestutorialp/upgrad3.jpg)

(IMG:http://www.kallal.ca/ridestutorialp/upgrad2.jpg)

(IMG:http://www.kallal.ca/ridestutorialp/upgrad4.jpg)

The above screen shots are just regular access screens but the 2nd one does display license information. (and the end user cannot change this info).

The reason for this expire date is when a customer asks for an application I will instantly give them a downloadable link and allow them to deploy the application to their desktops. I then send them out a standard invoice by email or fax, and await payment. If I don’t we see if payment from them, it’s not that big of a deal as eventually the software will expire after about 30 days.

The other significant issue in the above is notice how I have a built in update and download system. The full series a screen shots as to how a customer of mine updates their software (access) application can be seen here:

http://www.kallal.ca/ridestutorialp/upgrade.html

The way the whole system works is I have a system that generates a license key with the customer name built into the software. In fact in many ways I like this because then the customer has a link and is able to download and install as many copies as they want. If an employee takes a copy of an application to another company, I actually love it when they do this because they can’t change the company name that appears on all the report’s.

In fact I Actually encourage employees to take and use copies because then employees become my best sales force. Keep in mind that those employees often move to other companies where they are using a similar or same set of skills that they got hired for the first place. Thus it make senses if that employee needed my product at the previous company, they they certainly are likely to be able to use my product where they are working now.

So I make sure it’s easy for them to get copies of my software, but not easy for them to change licensing keys information such as the company name. I’m just pointing out that a really great secret in this industry is that your current customer base can actually be turned and your sales forced without them knowing it.

So few critical components I would think needed for subscription type system is:

Depending on how many subscription people your goal is you want your system of software deployment and installing to scale to many users, perhaps thousands of users.

If you don’t set up a streamlined system for installing and updating and maintaining your software in the field for these customers, then any profit you make will be quickly eaten up by all those phone calls and the twenty support people you have to hire to keep everything running. If you work hard on the streamlining and installing and reliability and the ease of setup of your software then that time + money saved goes into your pocket.

The other thing you need to consider is a series of little training videos or at least several web links that can help users “get up to speed” with your software. Once again you need to address this training issue. If you have several people a day always e-mailing or asking you a particular question then you want to have documents or a series a screen shots or training documents that’ll help them solve the problem.

For example, when a customer asks me how to change or setup a driver for a tour, then I email them this link:

http://www.kallal.ca/ridestutorialp/setdriver.htm

So you really want a concentrate on the things like training, documentation, and automatic updates and downloads, otherwise you will have to hire a lot more employees to support your customer base. I am spending a lot of time on this issue because a bit of effort and organization in this area yields really large results on the other side of the coin and allows you to support a large customer base with little efforts if you do this right.

Last but not least, Tony Towes has a good article here on licensing system he uses that I think would be very appropriate for some type of subscriptions system:

http://www.granite.ab.ca/access/demo.htm
Albert D. Kallal
Edmonton, Alberta Canada
kallal@msn.com
Go to the top of the page
 
+
GilP
post Apr 1 2009, 05:07 PM
Post #5

UtterAccess Member
Posts: 22



Dear Albert,
Thanks so greatly for your comments.

A few follow-up questions:

1) Why don’t you use such a subscription system? It seems that you already have this capability built in your database. All you need is to always provide a key that has a date limit, like you do for the first 90 days. Each time the date will pass then the user will be required to buy another new key for the next license period.

2) How do you limit the available time? Is that also hard coded somehow? If the user will change the system time will she be able to continue using the application?

3) You wrote that it is a good idea to think of scalability to thousands of users. But it seems to me that using the method of hard coding makes this very difficult. You have to re-create the mde each time for each separate customer?

4) Do you also have some way of charging more $ for more workstations used? Do you monitor this somehow?

5) Another possibility is the one mentioned by Tony Towes in the link you provided. He suggested limiting the number of records in key tables, so that after this limit will be met the user will have to make another purchase in order to increase the amount of the allowed number of records in key tables. The way I see it this approach has an advantage and a disadvantage. The advantage is that larger more economically able organizations will pay more, while smaller will pay less (assuming that the larger ones will also make more use of the database). This is especially useful if there are large discrepancies between the size and wealth of the organizations using the application. The disadvantage is that perhaps some users will decide, instead of purchasing more space in the backend, to just replace the information in the records that they have already created, and thus never have to pay for more room in the backend. I wonder what you think about this issue.

6) I noticed that you have a computer name field in the screen shot you added. Do you make any use of this field?

7) On a completely different subject that has to do with the user interface. I noticed in the screenshots that you added, that you provide your users with an “Add new record” button. Tony Towes also mentioned such a button that he adds in his applications in the link you provided. Why use such a button? Instead, why not use contentious forms with the last empty row open for new records? Is it simpler for the user this way?

Thanks again for your thoughts
Gilad
Go to the top of the page
 
+
AlbertKallal
post Apr 1 2009, 08:06 PM
Post #6

UtterAccess VIP
Posts: 1,776
From: Edmonton, Alberta Canada



QUOTE
>) Why don’t you use such a subscription system? It seems that you already have this capability built in your database.


I do have this ability. However, my business model is not based on subscriptions. In fact, my model is kind of like a cell phone. I am almost temped to give away the product but make money on the air time (in my case adding new features).

When you have product with a user base of 20, then you often get request for particular new feature. You say to the client, we can do that for less then 1 hour of billing, say $65. The client says yes, sure that great and affordable. I then send out a email and ask the other 19 clients do they want this feature? They 9 out of 10 times say yes. Well, I just turned 1 hour of billing time into 20 hours ($1300). So, I just think I can monetize my time better by NOT using a subscription based model. In other words, I can make more money this way right now. This what I mean by I often considered giving the software away for free to build up a marketplace in which you then build up a pool of billable hours. So, while subscription based models are ok, I think I monetize my customers better this way.

However, I do charge clients on a monthly basis for backup of the data of my application. I only started doing this because I got so tired and frustrated at the lack of care and backup from my customers. And, even when things were being backed up the time and pain to get a hold of their IT people was just too painful. The goal here is to make everything for your customer a lovely and pleasant experience. For most of my customers even picking up the phone to call THEIR IT department is much like a trip to the dentist.

If your serving a nice plate of steak they don’t want to see or know about how you killed the cow. Make things easy for your customers. When a customer asks you that they want to move their software. Don’t tell them to backup their data. Don’t say call your IT department. Don’t even say lets fix this. Say ok, lets just move your software to the other computer and I polite ask them are you at the computer with my software on it. This often means you are babysitting your customers. I am 100% happy to babysit customers if they pay me to do so. And, it turns out that customers love to be babysat especially when they don’t even know they are. They just want things to be nice and lovely and PAIN free.

So I built in backup into my software because I wanted to make a great positive customer experience. When they change a computer I can even use the backup feature to help them move to a diffent computer. I can do this faster, better and with less pain then calling their own IT department. And this easy ability of mine means I am transferring billing time from their IT guy (who is often a outside guy) into MY billable hours. In other words I am the one who now gets a phone call from them when they want to install or more the software to another computer. These types of tasks are usually done by their own IT support person but I made this process so easy and comfortable for them that they call me. As result I also get to bill them for moving my software, not their IT support guy!

Both me and my customers love the fact that we don’t have to go though 5 layers of people and management to find out who or where or how the backup was made. I simply fire up my remote support system and away we go. By the way, you do have good remote support built into your software? Don’t you?

Here is how I do a remote session with a customer:

http://www.kallal.ca/ridestutorialp/remote.html

With the above system built right into my software there is no web site to launch, no IP or some code for them to type in. They just click and I see their screens. Super easy! Customers are just love this and are amazed at how cool and how easy this is.

So, some services I offer are in a sense subscription based, but that is not my business model at this time. When I add web based parts to my software, then again, I will change a monthly fee for that web part.

QUOTE
>How do you limit the available time? Is that also hard coded somehow?


It is separate license file with a hash code key in it. Both date and customer name are encoded using my own encryption routines. (much like Tony’s idea).

QUOTE
>If the user will change the system time will she be able to continue using the application?


They could change their system date, and then launch my software. However, then all of their other software is going to suffer here. All of their outlook appointments, outlook reminders, dates on any document they make, date on their emails. And, even posting routines for most accounting packages etc are time sensitive.

My software also has very nice “reminder” feature built in that customers love. So, they can roll the date back, but they going to suffer a LOT of pain. If they change date and “launch” my software, and then re-set their date back, then any return to my main menu will trigger the license key check. So this would be a VERY painful process for them.

Besides, my customers are great people and NONE of them want to try and use something that has expired on them. I really do mean that…these are great people and great users of my software and they don’t’ want to do the wrong thing. They rightly pay for what they purchased from me and are happy to do so.

QUOTE
> You wrote that it is a good idea to think of scalability to thousands of users. But it seems to me that using the method of hard coding makes this very difficult. You have to re-create the mde each time for each separate customer?


No I do not. The company logo, company name, expiry date and colors on the main startup screen and even the font colors are in a license key. This file is outside of the mde. So, for the same mde file, here two screen shots of the SAME mde, but each with a different license key

(IMG:http://www.members.shaw.ca/AlbertKallal/rides2/ceile.jpg)

and

(IMG:http://www.members.shaw.ca/AlbertKallal/rides2/bel1.jpg)


QUOTE
>4) Do you also have some way of charging more $ for more workstations used? Do you monitor this somehow?


No, I do not. Again, this issue was for making the customer experience pleasant. If they want 1, or 4 users…I ENCOURAGE them to call me for help in setting this up. On the other hand since I have such a good remote support and install system, I do bill for that time. So, in sense they wind up paying me $30 for that extra copy, but they paying for my support time to install, not the software. By the way, this also avoids them having to get approval for purchasing additional copies of my software.

QUOTE
>instead of purchasing more space in the backend, to just replace the information in the records that they have already created, and thus never have to pay for more room in the backend. I wonder what you think about this issue.


Well, again it is a question of what kind of customers. Either they value my products and services or they don’t. Companies purchase my software because they value their employees and want to empower them with great tools to get the job done right. If the company does not have that philosophy then they probably are not going to be my customer anyway. I really don’t want those types of customers anyway. Successful companies give their employees all the good tools so they can do a great job. This why they purchase products from me. The companies that don’t think this way also tend to be the ones that are not that successful and are the ones that don’t purchase software for their employees anyway.

Furthermore one of the BIG advantages of keeping past customer data is for marketing ad follow up for sales in the future. So that sales person will want to contact past customers for next years event (or sales, or whatever service the company provides). In other words, keeping existing customer information is 90% of the value of a software system in the first place. When that company switches an employee then where is all the customers files, where are the follow-ups, reminders, past invoices etc? The fact of the matter is that software allows a company to change an employee IF they have an information system in place that keeps all of the past history data of their customers they were dealing with . I mean a new employee comes in and now needs to start contacting last years BEST customers for their sales process. Remember, my software has CRM built in and that is what gives most software value. I would be shocked if a company were wiling to destroy or give up the very history data that going to help them move forward and drive their growth in the marketplace.

QUOTE
>6) I noticed that you have a computer name field in the screen shot you added. Do you make any use of this field?


Yes, I connect their user name to their computer name. This is how the “reminders” work for them. These follow-up features are a big selling point of my software.. Here is user setup screen

http://www.kallal.ca/ridestutorialp/#UserName

In some versions of my software I also track menu item usage for improving my software and this menu item tracking also incorporates the username. I use this information to improve the usability of my software.

QUOTE
>you provide your users with an “Add new record” button.


It depends on the user role. For advanced features, and administers features, I tend to use and allow the “extra” blank record that appears in a continues form. However, for features that are for less trained staff I often have a add button. This is easier from a training point of view. However, this approach often gives me more screen space since a blank record is not taking up that space.

The other reason for using a add button is that often I need considerable code or even to launch another form that allows/helps the adding of that record. So it not just the issue of the blank record, but often I need lots of code to add that record and a richer UI for the user to add that record.

In other words hitting the “+” to just make a record appear in the continues form is rather lame and rarely my case. In my case 9 out of 10 times you hit that button and a fairly rich UI will appear to help you accomplish that task. However, users do get hard wired into expecting that “+”, so I put in places often to be consistent. This allows one to take advantage of the motor and visual memory that users build up over time when using my software.

Albert D. Kallal
Edmonton, Alberta Canada
kallal@msn.com
Go to the top of the page
 
+
HiTechCoach
post Apr 5 2009, 01:32 AM
Post #7

UtterAccess VIP
Posts: 18,396
From: Oklahoma City, Oklahoma



Gilad,

QUOTE
I prefer to try and code this myself and not have to depend on a third party tool.

I do not think this is a "tool", but VBA code that you can incorporate into your own application.

I have purchased several code libraries that have allowed me to add some great features without having to "re-invent the wheel" and they were also a tremendous cost savings. (IMG:http://www.utteraccess.com/forum/style_emoticons/default/sad.gif)

QUOTE
The problem now is that distributing an access application is still a nightmare. I do hope that the Access team will come to grips and rise to the challenge of making this easier on developers.

Really? I have been deploying Access based applications for 15+ years without any problems. I did purchase a third party installer ( (IMG:http://www.utteraccess.com/forum/style_emoticons/default/shocked.gif) the same one used by the major software publishers! They depend on third party tools. (IMG:http://www.utteraccess.com/forum/style_emoticons/default/shocked.gif) )

I am really curious to know what problems are you referring to? How would you make it easier?

Have you ever made an type of Widows installer package for any other software application that has a database engine?

You may want to check out: http://wwwe.sagekey.com
Go to the top of the page
 
+
GilP
post Apr 5 2009, 02:53 PM
Post #8

UtterAccess Member
Posts: 22



Thanks Albert for your extraordinary help.
I now need to work on these issues and think about all the things that you wrote.

One thing that comes to my mind is that perhaps I don't like the option of limiting the number of records as a mechanism of forcing the client to pay for services. It may cause some users to feel "guilty" or uncomfortable every time they add a new record. I want them to have a pleasant experience as much as possible.

As for the remote support, I think that is a great idea, but aren't customers apprehensive about a potential security breach? I know there is no danger for them, but I assume it will be difficult to convince people who want to be careful and do not feel confident enough to allow external penetration into their computer.

A couple of things about the help system that you set up: When a user clicks the button in order to start the help session with you, does your application simply use a shell command in order to execute the ultraVnc sc file? I assume you supply this file when you first install the application? Do you use a static or dinamic DNS?

Best wishes
Gilad
Go to the top of the page
 
+
AlbertKallal
post Apr 5 2009, 09:04 PM
Post #9

UtterAccess VIP
Posts: 1,776
From: Edmonton, Alberta Canada



QUOTE
As for the remote support, I think that is a great idea, but aren't customers apprehensive about a potential security breach? I know there is no danger for them, but I assume it will be difficult to convince people who want to be careful and do not feel confident enough to allow external penetration into their computer.


Great question. Well I never install any remote software with my initial software install. I also stress that since nothing is installed and it is ONLY the customer that can initiate a help session then I never experienced any apprehension at all. I make no registry changes etc or “leave” any remote software on the end users pc.

QUOTE
A couple of things about the help system that you set up: When a user clicks the button in order to start the help session with you, does your application simply use a shell command in order to execute the ultraVnc sc file? I assume you supply this file when you first install the application? Do you use a static or dinamic DNS?


I DOWNLOAD a version of ultra VNC called SingleClick when the click to start the help session occurs. I don’t have the .exe file on their computer. It is ONLY when then click on the help button do I actually download the .exe file. So, I download the software and then run it (shell out). SingleClick.exe is great because no changes to the registry occur or are required. Hence when users computers are quite locked down they have to be able to run.exe files, it just changes to folders and regiserity changes that are locked out.

For this download I did NOT want any prompts to occur for the user and thus I use the same set of VBA routines that does my remote backup and also gives me the ability to “upgrade” their software. So, once you have a good set of file transfer tools in your application then things like backup, upgrades, download + launch remote support becomes very easy to implement. I also use http in place of ftp for this download to ensure maximum compatibility here.

So I download the SingleClicl.exe file to their temp windows dir and then shell out to it. The IP address and configuration is self contained into that single .exe file. The .exe file resides on one of my web sites and thus of course is a static URL. The IP address that my “support server” is running on is dynamic. However that IP address don’t’ change very often and if it does then I simply upload a new copy of SingleClick.exe anyway.

Since I do the http download and shell out then the end user does not get prompts about “do you want to download this file…bla bal bal”. Nor do they have to launch a web browser etc.

Thus when they click the menu button in access I initiate a download and then shell out. The size of the .exe file is only 330kb. So, it takes well under 10 seconds to download and run that file. When they exit the file, there nothing for me to do on my end, and no changes have been made on the clients computer . Their IT people will NOT find software running in the background etc. I also punch out on PORT 80 for maximum compatibility as some companies block other ports. Port 80 is the same one used by web browsers so it is usually open.

Since I travel often or am often at other clients during the day I still want to be able to support my customers. I thus use the ultraVNC repeater system. That means I have a server running so both me and my clients are punching OUT of their networks. This means that while on a clients network, wifi hotspot or at a hotel I can connect and start a remote session with my clients with great ease. Using a repeater means I don’t have to change nor type in an any IP address at all. I just click on my remote icon and we are connected. So it is VERY easy for me to connect and I don’t want hassles for me either. Having a repeater running solves this problem very nice indeed.

The other issue is how did I solve the problem of tracking menu option usage. useage. Remember when you opt in for the “customer” experience tracking in office they are tracking each menu option you used. I also do the same. However once again my customers are not really worried. Here is a old post on Joel on Software where I talk about how I did this and kept customers happy about me doing it.:

http://discuss.fogcreek.com/joelonsoftware...amp;ixReplies=8

Albert D. Kallal
Edmonton, Alberta Canada
kallal@msn.com
Go to the top of the page
 
+
GilP
post Apr 6 2009, 05:27 AM
Post #10

UtterAccess Member
Posts: 22



Hi Albert
After reading what you wrote I found the Internet Data Transfer Library InetTransferLib published by Dev Ashish. Do you know this library? If so, do you recommend it? Or is it enough to just point to this exe file in a link. Will the liked file then automatically download to the temp windows dir?

Regarding the Vnc software, I also found that there is a free edition of real-Vnc. Do you have experience with it? I understand you prefer Ultra-Vnc products, but just in case if they go out of business for some reason, it is good to have another option.


You wrote you use the same set of VBA routines for backup and upgrades, and for the activation of the Vnc session. That is very interesting. A couple of things:

With regard to backups, do you let the user determine where to save the backup? I assume it will not reside on the same hard drive that the application is on, because one of the purposes of a backup is to have a copy of the data in case this drive dies-out, right?

With regard to upgrade, I understand that your system allows the user to download a new front end by clicking a button. But this is handled from the current frontend, so how is the one currently being used deleted? Also, it seems to me that maybe with your system it is possible to automatically update the front end via the Internet. You can have a VBA routine that will check for a newer version and if it exists then download it without waiting for the user to initiate it. Is this so?


Regarding support files:
You mentioned elsewhere that you use a support text file that holds the previous location of the last used back end, so when an upgrade is installed this text file is used in order to locate the previously used backend easily. You also wrote about another support file that holds the expiry date and various configurations. I understand that this is a license key and that all the user needs to do in order to enable the application is to put it in the right place and that is enough. The user will not need to type in any password into your application right? That is a nice idea I think. Well my question about the support files: why in txt format? Why not an mdb format? Isn’t it easier to handle this with another support.mdb? The data it contains can also be encrypted so that mustn’t be the reason you use a txt file.

By the way, I tried to click on the links in your text above in order to brows to the examples you posted but the likes were not valid. I think some were ok a couple of days ago but not anymore. For example I couldn’t brows to the following:

http://www.kallal.ca/ridestutorialp/#UserName

http://www.kallal.ca/ridestutorialp/remote.html






Thanks again for all your support
It is greatly appreciated
Gilad
Go to the top of the page
 
+
AlbertKallal
post Apr 6 2009, 06:52 AM
Post #11

UtterAccess VIP
Posts: 1,776
From: Edmonton, Alberta Canada



QUOTE
I found the Internet Data Transfer Library InetTransferLib published by Dev Ashish. Do you know this library? If so, do you recommend it?


Yes, that library is an excellent choice. In fact when I originally evaluated that code library I did not realize it supports call backs. So I went over to Randy’s Birch VB6 site and grabbed some of his internet code examples and made quite a few modifications to them (for one I had to change them from vb6 to vba). My main consideration and goals for my ftp (and http) library was to have a progress bar which would be based on callbacks. I wanted a GOOD transfer that can be canceled without some huge long/large delay that makes the customer feel like their computer just froze on them. Remember as I said before the customer experience is really important to me.

So the nice thing about any download process is my VBA is being repeatedly called over by the callbacks from the wininet.dll library. This is what drives my good looking custom progress bar and ALSO allows a very responsive cancel to the transfer.

It was only a few years later that I spent a little bit more time looking at Dev’s code and realized there is/was provisions and ability for callbacks in his example. I probably wound up writing a little bit more code then I should’ve on my own. However it was a great learning experience and the result I have a code base that better for my needs. However as mentioned, I think Dev’s code base has much the same abilites as what I have.

QUOTE
free edition of real-Vnc. Do you have experience with it?


I don’t have any experience with real vnc. However, all the vnc products are quite similar. The deal breaker and reason why choose the free ultra vnc was because of the “single click version” and also that of the repeater. Both the repeater and the single click edition of ultra vnc are very much what makes a complete seamless support system. As mentioned I don’t really want to install any remote software on the target computer. Having that single click edition as a small .exe file to run works well for me.’ Single click Also has provisions for branding and placing your Logos + company name in the little splash screen that occurs when you launch it and also for when the client shuts down the remote session (they see my logo + product name).

QUOTE
do you let the user determine where to save the backup?


No I do not. Less questions, less configuration, less training. That back up does not occur on their system at all, it goes over the Internet to my server. I first do a compact and repair, and then zip up the file. As you well know access database files zip extremely well so, after compacting their back end I zip and then transfer to my system.

QUOTE
But this is handled from the current frontend, so how is the one currently being used deleted?


I never delete the front end…it always gets overwritten. All upgrades occur from an FTP download using my internet transfer library. That download simply overwrites the existing front end. The old code to do this was:

Application.followHyperlink “web addrsss\MyApplication.Exe”
Applicaton.Quit

As you can see its only two lines of code to upgrade my system. Remember I use the free Inno installer for my updates that results in a single.exec file. It is that .exe file that simply gets run. When inno runs then I have Control over things like desktop shortcuts, where the mde file is placed etc. So, all kinds of other issues you need to deal with during an install are handled by inno. So, I quit the access application and at that point the user is seeing the series of wizard panels from inno .exe file. It is inno that un-zips the mde and overwrites the mde file that they just exited. There is no way they can click fast enough by the time the access application has quit and the overwrite occurs from the wizard display of inno.

In fact the only reason why I use my Internet transfer library in place of above two lines of code is because when you click on a file on a website (or use the followhperlink as above) is the browser gives you a prompt about do you want to download or run this file. Since I had the Internet transfer library then I eliminate one simple prompt by using my library in place the above follow hyperlink code.

However truth be known, you really don’t need an transfer library. The fact that the users have to hit “run” on their computer (browser) to run the inno upgrade is not a very big deal and I actually used the above code idea for number of years.

QUOTE
Also, it seems to me that maybe with your system it is possible to automatically update the front end via the Internet. You can have a VBA routine that will check for a newer version and if it exists then download it without waiting for the user to initiate it. Is this so?


Yes, my update system can do that. However for the time being I notify the customer by e-mail that a upgrade is available. The reason why upgrades are not automatic is because most of my upgrades are source of revenue as I explained previous.

QUOTE
understand that this is a license key and that all the user needs to do in order to enable the application is to put it in the right place and that is enough


Yes I have a configuration file that represents a license key. However the users never ever have to figure out where and when and how or need to follow a bunch of complicated instructions on where to place this file. I use the inno installer to package up this config license file. When I send a client a new config file I am sending them a inno installer package. That installer then launches and the user simply hits the next button like just about any windows install a user will have seen. The config file is then overwritten. And, in many cases I also package in a mde also.

So my users do NOT have some concept of some license key file that I send them or they transfer around. They simply install software and they are done. If I have to update a license key, then I send them a new install package and they simply run it. they never copy, paste, or deal with files (dealing wth files and making them copy that to a dir is way too complicated and time consuming for my users).

QUOTE
about the support files: why in txt format? Why not an mdb format?


The file that holds the path into the back end is a simple text file and is not part of my license key system. No need for anything more then a simple text file that has one line of text in it with a path name. So these additional files are NOT mdb format for simplicity’s sake. I think also think having these important files as non mdb files keeps them safer from prying eyes.

QUOTE
browse to the examples you posted but the likes were not valid.


Yes, I am cleaning and re-organizing all of that stuff. Those links will return in about 3 days. I did not think I would be touching and moving so much stuff around this weekend, but I am. I am not finished yet. However the URLs will become valid again in about 2-3 days from now. I doing a switchover….sorry about that.

Albert D. Kallal
Edmonton, Alberta Canada
kallal@msn.com
Go to the top of the page
 
+
GilP
post Apr 6 2009, 02:34 PM
Post #12

UtterAccess Member
Posts: 22



Albert,
Here I go with another follow up:

Regarding upgrades:
Call backs are too much for me to deal with at this point I think. I never programmed anything with call backs although I did read about it. It is not common procedure with DAO as far as I know. I do have very good command of DAO and Access in general, and a little API, but that’s it. But you did write that it is not mandatory and that the two lines of code for downloading and installing the upgrade are workable.

One thing though I do want to ask: when the user downloads the Upgrade, and executes the INO exe setup file, she probably has a default install location that is offered and that she can change right? I am asking because this creates a potential problem if the location will be changed and thus will be installed in a wrong location, other then the location of the first install.

Regarding backups:
The users have to initiate the VNC session before you can handle the backup right? So do you remind them or call them up in order to complete the process?

Regarding ports:
Quote:
“I also punch out on PORT 80 for maximum compatibility as some companies block other ports. Port 80 is the same one used by web browsers so it is usually open.”

Sorry for my ignorance in the next question. Port 80 is relevant to the client’s computer only right? I am confusing the port issue on the client computer and the port forwarding that must be done on your computer. So I assume that you use port 80 as part of the VBA routines that you wrote for transferring files or creating the outer connection from your client’s computer to your own? At which step in the process does this port 80 come in? Will I be able to find how to deal with this issue of punching out, when I explore the InetTransferLib?

Best
Gilad
Go to the top of the page
 
+
AlbertKallal
post Apr 7 2009, 10:30 AM
Post #13

UtterAccess VIP
Posts: 1,776
From: Edmonton, Alberta Canada



QUOTE
I never programmed anything with call backs although I did read about it. It is not common procedure with DAO as far as I know.


Callbacks have absolutely nothing to do with the DAO object model. (dao = data access object).

When you write computer code the idea here is you often call or use other people’s library of code. You would normally call that “other” code as a subroutine.

When you use code library that has a “call back” ability you are basically reversing the process, and that library of code calls YOUR code over and over. A great example of callbacks is how the new ribbon in access 2007 works. In the old way when you want to enabled button on a menu bar you’d simply go

Menubars(“mycustomMenu”).(“DeleteInvoice”).enabled = true

With a new access ribbon what happens is the ribbon code will actually call YOUR code and you’ll have to return a value to that routine that tells the ribbon library that the button is to be enabled. What this means is that the ribbon library code will do the enable/disable of the button and your code ONLY returns a value to the code that calls from the ribbon.

The only thing that you have to be aware of in callback type of code is that the code can fire unexpectedly because it’s not your code that’s firing off a subroutine, it’s that code calling YOUR subroutines over and over. We been able to fill a listbox or combo box in access for years now using callbacks, there’s an example here:

http://www.mvps.org/access/forms/frm0049.htm

In the above code example if you just drag another application over top of ms-access with a listbox driven by callbacks, then those callbacks will start firing over and over hundreds of times as the listbox is being refreshed. So when access wants to refresh the listbox then access will call back to your code, and this can occur quite unexpectedly. This also means that the routine that’s being called must remember the status or state of its variables, or at the very least not have to worry about the status of the variables when the routine is called unexpectedly by the system (in this case ms-access).

The reason why callbacks are important for an Internet download is because when you execute a command to start downloading that file ( let’s assume you called some program subroutine to download for you), then how can you stop it in the middle of that download? What happens if the download stops? You code will thus hang waiting and now you have a frustrated customer. However, if the program is calling back to your code over and over during the download then you can display a progess bar (beucase that library that calls your code is passing the amount of data that’s been downloaded so far). If your code notes that during the callbacks there’s no data being transferred then you can cancel the whole process far more smoothly then setting some timeout of 30 seconds or whatever).

And even when the data IS transferring correctly the internet library call backs allows you to return a value to tell the routine to stop the download right away. Again it just makes your application far more responsive when you say click to stop something. I can tell you how frustrating it is to click on something and have it wait or freeze up or who know what going on. I do know that if I put a million people in a room and ask them all to raise their hand and said that when I click on something to stop it and a responds right away is that what you want? They are all going to answer yes to this question! So what I’m telling is nothing new here.

While most of us access developers don’t get exposed to callbacks we very much we will now because of the ribbon. The ribbon is 100% driven by callbacks. Callbacks are not a hard concept to grasp, but you do have to flip your thinking a little bit upside down sometimes.

QUOTE
she probably has a default install location that is offered and that she can change right?


No, I don’t give them that option. Why even give them the choice? Why even force them to have some kind of staff meeting and figure out where to place a file? The more decisions you can make for your customers the less they have to think about these things.

I mean when you installed excel on your computer did you really want to think or have to even care where this application was installed to?

What’s so great about applications like iTunes or even the new iStore + iphone is that when you download an application you simply touch it and it starts downloading and is then installed behind the scenes in the background. NO QUESTIONS or nagging the user ever occurs. We have to stop thinking like the computer industry and think more like from a consumer’s point of view.

I mean if a consumer puts a key in a car and turns the key to start their car do we then want to popup a little box that asks

Do you want to start the car?

You can see how silly the above is. Why are they turning the key in the first palce? When you look at the new iPhone or the new Palm Pre phone You can see that they’ve pretty much eliminated all save prompts in the whole system. Ms-Access was about seventeen years ahead of its time and it never asked you to save a record. If a person’s moving to the next record why on earth would one pop up a dialog box asking do you want to save the record? Of course the user wants to save the record else why would they be moving to the next record? These kinds of questions become almost like asking the person who do you want to start your car after they put the key in and turned it to start the car. It just silly and an this becomes a whole bunch of unnecessary nagging of people when we start asking questions like this.

Again this is all about the customer experience. The less nagging questions and removal of prompts from your users the better the customer experience is.

QUOTE
Port 80 is relevant to the client’s computer only right? I am confusing the port issue on the client computer and the port forwarding that must be done on your computer.


I don’t do any port forwarding on either of the computers when doing a support session. I certainly do have a server with the “repeater” software running and that server allows port 80 as an incoming connection. As I said there is zero configuration that occurs on my clients computer, and in fact zero configuration that occurs on my laptop that I am using when I travel to do that support session. Both of us are punching out through the Internet to that server that’s running the repeater system. It is the repeater system that connects us together (all traffic goes through repeater). Since both me and customer is punching out of our network systems, then there is not a problem. Most firewalls and computers allow out going connections. The real problems begin when you try to allow an incoming connection. We never have this problem since both of us are using an outgoing connection to a server.

Remember the goal here was a completely hassle and trouble free to support system for both me and my customers. When I’m at a hotel behind their firewall or at an Internet café using their Internet, I can’t change or configure anything on that network because it not my system. With the repeater system then starting a support session with a client is simply one mouse click away for BOTH of us no matter where I am or that client is.

As mentioned I would actually consider using some of the web based systems like CoPilot or gotoMyPc. It’s not so much an issue of cost is as much as that I don’t want to have to tell a customer to launch a web browser and type in a bunch of codes or even type in some URL that they can miss type by one letter because when I say “M” they might hear the letter “N”. I don’t use the commercial systems because it is simply way too much hassle and way too much trouble to ask a client to launch a browser for a support session.

Remember everything you do is to reduce the pain points of your customers. This is exactly why people use and PAY for software in the first place. (because it makes their lives better and reduces some pain point in their life).

QUOTE
So I assume that you use port 80 as part of the VBA routines that you wrote for transferring files or creating the outer connection from your client’s computer to your own?


Well, if you doing a http transfer then you going to be using port 80. In other words all traffic for a web browser is port 80. So, If you’re using the Internet transfer library and you execute a command to do a http file transfer, then you’ll be choosing port 80 without having to do anything in that code. If you use the common FTP download a file from a web site or from your server, then you’ll be using by default port 21.

I’ve not looked how you specify the port number in the Internet transfer library, but you likely just append the port number to the URL or IP address. This is more of an internet standard issue then that of setting it in code. So, it is the IP address and then a port number is appeeded to that. You can use a different port for FTP if you want. On the other hand and you’ll have to change the FTP software that is running on the server side to also use a different port then. I mean if the FTP software’s on the server is listening on port 21 and you try to do a FTP transfer on a different port to that server then it simply won’t work.

For example VNC, ultraVNC, realVNC etc. I believe uses port 5500 as it default. As I said because some companies lockdown these additional ports, then about the only port you can be really sure that is opened its port 80. This is also why I use an http transfer in place of ftp when I can. Some companies don’t want people going to FTP sites and downloading all kinds of garbage and crap and games so they disable or block port 21 on their corporate computers. In this case if your Internet transfer library attempts to download from your server and port 21 is blocked then your download is not going to work.

If you have 100% control over the server where your data or files reside, then you can pretty much choose just about any port you want to use. However it makes sense to stick to the standard ports else you will have additional configuration work on your server side. So, How you specify the port is exactly the same way you do when you using something like VNC. So sure for the most part, it’s in your IP address that you will specify the port number. As mention you can choose any port number you want, it’s just an issue of can you set the port number on the other end.

In some cases you might want to use a different port numbers on your server side then the standard for reasons of additional security. For example, sql server uses port 1433. If you open up that sql server port on your server to the wild internet then in just minutes you’ll likely find somebody trying to logon your SQL server (been there, done that, and had this happen to me). Since there’s automated bots that hackers use on the Internet to search for open ports of 1433, then you could change your SQL server port to something else (those bots are looking for stupid companies have opened up SQL server to the wild Internet without putting any security in place). Those bots don’t look on other ports, so you could choose some port like 888. However, your connection or linked tables from ms-access for example would then have to specify the correct port number.

Again for the most of the time you don’t have to worry too much about the port issues. However, just like asking questions for what directory to install to, or stupid prompts to save a record the goal here is eliminate as many hassles for your customers. Everything you are doing here is to reduce pain for you and your customers. I want them to click, download and be done with it, I don’t want some support call or to later find out that they can’t use some FTP port because it been blocked.


QUOTE
Regarding backups:
The users have to initiate the VNC session before you can handle the backup right? So do you remind them or call them up in order to complete the process?


No the backup system has absolutely nothing to do at all with vnc. As I mentioned, I do NOT install VNC on the target computer UNLESS they are doing a remote session. When the support session done then NO software is left running and NO software is installed on the computer. This is why I use the SingleClick version of VNC because it does not have to be installed on the target computer. It is a tiny .exe file that is discarded and deleted and thrown away after the remote session is over.

So, for backups I use the Internet transfer library and ftp for doing a backup. This has no relationship to VNC in any way at all ( as I mentioned I don’t have vnc or anything at all installed on my clients computers – I think they’d be VERY angry and I would get in a heap of trouble if I installed remote software on their computers). The backup setting for my software is just one of “many” options in the user’s configuration screen. They can change the backup frequcny from the default (weekly). When a user exits my application if the number of days is greater then the setting for the last backup, then they get a dialog Explaining how many days it’s been since their last backup and do they want a backup now. If they answer yes then a backup occurs and the application exits or they can answer no and the application exits without doing a backup.

Albert D. Kallal
Edmonton, Alberta Canada
kallal@msn.com
Go to the top of the page
 
+
GilP
post Apr 7 2009, 03:01 PM
Post #14

UtterAccess Member
Posts: 22



I agree with you of course. It sounds very logical to me that it is much better to allow the user to stop the transfer at will or if something has or hasn’t gone wrong. I will look into this and see if I manage to incorporate it into my software when I get to that point. Right now I still do not have a web site to hold the install file or the upgrades, so it is a little too soon.

As far as I know, creating an install package with installshield has a step for the user to either accept the default location you provide or to select another location for the install. So I understand from what you wrote that INO allows for you to choose a location without allowing the user to make modifications to it. So I assume it will be somewhere on drive C. But what if there is no more room on C and the user wants to select another drive for the application? Furthermore, I understand that it is not a good idea to install to the Program Files folder? Will the user always have privileges to create a new folder where ever you decide? Are there security issues with Windows Vista that make it preferable to install in a particular location?

Thanks again for all of this
It is a great learning discussion for me, even if I do not manage to incorporate everything
Gilad
Go to the top of the page
 
+
AlbertKallal
post Apr 8 2009, 07:40 AM
Post #15

UtterAccess VIP
Posts: 1,776
From: Edmonton, Alberta Canada



QUOTE
creating an install package with installshield has a step for the user to either accept the default location you provide or to select another location for the install


Like most installers installsheld, or Inno they can be configured to allow the user to change the location of the install. However I don’t expose or give that option to the user when I build an install. So this is a common and typical option that you can enable (or disable) with most installers.

It is just so rare today that a user’s c: drive is full and is not operating correctly. In fact most users today don’t even know what a c: drive even is. Frankly if their drive is full then I likely don’t even want to deal with that kind of customer because this going to cause so much pain and suffering. While everybody does their best to make sure their software applications are not hard coded to drive c, there are many issues that crop up. Even simple issues like the form and application icon you specify in MS access is a hard coded path name. If users could change the location of the install, the application icon will break.

If this drive issue is important for you and your users then by all means allow that as an option. Remember everybody’s situation is different here and what works for me may not work well for you. There is never “one size” that fits all here. If you need this ability then only you can decide if it’s worth your time to make sure everything works when the standard install location is changed.

QUOTE
it is not a good idea to install to the Program Files folder?


Vista pretty much made this impossible to deal with now. However it’s been good number of years now and even before Vista I avoided the program directory folder as some companies and corporations have that dir locked as read only.

So what I do now is create new directory on drive C.

I have also used:

C:\Documents and Settings\All Users\Application Data\MyProgDir

Most installers have quite a few options for automatically choosing to the above type application directory. You often don’t have to type in the whole path name yourself in the install script and they have predefined constants.

If you want to see what an sample Inno install looks like you can read this article of mine here:

http://www.members.shaw.ca/AlbertKallal/RunTime/Index.html

In that article I have a download and a sample Inno install, but it is for a2007.

Albert D. Kallal
Edmonton, Alberta Canada
kallal@msn.com


Go to the top of the page
 
+
niesz
post Apr 8 2009, 08:11 AM
Post #16

Utter A-fishin'-ado
Posts: 17,723
From: Cincinnati, Ohio, USA . . . ><((((°>



Albert,

I would just like to thank you for the information in this thread.

I have developed/sold stuff to clients before, but I have to admit
that you have outdone yourself by putting sooOOOO much
time and effort into your sales and support system. PLUS the fact
that you are willing to share your insights here ... Well, I applaud
that sort of freeness of information.

Most developers would want to keep their sales/deployment/support
mechanisms close the the chest, so to speak. But you have openly
divulged this information to the masses. Not only am I impressed with
the techniques used, but am more amazed with the openness and
honesty of your post.

Well done! (IMG:http://www.utteraccess.com/forum/style_emoticons/default/thumbup.gif)

Walter (IMG:http://www.utteraccess.com/forum/style_emoticons/default/cool.gif)

P.S. I think this thread is generating so much traffic to your site that it has exceeded it's bandwidth!
Go to the top of the page
 
+
AlbertKallal
post Apr 9 2009, 02:13 AM
Post #17

UtterAccess VIP
Posts: 1,776
From: Edmonton, Alberta Canada



Thanks for such kinds words.

I actually enjoyed writing out these posts. The format of a web based discussion group is really nice and it seems to encourage discussions more then just a text based newsgroups.

While I am giving out some of my company ideas, at the end of the day it comes down to hard work and realizing that good software is all about a great customer experience. That is not really a secret!

QUOTE
this thread is generating so much traffic to your site that it has exceeded it's bandwidth!


Smile, no, that was not problem. The pictures and links in this thread been quite small in terms of bandwidth. It was all that stuff I did on the weekend and some other larger files that were being downloaded…

Albert D. Kallal
Edmonton, Alberta Canada
kallal@msn.com
Go to the top of the page
 
+

Thank you for your support! Reply to this topicStart new topic

Jump To Forum:
 



RSS Go to Top  ·  Lo-Fi Version Time is now: 19th May 2013 - 03:22 AM