Local Production Environment Choices for WordPress: DesktopServer

Photo of Man at Computer

DesktopServer

This product is essentially a WAMP / MAMP application that has been extended to include some additional WordPress oriented functionality.

In its free version the customizations that stood out to me are

  • its inclusion of Xdebug,
  • support for Domain Name Mapping,
  • auto-creation of Apache Virtual Hosts,
  • and its auto-install of WP.

I was surprised to note that they list PHP 5.5 as being included but no mention of PHP 7.

When one moves up to their premium product ($100) one receives

  • a trace utility for PHP debugging (which one?),
  • LAN sharing for mobile testing,
  • a few plugins (bypass login, airplane mode, enhanced Coda2 preview, Adobe Dreamweaver),
  • “blueprints for automated WordPress configurations”,
  • the ability to direct deploy to a live server,
  • and the ability to import (from BackupBuddy, Duplicator, BackWP Up, BackUp WordPress, InfiniteWP, ManageWP), export, and archive sites.

I didn’t spend a ton of time with it, as at the time I was looking for something that was virtualized – e.g., using Vagrant or Docker.

I’d want the premium version –  but $100 is quite pricey, imho, especially when much of the product consists of open source components.

Don’t get me wrong, I understand this has had some significant time and effort put into it, but I’ll blog about a few other solutions available that are free and open source and you’ll see how they can stand shoulder to shoulder with DesktopServer.

Setting Up A Development Workstation

What Is This?

I wrote this primarily for myself – sometimes I don’t remember everything I do when setting up a workstation for development purposes…it may be of interest to others.

You’ll note that there are several areas missing from this arena – no build automation, task runners, etc. Maybe I’ll get around to adding them once I settle on some…but in the meantime, this still works for me.

[See bottom of this document for a list of revisions to this document]

Everybody Uses…

Version Control

  • Install Git for Windows for version control, ensure that Windows PATH is selected during the install so that you can use git from the command-line without needing to use Git’s special CLI.
  • I’d recommend also getting yourself a GUI to manage Git. Personally, I prefer that the editor I’m working in provide Git integration, but sometimes this isn’t available – in which case Atlassian’s SourceTree seems to do a good job.

Editor / IDE

IDE stands for Integrated Development Environment. This software offers numerous tools to expedite code development.

Editors on the other hand are much simpler, yet some people prefer them. We’ll look at a few of each of these.

Editors

  • NotePad++ – This is my base editor. The User Interface isn’t amazing, but it works beautifully. Especially awesome when it comes to working with large files.
  • Brackets – An open source project by Adobe, has a number of useful extensions. UI is attractive, I use this one over NotePad++ usually, except for note files (NotePad++ remembers the text you enter even if you don’t save the file) and large files.
  • Visual Studio Code – Another open source option by Microsoft.

IDEs

There are a huge number of options, Wikipedia has a fairly extensive list.

  • JetBrain’s phpStorm – JetBrain makes a number of different IDE’s and unfortunately isn’t the clearest on which IDE one should purchase. phpStorm handles most web-based languages, but lacks a clear emphasis on JavaScript that webStorm has (but which lacks some of the php integration).
    • See Gary Hockin’s Debugging VVV Vagrant Setup with PhpStorm for helpful instructions on integrating one’s VVV setup into PhpStorm for interpreter and xdebug purposes.
      • If you are wondering where your xdebug.so file lives: /usr/lib/php/20151012/xdebug.so
      • And Code Sniffer:
        /usr/local/bin/phpcs
      • And PHPUnit:
        /usr/local/src/composer/vendor/phpunit
      • And Composer:
        /usr/local/src/composer/vendor/
      • And www folders:
        /srv/www/
      • And PHP:
        /usr/bin/php/
  • Microsoft’s Visual Studio – An IDE with a long and venerable history, more recently integrating a number of Xamarin cross-development features into the IDE. The Community Edition is free.
    • WARNING: Depending upon options selected, this installs Hyper-V; if you are running another virtualization technology (Virtual Box) expect to experience BSoD errors. Unfortunately, I know this from personal experience and I am not alone.
    • Supports Visual C++, Visual F#, Python, C#/.NET, Android/iOS.
  • Google’s Android Studio – For the creation of Android apps.

Interacting with Databases

  • You’ll want something that provides a handy way for interacting with databases, in which case I recommend HeidiSQL.
  • If you don’t have a database server currently, you’ll need one. A couple options include MySQL, MariaDB, Microsoft SQL Server, and PostgreSQL.

Virtualization

Image Management

  • You’ll need something to create/edit images with, I recommend paint.net. Despite its connection to a very basic predecessor (Windows Paint), this software can work miracles.
  • JPEGmini – Usually I wouldn’t recommend using lossy means of reducing image data footprint, but JPEGmini manages to offer significant lossy compression without any visible deterioration to the image, unfortunately it only works on jpeg files.
  • FileOptimizer – Offers compression for numerous different file formats in a lossless manner.

File Transfer

  • FileZilla is a good FTP client.
  • However, FTP is a plain-text protocol, so I’d look at using something SSH based like SFTP. In this case I’d recommend WinSCP or built-in functionality in your IDE (phpStorm for example).

Other Tools

  • You’ll also want a copy of ConEmu or another command line interface (CLI). This software is so much better than the default Windows console.
  • A good archive/compression application will make life much easier, and 7-Zip is the perfect application.
  • Hosts File Editor – While it hasn’t been updated since 2011, I find this software extremely handy when I want to make edits to the hosts file. It offers a nice GUI front-end for the hosts file and enables a number of different nifty features not built into the file itself.

Revisions To Document

  • 10/18/16
    • Added location of www pages on Vagrant.
  •  10/16/16
    • Moved VVV under Vagrant.
    • Added link to Louie R.’s article on using Vagrant/VVV.
    • Changed Basics for Developers to Version Control.
    • Added link to VVV Wiki Article about Connecting to MySQL.
    • Added section on database servers.
    • Added link to article on integrating with PhpStorm, location of xdebug.so.
    • Added location of Code Sniffer; PHPUnit, Composer.

