I’m retiring…

…from the rat race at least ūüėȬ† I’m extremely excited to announce that effective 11/09/2018 I will be a full time employee of Threddies!¬† Many of you are likely already aware that I’ve been working part time at my day job since April in preparation for this and I know, based on the questions that I’ve received, that it will save a lot of time for everyone if I document the basics .

A brief history lesson

We’ve been building Threddies for well over a decade and have learned a lot along the way.¬† The tech stack has evolved and been replaced several times.¬† We’ve overcome many of the difficulties of building a new technology based small business in the Upper Bucks and Montgomery County area of Pennsylvania.¬† We’ve made mistakes and come up with better ways of doing things, but in that time, we’ve grown what was once a tiny side project into a serious e-commerce and brick and mortar business.¬† ¬†In doing this, we’ve realized that we have a lot to offer others who want to do something similar in our region.

Threddies has never really been a major focus of mine since I’ve always had a full time ‘day’ job and a freelance consulting business throughout most of its lifetime.¬† I’ve been working on a transition plan for the last few months and laying out a plan for how to grow Threddies while also continuing to stay current with the latest advancements in technology.

So what exactly will you be doing?

As of COB on 11/09, I will manage the day to day operations of Threddies.¬† My consulting business will still exist, but will have a major change of focus.¬† We will be taking on fewer ‘implementation’ based contracts and instead focus on more ‘strategy’ based ones.¬† I want to make Upper Bucks and Montgomery counties a great place to start a small business, especially one that is technology based.¬† I want to help others succeed in building out awesome companies that make our local area a better place to live.¬† I want to help fill the void in relevant technology and entrepreneurship related education in our public school system.¬† If you’re passionate about joining me in this, check out the ‘How can I help?’ section below.

I’m currently in the process of taking things that have worked for Threddies and my consulting business and building solutions around them that others can use.¬† You’ll see more of me at local meetups discussing the latest initiatives and working to better understand pain points that we can offer additional solutions for.

I’m one of your existing clients, what does this mean for me?

First, I’m pretty confident that this is not news for you since I worked with every one of my existing clients to come up with a personalized plan for what happens after this change ūüėČ All existing contracts will be completed at the same level of quality as if this change never occurred.¬† For many, I won’t be taking on new work, but I hope to continue working with you on new strategic initiatives.

I was hoping to become a client, what now?

Reach out!¬† I’m interested in helping, especially if you’re local.¬† I might say ‘no’ to taking on your project directly, but I can refer you to someone who is more than capable.¬† I’m also really interested in hearing what you have planned and continuing to build my network.¬† I may have some expertise to help you and you might be doing something that’s too awesome for me to pass up being involved!

What about all of the fun, one-off experiments?

I believe that the worst thing you can do in business or technology is become stagnant and stop learning.¬† So the ‘experiments’ will definitely continue.¬† I fully believe that I will have even more time and resources to invest in conducting (and hopefully documenting) some really crazy experiments.¬† In fact, the majority of ‘implementation’ based consulting projects that will be continuing after 11/9 fall into this category!

How can I help?

Drop me a line and let’s chat.¬† I’m looking for people passionate about technology and small business in the Upper Bucks and Montgomery area.¬† Let’s bounce ideas off of each other and do great things!¬† If you are starting or growing a business in the area and want to chat or are looking for financing or technological expertise, I want to hear from you!

How to backup and restore inMyCellar database

Probably the most frequent question I hear from inMyCellar users is: “HELP!! I got a brand new shiny phone, installed inMyCellar and my cellar is now empty!¬† How do I get it back?”.¬† I hear your concern, and it pains me that I haven’t had enough free time to complete the uber cloud based backup solution of your dreams (believe me, it IS coming), but I figure it’s about time that I finally document the approved and tested way of doing it in a way that there should be little left to the imagination regarding how to make it happen.

Currently, your entire ‘cellar’ is stored in an on device sqlite database and luckily Google provides an easy way to back that up and restore it on the same device or on another device.

Install adb

First, you need to install the Android Debug Bridge (adb) on a computer that you can connect your Android device to.  ADB is a tool put out by Google for Android developers.  You can read all about the great things it can do and download it here.

Turn into a developer

Now that you have ADB ready to go, the next step is to make sure that ADB can ‘talk’ to your Android device.¬† This involves turning ‘Developer Options’ on on your Android and setting it up for ‘USB Debugging’.¬† Don’t worry, you can easily turn these settings off with one click when you’re done, but there are a ton of cool things you can do with them, so you might want to keep it enabled.¬† Turning on development options and USB debugging is described in detail here.

You can verify everything is working by typing the following at a terminal on your computer:

adb devices

If you see a device identifier listed and no complaints about not being authorized, you’re good to go on to the next step.¬† If you encounter any issues, refer back to the prior pages to make sure you followed all of the steps and follow any troubleshooting steps for your computer’s operating system.

Back that thing up

The next step is to create a backup of your inMyCellar data.  Make sure the device that has your current inMyCellar data is plugged into your computer and accessible via ADB.  Create a directory on your computer called: inMyCellar navigate to that directory in a terminal and type:

adb backup -f ./data.ab -noapk com.transmutex.inmycellar

Hit ‘enter’ and you should get a prompt on your Android device asking you if you would like to backup your inMyCellar data.¬† You can set a password at this stage to encrypt your data, but you can skip this step since inMyCellar does not store anything sensitive.

When the backup is complete, you should have a file on your computer in your inMyCellar directory named data.ab.¬† This is a backup of all of your inMyCellar data.¬† Now it’s time to put that data on your new Android device.

Restore inMyCellar data

At this time, you can unplug your old Android device and plug in your new device.¬† ¬†Make sure you installed a fresh copy of inMyCellar from the Play store on your new device.¬† You will then need to make sure that this device is setup for debugging and accessible via adb, so follow the same steps listed above that you did for your old Android device.¬† Once it’s accessible, run the following command from a terminal in your inMyCellar directory:

adb restore ./data.ab

Once again, you will be prompted on you device, asking if you want to restore the data.  If you setup a password when originally backing up your data, you will need to enter it here.  When this process is complete, you should be able to open up inMyCellar and see all of your data on your new device!  Feel free to reach out with any questions or concerns.

Hey Google, talk to the Beer Judge Exam Trainer!

It’s finally here… my first app for the Google Assistant has been approved.¬† You can get all of the details here,¬† but the basic gist is that it’s a straightforward helper for studying for the BJCP exam.¬† It’s available¬†on¬†Google Home,¬†Android 6.0+ phones (soon to be 5.0+),¬†TVs¬†and¬†iOS 9.0+ phones.¬† I basically used this as an example app to become familiar with the process in order to build a more sophisticated app, but if people find this useful I will enhance it.¬† Just say, “Ok Google, Talk to Beer Judge Exam Trainer” on your Google Assistant equipped device.¬† As always, drop me a line with any feedback.

Who’s the Phoneme?

Ever since attending Google I/O¬†(one of the best conferences I’ve ever attended… seriously Google, please have me back next year!) earlier this year, I felt I needed to build a dedicated app for the Google Assistant.¬† I kicked around a ton of ideas and at first felt daunted by all of the things that I didn’t know that were fundamentals for even making something simple in the space:¬† My programming language(s) of choice were not in the ecosystem.¬† I knew nothing about Conversational UI.¬† TensorFlow, DialogFlow and all of the Machine Learning (ML) terminology were new to me and the SDKs were changing rapidly.¬† So I did the same thing I did in the early days of Android and just jumped in and started learning.

I had a job (which seems like eons ago) in which I worked on many things that became the precursors to modern day AI and ML concepts.  So a lot of that was learning the new names for concepts with which I was already familiar.  Libraries to facilitate AI had come a long way as well, and there were off the shelf pieces for things that entire companies had arisen around back in the day.

Even after getting a pretty good grasp on the basics, I held off for a bit on actually building something; secretly hoping that Google would roll out Kotlin support to all of their server side infrastructure. ūüėČ That never happened, but I’d also done a fair amount of Node.js and general JavaScript development over the years and finally just decided to dive in there.¬† This is pretty much required to use the backend components of their FireBase infrastructure for Android as well, so it’s not lost time in continuing to be familiar.¬† I was pleasantly surprised to see that Speech Synthesis Markup Language (SSML) was pervasive in the voice assistant space.¬† I had followed the early W3C recommendation pretty closely as part of a (way before its time) Augmented Reality Gaming Engine that I had worked on as a side project.¬† This is where the title of the post comes in…

I dabbled in a lot of odd things in college… so many things that, over the years since I’ve learned them, seemed so far afoot of my current chosen career as to be laughable.¬† One of my big obsessions (that still is) was language and its origins.¬† Why is it that ancient Sanskrit is so similar in some ways to Classic Mayan?¬† I could discuss this stuff forever, but for the purposes of this digression, my point is that I’ve taken a bunch of linguistics and language courses.¬† One course in particular was immensely useful in creating a primarily voice centric assistant app.¬† In this course, I learned about phonemes.¬† Phonemes are a convenient way of representing the way words should be pronounced.¬† It’s probably pretty obvious how this would be valuable when dealing with a highly technical subject matter using just voice, but just think about the wide range of pronouncing words in English that have very similar spellings and you’ll get the idea.¬† Phonemes are often represented using symbols from the International Phonetic Alphabet.¬† I chuckled to myself about the irony that I was building a beer related voice assistant using the IPA, but this was the secret sauce to making my app sound like it was a beer judging expert and not some rube reading unfamiliar words out of a homebrewing manual.

I ended up building something for the Assistant that I’m proud of and learning a bunch along the way.¬† The app is currently under review with Google, otherwise I’d be telling you all to go out and try it.¬† I’ll leave that for a future post. UPDATE: The app is now available, read more about it here.

Using the Physical Web to Drive Subscriber Growth and Engagement

Threddies store front

NOTE: As of December 6, 2018, Google will be discontinuing Nearby Notifications on Android, making much of the information in this post no longer relevant.  Read more here.

