Blog

Grocy in the House

I installed and began using Grocy a few days ago. Grocy is a household food inventory manager application with lots of bonus bells and whistles. It is available in multiple forms: a desktop application, self-hosted PHP (flat file SQL by default, which I assume you could change if you wanted to), or Docker container.

This post memorializes information about how I have set my instance up for my household. I’m running the PHP/SQL version on a Raspberry Pi on my own local network. We don’t need access outside of our local network, so no port forwarding is set up at this time.

Display of Information

Grocy helpfully makes it easy to print out lists of items grouped by location, and I’m making good use of that by posting a list at each location. This is especially helpful with freezers and refrigerators – as long as you keep the posted list sheets updated, you can see what’s inside without opening the door.

I’ve also found that we have quite a few food items that are way past due. Some have even been moved cross-country twice. So I printed out a list of everything that is past due, and wrote, ‘The “Most Wanted” List’ across the top in red marker and posted it on the pantry door, where most of the items on the list reside. I aim to refer to that list regularly and work on using up those items whenever possible.

Kits and Mixes

Any product you take and combine with staple ingredients like water, milk, butter, or fresh meat to make a meal, side dish, or dessert is included in this category. This can also be complete kits with no additional ingredient requirements. This allows me to filter just those kits/mixes when doing meal planning.

  • Use “Kit” or “Mix” at the beginning of the name for sorting. 
    • Kits have multiple separated ingredients (packets, loose pasta or rice, etc)
    • Mixes have all the ingredients already mixed together except what you add
  • Add to “Main Dish”, “Side Dish”, or “Dessert” product type, as appropriate.
  • Product measuring unit is any kind of “each” (box, can, bottle, bag or just “each”)
  • Exception: canned soups have their own category, and should be named with a leading “Soup,”

Products Used “All at Once”

Any product you can reasonably expect to use all at once (canned products, single-serving snack items, etc)

  • Enter in “each” (or similar appropriate) units
  • Multipacks should be entered by individual pieces on purchase
    • Example: fruit cups entered in “fruit cup” units, Lipton Noodle Soup in “packet” units
    • Price will be “total purchase” – ie the cost to buy the pack, while you’re entering multiple “items” that were purchased as part of the pack into the inventory. Enter the entire pack, then “consume” one if you are using one right away, or the price calculation will be off.
  • Single-serving items that come in multiple flavors can be grouped together under one product name, with “multiple flavors” in the product name and every barcode in the barcode field.
    • As long as the goal is to have a minimum quantity in stock no matter which flavor (you can always examine the actual items in the pantry to inform your shopping list)

Condiments

Because we consume condiments in very small increments, we will treat them as whole items until they suddenly aren’t.

  • Enter into system as “each” counts or equivalent
  • “Consume” when you throw away the container
  • Product type of “Dry Condiments” and “Liquid Condiments” (semi-solids like jelly are classified as liquids in this instance – the “dry” classification is for powdered condiments)
  • If you allow partial units in stock, you can “consume” 0.5 unit when you are approximately halfway through a particular product, which should get the system to identify the product as “under quantity” if the number of units you physically have are equal to the minimum quantity. And that gets the product on your shopping list 🙂

Bulk Products Used Incrementally

Products like flour, bread crumbs, sugar, rice, and beans are set to be managed by weight. 

Whenever possible we store these in permanent containers. 

  • We weigh the container to measure tare weight and mark it somewhere on the container for future reference.
  • We add the tare weight to the master data entry for the product.
  • When we use the product, we weigh the container after we are done measuring out what we’re going to take and enter the new total weight into the “consume” form. The system will subtract the proper amount.
  • When we refill the container, we weigh the container after we have added the new product and enter the new total weight into the “purchase” form. If there is product left in the package, set the package on top of the container and weigh them together. Use up the product in the package first until it’s gone. 
  • Wait to refill until most or all of the new package contents can be added at once.
  • When you physically purchase a new package of a product, but you can’t add it to the container yet, write the price and store name on the packaging so it can be entered into the “purchase” form later. If you still want to track it, you could create a master data product entry for the original packaging unit. When you’re ready to transfer, you consume 1 unit of the product that has the “each” quantity unit, and then you proceed with the “purchase”.
  • Bulk products that have a “basic recipe” printed on the packaging (ex rice, quinoa, couscous) have those ratios/instructions copied into the product’s description box so that if I’m transferring the product from its original packaging to a reusable container, the instructions are preserved and easy to find.