Why the Healthcare.gov fiasco SHOULD teach us to Open Source Government Application Development.

We Spent How Much?!

According to The Daily Beast the United States Government has spent $118 million to build Healthcare.gov and another $56 million in fixing it…and based on the fact that the site isn’t expected to be fully patched for some time yet I wouldn’t be surprised if the total cost in “fixing” exceeds that of building the system in the first place.

Image courtesy of OpenClipart.org and Iwan Gabovitch
Image courtesy of OpenClipart.org and Iwan Gabovitch

I’m not going to take a position on the Affordable Care Act (ACA) – I try to avoid speaking publicly on controversial issues…but I would like to suggest a lesson we can learn from the ACA that I don’t think will be (very) controversial across party lines – that the Government should utilize open source in the development of applications as a standard rule.

Now, I’m not particularly interested in arguing that every government project should be open source – I’ll be happy if 95-99% of them are. I understand that some people rightly or wrongly believe that using open source in sensitive areas could cause security risks. I’ll let Kevin Clough and perhaps Richard Stallman[1] argue that point.[2] But for the vast majority of projects (Healthcare.gov for example) I can see no reason why the development should not be open source and believe there would be significant advantages to such a course of action.

Lets take a look at the specific ways in which open source development could have reduced or eliminated the issues involved in the Healthcare.gov launch:

Transparency

The government (not just one department, but its entirety – e.g. the white house and congress) and the public could much more readily have seen that issues were arising, deadlines were slipping, etc.  and made necessary adjustments.

It is a constant problem within organizations that individuals at higher levels make decisions without the proper knowledge base upon which to make such decisions. This can result in unrealistic timelines and even if the timelines are realistic, if unexpected issues arise and there is slippage, there is a temptation to “gloss over” the setbacks and “hope” that the timeline can still be met.

This oftentimes results in extreme pressure on those actually working on the application as they are pressured to produce more, quicker – which, especially in the case of programming – is unwise. The more you pressure programmers the more likely they are to make mistakes, to take shortcuts and the more hours you demand of them the less productive they will become and, again, the number of bugs will grow exponentially.

Bug Fixes

Open Source software is oftentimes very stable and secure because of the number of eyes looking over the code. Further, individuals who are amateurs can make small contributions that allow the programmers to development on system architecture and bigger issues instead of stomping out bugs and making aesthetic improvements.

It would make sense for the Government to take a similar approach to Microsoft, Google, and Yahoo! on this front – each offers cash rewards for the discovery of issues. This is a relatively inexpensive way to get folks to pour in their energies – and individuals receive (for them) a significant compensation (hundreds to thousands of dollars – depending on the issue discovered).

Load Testing

The failure to properly load test the Healthcare.gov site is shocking. An open source project still needs robust methods of load testing performed by the core team – but it also benefits from other individuals and organizations implementing the application and discovering bottlenecks.

An open source, distributed team, also could have easily simulated the significant load that the site experienced upon launch – exposing the load issues early enough for remediation.

Code Reuse

When a project is open source the code can be reused by others for all sorts of purposes. The code to this project would certainly have applications in other government projects as well as the private sector. Reuse of code can significantly streamline development timeframes and even if someone in an entirely uses a portion of code for an entirely different project in a different industry – they will oftentimes contribute their version of the function (with enhancements/bug fixes) back to the original project (resulting in better, more flexible, secure, and robust code).

Cost

I really am just spitballing here – but I have a hard time believing that the development of an open source system to perform the Healthcare.gov functions would have cost anywhere near the costs expended thus far upon this closed source system. I’d guess that $10 million could have completed the project in a more robust and timely manner via open source.

Lesson Learned?

Please, let us take a lesson from this fiasco. We want more affordable healthcare – we can start by not wasting millions developing an application as a closed system which lacks robustness and stability.

I know some areas of the Government are already working with open source (and that is great) – but this needs to be a greater emphasis. Perhaps (I don’t know) there should even be some legislation that makes the (required) standard for new applications be open source and any applications which are desired as closed source systems should require review by a panel to determine if there is actual, substantial reasons for developing in a closed source system.

[Apparently I’m not the only one to think OSS could have made a huge difference. See this article by Christina Farr over at VentureBeat. Not directly related, but still interesting is Dylan Tweney’s article “Healthcare.gov costs show that feds have literally no idea how to build a big web site” also on VentureBeat. Another article comes from NBC News staff writer Gil Aegerter and can be found here.]

[11/4: Good article from Matt Asay entitled, “Sorry, Open Source Isn’t the Panacea for Healthcare.gov” on ReadWrite.]

  1. [1]Though Stallman would argue for free software rather than open source, but I leave that semantics argument, however important it may be, aside for the time being to focus on an area in which a relatively minor change in procedure (moving to open source development) could make a significant change in cost and efficiency.
  2. [2]There are some excellent arguments on how and why open source technology can be more secure than closed source technology. Specifically, the additional security in closed source systems usually isn’t b/c the systems are actually more secure but a function of “security by obscurity” – in other words, security holes exist, no one knows about them (including those who wrote the software). But I digress…

WordPress Plugins – A New Summation.

Introduction

WordPress
WordPress (Photo credit: Adriano Gasparri)

I like to categorize and organize. So what did I do? I reviewed the first one hundred pages of plugins on WordPress’ Plugin Directory ordered by most popular. From the first number of pages I included essentially every plugin (categorized), but as I moved through additional pages, I included only those which seemed to be interesting, unique, or well-known in some way. Here is the result. I hope you find it useful as you determine what plugins you will install in your WordPress instance.

Those plugins which I use regularly I’ve bolded. Those which I have used regularly in the past I’ve italicized.

Anti-Spam

Forms

SEO

