About David Eedle

Geek, tech, programmer, business owner. Serial starter of things. Oh, and please don't call me Dave.

Finally solved the mystery of why isNumeric doesn’t work how you might think

In Classic ASP there is the function isNumeric, which one uses to test if a value is a number. So for example:

Response.write IsNumeric("21")  // true
Response.write IsNumeric("David")  // false

Seems straightforward so far. Then you try this:

Response.write IsNumeric("15447D")  // true

Every so often this little quirk would popup. This morning it’s been driving me mad because I had a set of string values that were mixtures of alphanumeric, or numeric values. I wanted to discriminate between numbers and not-numbers and store the values in different columns in a database table. Using isNumeric though kept throwing errors – it tested 15447D as being a number, and of course once I tried to insert that into an integer column an error was thrown.

Finally figured how what’s happening after a little digging online. isNumeric also considers hex values to be valid numbers. 15447D is hex for 1393789. Now the lights go on – only wondered about this for 20 years.

Apparently this is also the case for octal values.

So a custom function along these lines is the answer:

Function myIsNumeric(ByVal Value)
	Dim regEx
	Set regEx = New RegExp
	regEx.pattern = "^(0|[1-9][0-9]*)$"
	myIsNumeric = Regex.Test(Value)
End Function

Configure FTPS on IIS7 for SSL file transfers

I’ll presume you already have an SSL certificate installed to your IIS web server and thus have your web site running with https://www.domain.com. This post is about how to enable SSL for your FTP connections to the server.

Set the SSL cert for your FTP server and site

  • Go to IIS Manager
  • Click the Server name at top of left tree and open FTP SSL Settings icon
  • In the SSL Certificate drop down select your certificate
  • Check the Require SSL connections
  • Expand the list of Sites in the left tree and select your FTP site
  • Open FTP SSL Settings icon
  • In the SSL Certificate drop down select your certificate
  • Check the Require SSL connections

Yes I know we’ve done this in two places, but it does appear to be necessary.

Set the Bindings for the FTP Site

  • Go to IIS Manager
  • Expand the list of Sites in the left tree and select your FTP site
  • Over on the right click Bindings…
  • Click Add button, add Type = FTP, IP Address = All Unassigned, Port = 21 and Host Name = http://www.domain.com (as in whatever your domain is)

The following ports work is because you need to specify and open the data ports.

Configure Firewall Ports

  • Go to IIS Manager
  • Click the Server name at top of left tree and open FTP Firewall Support icon
  • The Data Channel Port Range may be set already, if not make it ‘7000-7003’
  • Set the External IP Address of Firewall to the public IP of your server
  • Go to Windows Firewall
  • Add a new Inbound Rule, named something like FTPS for IIS
  • On the Protocols and Ports tab select Protocol Type = TCP, and Local Port = Specific Ports, with the range 7000-7003
  • Leave Remote Port  = All Ports

This allowed me to FTP into my server, with FTPS selected. Don’t forget because you have set the Bindings for the FTP site to your domain, the user name in your FTP program needs to be domain name and user name separated by a pipe, for example http://www.domain.com|userName.

 

How not to win friends (and customers) as a SaaS business

We’ve been giving Sodeco a try recently at ParentPaperwork, like most of these online tools there is a 14 day trial, after which you need to sign up for a subscription. At the end of the trial we decided not to subscribe, we were not really seeing a marked result, and we have a great deal of other social and content promotion work underway, so adding another tool to the list was only going to happen if we really could see value returned.

My problem arose when time came NOT to pay. A few days ago I received the usual prompt that my trial had ended and we needed to pay. Screen Shot 2015-04-24 at 10.42.04 am

Notice the wording in the email. I’m presented with two options – either I can subscribe, or my account will be deactivated. I’m not a big fan of web sites having my personal information unless really necessary, so ‘deactivation’ doesn’t really fit the bill for me. And given I’m in the SaaS game I’m presuming that leaves me open to ongoing marketing approaches.

So I go to Socedo and login, thinking I must be able to locate an option to delete my account.

Screen Shot 2015-04-22 at 6.07.48 am

Unfortunately not. After login a popup modal window opens presenting three subscription choices. I cannot close the modal, nor access my account information. I do not think this is acceptable, and I said so in an exchange with a Socedo support person. They deleted my account as I requested.

Socedo’s tactics are blatant, they are coming from the view that the best way to sell their product to a customer is to give the customer no choice. Companies need to recognise customers must be given choice – and one of those is not to purchase a product. Companies must also recognise that users must have the right to control their personal information. I will not do business with an online company that does not offer me the option to delete my account and the associated personal data they are holding.

I reckon Socedo would win many more friends with an option that says “Not Today Thanks”, if the customer selects this, then there’s a magic opportunity to re-orient the relationship into something that can still be ongoing. Perhaps “That’s fine, but we’d love to stay in touch, would you mind if we added you to our newsletter list. Oh, and would you mind telling us why you don’t want to subscribe at this time.”

One of our main challenges in SaaS (or indeed marketing any product) is understanding why a customer chooses not to purchase. If we are smart, we can see these customers as opportunities.

 

Using grunt-prompt with grunt-git

Screen Shot 2014-10-10 at 12.15.11 AM

I’ve become a big fan of Grunt in recent months, and now have all my current main projects set up with Grunt for linting, minifying, revving, pushing to Git etc. It means I have a nice smooth build and deployment pathway, and saves me heaps of time.

I’m using grunt-git to push to Github, and started with a default commit message along the lines:

gitcommit: {
   'src-master': {
       options: {
          verbose: true,
          message: 'Commit src-master <%= grunt.template.today("isoDateTime") %> \n',
          noVerify: true,
          noStatus: false,
          ignoreEmpty:true
       },
       files: {
          src: ['.']
       }
    }
 }

But that’s not much use because it means I’m not adding my own commit message describing whatever it is I’ve just changed. Nor do I have any outlet for frustration and thus no chance of making it onto commitlogsfromlastnight.com.

So then I came across grunt-prompt, which does just what you expect, it creates a prompt as part of your tasks so you can input something. Then everything came together nicely:

// prompt for a commit message
 prompt: {
    commit: {
       options: {
          questions: [{
                     config: 'gitmessage',
                     type: 'input',
                     message: 'Commit Message'
                     }]
       }
    }
 },
// commit changes to github
gitcommit: {
   'src-master': {
       options: {
          verbose: true,
          message: '<%=grunt.config("gitmessage")%>',
          noVerify: true,
          noStatus: false,
          ignoreEmpty:true
       },
       files: {
          src: ['.']
       }
   }
}

 

Git – ignore files starting with period / full stop / dot

I use Git on my Mac, but some repositories are on the Windows drive of my Mac. Mac creates system files in Windows for each of the files, for example default.html will wind up with another file in the same folder called .default.html. This is all a bit annoying in Git which picks up on these system files, even though I have no interest in then.

But you can exclude them. Edit your .gitignore file and add:

.*
!/.gitignore

Moving on – leaving icix.com after 11 years

icix_logo

It’s been a weird, strange kind of a day, because today marks my last day working with icix.com. I don’t have my diary for 2003 anymore, but nearly 11 years ago, around the middle of August, I took a call from my youngest child’s godfather, who coincidentally happened to be an advisor and mentor to a bunch of startups and business people.

He told me he knew of a couple of guys who had secured investment and were trying to build a web site, but having problems coming up with something that worked. I said I’d go and have coffee with them, and in a dingy office on the NEC campus in Melbourne I met Matt Smith and Tim Marchington, the founders of icix.

Before too long the “coffee” morphed into them asking me to build a site, from scratch, to be ready in 5 or 6 weeks, without access to the previous developer’s 6 month’s worth of work. A short time frame, but we prevailed and to cap everything off, Tim’s wife gave birth the day the site launched – two births in one day!

Since then I’ve worked almost continuously for icix, although with a bit of a break in the mid-2000s after the sale of our Artshub business and the birth of our youngest child. She had a number of health issues, starting with severe epilepsy at 5 months old, and culminating in open heart surgery at 20 months, so we took a great deal of time out from all work related projects to look after her, something I am grateful the Artshub sale money enabled.

I wish I could say I am leaving icix because I’ve had a better offer, sadly I cannot. After spending 12 months trying to firm up my ongoing contract status we were not able to come to an mutually agreeable arrangement.

Maybe it’s a cultural difference but Americans seem to favour the shock and awe approach to any negotiation, I’ve seen even the most inane meeting turn into a slanging match in my time in San Francisco. Many Americans in business appear to regard the smallest negotiation as a competition, ignoring that this only results inevitably in a winner and a loser. It’s in contrast to my experience in Australia, and indeed the UK, where in general a consensus approach is more the norm. Obviously tough decisions can lead to disharmony, but I always feel a more collaborative attitude prevails, seeking to find the balance between the needs of all parties, whether it’s deciding on a venue for lunch or negotiating the sale of a company.

In this instance, after a year of being told how valuable I was to the company, how they’d welcome an opportunity to provide me with pathways to expanding my contribution, eventually I was presented with a contract offer with a pay rate less than I was paid to build the original icix site all those years ago. I felt incredibly disheartened, not just because the amount was so low, but because it seemed the last 10 years had not mattered one jot.

All this was in the name of ‘sustainability’, I apparently don’t fit their system, so I needed to be ‘standardised’, which is also saddening because it means they don’t understand that if everyone is slotted into a convenient generic box, there’s nobody empowered to disrupt, to call out something as rubbish, to act as the irritant that forces people to think twice.

Standardisation is another word for bland in my dictionary. Every company needs a rebel, although that’s far from how I ever would have described myself. But I’ve always been the odd one out at icix, the square peg in the round hole, which led to a constant stream of people asking for my help, my advice, my accumulated knowledge. And in turn I hope I added some colour to offset the routine.

There are some fantastic, dedicated and talented people I have had the privilege working with at icix, and others who have already moved on, either voluntarily or because they too did not fit the cookie cutter mould. I certainly wish all of them the very best whether still at icix or in their new roles. There is a close coterie I will miss terribly because they’ve become my friends as well as colleagues.

One thing I definitely won’t miss are the work hours, for the past couple of years I’ve managed an engineering team spread between San Francisco and India. So 5am has been my normal work day start time to talk to the USA, but I’d still be answering Skype chats at 7pm from the Indian team, meaning I’ve been available and online for 12 or more hours a day, including Saturdays given the Americans are a day behind. That kind of routine takes its toll on your health and family.

One benefit of no longer being at icix is as an outsider I can keep a close eye on their progress. I have a decade of my life invested in the company. Of course I’m privy to much internal information that I cannot share publicly, but from now on I’ll have no more access than any other outsider, and can cast a more critical eye over their public activities and progress.

Later today I’ll be pouring a drink, possibly two, and indulging in a little reflection. And then consider how best to embark on the next 11 years.