Fresh Meats and Bulk Cheese

These are tracked by the ounce. Tare weight enabled where appropriate (ie bulk shredded cheese or whole blocks that will be used incrementally)

  • First In First Out is especially important here to reduce freezer burn
  • When repackaging meats, write the name, date, and weight on the new packet
    • The “purchase” entry will be the weight and total cost of the purchased quantity of meat. Enter weight in pounds, my copy of the application is set up to convert that to ounces automagically.

Locations, Transfers, and Perishables

Grocy automatically tracks “use by” expirations for perishable items and adjusts the “use by” date whenever you transfer an item into or out of a location that is marked as a “freezer”. When you move anything from one location to another, the system also needs to be updated. This can be recorded on the posted sheets – just write:

  • Item name, from, to, date (important only for perishables), quantity

If you open an item that is shelf stable as long as it is unopened but has a “use by” once it is opened, record the date it was opened, and transfer from/to locations if it was also moved.

Seasonings

Spices and dry seasoning mixes are counted as each bottle/can/jar and consumed when we discard the bottle. All are set to minimum stock of 1, and allow partial, so that when a jar is running low, it can be updated to a value that is less than 1 to trigger the shopping list.

Recipes and Meal Planning

Initially, I started putting meal/side “kits” into Grocy as “recipes” that called for the kit and the additional ingredients needed. I stopped doing that once I figured out that you can add recipes or products to the meal plan. So, now I add the kit and its needed ingredients to the meal plan and don’t bother with the recipes for those (I’m still adding recipes that don’t involve kits).

All told, I think this system will work out well for me. I think I’m going to have to go poke at the backend to see how easy it would be to backup the database. I have been using a declawed CueCat scanner as my USB scanner, but I also have put a more modern $25 USB barcode scanner on my wish list for later. I may even go as far as getting a Raspberry Pi Zero W, a 7″ touchscreen, and a case for them so I can install a scanning station right in the kitchen. Finally, as a stretch goal, I might fork the project and design a separate UI for small touchscreens like the 7″.

Building a Better (and free!) Equipment Inventory – part 2

Since I published my last post on this topic, I have developed the entire application and released version 1.0!

A demo is available at http://cordelya.pythonanywhere.com.

You can grab a copy at http:github.com/Cordelya/mobiliaire. If you are going to run the app on a Raspberry Pi computer, there is a RasPi specific fork available at http:github.com/Cordelya/mobiliaire-raspi.

The main application allows administrators to enter and edit items, boxes, and warehouses individually via a user-authenticated admin site. Admins can also upload data in csv format for easier bulk adding.

The front end displays database information organized into two distinct view types: browse and reports. The browse views display warehouse, box, and item information on tiled cards with associated images (if available) and human-friendly names, descriptions, values, and keywords. You can begin at any level and drill down from warehouse to box to item. The Items browse view includes a keyword filter that allows you to limit displayed cards to items matching the selected keywords.

The report views present the same information in a tabular format and allow exporting of the tabular data to PDF, csv, Excel, or local printer.

The application is built with a lack of Internet access in mind – you can install it on a portable or semi-portable device, transfer the database and static files for your inventory, import the database, and bring it to your event or inventory day where it will function whether or not reliable Internet access is available.

The RasPi fork has built in support for capturing item photos using the Pi Camera – and when you activate it via the “take a photo” link on any item, box, or warehouse detail page, it will automatically name the image file with the associated item, box, or warehouse ID to help the administrator associate the resulting photos with the correct item, box, or warehouse without needing to have an in-depth familiarity with the inventory items.

This application can run on any device that supports Python 3.6 through 3.8. That includes Windows and any device on which you can install Termux or an equivalent terminal application.

Tested on Raspberry Pi, Ubuntu, WSL Ubuntu, and Samsung Galaxy Note 8 (with Termux). If you get it running on another platform let me know!

Submit your tickets at the github repositories.

Building a Better (and Free!) Equipment Inventory

My local SCA branch, like most branches, owns property. The group collectively owns a cargo trailer, kitchen equipment, tournament field equipment, navigation signs, and more. All that *stuff* has to be documented.