Social Media Sharing

  • Social Media Widget
  • Shareaholic[2]
  • Facebook
  • WP to Twitter[3]
  • Really Simple Facebook Twitter Share Buttons
  • AddThis[4]
  • NextScripts
  • Add Link to Facebook
  • WP Socializer
  • ShareThis[5]
  • Facebook  Like Button Plugin
  • Facebook Comments
  • Sociable
  • Social
  • Floating Social Media Icon
  • WP-Email

Multiple

  • Jetpack by WordPress.com

Import/Export

  • WordPress Importer

Images

  • NextGen Gallery (see also NextGEN Gallery Optimizer)
  • Lightbox Plus
  • WP Photo Album Plus
  • Gallery
  • Lightbox Gallery
  • jQuery Colorbox
  • Grand FIAGallery
  • Image Widget
  • WOW Slider
  • Easing Slider
  • Slideshow Gallery

Audio/Video

  • Viper’s Video Quicktags
  • Smart YouTube Pro
  • Blubrry PowerPress Podcasting Plugin
  • JW Player for WordPress
  • Embed Plus
  • MediaElement.js
  • WordPress Video Plugin
  • Video Embed & Thumbnail Generator
  • S0undCloud Shortcode

Administrative

  • Broken Link Checker
  • Advanced Custom Fields
  • All in One Favicon
  • WP Maintenance Mode
  • Regenerate Thumbnails
  • AdMinimize
  • Enable Media Replace
  • WP-DBManager
  • Postie
  • ManageWP Worker
  • WP-Optimize
  • Duplicator
  • Thank Me Later
  • CloudFlare
  • Duplicate Posts
  • DB Toolkit
  • Admin Menu Editor
  • OptionTree
  • WP Robots Txt
  • Use Google Libraries
  • P3 (Plugin Performance Profiler)
  • Add From Server
  • InfiniteWP Client
  • Front-end Editor
  • Plugin Organizer
  • Kontrol Developer Kit
  • Configure SMTP
  • One Click Close Comments
  • Custom Post Type UI
  • Editorial Calendar
  • Peter’s Login Redirect
  • WordPress MU Domain Mapping
  • SB Welcome Email Editor
  • Peter’s Collaboration E-mails
  • OpenHook
  • Bulk Delete
  • underConstruction
  • Co-Authors Plus
  • Simple URLs
  • One-Click Child Theme
  • wp-FileManager
  • After the Deadline
  • Peter’s Post Notes
  • User Switching
  • Advanced Excerpt
  • Ultimate Coming Soon Page
  • Redirection
  • WP Mail SMTP

Statistics

  • Google Analytics for WordPress[6]
  • Google Analytics
  • Google Analyticator
  • WP-SlimStat
  • WP-PostViews

WYSIWYG Editor

  • Ultimate TinyMCE
  • TinyMCE Advanced
  • Black Studio TinyMCE Widget
  • CKEditor for WordPress

Performance

Add-On Functionality

  • BuddyPress
  • bbPress
  • WP-Ecommerce
  • WooCommerce
  • The Events Calendar
  • Ready! eCommerce Shopping Cart
  • Events Manager
  • Polldaddy Polls & Ratings
  • WP-Polls
  • All-in-One Event Calendar
  • eShop
  • Connections
  • Link Library
  • Another WordPress Classifieds Plugin
  • Ajax Event Calendar
  • Calendar
  • JigoShop
  • Mingle Forum
  • WordPress Poll
  • easyReservations
  • GigPress
  • WP-CRM
  • CataBlog
  • WP-Invoice
  • Participants Database
  • Q and A
  • Business Directory Plugin
  • Booking Calendar
  • wpsc Support Tickets
  • ClickDesk Live Support
  • Quick Chat
  • Event Organiser
  • Seriously Simple Podcasting
  • RSVP Plugin
  • ComicEASEL
  • Webcomic
  • Yet Another Photoblog
  • WordPress Simple PayPal Shopping Cart
  • WP Symposium
  • Job Manager
  • WP-Property
  • Gravity Forms Directory

Security

  • Wordfence Security
  • Bulletproof Security
  • Better WP Security
  • AntiVirus
  • Timthumb Vulnerability Scanner
  • Login LockDown
  • WordPress HTTPS
  • No Right Click Images Plugin

Customize Look & Feel

  • WP-PageNavi
  • WordPress Related Posts
  • Display Widgets
  • Yet Another Related Posts Plugin
  • List Category Posts
  • Widget Logic
  • WP Google Fonts
  • Options Framework
  • Breadcrumb NavXT
  • WP-PostRatings
  • GD Star Rating
  • Custom Meta Widget
  • Theme My Login
  • Special Recent Posts
  • Crayon Syntax Highlighter
  • MaxButtons
  • Theme-Check
  • Infinite-Scroll
  • WP No Category Base
  • Post Layout
  • Background Manager
  • Gantry Template Framework
  • Dynamic “To Top” Plugin
  • WordPress Post Tabs
  • Collapse-O-Matic
  • WP-Paginate

Membership/Roles

  • s2Member Framework
  • User Role Editor
  • Role Scoper
  • Members
  • Advanced Access Manager
  • Simple Facebook Connect
  • Google Authenticator
  • Social Login
  • WordPress Social Login
  • Social Login & Social Sharing by JanRain
  • User Access Manager
  • WP-Members

Comments

  • Disqus Comment System
  • CommentLuv[7]
  • Disable Comments
  • WP Ajax Edit Comments
  • IntenseDebate Comments
  • LiveFyre Realtime Comments

Monetization

  • AdRotate
  • QuickAdsense
  • WP125
  • Adsense Insert
  • AdSense Manager
  • Affiliates
  • Ad Injection
  • Easy Adsense
  • Adsense Extreme
  • Ad Squares Widget
  • Ad Codes Widget
  • Ads Manager WP/BB
  • Amazon Product in a Post Plugin
  • Amazon Link
  • Simple Ads Manager
  • Google AdSense Plugin
  • Easy Ads
  • Paid Memberships Pro
  • AdSense Now!
  • Easy Digital Downloads
  • AdSense
  • PayPal Donations
  • WP Auto Affiliate Links
  • Adminer
  • WP-Insert

