All Posts
-
The miracle of QEMU, at least to me
One of the fascinating things about computer hardware is of course the software we can run on the hardware. Some people only know computers as keyboards and screens that they use to type some daily work, not giving it much thought. Others at a slightly higher level might care about whether they are using Windows or Mac, simply because they get used to one or the other, and cannot easily switch...
-
Connecting Shopify to the Last Mile - CIGO
A Shopify merchant recently asked me to hook their store up to CIGO. I had no idea what CIGO was but after a brief web search I came to the CIGO and quickly learned how it works. In a nutshell it lets a merchant organize their sales so they can dispatch drivers to deliver what they sell, perfect for online businesses that serve a local clientele. This service sells groceries to a local client...
-
Mermaid Experiments
pie"Ruby" : 386"Javsscript" : 85"CSS" :...
-
I Changed My Blog
Jekyll is dead, long live Jekyll via Eleventy # Direct link to this section I have attempted to do this change almost ten times, and each time I have met with failure. The technology stacks are so shiny, new, full of promise and yet terrible all at the same time. I spun up a Gatsby, a Hugo, a Netlify, a Ghost, a NextJS, and probably a few others. Nothing seemed very appealing. Almost all...
-
Shipping is Easy Right?
The Shopify forums and chat channels are chock-a-block full of merchants that subscribe to the theory that shipping is easy. Some common complaints include: Why can't I have free shipping for a single product? Why can't I ship free to a small list of local zip codes? What if I have one thing in a weird tube and everything else in a box? Why can't I use dimensional weights? All legitimate...
-
Average Cost of Inventory
For accounting purposes there are a couple of ways of dealing with selling and purchasing of inventory and the changes in the cost of purchasing inventory over time. It is rare that a merchant will purchase items to sell in their Shopify store for the exact same price over time. It can be important to use an average cost price that takes into account these purchasing price changes over...
-
Shopify and Real-Time Currency Exchange
The Profiteer App is meant to expose profit or margins on a sale by subtracting the cost price of goods sold from the selling price of the goods sold. A common business issue faced by many merchants is the effect currency exchange rates may have on their sales. A shop located in Canada may sell products to Canadians in Canadian currency, but the products sold may have been purchased and imported...
-
A Word to the Wise
Had a real laugher/shocker at the same time. I develop so much App code where the data processing is a flow and not a stop:persist:process:continue action that sometimes you get burned by that. Everything was working fine as "hey download all that shop's orders, parse them, deal with the contents, and move on". Everything as working fine on MY itty, bitty, little dev shop. One of my...
-
Montreal RB meetup
As a way of welcoming in the new year of 2014 and trying to decide which way was up from down, left from right, I made a decision to be a speaker at the local Montréal Ruby group. Having attended a dozen or more meetings over the years I felt like I had 20 minutes of quality material without being too technical, or wildly off of one topic. I chose to do a talk built around a Ruby Toolbox. What are...
-
Oh, Hey Whiners! It's All About Inventing What You Need
In the course of day to day delivery of new functionality and services in Shopify platform Apps, there is a lot to be said in how much we get to take for granted in terms of stuff invented elsewhere, by others and for general use. Ruby is a fine example in that it is a free open source scripting language that anyone can download, change, compile and use. Most people will just install it on their...
-
CORS and Shopify
In the past there have been more than a few developers totally lost when it comes to dealing with Shopify, Ajax, Apps and cross-domain coding issues. A little history can perhaps explain this. Javascript in the browser on desktop computers is useful as a scripting tool and can be leveraged for nefarious purposes. On a mobile phone it is less of a problem since every App on a phone has it's own...
-
An Unusual Shopify Fulfillment Pattern
A merchant recently ordered up a fulfillment App for his Shopify stores selling various items based out of Australia. The standard pattern I use was in order whereby an App polls for new orders booked in the shops twice daily, parses the orders and then rewrites them in a format suitable for the third-party logistics company to perform the actual fulfillment. The IT company in question prompted me...
-
How to do Fulfillments
So your shop is a raging success. You are receiving upwards of 100, 200 maybe even 454 orders per day for your popular product. You are in business and the success of getting to this point is keeping you flush with excitement. You are like many merchants operating in the e-commerce realm and you have your shop inventory stored with company MaxiFulfillments LLC. Shopify made it easy for your orders...
-
A New Feature in the Kitty
It has happened too many times for me to stand by idly so I finally did something about it. A subscriber to the Shopify App Transparent Kitty would call me and ask me this very specific question. Why can I not see the vendor(s) in the App when I just added them to my shop? The answer came to me quickly as I found the answer to that question after the first time it was asked. A vendor is not...
-
Sometimes You Just Never Know
There are many opportunities to produce Apps that provide new functionality to e-commerce platforms like Shopify. Some might argue the low fruit has all been picked but others continue to clamor for more. As a developer it is easy to produce an App but it turns out to be very hard to support that same App by polishing the rough edges, introducing new features and ensuring everyone is happy using...
-
External Inventory Suppliers and Feeds
The reality of working with suppliers for many merchants can be a daunting and time consuming task. Take any domain and chances are you'll stumble across an industry either deeply stuck in the past, or at the very least struggling to keep up with modern technological advances. A merchant may achieve some level of success attracting customers and converting carts with inventory at a certain level...
-
What is Perceived As Basic
It remains consistent over the course of the last seven years or so that people who subscribe to Shopify still voice that they believe the platform falls short of their basic expectations. A case in point is a merchant that just posted the following thoughts. I don't want to rely on a 3rd party for support or trust that they'll be around by year's end, or know that it won't disrupt or break a...
-
interesting line item properties issue
In the last year I have removed crufty cookie based customization code that exploited Shopify's cart.attributes to replace it with the more modern line item properties. It is a pleasurable process and sometimes I have deleted 2000+ lines of goofy customization code that never really worked well with 50 that do. The problem with the old solution is in how Shopify sets up cookies and sessions and...
-
Working at the Lake
Something I have not really tried too often but it is certainly easier than ever to try. Having a large number of clients accessing and relying on applications running in the cloud is a responsibility since at any given moment, an App could experience trouble and go down. I have tried various services to keep me informed when this happens but they themselves are suspect. I do not trust them much...
-
Summer 2013 Bootstrap
July is the month I mark off birthdays on the calendar, so why not mark off this one with a return to blogging. Most likely has been a decade since I wrote my first blog post. Pretty scarce since then. My plan for this summer is to finish off polishing some needed upgrades to some popular Shopify Apps I have created, and to continue servicing my great clients with code they need to expand their...
-
How to combine DelayedJob with Shopify API Limits gem
As anyone who has done any serious web application development using the cloud (in my case Heroku) to host an App supporting Shopify shops, you need to be aware of the API call limits of both the shop itself and across all the shops the App is installed in. The 300 | 3000 rule - you can call one shop 300 times continuously or make 3000 calls to all shops continuously. We used to have to write...
-
The we are Sorry! App
We are all Happy, not! # Direct link to this section Scenario. You are running a very busy Shopify business, closing hundreds of orders per day. Your product is great, Shopify works great, and your customers are by an large happy. Occasionally, no matter how well things are going, a customer is going to phone up and complain about something. The product was not quite what they expected....
-
Lesson learned about ShopifyAPI Billing
I am in the midst of no longer giving away simple (or complex) Apps for free, but instead, hooking into the Shopify Billing system built into the API, so I can receive some lunch money from my hard work. So, I receive access to a store, as the store admin, deploy my code, and test out the Recurring Charge calls. It all works as expected in my experiments, so I call up the shop keeper and let her...
-
Using the Shopify API command line interface (CLI)
A good many developers probably have installed the shopify_api gem from rubygems.org in order to built an Application to provide new functionality to shops. In fact, without even wanting to develop a full application, this gem is great for quick and dirty manipulation of stores. I am constantly using the Ruby console IRB to check if certain inventory makes sense, or other tidbits. It is almost...
-
Fulfillment Messaging App
When running a Shopify store, sometimes you want to treat your orders a little different than the normal flow allows. It can really depend on your shipping alliances, your inventory and what your customers expect for communications. When an order is booked, the customer and shop keeper receive an email that serves as a first communication. There are quite a few other email templates that can be...
-
Shopify App Development for Vendors
I have now successfully deployed and tested over 15 kinds of Shopify App systems to support various clients. The pattern I have adopted has grown more stable and flexible as I continuously experiment with the basics. Sinatra is my favourite Ruby framework for many reasons. It is very easy to create Domain Specific Languages (DSL) processing, which is perfect for Shopify Apps. It handles models and...
-
Related Products Shopify Application
Related products recently caught my attention recently when evaluating how to best render a Product, along with what the store owner thinks are related products, hoping to increase chances of selling one or more products. The algorithms I found published on the forums were by and large based on the following algorithm: Loop through the collection.all for products inside this loop: Loop through...
-
Now offering Shopify Training
With about four full years of experience playing with Shopify's system, the Shopify API, the Javascript API, Ruby, Rails, and Liquid, I feel prepared to teach what I have learned to others. I will soon open my first and very own Shopify store, with custom courses as the product for sale. I will likely keep it simple, offering time in exchange for money. You can request a course to learn anything...
-
Shopify Vision, Compass and Sass Combo
I have not used Vision lately in any of my Shopify development, but that has recently changed due to some new work habits. Vision # Direct link to this section Currently hooked up to the latest version. Installed it in my /workspace. It runs using the command line, ruby vision.rb. I symlink a Shopify store into Vision's /themes directory allowing me to keep the actual code in my Shopify...
-
Identifying Code Smells in Shopify
The Shopify inventory system is based upon Products. Once you define a Product, you can decide what Variants of this product exist, and add them as needed. One sure fire code smell with inventory here is when you see a system full of identical products, added to the inventory without using Variants. This smells for the reason that it is avoiding an efficient internal algorithm for rendering...
-
Building a Shopify App on Sinatra
With The Shopify API it is pretty easy to hook up a custom application residing on Heroku servers to a Shopify store. The authorization is nicely handled and once a store accepts the application, many new possibilities for new functionality are present. Sinatra is ideal since it supports the concept of mapping URL's directly to methods. Tricked out to render Haml and Sass, templates are simple and...
-
Excellent first JS-Montreal Meeting
Once again trucked on down to the nice offices of Bloom where we had a nice time. Gary Haran from TalkerApp gave quite a nice presentation of his work with Talker. It was nice to see some really well done jQuery in a web...