Right now, that documentation is in the form of a spreadsheet, with one sheet for each numbered box in the trailer, one sheet for items stored loose in the trailer, and one sheet for each member who is holding items for the group (because they are frequently brought to practice). It is messy and doesn’t facilitate pulling statistics (for example: the total replacement value of all items should the trailer suffer a major catastrophe). It also doesn’t currently produce nice (or uniform) hard copies.

Currently, a hard copy of each sheet is inserted into each corresponding box, allowing event staff to find items and later repack the right items into each box. Finding an item requires leafing through all pages of the full inventory and scanning down each list until the desired item description is found. Repacking works in a similar fashion – it’s chaotic. I think I can improve this process by creating a web application that is portable enough to be installed on a Raspberry Pi board and served up via wifi at a site that has no native wifi available.

Yes, commercial inventory web-apps are available. However, they cost money, are often more complicated than is necessary, and may require server environments that groups don’t have access to. This application will be written in php (and maybe some javascript) with a mySQL database. All of that software is available for free and it isn’t difficult or expensive to spin up a suitable hosting environment.

As I work through creating this application and its database backbone, I am going to use this blog to talk about features I build (or plan to build) to remind myself of those good ideas for later. I will also use it to share this information with other members of my branch.

When the application is functional, I will advertise it within the SCA – first within the East – for other groups to clone and use the base code, which will be hosted at an online git repository.

Right now, today, I am still building out the database. I’m using this as an opportunity to improve my database structuring skills. I spent a little time populating the database with some item records so that when I write my SQL queries for the app, I can test them and get real and meaningful query results.

After today’s data-entry session, I have already identified another wanted table: consumable item use reports. The property list contains consumable items – plastic storage bags, trash bags, soap, sponges, latex exam gloves, bandages, alcohol wipes – you get the idea. When a consumable item is used, a staff member can report that within the application via a button on the item’s information page. The button brings up a form, item ID, name, and description pre-filled, with new entry fields for the quantity used and comments. A later option can be a quick-fill tabular form for entering multiple reports (when the staffers keep track using a paper tally and the entry is done later).

Additionally, some of those items have expiration dates. I want to make a report that lists all items that expire, shown with their expiration dates, optionally by order of expiration date to allow timely replacement of expired consumables. This report should be short since it is composed primarily of items in the First Aid boxes, but it’s also a very important routine maintenance task.

Catch up with me later and if you haven’t seen any posts here about this recently, ping me on Twitter @cordelya.

Recently in Making Things – May & June 2019

three glass beads on steel mandrels

I’ve made quite a few things in the past month or so. Here are some highlights.

View this post on Instagram

New Design: Lavender Needle Book I designed the embroidery for this item. The book is a typical style of needle keeper. I have made two in solid green and purple polyester threads, and two in variegated green and purple rayon threads. Construction after embroidery is as follows: 1. Remove stabilizer and trim to about 1" from the stitched border 2. Place over a piece of sturdy fabric (I used felt but canvas or woolen wool cloth will also work) and stitch together, following the border and spine stitch lines. Trim edge (pink it if you can) to 1/4" of stitched border. Optional: stitch 1/8" around the motif and add quilting to your taste. A folded length of narrow ribbon can be inserted between the two layers (back cover edge) before stitching if you want a closure. 3. Cut 2 pieces of felt that are about 1/4" shorter than the cover on all edges – or about the same size as the cover's border when laid flat. 4. If you want to add a pocket or pin bar to any of the pages, do that now. 5. Stack the pages and cover the way you want them, pin in place, and stitch them together following the spine stitching line on the cover. 6. If you stitched a ribbon loop in the back cover in step 2, fit and sew a button along the edge of the front cover Patrons were able to see this yesterday and $5 patrons have access to the digital files associated with this project, which includes SVG, PNG (including a printable suitable for transfer to fabric for hand embroidery or painting) and the embroidery file for a 2.5" x 3" book. https://patreon.com/cordelya

A post shared by Cordelya Makes Things (@cordymakes) on

Adulting 101: Investing

This is part one in a series of posts where I gather resources on Topics you may have Missed Out on while growing up.

Unless you grew up in a household that participated in “investing”, you may not know what it’s all about or how it’s done. It probably looks complicated, difficult, and unreachable – especially if things like investment minimums are personal stumbling blocks. Here I’ve rounded up a series of resources to help you learn how to do it.

From Reddit’s r/PersonalFinance:

Reddit has an awesome subreddit all about Personal Finance. Below are some recent (as of this post’s publication date) threads from the PF subreddit on the topic of investing.

Books

Head on down to your local library for these. If you find one particularly useful and find yourself making return trips to re-read or check it out, that’s when you should think about buying your own copy.

Blogs and Podcasts

Listen up! Here is a small collection of blogs and podcasts focusing on beginner investing and investing when you’re starting with very little.

Wrap it up!

While you were out learning about investing, did you find something awesome that other newbies would find helpful? Share it in the comments and if it is indeed a goodie, I’ll add it to the list and give you credit for finding it!

7 Social Ways to Help Your Agent Sell Your Home

You need to sell your home, and you’ve hired a realtor to help you with the process. They are experts in all things home selling, but there are things you can do to to help them out that may also help your home sell more quickly.

Social media is being used more and more by realtors to get the word out about homes for sale and to find new clients. Because social media is, well, social, it works better when you engage with your realtor’s social media accounts. Here are some tips to get you started:

  • Follow your realtor’s social media accounts. If you can’t seem to find them yourself, ask your realtor for links.
  • On each platform, look through your realtor’s posts and like or share some of them.
  • Asking your friends and followers to follow the realtor’s social media accounts as a favor to you can also pack a huge punch.
  • As new posts from your realtor show up in your stream, like or reshare them, as appropriate.
  • Ask your realtor if they can Promote your listing on social media on your behalf. They may ask you to pay the advertising fee, which can be as low as a few dollars per day per platform if the ad is targeted properly.
  • Make sure that any scheduled Open House events get attention a few days before each event. If you’re using Facebook, have your realtor create a public event for you to boost.
  • If you aren’t currently living in the home that is for sale, share a link to the listing and ask your friends to share it, too. If you are still living in your home, go for security through obscurity: make a habit of posting links to local listings you like on a regular basis, and include yours in the mix a few posts in.

All that liking and sharing can have a huge impact. Any time you click that “like” button, your friends and followers may see it in their stream. Sharing does the same, but increases the chances that it will be seen. Plus, with sharing, you can add your own comments! If you’re using Twitter and you retweet something with your own comments added, make sure you also do a raw retweet of the original.

What if your realtor isn’t actively maintaining their social media? Short of asking them to make some posts for you to share or finding a different agent, about the only thing you can do is self-promote the listing.

Once your home sale is complete, be sure to make a post thanking the agent for all their hard work, and maybe also send them a written testimonial. By doing this, you not only help your agent, but you help future home sellers with their home sales.

Frosty Morning Battlefield

A frosty early-morning view of the American rampart at Chalmette Battlefield.

On January 6, 2018, I woke up in a National Park in Southeast Louisiana. The temperature had dropped to just below freezing overnight. Brr! I stepped out of my tent to walk to the (heated) comfort station and took this photo before continuing on my way.

Chalmette Battlefield, Jean Lafitte National Park and Preserve, Chalmette, Louisiana, hosts a living history event annually on or near the anniversary of the Battle of New Orleans (January 8, 1815). Camping at this park is restricted to employees, volunteers and participants, and only during specific scheduled events.

Why Blog Advice for Your Clients?

Last fall, I started working as a social media manager for small businesses. My ideal clients don’t need a full-time social media manager, but they want to delegate social media tasks. Neither of my two clients publishes blog posts, and I’ve been advising them to start. Today, I’m doing as I say, and writing a blog post – with advice for my clients – about why it’s a good idea to blog advice for one’s clients. (Yes, we’re all very meta today.)

Two kinds of relationship

When you are running a small business, you may have two different kinds of relationship: business-to-customer (B2C) and business-to-business (B2B). Each has a different set of needs. You can send market reports to peers in your industry and expect that they will read (or at least skim) and understand. If you send a raw market report to your B2C contacts, you can expect their eyes to glaze over. They won’t read a wall of text with no interpretation.

If you write blog posts intended for those within your industry, share them on LinkedIn – instead of Facebook, Twitter, or Pinterest.

You’re the expert

Your clients pay you partly for your expertise. They don’t want to (or can’t) interpret the market data. They don’t know the trade secrets. They may have misconceptions about How Things Work in your area of expertise. They benefit from your advice. They can read a market report, but they may not be able to glean what the report means or why it matters. That’s where you come in.

Look at me!