Backup

  • UpDraft Plus Backup
  • Online Backup for WordPress
  • BackWPup
  • WordPress Backup to Dropbox
  • BackUpWordPress
  • WP-DB-Backup
  • Simple Backup

Page Management

  • CMS Tree Page View
  • Post Types Order
  • Quick Page/Post Redirect Plugin
  • Exclude Pages
  • Related Posts
  • WordPress Popular Posts
  • Google Doc Embedder
  • Advanced Page Manager
  • Simple Page Ordering
  • My Page Order
  • 404-to-start

Mobile

  • UppSite
  • WordPress Mobile Pack

Newsletters

  • Wysija Newsletters
  • Constant Contact for WordPress
  • Subscribe2[8]
  • MailChimp List Subscribe Form
  • Newsletter
  • Newsletter Sign-Up

Downloads

  • WordPress Download Monitor
  • WordPress Download Manager
  • WP-Filebase Download Manager

Other

  • MapPress Easy Google Maps
  • Comprehensive Google Map Plugin
  • WP Google Maps
  • Leaflet Maps Marker
  • Print Friendly and PDF Button
  • WP-Print
  • Pretty Link Lite
  • Meteor Slides
  • WPtouch
  • Page Links To
  • Social Slider
  • FeedWordPress
  • Types
  • Relevanssi
  • Advanced Code Editor
  • White Label CMS
  • Google Calendar Events
  • Groups
  • Portfolio
  • Liveblog
  • Strictly Auto Tags
  • Magic Fields 2
  • More Fields
  • Custom Field Template

Multilingual

  • qTranslate
  • Transposh WordPress Translation

PHP

  • Exec-PHP
  • PHP Code Widget
  • Shortcode Exec PHP
  • Allow PHP in Posts and Pages

Post Enrichment

Gamification

  • CubePoints
  • Achievements for WordPress

 Twitter

  • Tweetily
  • Tweetable
  • Twitter Tools
  • Xhanch – My Twitter
  • Twitter Widget Pro

 Available Elsewhere

  • CiviCRM
  • Simple:Press
  1. [1]I used this before Jetpack came along and offered bundled Contact Forms.
  2. [2]I used this before Jetpack provided social sharing.
  3. [3]I used this before Jetpack provided integrating sharing to Facebook and Twitter.
  4. [4]I had used this in the past, but had replaced it with ShareThis, etc.
  5. [5]I used this before Jetpack provided integrated sharing.
  6. [6]I still use this on occasion, but WordPress stats included in Jetpack are usually sufficient for me.
  7. [7]I’m not sure if I will continue using this plugin.
  8. [8]This has been replaced by Jetpack’s functionality.

Learning and Brushing Up On Web Programming.

December 2008 Browser Usage
December 2008 Browser Usage (Photo credit: Elliott P)

There are a bazillion options out there for learning web programming. One I recommend (and still use) is W3Schools. No, you won’t learn everything by using

W3Schools, but you can learn a lot and its more systematic than googling for articles piecemeal as you go along. I also find W3Schools a useful reference tool when I need to refresh my mind on some technique or language I haven’t used in a while.

They have tutorials available on HTML, CSS, JavaScript, AJAX, SQL, PHP, ASP.NET Web Forms, XML, and a bunch of other technologies I didn’t mention. If you are brand new to web programming start with the HTML tutorials then move on to CSS followed by JavaScript. It is also likely that you’ll need to do database work at some point, so learn SQL and then you can choose what sort of language you want to program interactive applications in – two of the most popular are ASP.NET and PHP.

Automatic Pill Dispenser

Update 3/13/13:

Medicine Drug Pills on Plate
Medicine Drug Pills on Plate (Photo credit: epSos.de)

It appears this solution is already well under way by several capable companies. You can read about eight companies in Jonah Comstock’s article over at MobiHealthNews. The last two, by e-Pill and Phillips are not particularly impressive or appealing to me, being based on older technology, but the rest appear quite interesting.

  • Vitality GlowCaps – Being sold out of CVS for $60. First a light, then music, and finally a phone call notify the individual to take their medication. This is a reasonably priced product, though eventually I’d like to see every pill bottle come with this technology built-in and prices drop for separately purchased bottles come down to $5-$10/ea. This apparently requires a base station and also a monthly AT&T service charge.
  • AdhereTech Smart Pill Bottle.
  • Abiogenix’s uBox.
  • MedMinder – This product is impressive and available. It appears that you do not purchase the device outright but “rent” it. The cost is between $40-$60/mo., which IMHO is a bit expensive, I’d like to see maybe $10/mo., but hey, for those who are taking a lot of pills and especially for the elderly with memory problems, this is probably a worthwhile investment.
  • MedSignal’s Pill Case/Gateway – Currently pending FDA approval, only available for research purposes.

If I was the Obama administration, this is one area I’d be looking to foster growth with the expectation that it can significantly reduce healthcare costs. According to Abiogenix’s site non-adherence costs over $300 billion in wasted spending in the United States each year. How about cutting that down by 80-90%?

The Problem

I struggle with overpowering daytime sleepiness. This may be compounded by the fact I take Adderall XR for Attention Deficit Disorder (ADD).[1] I recently went to my psychiatrist and discussed this issue with him[2] and he gave me a supplemental Adderall prescription. This is not an uncommon method of dealing with this increased sleepiness once the medication wears off. I take the supplemental pill later in the day when the first one runs out.[3] In addition to all this, I also take Prozac (fluoxetine) – 60 mg (three 20 mg tablets)[4]. I filled my prescriptions and went home.

The next morning I went into my usual auto-pilot mode – taking medications and vitamins, brushing teeth, showering, deodorant and so on. It wasn’t until I had taken my medications that I realized I had accidentally taken three 20 mg Adderall tablets instead of three 20 mg Prozac tablets. Thankfully, this was not a critical overdose for me…but had it been another medication, it could have been.

