In the introduction to this series, I outlined some of the requirements for the WordPress plugin licensing platform: Speed, reliability and scalability. These are critical. Just imagine what would happen if any of those were missing. Requirements Justification A slow platform might result in significantly fewer sales. One of our use cases is to provide a free, limited time trial, and poor performance when installing or using a plugin would almost certainly decrease sales conversions. Reliability issues would, at a minimum, reduce developer confidence when coupling a new plugin to the licensing platform.......
Continue Reading
The market for premium wordpress plugins is very active these days. Despite the disagreement over GPL specifics, there are an increasing number of extremely skilled software developers that create high quality plugins for WordPress. One problem that they all have is a licensing mechanism that will allow them to distribute their software plugin freely, but restrict its use to those who have paid. In some cases it is desirable to provide a free limited time trail. In this series of articles I’m going to show you how I develop a licensing system for......
Continue Reading
MongoDB implements a form of replication they call replica sets. Referring to a repica set instead of just calling it replication is a helpful distinction that becomes more obviously useful when you are introduced to sharding in MongoDB since each shard should be comprised of a set of replicas unique to that shard, but we’ll get to that later. For now, I want to show you how easy it is to setup and use replica sets. The setup and initial ‘recovery’ of data to all replicas in the set is quite simple. In......
Continue Reading
MongoDB is a database. However, unlike conventional relational databases that are based on well defined schema and use SQL as the primary interface to manage the data, MongoDB instead uses document based storage. The storage uses a format known as BSON, which is a modified form of JSON. This makes the stored documents very flexible and lightweight. It also makes it easy to adjust what is contained in any document without any significant impact to the other documents in a collection (a collection in MongoDB is like a table in a relational database).......
Continue Reading
I put this presentation together for a local web developer meetup. The topic was MongoDB. MongoDB is a database, but unlike traditional relational databases which store data in well defined tables (schema), MongoDB stores data in JSON like documents (BSON). This provides a great deal of flexibility. After you get through this presentation, go have a look at my hands on introduction to MongoDB and my walk through of MongoDB backups using Replica Sets. Mongodb View more presentations from dwatrous....
Continue Reading
Today I was working on a small web application that will run on a corporate intranet. There was an existing LDAP server and many existing web apps use the authentication details cached in the browser (Basic Authentication) to identify a user and determine access levels. My application is written in PHP and I wanted to leverage this same mechanism to determine the current user and customize my application. Since my searches on Google didn’t pull up anything similar, I want to document what I did. I did explore the possibility of using PHP’s......
Continue Reading
Programming has evolved in very significant ways over the last few decades. There have been some significant strides forward in terms of language structure, reduced complexity and programmer productivity. One of these shifts was from procedural style programming using a language like C to object oriented programming using a language like C++. Most modern languages support objects, inheritance and other object oriented constructs. However, not all programmers use these the right way. As a matter of course, most introductory material in programming is procedural in style (a linear sequence of commands). It’s important......
Continue Reading
Recently I’ve been accessing a lot of network resources from Windows. This is pretty easy in principle, but can become complicated when there are various credentials available, and each set of credentials provides a different level of access. For example, a single share may have two different levels of access based on two unique usernames and their corresponding passwords. The first provides read only access, the second provides full write access. There may be times that it’s desirable to be connected read only and other cases where you require full write access. That’s......
Continue Reading
This week I’ve been developing an installer using NSIS to facilitate software deployment. Part of the installer requires me to install another application (MySQL in this case) and then run a configuration script against the newly installed software. Here’s the general procedure: Begin installer (for my software) Unpack MySQL installer (delivered as an MSI and packed into my installer) Silently install MySQL. I do this running the installer from the command line like this: msiexec /quiet /i mysql.msi Run the configuration script to install the Windows Service and create an ini file Continue......
Continue Reading