So we built a whole shopping cart and inventory management system from scratch. It was good enough that people were willing to pay for it. But we were only 98% confident in it so we kept it internal.
We also didn't have the funds to develop or keep testing it. If we shut down the company, I might open source it.
> We also didn't have the funds to develop or keep testing it
I have to wonder, why did these not cancel each other out?
Something that's paid for and trusted to manage several million dollars worth of inventory has to be a lot more robust.
Investors didn't like the idea. I guess we didn't sell it well as one of them invested in someone else doing the same thing but with less experience.
I needed to operate on all nodes of the cluster. cssh opens a console on each node, and echoes commands to each. But that doesn't scale well past about 12 nodes, doesn't combine results from nodes, it really didn't work for me.
I wrote a tool I called Object Shell, or osh. The idea is to combine commands by passing data over pipe-like connectors. Osh is written in Python, and the commands are customized by Python functions. E.g., to find all the files recursively inside the current directory, and add up all the sizes:
osh ls -rf ^ f 'file: file.size' ^ red + $
osh: Invokes the toolls -rf: List files (f) recursively (r), yielding a stream of Python file objects.
^: Pipe the stream to the next command.
f: Apply a function to each item in the input stream, writing function output to the output stream.
'file: file.size': A function that returns the size of a file.
red +: Reduction using +, combining all the numbers coming in.
$: Print result to stdout.
And then to do this for all files under /foo/bar, in all nodes of a cluster named mycluster, and to do a cluster-wide sum:
osh @mycluster [ ls -rf ^ f 'file: file.size' ^ red + ] ^ f 'host, sum: sum' ^ red + $
@mycluster [ ... ]: Distribute the bracketed code to each node of mycluster.f 'host, sum: sum': The distributed command returns results that include the host name; drop the host name.
red +: Sum the sums from each node.
Osh is available here: https://github.com/geophile/osh
Also:
- Piping of Python objects instead of strings.
- Integrated database access (SQL results -> stream of Python tuples).
- Support for arbitrary Python processing.
Postgres migration tool; super simple and lightweight :)
So we developed this tool called Stockpile. It had 1) Admin app - web 2) Mobile data collection app
Every day the server identifies products that do not have images, and from which store.
The on field data collector goes to the corresponding store. The app will display bar codes and short names.
He goes ahead and scans the bar code and takes image.
Over time we also added intelligence in the office admin app to fuzzy match product names and reduce the effort of offline data collection.
Using this, we could onboard a store and make them online with 12000 SKUs within 4 hours.
- A CLI release tool that properly ensures deps & CI are green, bumps version, creates Github release notes (with links to PRs) and notifies team. Is configurable to be used across projects (both backend and frontend).
- A deployment dashboard that shows what version or feature branch is deployed for each of our projects on our different envs (prod, staging, testing etc). Think a minimal matrix grid for easy overview.
- Elaborate bash script that helps setup all projects and dependencies local on new employees' machines. Onboarding was always a major hassle so we've tried to automate it as much as possible.
Never discount the effect that dusting off some old CLI skills can have. Fast turnaround, easy to run on osx these days, and the kids think you're some kind of wizard.