But my personal mixup one morning is fairly simple compared to those faced by many others. I’ve worked a bit with the elderly, including those who are suffering from various forms of progressive brain degradation. These individuals find themselves in a dangerous place when they cannot remember during the day whether they have already taken their medications for the day or not. Many of them don’t want to move into assisted living homes just yet, and apart from this sort of minute detail are still capable of living independently…but an inability to remember when medications were last taken can quickly remove this independence.

Lets throw a few more problem areas into consideration. For example, I take vitamin supplements in addition to my medications – Vitamin B complex, Vitamin D, Daily MultiVitamin, Omega-3, and so on. It gets old very quick popping open eight or so different pill containers to get these pills out each and every day (and I know that many take many times more pills each day than I do). Some days I will just my medications and maybe one vitamin supplement and dash off to work…

Then there is the issue of regularity, especially for those with mental illness or who suffer side effects from taking a medication. It is always tempting to skip one day – a few – a week or two, a month. The efficacy of most medications is greatly reduced when taken in this haphazard way and for individuals with mental illness oftentimes results in a significant relapse.

And these are just a few of the challenges facing those who take medication and/or supplements on a regular basis. Sure, they are surmountable by willpower and self-discipline…but when technology can make our lives easier I prefer to spend my willpower and self-discipline on more substantive areas.

Proposed Solution

We’ll talk more about the complexity and cost of this solution later, but I want to note at this point that I believe this could be an extremely affordable solution. In early stages I wouldn’t want to see its cost exceed that of the Raspberry Pi computer at $35…and with wide utilization I would see this being a commodity product that would replace traditional pill containers at no-cost to the consumer.

If you know me, you know I’m not an artist, but here is my attempt to depict visually what the solution would look like…I’ll step through it as we go on…

Figure 1. Automatic Pill Dispenser

The automatic pill dispenser is expandable. The above figure represents a dispenser with six individual dispenser units. If one had only one medication, one would need only one dispenser. Each additional dispenser can simply be connected (think legos) to the next. Dispensers could vary in size – but the goal is that they be as small as possible, allowing for a good number of them to be connected together without consuming significant space.

  • Each dispenser would have a small display which would show the number of pills remaining in that dispenser.
  • Below that another small display showing the quantity an individual programmed the dispenser to give each day.
  • The Give button would dispense the above desired number of pills – if they had not already been dispensed for the day.
  • Holding down the Give button for ten seconds would force it to release an additional pill (e.g. if for some reason the system malfunctioned and dropped only one pill when it should drop two, this would allow one to “force” the system to drop another).
  • The + and – keys would be used to change both the number of pills in the unit and the quantity to be given each day. You’d hold down the plus key until one of the displays above began blinking. Whichever display was blinking indicates the display you would be changing for the value of.

Ideally, eventually pill boxes would no longer be distributed – each pill box would be one of these dispensers. It would come pre-programmed with the correct number of pills and dosage. Until such a time it doesn’t make sense to have the pill dispensers be disposed after each use – so they would be refillable. One would dump the new medications when received into the dispenser and reset the dosage and number of pills.

A Little More to It…

This in and of itself would be extremely helpful…but I’d like to take it a little further. Did anyone wonder why the units lock together? Besides making it orderly there is another reason. Each unit would have its own “intelligence” (that powers the display, etc.), but one would also have a lock-on extra unit that would contain a central brain. Really this brain would be very weak (and inexpensive). It would consist of a WiFi chip that would relay information from the pill dispensers to a central hosted server transparently.

Individuals could open up their web browser, type in the website (say davesamazingpilldispenser.com) and login using a username and password they select. Once inside they would be able to (a) set values from a web console rather than on each dispenser (this would be much quicker for those who have lots of pills), (b) determine accountability partners who would receive email alerts when the dispensers were not decrementing at the expected rate (e.g. someone stops taking their pills for x number of days perhaps the doctor, spouse, or family friend is notified via email or text message), (c) view (and share if desired) charts indicating their history of medication use (this would help, for example, when a medication needs to be taken 3x a day…the dispenser would mark each time the pill was taken and this could be analyzed by the individual or a doctor for issues).

Now, all of this can be done fairly simply and initially. Further on one might add the ability for the pill dispenser to automatically order refills of medications/vitamins via integration with online pharmacies / amazon for vitamins.

Talking About Price

The dispenser boxes are using fairly simple circuits and mechanisms. I don’t see any reason why these could not be manufactured very cheaply. I’ll work on putting together some figures – but my goal would be that each dispenser would not cost more than $5 and the WiFi component $5-$10. Thus, if one takes six medications and wants WiFi one might make an investment of $35-$40. Factor this out over a year and it is an expense I think worthwhile…and there is no reason the dispensers could not last for multiple years – especially if the web console is used instead of the buttons (which, over time, may wear out).

What It Won’t Do

There are a few things the initial pill dispenser wouldn’t do – though I think these features could be added over time. The biggest of these is that it won’t keep people from abusing it. That is – someone will be able to break open the pill dispenser, tell it to give more than they should be taking, or have the dispenser release pills and then throw them away. I believe the vast majority of issues with medication adherence are related more to accidents and forgetfulness than to deceit or other maliciousness. Creating safety mechanisms in the initial device would raise the cost significantly – and unnecessarily – for the vast majority of users.

Doesn’t Somebody Already Do This?

There are a few companies I found who build automatic pill dispensers. These include MedReady and ePill. However, I was disappointed in these units as they all lacked various features…and most significantly, they are quite expensive (anywhere from $100-$900). I think this industry is ready for disruption.

What Now?