A big part of the professional (B2C) social media game is getting potential clients to see you. You do that by engaging with them. You post on a regular schedule, respond to comments, and take part in the conversation.

Take a moment to go look at your colleagues’ and competitors’ professional social media accounts. Look at the amount of engagement each post receives and compare against posts of different types. Off-topic viral posts can earn you a lot of reshares and likes, but not a lot of new followers. Advertisements can receive a lot of negative responses or no response at all. Negative responses might include comments from dissatisfied customers complaining about the product.

Engagement is a measure of likes, reshares, and comments on a post. It is used as a metric in comparing audience reaction on a post-by-post basis.

Posts containing advice – explaining or simplifying things for your clients and potential clients – lie somewhere between those two extremes. Free advice has value, and providing it via social media can be a great way to grow your audience.

Not enough content to go around

Go back to those social media accounts. How many times do you see many accounts sharing the same article/blog post? Does it seem like there’s not enough content to go around? That’s a good sign that you should contribute more original content to the pool! Your clients and potential clients appreciate original content.

Your colleagues (and even your competitors, depending on the topic) will share your content on their platforms. Those shares will bring more visitors to your website. Some of those visitors will subscribe or join your regular social media audience. Some of them may even remember that you gave them good advice and may hire you in the future, or refer a client to you. All because you gave away free advice.

Some industries have services which offer pre-written, “branded” blog posts you can share with your clients. These blog posts have your photo and contact information prominently placed on the page, and are hosted by the service. Those are an effective way to get recognition, but that content is also being shared by your competitors, with their photo and contact information on the page. Branded blog posts won’t make you stand out from the crowd like your own original content will.

Tip: Use bullet lists and pull quotes to organize information.

Blogging Tools

About viral posts

Off-topic viral posts have the potential to increase the number of impressions your other posts receive. An impression happens whenever a user sees your post, even if they aren’t following you. On Facebook, when you “Like” a post, the algorithm will show you more content from the author later. 

Do consider occasionally publishing blog posts with viral content, but keep it positive or at least informative. Don’t name names and do crop people (especially minors) out of photos whenever possible. If you must include photos of people, get their permission to post. Don’t mock people or reveal their personal information.

Now what?

So, now that we’ve established that you should write blog posts for your clients, what should you include, and how?

  • Whenever possible, include at least one relevant photo. This will appear in the preview when someone shares the post on social media. Try to make it compelling, but don’t give away the whole story.
  • Intersperse your writing with extra supporting photos.
  • Visually break up your sections with sub-headers
  • Use bullet lists and pull quotes to organize information.
  • Break the information into bite-sized pieces.
  • Define industry terms your clients may not know.
  • Cite your sources. Provide direct links to appropriate resources. Drill down to the original source so your reader doesn’t have to later on.
  • Check your spelling and grammar before publishing
  • Invite your colleagues to write guest articles, even if they have their own blog. Consider accepting invitations to guest post on other reputable blogs.
  • Use others’ images responsibly, respect license terms, and include credit for anything that isn’t yours. If you’ve purchased stock photos with a license which does not require attribution, you won’t need to do this.
  • Limit the number of posts you make about luxury products and services. There is a larger pool of potential followers/clients who can’t afford or access those luxury services than those who can. Those who can afford or access luxury services will still appreciate your advice.
  • Make room in your schedule. Set aside an hour or two per week to write about a topic and stick to your schedule whenever possible.
  • Check with your social media manager – they may be willing to take your content, format it into a nice blog post, and publish it for you. In that case, the only thing you need to do is write!

Resources

  • Grammarly has an excellent browser plugin to help you with the basics. The Hemingway editor will give you more advanced advice.
  • This post was composed using the new WordPress editor, Gutenberg. It makes post layout a snap.
  • Find and subscribe to some blogs about… blogging. Try SmartBlogger’s Writing Category.
  • Subscribe to other blogs in your industry. I use Feedly to read them all in one place. Identify what’s lacking or missing and write about that.
  • Find images you can use for free at Creative Commons.

Image Credits

Presto

Presto was one of my clients when I was working as a volunteer photographer at the Louisiana SPCA in New Orleans. He was shy and apprehensive, but I managed to get a happy smile out of him for his adoption listing on PetFinder.



Presto was made available for adoption sometime around October 10, 2014. I do not have any details about when he was adopted, where from, or who by.