Threddies recently made the transition from existing online only to having a B&M boutique shop.  The Threddies shop specializes in items that are noticeably distinct from the online offerings and this posed a challenge for email marketing efforts.  What was the best way to approach introducing the new store to existing customers?  How could we ease new customers of the boutique into the existing Threddies email campaign?  Would existing online customers (who are spread around the world) even care about the physical location?

Establishing the baseline

Many of the questions regarding how to actually structure the effort using our email marketing toolkit were quickly answered since AWeber was in the process of rolling out its segmenting on tags feature. ¬†We knew we didn’t want to maintain separate lists for online customers and those who frequented the shop. ¬†We also wanted to be able to easily keep all of our customers up to date about sales that were happening in the online store or new items from the shop that we intended to also sell in the online store. ¬†What was very clear was that we did not want to bombard online customers with information that would only really be relevant to people who could actually visit our physical location.

We sent one email to all customers informing them of the plan to open the B&M storefront and directed anyone who was interested in more information to use an alternate signup form that we created with a tag that denoted their interest. ¬†This would add new subscribers with the appropriate tag, but would also update existing subscribers to have the tag that we were going to key off of in order to send email with information specific to the boutique. ¬†We now had the ability to send targeted emails to those who actually cared about the physical store. ¬†That was great for existing customers, but it wasn’t really the best way to get visitors to the store signed up to our list.

Growing the local customer base

If someone made a purchase in the store, they would automatically be added to our marketing efforts, but we noticed in the early days, that a lot of people were stopping in and just browsing as we were tweaking the shop layout and products that were for sale. ¬†We wanted to be sure that anyone who stopped in early on and wasn’t ‘converted’ would still have incentive to come back as the concept was evolving. ¬†Setting up a device running AWeber’s Atom with the appropriate tag pre-filled was an option, but the shop is small and that would take up space that we could use for more merchandise and initial indications were that people weren’t going to be very proactive about signing up and would need to be instructed to do so. ¬†Wouldn’t it be great if there was a way to inform any visitor to the shop that we have a way for them to register for more information without someone directing them to a tablet in the corner of the store? ¬†Wouldn’t it be great if they could do all this from the device that they already have in their pocket?

Enter the Physical Web

I had been playing around with beacons and thought using them to solve this dilemma would be a good experiment.  A beacon is a Bluetooth Low Energy device, capable of broadcasting information.  Since it uses Bluetooth, the range of that broadcast is limited to a fairly small area and the beacon broadcast power can be tweaked to adjust that range.  There are two main competing beacon standards: iBeacon (favored by Apple) and Eddystone (an open standard developed by Google).  Android and iOS devices can use both standards, but iBeacon requires that an app be written to specifically interact with the beacon.  Eddystone has a URL format which has become the cornerstone of the Physical Web.  Android devices can interact natively with Eddystone-URL and iOS devices can do the same using the Chrome browser.  I already had some Estimote beacons which support both iBeacon and Eddystone, so I configured one to broadcast the Eddystone-URL format.

Setting up the beacon

Estimote provides an Android app and Web UI to configure their beacons but any beacon that supports Eddystone will have a similar configuration process that is manufacturer specific. ¬†I’ll outline the basic steps without explicitly discussing the exact process required by my beacon manufacturer.

The first thing you’ll want to do is make sure the beacon is broadcasting Eddystone packets and more specifically the Eddystone-URL format. ¬†This format requires a URL that holds the content of what you want to broadcast. ¬†I used the URL for my web signup form that was configured to tag subscribers as being interested in the physical storefront. ¬†You will need to configure the beacon to broadcast this URL as well. ¬†The url cannot be bigger than 17 bytes, so you’ll likely need to use an URL shortener in order to accomplish this. ¬†I like https://goo.gl/¬†as it provides a nice dashboard with some metrics about your shortened URLs. ¬†Once everything is configured, and your beacon is properly broadcasting the Eddystone-URL format, you should see a ‘nearby’ notification on any reasonably recent Android device.

When someone clicks on this notification, they will be directed to your signup form.

Now you can place your beacon in the location where you would like to broadcast your physical web location and adjust its broadcasting power accordingly. ¬†Prepare to answer questions, as you’ll likely have someone who sees your ‘nearby’ notification for the first time and is curious about what exactly is happening.

Beacon of Hope

I’m still analyzing data regarding the effectiveness of this approach. ¬†It’s not perfect because not every device supports it without additional configuration, but adopting a standards approach like this allows others using Eddystone beacons and the Physical Web to aid in familiarizing customers with this technology and help drive adoption.

Moving forward, I’ll likely use this in conjunction with a dedicated Threddies app allowing use of more beacon functionality while providing additional opportunities for engagement. ¬†If you have any questions about using beacons or general discussion about the Physical Web, feel free to reach out, I’d love to hear from you.

Fermenting Solutions

I’m reviving my email newsletter entitled Fermenting Solutions. It started about a year ago as an effort to ‘dog food’ AWeber’s Curate mobile app. It’s a semi regular chronicle of a current project that I’m spending time on… the trials, tribulations and the interesting beverages I’ve had to drink while trying to work through them. You can read past issues here. If you’re interested in getting all new issues in your inbox, you can sign up using the form below.