I’m not sure. This is an idea I think is simple enough to be accomplished. I guess I’ll put out a call to see if anyone is interested. Maybe you are? I’d love to hear thoughts and contributions from the MAKE and Kickstarter communities and from those who would be interested in using/purchasing such a product. I see the components necessary to undertake this project and build a prototype as follows:

  • Manufacturing: We’d need to manufacturer the automatic pill dispenser. This would mainly be a simple pill box but with the addition of a mechanism to release pills.
  • Circuitry: We’d need to develop the circuitry to operate the machinery, interlock with other dispensers, and allow changes to the values stored by the dispenser.
  • WiFi: We’d need to create the wifi unit.
  • Web Console: Data would need to be parsed and displayed via a secure web portal.

If you work or are a hobbyist in any of these arenas, I’d be interested in hearing from you. The web console I could fairly easily take care of myself…but I do not have significant experience with building circuitry or manufacturing. I do have a good bit of programming experience, but not much in the area of device automation…

Money?

We can discuss how any revenues – should they arise – would be distributed…but at this juncture I am largely interested in creating a prototype. I’m willing to donate time and effort to the cause and are looking for others interested in doing so…but there isn’t any money here to start with, so no need to contact if you want to be paid up-front for your work…maybe someday there is a hope you might be…but, its just that a hope – for you and me.

If it comes down to it I’d rather see it implemented with no profit margin than derive profits with only limited distribution.

Thanks

Diagram.ly deserves a big thanks for their sweet and free online diagramming software I used to create my artistically challenged 2D diagram above.

  1. [1]My daytime sleepiness predates taking medication for ADD, so there isn’t a causative link. The Adderall does help me stay awake and focused, but when it  flushes out of my system it may cause an additional “crash” in addition to the regular sleepiness struggle.
  2. [2]Yes, I see a psychiatrist on a regular basis and have for a number of years. I feel a bit embarrassed about it – which is funny, as I talk about my mental health issues all the time…I guess saying one sees a psychiatrist makes the problems more “real” and “severe.” But I committed to reducing the stigma surrounding mental health issues, so I’ll leave this in the article.
  3. [3]For those who would suggest that I may have a sleep disorder – e.g. sleep apnea or etc., I agree…though oftentimes the treatment for these disorders is similar to ADD. I have undergone a sleep study at Abington Hospital and am looking forward to an upcoming discussion regarding the results of that study with my primary physician.
  4. [4]Yes, that does seem high…it is. Depression generally responds to significantly lower doses, but Obsessive Compulsive Disorder (OCD) does not and requires higher doses before it provides substantive relief.

WordPress Adsense Plugins – An Overview.

I want to optimize my income from Google Adsense on my various WordPress based sites. How can I accomplish this most effectively? By using a WordPress plugin for Adsense of course! So, I went to WordPress’ plugin section and compiled all the most popular Adsense plugins.[1] I’ve included the list below as well as my commentary on the various plugins.

Plugin: Version: Updated: Rating: Downloads:
WPCustomAds 0.8.8 2011-7-5 5 Star * 1 644
Ad Inserter 1.1.2 2011-6-5 4.5 Star * 12 11,400
Adsense Insert 1.4 2011-11-23 4 Star * 14 9,197
Ad Squares Widget[2] 110709 2011-7-9 5 Star * 14 62,927
Adsense Made Easy 0.5.1 2011-9-20 5 Star * 4 10,562
Quick Adsense 1.9 2011-6-20 4 Star * 69 201,804
Ad Injection 1.2.0.7 2011-12-4 4 Star * 34 95,077
Easy Adsense Lite 5.07 2011-11-3 4 Star * 6 8,126
Adsense Manager 4.02 2011-9-23 3 Star * 96 334,944
Best Google Adsense 1.1.4 2011-11-22 3.5 Star * 13 29,333
Awesome Ads 1.0.4 2011-5-27 4 Star * 14 17,448
Awesome Google Adsense 1.0.4 2011-11-22 4 Star * 13 21,749
Simple Ads Manager 1.0.35 2011-7-18 3.5 Star * 24 25,610
Google Adsense Plugin 0.53 2011-11-23 5 Star * 2 621
Adsense Now! Lite 3.04 2011-11-12 4 Star * 5 3,160
Ads Manager WP/BB 1.5.2 2011-8-17 5 Star * 2 2,582
WP Ads Auto Post 1.2 2011-2-18 5 Star * 1 3,979
WP Random Ads 1.0 2011-9-10 5 Star * 3 740

As you can see there are a large number of options – and this is just a partial list. Lets take a closer look at a few of the best candidates:

  • Quick Adsense – This plugin has over 200,000 downloads and a 4 Star average review rating from sixty-nine reviews. It offers straightforward customization of where ads will be placed on a page but also requires you to generate individual code bits from Adsense for each slot.
  • Adsense Manager – While downloaded over 330,000 times it only has an average review of 3 Stars from ninety-six reviews. It doesn’t appear to be under ongoing development – although the author did release an update to enable the plugin to work with the latest version of WordPress.
  • Ad Injection – The third most frequently downloaded adsense plugin with 95,000+ downloads and holding 4 Stars with thirty-four reviews. Appears powerful with a lot of customization options, but also a fairly intuitive user interface.
    • This is the plugin that is my most preferred at the moment.
  1. [1]I think. If I missed one, let me know.
  2. [2]See also Ad Codes widget.

A Social Search Engine Proposal.

Overview:

Nutch robots
Image via Wikipedia

IMHO, the current state of search is depressing. This is not a new realization for me. It is seven or eight years ago now that I first imagined a social search engine which would not rely solely on algorithms to determine the relative importance of search results but that would consider both machine and end-user feedback. This was in the early days of Nutch and I began researching the possibility of utilizing Nutch as the underlying core engine for such an endeavor, I rounded up some small-term investment capital, and so on. Unfortunately, this was also at the high peak of my struggle with Obsessive Compulsive Disorder (OCD) and my efforts eventually fell through.

Over the years I have watched as promising engine after promising engine has come along and in their turn failed to take the lead or even maintain their momentum. Years have passed and at each step of the way I have said, “It must just be around the corner…This is ages in technology time.” Even Google came out with SearchWiki, while not a perfect implementation it was a huge step in the right direction. For the last year or two I’ve been using Zakta and I’ve spent time on almost every other social search engine currently (or previously) available – yet I find that in the long-run they have all failed me.

So here I am so many years later longing for just such an engine. I’ve written on this blog about the topic before, but I will write again. In this post I will specifically propose the formation of an endeavor to create a social search engine, and I hope it will foster some interest in the community. I am not ready nor able to undertake such an endeavor myself – but I am interested in being part of such an endeavor.

Open Source: Ensuring Continuity

It is worth noting at this juncture that I’d intend for this project to be open source. Too many times I have lost the social search data I have accumulated because a specific engine has folded. My hope would be that the resultant project would be open source with commercial implementations and would provide a significant amount of data portability between engines, in case one engine should fold. We’ll talk more about the open source and portability aspects of the project later in this proposal.

What is Social Search?

Before we jump into a discussion about how to build a social search engine it is necessary first to define what is meant by social search. Unfortunately the term social search is used to delineate several different concepts which are very different from one another.

There are the real-time search engines which focus on aggregating information from various social media networks – and sometimes prioritizing links based on their popularity within a network. For example (also defunct) Topsy, the no-longer-real-time OneRiot, and the now-defunct Scoopler.

There are the engines which are focused on finding humans – e.g. allowing one to garner information about a person. Wink eventually became this sort of engine, Spokeo would be another example. They are essentially white pages on steroids.

Finally there is what I mean by social search – and I would use another term but there is no other term I am aware of which is so widely used to delineate this type of engine (and I want to ensure the widest possible audience). It is sometimes called a “human-powered search engine”[1] Google and Wikimedia may have come closest by terming it a “Wiki” (SearchWiki and Wikia), but it seems to me that there is a need for an entirely new term that better and more precisely defines the idea…perhaps one result of this proposal and its aftermath will be just such a term.[2]

Core Parameters

In this section I will delineate what I believe are the core required features for a social search engine. An engine which included these features I believe would be a 1.0 release. There is certainly room for numerous improvements, but this would define a baseline by which to measure the proposal’s progress. I am not infallible, and I am sure there are aspects of the baseline which should be edited, removed, or replaced – I am open to suggestions.

  • Web Crawler – The engine must include a robust web crawler which can index the web, not just a subset of sites (e.g. Nutch).
  • Interpretive Ability – The engine must be able to interpret a wide variety of file formats, minimizing the invisible web (e.g. Tika).
  • Engine – The engine must be able to quickly query the aggregated web index and return results in an efficient manner (e.g. Nutch).
  • Search Interface – The engine must include a powerful search interface for quickly and accurately returning relevant results (e.g. Solr).
  • Scalability – The engine must be scalable to sustain worldwide utilization (e.g. Hadoop).
  • Algorithms – In addition to the standard automated algorithms for page relevance the system must integrate human-based feedback including:
    • Positive and negative votes on a per page basis.
    • The ability to add and remove pages from query results.
    • Influence of votes based on a calculation of user trustworthiness (merit).
    • Promotion of results by administrative users.
  • Custom Results – The results must be customized for the user. While the aggregate influence of users affects the results, the individual user is also able to customize results. One should see a search page which reflects the results one has chosen and not the results one has removed.
    • Ability to annotate individual entries.
  • Portability – The engine should define a standard format for user data which can be exported and imported between engines. This should include customized query results, annotations, votes, removed and added pages, etc. This will be available to the user for export/import at any time. While additional data may be maintained by individual engines, the basic customizations should be portable.

I’m sure I’m missing some essentials – please share with me whatever essentials I have forgotten that come to your mind.

Starting from Zero?

It is not necessary for this project to begin from nothing, significant portions of the endeavor have already been undertaken toward creating an open source search engine – largely by Apache’s Nutch project. The available code should be utilized and with customization could integrate social search features. This would allow some of the most significant aspects of the project to be offloaded to already existing projects.

Additionally, it might be hoped that companies and individuals who have previously created endeavors in this direction would open source their code. For example, Wikia was built on Nutch and the code – including the distributed crawler (GRUB) and UI (Wikia) was released into the open source world.[3]

What We Need

Now the question becomes, “What do we need?” and more importantly, “Whom do we need?”

First off, we could use donated hosting. Perhaps one of the larger cloud-based hosting companies would consider offering us space for a period of time? I’m thinking here of someone like Rackspace, Amazon Web Services, or GoGrid.

Secondly, we’d need developers. I’m not a Java developer…though I’ve downloaded the code and am preparing to jump in. I also don’t have a ton of time – so depending on me to get the development done…well, it could take a while.

Thirdly, we’d need content curators…and I think this is key (and also one of the areas I love the most). We’d need people to edit the content and make the results awesome. These individuals would be “power users” whose influence on results would be more significant than the new user. With time individuals could increase their reputation, but this would seed us with a trusted core of individuals[4] who would ensure that the results returned would be high quality right from the get-go for new users[5]

Finally, we’d need some designers. I’m all for simplicity in search – but goodness knows most of us developers have very limited design abilities and an aesthetic touch here and there would be a huge boon to the endeavor.

Next Steps

At this juncture its all about gathering interest. Finding projects that have already begun the process, looking for old hidden open source code that may be of use, etc. Leave a comment if you’d like to be part of the discussion.

Appendixes

Current Open Source Search Engines

  • DataparkSearch – GNU GPL, diverged from mnGoSearch in 2003, coded in C and CGI.
  • Egothor – Open source, written in Java, currently under a complete from scratch rewrite for version 3.
  • Grubng – Open source, distributed crawler..
  • BeeSeek – Open source, P2P, focuses on user anonymity.
  • Yioop! (SearchQuarry) – GNU GPLv3, documentation is very informative.
  • Heritrix – Open source, by Archive.org for their web archives.
  • Seeks Project – AGPLv3, P2P, fairly impressive project which attempts to take social search into consideration.
  • OpenWebSpider – Open source, written in .NET, appears to be abandoned.
  • Ex-Crawler – Open source, Java, impressive, last updated released 2010.
  • Jumper Search – Open source, social search, website appears to be down, currently linking to SF.
  • Open Search Server – Open source.
  1. [1]Or a human search engine, which becomes sadly entangled with engines meant for finding humans such as referenced previously.
  2. [2]A few other terms which might be appropriate are collaborative search engine, though this would have to be prefaced with “active” to distinguish it from passive user feedback aggregation (e.g. how long a user stayed at a site); curation search engine (giving the idea of content curation, but this is sometimes thought of in terms of archival); or crowd-sourced search engine (though this centers too much on democracy, whereas such engines would probably benefit from a meritocracy).
  3. [3]Unfortunately, I have been unable to find a copy of the Wikia UI code.
  4. [4]Taking a page from early Ask Jeeves history.
  5. [5]Obviously not necessarily in the long tail, but in the general topics.

A Bitcoin Primer.

Update 7/12/14: A great article over at Borro explaining what Bitcoin is, how it works, etc. Highly recommend reading it. This article still has more links to jump off of, but the Borro article is really, illustrated, and concise.

Bitcoin has become all the rage in recent days. At first it was just a niche news item, then it began to virally spread across geeky news sites and blogs – now it is taking to the mainstream. There is a plethora of articles and sites related to Bitcoin available and I don’t want to add to this mess – so I’ll try and keep this simple and provide a few brief pointers and then a summary of some of the best resources currently available on the topic.

Note: I recommend also reading Brennon Slattery’s article on PCWorld, which discusses attempts already to shutdown Bitcoin by lawmakers (due to use in the facilitation of drug sales) and article by Dan Goodin for The Register about a heist of $500,000 worth of Bitcoins, highlighting the potential for theft of the new currency.

Introduction to Bitcoin:

Other Interesting Bitcoin Articles:

Bitcoin Related Sites:

  • Bitcoin P2P Virtual Currency – The official website for Bitcoin, you can download the P2P software here.
  • ClearCoin – serves as a form of escrow serve for Bitcoin transactions.
  • Bitcoin Venture Capital (BTCVC) – A venture capital firm focused solely on supporting startups that utilize bitcoin.
  • Bitcoin Mining Pool (gbyte) – Allows one to work with others to “mine” bitcoins.
  • Bitcoin Plus – Allows you to within minutes get started generating bitcoins.
  • Bitcoin Bonus – A rewards site that offers bitcoins in exchange.
  • Bitcoin Classifieds – Get stuff off a classifieds using bitcoins, or sell stuff for bitcoins.
  • Bitcoin Watch – Allows one to see how much bitcoins are selling for at various exchanges.
  • Bitcoin Miner – By a professional bitcoin miner, blogging about the experience.
  • BitcoinMe – A friendly site that attempts to introduce folks to the bitcoin economy.
  • We Use Coins – An introductory site to the bitcoin economy similar to BitcoinMe.
  • Bitcoins.lc – Another mining pool similar to gbyte for mining bitcoins.
  • Bitcoin Faucet – Gives you 0.01 free bitcoins.
  • Bitcoin Charts – Provides charts and other analytical informationa bout the bitcoin network and exchanges.

My Thoughts:

I recently posted about the need for a non-profit banking system. I’m interested in Bitcoin b/c of it (or something similar) to provide a “non-profit” banking system of sorts. I think Bitcoin has potential and as I have ridden other potential moneymakers (e.g. AllAdvantage) in days far past, I figure I might as well take this ride as well, and see where it ends. From AllAdvantage, I ended up with maybe $200. That said:

  • Bitcoin’s complexity is off-putting. Unless it is significantly simplified it will not achieve mass appeal.
  • Bitcoin has a reputation problem. It can easily facilitate illegal activities, just as many other technologies can, and it is likely to face legal challenges in the upcoming months.
  • Bitcoin has a security problem. At some other juncture I’ll talk about the state of information security in general, but lets just say it isn’t pretty. So having one’s entire wallet stored on your computer…well, it’s risky!
  • Still, Bitcoin could be the start of something useful…a currency that cuts out lays of fat from the economy that result in unnecessary fees and complexity.

FreeBasic (Programming)

Commodore 64 computer (1982)
Image via Wikipedia

My first experiences programming where on a Commodore 64 and an Apple II+. In both cases there was no separation of the end user interface and the development interface…you could just start entering code at the command line and it would begin building. Things have come a long ways since then – this is good and bad. It is no longer quite as easy or essential to get involved in programming, on the other hand one can much more rapidly build complex applications.

If you ever long for the throw back days you may think of QBasic, which became ubiquitous due to its inclusion with Microsoft DOS…but all these concepts are so from yesteryear – in computer terms they are almost millennia away.

So what if you want to do some simple programming these days with a BASIC feel to it? One good option is FreeBasic. FreeBasic was built to be largely backwards compatible with Microsoft’s QBasic and thus can run many old QBasic programs with only minimal modifications, but FreeBasic has also gone far beyond this and delivers a fairly powerful development environment.

If you do decide to use FreeBasic I recommend downloading a free copy of FbEdit as well. See development usually consists of at least two components – the compiler and the editor. A compiler is the program that takes your code and turns it into an executable program while an editor is what you write the code in. Granted, you can write your code in any plain text editor – but trust me, FbEdit will be a big help.

The FreeBasic forums have a very friendly and active community that will help you along through the learning process. Just take some time to explore the entire site and community, it is pretty impressive.

All this said, FreeBasic isn’t the language I primarily use for development – or the language I would recommend. In general, I’m a Microsoft .NET guy – mainly ASP.NET and VB.NET. Microsoft offers free copies of the lite versions of these applications as well, and while I say kudos to the FreeBasic team and hope they keep up the great work, if you are looking for a job in technology, you might be better off starting with a Microsoft .NET technology. Actually, probably C#.NET instead of VB.NET as I do (old habits die hard).