<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>weblog.masukomi.org - business</title>
    <subtitle>Autistic, ADHD, Geek. The weblog of Kay Rhodes (masukomi).</subtitle>
    <link rel="self" type="application/atom+xml" href="https://weblog.masukomi.org/tags/business/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://weblog.masukomi.org"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2022-12-06T00:00:00+00:00</updated>
    <id>https://weblog.masukomi.org/tags/business/atom.xml</id>
    <entry xml:lang="en">
        <title>I used AI to generate products &amp; write copy for my store</title>
        <published>2022-12-06T00:00:00+00:00</published>
        <updated>2022-12-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            masukomi
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://weblog.masukomi.org/2022/12/06/i-used-ai-to-generate-products-write-copy-for-my-store/"/>
        <id>https://weblog.masukomi.org/2022/12/06/i-used-ai-to-generate-products-write-copy-for-my-store/</id>
        
        <content type="html" xml:base="https://weblog.masukomi.org/2022/12/06/i-used-ai-to-generate-products-write-copy-for-my-store/">&lt;div class=&quot;ox-hugo-toc toc&quot;&gt;
&lt;div class=&quot;heading&quot;&gt;Table of Contents&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://weblog.masukomi.org/2022/12/06/i-used-ai-to-generate-products-write-copy-for-my-store/#quick-summary&quot;&gt;Quick Summary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://weblog.masukomi.org/2022/12/06/i-used-ai-to-generate-products-write-copy-for-my-store/#it-started-as-a-joke-dot-dot-dot&quot;&gt;It started as a joke…&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://weblog.masukomi.org/2022/12/06/i-used-ai-to-generate-products-write-copy-for-my-store/#the-work-begins-dot-dot-dot&quot;&gt;The work Begins…&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://weblog.masukomi.org/2022/12/06/i-used-ai-to-generate-products-write-copy-for-my-store/#generating-images&quot;&gt;Generating images&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://weblog.masukomi.org/2022/12/06/i-used-ai-to-generate-products-write-copy-for-my-store/#prepping-images&quot;&gt;Prepping images&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://weblog.masukomi.org/2022/12/06/i-used-ai-to-generate-products-write-copy-for-my-store/#redbubble&quot;&gt;RedBubble&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://weblog.masukomi.org/2022/12/06/i-used-ai-to-generate-products-write-copy-for-my-store/#the-site&quot;&gt;The site&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://weblog.masukomi.org/2022/12/06/i-used-ai-to-generate-products-write-copy-for-my-store/#know-thyself&quot;&gt;Know Thyself&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://weblog.masukomi.org/2022/12/06/i-used-ai-to-generate-products-write-copy-for-my-store/#that-sweet-marketing-copy&quot;&gt;That Sweet Marketing Copy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://weblog.masukomi.org/2022/12/06/i-used-ai-to-generate-products-write-copy-for-my-store/#final-thoughts&quot;&gt;Final Thoughts&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://weblog.masukomi.org/2022/12/06/i-used-ai-to-generate-products-write-copy-for-my-store/#will-i-share-my-code&quot;&gt;Will I share my code?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://weblog.masukomi.org/2022/12/06/i-used-ai-to-generate-products-write-copy-for-my-store/#what-s-my-favorite&quot;&gt;What’s my favorite?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://weblog.masukomi.org/2022/12/06/i-used-ai-to-generate-products-write-copy-for-my-store/#so-many-images&quot;&gt;So Many Images&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;!--endtoc--&gt;
&lt;h2 id=&quot;quick-summary&quot;&gt;Quick Summary&lt;/h2&gt;
&lt;p&gt;I used Midjourney to generate art that I threw on t-shirts, coasters, and almost everything else RedBubble offers. Then I used OpenAI to generate copy for it, and combined that with a handful of custom scripts to generate a product site called &lt;a rel=&quot;external&quot; href=&quot;https://bedbathandthebeyond.com&quot;&gt;Bed Bath &amp;amp; The Beyond&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It took about 40 hours of work to put all that together for 13 products, but that will be faster next time. In the end, this is a surprisingly viable option, and the only real restriction on profit is how much effort you’re willing to put into marketing what you make.&lt;/p&gt;
&lt;h2 id=&quot;it-started-as-a-joke-dot-dot-dot&quot;&gt;It started as a joke…&lt;/h2&gt;
&lt;p&gt;A friend &lt;a rel=&quot;external&quot; href=&quot;https://connectified.com/@cobie/109442153511919853&quot;&gt;threw this out on Mastodon&lt;/a&gt;.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;/images/2022/12/06/cobies_initial_post_small.jpg&quot; alt=&quot;mastodon post suggesting &#39;bed bath and the beyond&#39; as a hook for horror writers&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot; /&gt;
	&lt;figcaption&gt;&lt;strong&gt;screenshot of mastodon posts&lt;/strong&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;For a giggle, I asked Midjourney for “UNSPEAKABLE HORRORS AT UNSPEAKABLE PRICES. ALSO, BATH MATS.” and this came out&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;/images/2022/12/06/monster_bath_mats_small.jpg&quot; alt=&quot;four bath mats with toothy monsters on them. most have tentacles. one is a terrified blue face&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot; /&gt;
&lt;/figure&gt;
&lt;p&gt;And they looked “real” enough that I wondered if I could actually make a “cool” bath-mat.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;/images/2022/12/06/first_real_bath_mat_small.jpg&quot; alt=&quot;the first &#39;real&#39; bath mat. an woodcut style image of lovecraft with writhing tentacles behind him&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot; /&gt;
	&lt;figcaption&gt;&lt;strong&gt;lovecraft &amp; tentacles bath mat&lt;/strong&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;A little editing, and I’d extracted it from the “bath mat”, and &lt;a rel=&quot;external&quot; href=&quot;https://www.redbubble.com/shop/ap/133892066?ref=studio-promote&quot;&gt;thrown it on Redbubble&lt;/a&gt;.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;/images/2022/12/06/etched_lovecraft_floor_pillow_small.jpg&quot; alt=&quot;the same image, but now on a floor pillow&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot; /&gt;
	&lt;figcaption&gt;&lt;strong&gt;the same image on a floor pillow&lt;/strong&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;That’s when things started to spiral out of control.&lt;/p&gt;
&lt;h2 id=&quot;the-work-begins-dot-dot-dot&quot;&gt;The work Begins…&lt;/h2&gt;
&lt;h3 id=&quot;generating-images&quot;&gt;Generating images&lt;/h3&gt;
&lt;p&gt;I spent that night working through images on Midjourney. It was hours of work, but as I was being pretty lenient with Midjourney I was able to get usable results pretty quickly. &lt;strong&gt;At the bottom of this post is a screenshot of the stream of images I generated.&lt;/strong&gt; I’d put it here, but it’s really long. ;)&lt;/p&gt;
&lt;h3 id=&quot;prepping-images&quot;&gt;Prepping images&lt;/h3&gt;
&lt;p&gt;Then came the editing. By default an upscaled image from midjourney with a 3:2 aspect ratio is only 1536 x 1024 which is fine on your screen, but not so hot for printing.&lt;/p&gt;
&lt;p&gt;Fortunately, I’ve actually got a background in print and fabrics are &lt;em&gt;not&lt;/em&gt; a high-resolution, or high-fidelity medium. So, upscaling artifacts &lt;em&gt;shouldn’t&lt;/em&gt; be a big deal on most things. I’m a bit unsure about the comforters and shower curtains though. Because of this, the acceptable resolution is much lower. Also, &lt;a rel=&quot;external&quot; href=&quot;https://help.redbubble.com/hc/en-us/articles/202270679-Dimensions-Format&quot;&gt;RedBubble has this handy page&lt;/a&gt; that suggests resolutions for each of their products.&lt;/p&gt;
&lt;p&gt;Combine that with &lt;a rel=&quot;external&quot; href=&quot;https://www.pixelmator.com/blog/2019/12/17/all-about-the-new-ml-super-resolution-feature-in-pixelmator-pro/&quot;&gt;Pixelmator Pro’s ML Super Resolution&lt;/a&gt; and the upscaling went pretty well.&lt;/p&gt;
&lt;p&gt;Most of the images required very little editing.&lt;/p&gt;
&lt;h3 id=&quot;redbubble&quot;&gt;RedBubble&lt;/h3&gt;
&lt;p&gt;At this point I’ve sunk at least 10 hours into the process. I’ve made two or three product pages on RedBubble for them. Creating the RedBubble product pages was … work. There’s just no getting around it. It’s a time sink.&lt;/p&gt;
&lt;p&gt;In their defense, it requires a lot of subjective human decision making. They’ve also done a ton of work to help folks to promote things. For example, when I click on “Download Images” on the Desk Mat for &lt;a rel=&quot;external&quot; href=&quot;https://bedbathandthebeyond.com/products/billy_and_gog_s_grand_adventures/&quot;&gt;Billy and Gog’s Grand Adventures&lt;/a&gt; I get this excellent collection of promo images to use to promote it.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;/images/2022/12/06/example_product_images_small.png&quot; alt=&quot;five professional looking product images of the desk mat with my image on it in many scenes&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot; /&gt;
	&lt;figcaption&gt;&lt;strong&gt;screenshot of desk mats&lt;/strong&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Upload, choose, set default colors, save, see what you missed, edit the page to tweak default fabric colors again, repeat.&lt;/p&gt;
&lt;h3 id=&quot;the-site&quot;&gt;The site&lt;/h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://gohugo.io&quot;&gt;Hugo&lt;/a&gt; is my default static site generator. It’s fast, it’s easy, and I’m familiar with it. So I start making pages, and it… is… taking… forever.&lt;/p&gt;
&lt;p&gt;The process was&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;grab the product url&lt;/li&gt;
&lt;li&gt;make a markdown link&lt;/li&gt;
&lt;li&gt;choose 2 or 3 items to highlight&lt;/li&gt;
&lt;li&gt;download images of the image on those products&lt;/li&gt;
&lt;li&gt;make a markdown link to each of those product pages&lt;/li&gt;
&lt;li&gt;embed the image in the page with a markdown link to the product page around it.&lt;/li&gt;
&lt;li&gt;come up with some witty title and ridiculous copy for the page&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I punted on the last one. The process doesn’t &lt;em&gt;sound&lt;/em&gt; like much when you say it, but in practice it was hugely time consuming, mentally draining, boring, and soul sucking.&lt;/p&gt;
&lt;h3 id=&quot;know-thyself&quot;&gt;Know Thyself&lt;/h3&gt;
&lt;p&gt;I knew that if I forced my way through, I could finish the 13 or so products I had. I also knew that I’d never add anything else to the site if I did. I’d definitely not make another site if some other entertaining idea came along.&lt;/p&gt;
&lt;p&gt;So, I wrote some code. We’re talking ugly, get it done, do the first thing that’ll work kind a code.&lt;/p&gt;
&lt;p&gt;Along the way I discover that for some reason Firefox doesn’t bother to store session cookies in its SQLite cookie database, and it turns out I need session cookies. So, right click, inspect the network call to their GraphQL API (totally undocumented) and “Copy as curl”.&lt;/p&gt;
&lt;p&gt;Then write a bash script to read in the clipboard, extract the cookies and throw them into some ancient Netscape Navigator format that curl apparently knows how to handle. This file doesn’t need to be regenerated for …. days? I dunno.&lt;/p&gt;
&lt;p&gt;Then copy the url for the product promotion page (the one with links to downloadable images) and run that through another script that extracts the product id, gives it to curl, which utilizes the new cookie file, and hits their GraphQL endpoint to extract the JSON (same stuff as on the web page). It’s more JSON than I need but refining the query would have been wasted time.&lt;/p&gt;
&lt;p&gt;Run that JSON through a third script (this one in &lt;a rel=&quot;external&quot; href=&quot;https://raku.org/&quot;&gt;Raku&lt;/a&gt;) that presents me with a list like this. Now I just need to scan the RedBubble promo page to find images I want to use, and type in their numbers.&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[33] Shower Curtain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[34] Spiral Notebook&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[35] Sticker&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[36] Tall Mug&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[37] Tapestry&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[38] Throw Blanket&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[39] Throw Pillow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[40] Transparent Sticker&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[41] Travel Coffee Mug&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[42] Wood Mounted Print&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[43] Zipper Pouch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[44] iPad Skin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[45] iPad Snap Case&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[46] iPhone Skin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[47] iPhone Snap Case&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[48] iPhone Soft Case&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[49] iPhone Tough Case&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[50] iPhone Wallet&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Choose some items (comma separated):&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The script considers my choices, downloads the default product image, runs it through imagemagic for resizing, takes my original artwork, resizes that, asks me for the name of the product and ….. voilà I’ve got a markdown file with all the soul-sucking grunt work done for me.&lt;/p&gt;
&lt;p&gt;And yes, I have a way to add new products without overwriting the page.&lt;/p&gt;
&lt;h3 id=&quot;that-sweet-marketing-copy&quot;&gt;That Sweet Marketing Copy&lt;/h3&gt;
&lt;p&gt;I never lost sight of the fact that this was, ultimately, a joke. I expect to, over time, make &lt;strong&gt;tens of dollars&lt;/strong&gt; from this. If we consider my hourly rate it’s very unlikely this thing will ever pay for the labor that went into it.&lt;/p&gt;
&lt;p&gt;So, because I’m not going to get rich on this, and I’m &lt;em&gt;probably&lt;/em&gt; going to get a Cease and Desist letter from a Megacorp who likely lacks a sense of humor and thus shan’t be named. I’m not worried about “real” copy.&lt;/p&gt;
&lt;p&gt;However. We’re a day and a half of work into this thing and frankly my ability to write entertaining micro-fiction about each of these is… shall we say, “diminished”.&lt;/p&gt;
&lt;p&gt;But along the way I’ve been keeping my friend’s discord ( the one responsible for this stupidity ) in the loop. There someone points to &lt;a rel=&quot;external&quot; href=&quot;https://www.alexbirkett.com/ai-text-generator/&quot;&gt;an article about using AI for marketing copy&lt;/a&gt;, and I remember that I’d seen a bunch of hype about OpenAI on Mastodon lately. I don’t really want great “marketing copy”. I want creative stories, that happen to also be marketing copy.&lt;/p&gt;
&lt;p&gt;So, I make an account there, and see what comes out. I started by creating some copy for this image, which I imagined having come from some old children’s book.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;/images/2016/12/06/elouise_makes_a_friend_small.png&quot; alt=&quot;an etching of a young girl offering handfuls of plant matter to an eight foot tall tentacle monster with big eyes&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot; /&gt;
	&lt;figcaption&gt;&lt;strong&gt;Elouise offers flowers to a tentacle montster&lt;/strong&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Folks… Text AIs &lt;em&gt;are good&lt;/em&gt;.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;/images/2022/12/06/example_open_ai_copy_small.png&quot; alt=&quot;a screenshot of the results of my first attempt at using OpenAI for generating copy. alas, it&#39;s a lot of text.&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot; /&gt;
	&lt;figcaption&gt;&lt;strong&gt;OpenAI text output screenshot&lt;/strong&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;In the end I edited the &lt;a rel=&quot;external&quot; href=&quot;https://bedbathandthebeyond.com/products/elouise_makes_a_friend/&quot;&gt;Elouise Makes A Friend&lt;/a&gt; text down to this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This image from Elouise Makes a Friend is a timeless reminder of friendship and kindness. It shows Elouise bravely offering a flower to the Tentacle Monster, who in turn offers a kind smile. Whether you choose a the sleeveless top, the throw pillow, or a coffee mug, this image will comfort you and remind you of the power of friendship.&lt;/p&gt;
&lt;p&gt;Bring this touching moment from Elouise Makes a Friend into your home. Our products featuring this image are perfect for gifting to that special someone, or for yourself.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Everything required heavy editing, but that didn’t matter. It’s &lt;em&gt;radically&lt;/em&gt; easier to edit two to three paragraphs of copy than to come up with some ridiculous story that you then have to edit anyway.&lt;/p&gt;
&lt;p&gt;Over time, I got better and guiding the AI, and increasingly impressed with what it would come up with. For example, I let it create almost everything on &lt;a rel=&quot;external&quot; href=&quot;https://bedbathandthebeyond.com/about&quot;&gt;the About page&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;final-thoughts&quot;&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;Knowing then what I know now, would I do it again? 100%
It was fun. I’m ridiculously proud of it, and I genuinely want many of the products.&lt;/p&gt;
&lt;p&gt;Would I recommend it to others?&lt;/p&gt;
&lt;p&gt;Yes, but with caveats. You really need tooling to get from “I threw something on RedBubble” to “I have a site for my products”. Otherwise your brain will melt. I guess you could outsource that work, but the profit margin is so small here that that’d just put you farther in the hole.&lt;/p&gt;
&lt;p&gt;There are some existing tools on GitHub but a quick glance suggested they might be abandoned, and frankly it was faster to write ~100 lines of Raku than figure out and tweak someone else’s stuff.&lt;/p&gt;
&lt;p&gt;Also, I really need to find a prettier template. I’d hire someone to make one but there’s no way this thing is going to cover the cost of my time to make it, and I’m not currently employed (&lt;a rel=&quot;external&quot; href=&quot;https://masukomi.org/resume/kay_rhodes_resume.html&quot;&gt;hire me!&lt;/a&gt;) so that’s not going to happen.&lt;/p&gt;
&lt;p&gt;Will I add to the site? Almost guaranteed. You can &lt;a rel=&quot;external&quot; href=&quot;https://corporaterunaways.social/@bedbathandthebeyond&quot;&gt;Follow Bed Bath &amp;amp; The Beyond on Mastodon&lt;/a&gt; to see the latest items as I add them.&lt;/p&gt;
&lt;h3 id=&quot;will-i-share-my-code&quot;&gt;Will I share my code?&lt;/h3&gt;
&lt;p&gt;Maybe? It’s kinda crap, and could use a &lt;em&gt;lot&lt;/em&gt; of refinement, and frankly not many folks have realized the joys of Raku yet so it’s probably not in a language you want to poke anyways.&lt;/p&gt;
&lt;h3 id=&quot;what-s-my-favorite&quot;&gt;What’s my favorite?&lt;/h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://bedbathandthebeyond.com/products/lovecraft_and_octopus/&quot;&gt;Lovecraft &amp;amp; The Octopus&lt;/a&gt;. Something about this just tickles my funny-bone. Also it looks unreasonably good &lt;a rel=&quot;external&quot; href=&quot;https://www.redbubble.com/shop/ap/133923215?ref=studio-promote&quot;&gt;on everything I put it on&lt;/a&gt;. I can not explain it. Like, how can you not want &lt;a rel=&quot;external&quot; href=&quot;https://www.redbubble.com/shop/ap/133923215?ref=studio-promote&quot;&gt;this ridiculous clock&lt;/a&gt;?&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;/images/2022/12/06/lovecraft_and_octopus_clock.jpg&quot; alt=&quot;a woodcut of lovecraft looking slightly confused with a bug-eyed tentacle monster behind him. it is on a clock and the arms are coming out of lovecraft&#39;s forehead.&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot; /&gt;
	&lt;figcaption&gt;&lt;strong&gt;a clock with an image of lovecraft and a giant octopus thing behind him&lt;/strong&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;so-many-images&quot;&gt;So Many Images&lt;/h2&gt;
&lt;p&gt;Working With AI Image generators is like herding cats. This is, honestly, a surprisingly small number of images to get 13 usable products. See &lt;a rel=&quot;external&quot; href=&quot;https://weblog.masukomi.org/2022/11/30/a-journey-with-midjourney/&quot;&gt;A Journey With Midjourney&lt;/a&gt; if you’re curious about the process.&lt;/p&gt;
&lt;p&gt;Some of these are good, but I haven’t gotten around to incorporating in the site yet. A handful of these are pixelated, because I’ve got another blog post idea involving them… maybe more t-shirts. ;)&lt;/p&gt;
&lt;p&gt;Holler if there’s anything there that isn’t on the site, that you’d actually buy. I’ll add a page for it. I’m &lt;a rel=&quot;external&quot; href=&quot;https://connectified.com/@masukomi/&quot;&gt;@masukomi@connectified.com&lt;/a&gt;&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;/images/2022/12/06/midjourney_image_stream_small.jpg&quot; alt=&quot;a screenshot showing a stream of many many many images that were generated in midjourney&quot; decoding=&quot;async&quot; loading=&quot;lazy&quot; /&gt;
	&lt;figcaption&gt;&lt;strong&gt;midjourney image stream screenshot&lt;/strong&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Keeping a great Changelog</title>
        <published>2016-07-03T13:03:55-04:00</published>
        <updated>2016-07-03T13:03:55-04:00</updated>
        
        <author>
          <name>Kay Rhodes</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://weblog.masukomi.org/2016/07/03/keeping-a-great-changelog/"/>
        <id>https://weblog.masukomi.org/2016/07/03/keeping-a-great-changelog/</id>
        
        <content type="html" xml:base="https://weblog.masukomi.org/2016/07/03/keeping-a-great-changelog/">&lt;p&gt;Changelogs are an invaluable, and often neglected part of &lt;em&gt;any&lt;/em&gt; software
project. So, how do you do that?&lt;/p&gt;
&lt;p&gt;A good changelog helps you users to understand:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Why they should care about your latest version&lt;/li&gt;
&lt;li&gt;If any of your changes affect the problems or frustrations they’ve been
having.&lt;/li&gt;
&lt;li&gt;If there are any changes that might affect how they use your app / library.&lt;/li&gt;
&lt;li&gt;Why your efforts are worth their continued support.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A &lt;em&gt;great&lt;/em&gt; changelog does all that, &lt;em&gt;and&lt;/em&gt; shows the personality of your team.&lt;/p&gt;
&lt;p&gt;Shifty Jelly’s &lt;a rel=&quot;external&quot; href=&quot;http://www.shiftyjelly.com/pocketcasts/&quot;&gt;Pocket Casts&lt;/a&gt; is
notorious for their fun, and informative changelog entries:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Equal Opportunity variable speed playback. Why should MP3s have all the fun?
Welcome AAC &amp;amp; OGG!  * Bzzz. Bzzz. You can now choose which podcasts to be
notified of.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https://slack.com/&quot;&gt;Slack’s&lt;/a&gt; been doing a pretty bang-up job too:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Fixed: The app now automatically scrolls down when you begin writing a file
comment, giving your precious fingertips much needed beauty rest.  * Fixed:
Time zones were sometimes shown with incorrect deltas. Now your coworker who
is 5 hours ahead of you will no longer simultaneously be 8 hours behind you.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;I can’t overstate how valuable it is to have a Changelog with personality. As
soon as you see that one of the apps you use has a great changelog you look out
for them, and always stay on top of what they’ve fixed and added. Then you start
spreading the word, because not only did they add good stuff, or fix that really
annoying bug, they made you smile along the way.&lt;/p&gt;
&lt;p&gt;A Changelog with personality helps build evangelism for the thing you’ve spent
so much time building.&lt;/p&gt;
&lt;h2 id=&quot;the-guts-of-a-good-changelog-entry&quot;&gt;The guts of a good Changelog Entry&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;It must speak in terms users understand. Most of them won’t be intimately
familiar with your source code. Don’t use internal jargon. If a bug is fixed,
speak in terms of the actions that caused it, or the behavior it exhibited,
but not the specific classes, unless you absolutely have to.&lt;/li&gt;
&lt;li&gt;It must be knowledge that’s useful to your users. Speak to the features and
flaws that affect your customers. Users don’t care that you refactored some
unit test, or reformatted your comments.&lt;/li&gt;
&lt;li&gt;It has to be at the right level of abstraction. Even if your writing an open
source library. The Slack timezone bug above was handled perfectly. They
could have mentioned which class &amp;amp; method had the bug, or the conceptual flaw
that caused the bug, but that’s all too fine grained for a Changelog.
Instead, they spoke at a higher level of abstraction.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;changes-need-to-be-grouped-by-type&quot;&gt;Changes need to be grouped by type&lt;/h2&gt;
&lt;p&gt;Group your bug fixes. Group your features. Group “all the things!”&lt;/p&gt;
&lt;p&gt;Imagine a user who’s been particularly frustrated by a bug in your app. They’re
going to open your changelog and immediately try and find out if you’ve fixed it
in this release. Help them. Don’t frustrate them further by making them hunt for
it in a jumble of features, fixes, and changes.&lt;/p&gt;
&lt;h2 id=&quot;dates-are-important&quot;&gt;Dates are important&lt;/h2&gt;
&lt;p&gt;Versioning your software is great, but dates are important too. When did version
6.0.0 come out? Did I have that problem before then or after?&lt;/p&gt;
&lt;p&gt;Additionally, not everyone in the world keeps dates in the same format.
06-08-16. Is that August 6th or June 8th? It depends on who’s reading it. Year
Month Day is the only one that makes any &lt;em&gt;logical&lt;/em&gt; sense no matter where you
are. XKCD even had a &lt;a rel=&quot;external&quot; href=&quot;http://xkcd.com/1179/&quot;&gt;Public Service Announcement about it&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;to-summarize&quot;&gt;To summarize&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Write at a high level of abstraction&lt;/li&gt;
&lt;li&gt;Speak to things that affect users, not developers.&lt;/li&gt;
&lt;li&gt;Group things so that people can find them easily.&lt;/li&gt;
&lt;li&gt;Add some personality.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;want-an-easy-tool-to-help-manage-this&quot;&gt;Want an easy tool to help manage this?&lt;/h2&gt;
&lt;p&gt;Check out
&lt;a rel=&quot;external&quot; href=&quot;https://github.com/masukomi/changelog_manager#readme&quot;&gt;changelog_manager&lt;/a&gt;. It’s
a free and open source tool to help you easily generate high quality Changelog
entries.&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related Posts:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://weblog.masukomi.org/2016/06/30/why-you-cant-auto-generate-your-changelog/&quot;&gt;Why you can’t auto-generate your Changelog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Why you can&#39;t auto-generate your Changelog</title>
        <published>2016-06-30T08:28:07-04:00</published>
        <updated>2016-06-30T08:28:07-04:00</updated>
        
        <author>
          <name>Kay Rhodes</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://weblog.masukomi.org/2016/06/30/why-you-cant-auto-generate-your-changelog/"/>
        <id>https://weblog.masukomi.org/2016/06/30/why-you-cant-auto-generate-your-changelog/</id>
        
        <content type="html" xml:base="https://weblog.masukomi.org/2016/06/30/why-you-cant-auto-generate-your-changelog/">&lt;p&gt;Let’s start by taking it as a given that a &lt;a rel=&quot;external&quot; href=&quot;http://keepachangelog.com&quot;&gt;Changelog&lt;/a&gt; file is something &lt;em&gt;very&lt;/em&gt; valuable that &lt;em&gt;every&lt;/em&gt; product should come with. Even if your “product” is a library for other developers.&lt;/p&gt;
&lt;p&gt;With that in mind, the question rises of “How can I make it really easy to generate one”. Many developers have had exactly that thought. There are many free and some paid solutions that will “Autogenerate your changelog from your git commits/tickets”.  The simple fact is, that no matter how well they’re written, you shouldn’t use any of them.&lt;/p&gt;
&lt;h2 id=&quot;a-good-changelog-entry-has&quot;&gt;A good Changelog entry has…&lt;/h2&gt;
&lt;p&gt;A good Changelog entry has three primary aspects&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;It’s at the right level of abstraction. Consumers of your product don’t care what files you tweaked or how. They care about the fixes and changes you’ve made that may impact them.&lt;/li&gt;
&lt;li&gt;It needs to be knowledge that’s useful to the consumer of your product. It’s a simple judgement call, but it’s one that has to be made.&lt;/li&gt;
&lt;li&gt;It needs to be written in a way that people who either aren’t geeks, or at least aren’t intimately familiar with your codebase can understand.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;changelogs-from-commits&quot;&gt;Changelogs from commits&lt;/h2&gt;
&lt;h3 id=&quot;commits-are-at-the-wrong-level-of-abstraction&quot;&gt;Commits are at the wrong level of abstraction&lt;/h3&gt;
&lt;p&gt;A git log is filled with commits like: “ensured current_and_future_campaigns returns a relation”, or “cleaned up whitespace in User.rb”, or “fixed expected aspect name in update test for locations_controller_spec” These &lt;em&gt;are&lt;/em&gt; useful to other developers on the project, but they &lt;em&gt;aren’t&lt;/em&gt; things that are useful to the users of your product.&lt;/p&gt;
&lt;p&gt;In short, they contain too much detail, at the wrong level of abstraction.&lt;/p&gt;
&lt;h3 id=&quot;commits-are-messages-from-one-developer-on-a-team-to-another-one&quot;&gt;Commits are messages from one developer on a team to another one&lt;/h3&gt;
&lt;p&gt;They’re not messages to your users, and they shouldn’t be.&lt;/p&gt;
&lt;p&gt;Commits frequently use jargon, and references to specific elements of code. This is absolutely fine, but it’s probably meaningless or useless to most of your consumers.&lt;/p&gt;
&lt;h3 id=&quot;there-s-no-point&quot;&gt;There’s no point&lt;/h3&gt;
&lt;p&gt;If I wanted a geek level listing of all the changes in your git history I could just ask git: &lt;code&gt;git log --oneline&lt;/code&gt; Plus, git will let me slice and dice that information sixteen ways from Sunday.&lt;/p&gt;
&lt;h3 id=&quot;you-can-t-edit-them&quot;&gt;You can’t edit them&lt;/h3&gt;
&lt;p&gt;As &lt;a rel=&quot;external&quot; href=&quot;http://www.commitlogsfromlastnight.com/&quot;&gt;Commits From Last Night&lt;/a&gt; proves. Commit messages frequently aren’t written in a customer friendly way. Even if you’ve got very polite developers, everyone makes typos. You can’t edit the old commit. If you want a changelog that looks professional you’re going to have to manually edit it, the same mistakes every single time you generate it.&lt;/p&gt;
&lt;h2 id=&quot;tickets-are-at-the-right-level-of-abstraction&quot;&gt;Tickets &lt;em&gt;are&lt;/em&gt; at the right level of abstraction&lt;/h2&gt;
&lt;p&gt;…but they rarely have titles that are appropriate for a changelog.&lt;/p&gt;
&lt;p&gt;How about “Item Finder - Page gets wonky after searching for content that doesn’t exist - plus 404”, or “Something’s eating up all the ram and taking down the servers” Not really appropriate for your changelog.&lt;/p&gt;
&lt;p&gt;If you’re really following agile an agile methodology you have user stories that look like “As a &lt;user type&gt; I should be able to ___ because ___” and that’s no good for your changelog.&lt;/p&gt;
&lt;p&gt;Some projects do take the time to curate their ticket titles. The results are &lt;em&gt;almost&lt;/em&gt; usable as changelog entries too, but there are always exceptions. They’re generally worded well for the people who need to work on them, but not your consumers.&lt;/p&gt;
&lt;h2 id=&quot;it-s-a-matter-of-human-judgement&quot;&gt;It’s a matter of human judgement&lt;/h2&gt;
&lt;p&gt;You want a changelog with the information that is useful to your consumers, and written at the right level of abstraction. This means people need to ask themselves some questions. “Do we need a changelog entry for this?”, and if so, “How do I summarize this change in a  way that’s useful to our users?”&lt;/p&gt;
&lt;p&gt;The first question sometimes eliminates information, through curation. That’s something tools can’t do. The second question changes the form of the information conveyed. It was directed internally, now it’s directed externally.&lt;/p&gt;
&lt;h2 id=&quot;want-an-easy-tool-to-help-manage-this&quot;&gt;Want an easy tool to help manage this?&lt;/h2&gt;
&lt;p&gt;Check out &lt;a rel=&quot;external&quot; href=&quot;https://github.com/masukomi/changelog_manager#readme&quot;&gt;changelog_manager&lt;/a&gt;. It’s a free and open source tool to help you easily generate high quality Changelog entries.&lt;/p&gt;
&lt;h2 id=&quot;related-posts&quot;&gt;Related Posts:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https://weblog.masukomi.org/2016/07/03/keeping-a-great-changelog/&quot;&gt;Keeping a Great Changelog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Creating an Interview Worksheet</title>
        <published>2012-10-12T00:00:00+00:00</published>
        <updated>2012-10-12T00:00:00+00:00</updated>
        
        <author>
          <name>Kay Rhodes</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://weblog.masukomi.org/2012/10/12/creating-an-interview-worksheet/"/>
        <id>https://weblog.masukomi.org/2012/10/12/creating-an-interview-worksheet/</id>
        
        <content type="html" xml:base="https://weblog.masukomi.org/2012/10/12/creating-an-interview-worksheet/">&lt;p&gt;Once again, I’d like to pick your brain.&lt;/p&gt;
&lt;p&gt;I’m working on an “Interview Worksheet”. It’s a simple form that you’ll fill out while interviewing someone, and prepping for an interview with them. There is, of course, a section for questions you want to ask them, one for taking notes during your discussion, and one for the common “How would you rate yourself on skill X” questions. But, I’ve also got a section where you can quickly rate the person on various attributes that you tend to look for.&lt;/p&gt;
&lt;p&gt;There are two things I’d like to hear from you:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Suggestions for other rateable attributes that you look for that aren’t in my list below.&lt;/li&gt;
&lt;li&gt;A &lt;em&gt;quick&lt;/em&gt; piece of advice for other interviewers: just one or two sentences, something you try and look for in a candidate that others should consider looking for too, or maybe something you do in an interview that reveals important details.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;My idea is to collect the advice and put it on the back of the sheet. Better to have helpful suggestions from other smart interviewers than a field of white.&lt;/p&gt;
&lt;p&gt;Here’s my current list of rateable attributes. Each will be presented on the form in such a way that you could  fill them out whilst keeping the meaning of your actions hidden.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Experience (how much?)&lt;/li&gt;
&lt;li&gt;Personality (how good?)&lt;/li&gt;
&lt;li&gt;Skills (how skilled are they?)&lt;/li&gt;
&lt;li&gt;Group Fit (you may love them, but how good will they be with the team?)&lt;/li&gt;
&lt;li&gt;Communication (you know, like… with the words ’n stuff)&lt;/li&gt;
&lt;li&gt;Passion (how passionate are they about the task you’re interviewing them for?)&lt;/li&gt;
&lt;li&gt;Additivity ( A measure of how many talents / skills they’d bring to your team that you don’t already have. I could &lt;em&gt;really&lt;/em&gt; use a better word for this, and would love your suggestions.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So, what do you look for? What tips do you have to share?&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Don&#39;t talk about what your product is</title>
        <published>2012-10-01T00:00:00+00:00</published>
        <updated>2012-10-01T00:00:00+00:00</updated>
        
        <author>
          <name>Kay Rhodes</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://weblog.masukomi.org/2012/10/01/dont-talk-about-what-your-product-is/"/>
        <id>https://weblog.masukomi.org/2012/10/01/dont-talk-about-what-your-product-is/</id>
        
        <content type="html" xml:base="https://weblog.masukomi.org/2012/10/01/dont-talk-about-what-your-product-is/">&lt;blockquote&gt;
&lt;p&gt;It’s really important, &lt;strong&gt;not&lt;/strong&gt; to talk about what your product is.&lt;/p&gt;
&lt;p&gt;Nobody Cares.&lt;/p&gt;
&lt;p&gt;Talk about what the customer feels, wants, dreams of, etcetera.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;That’s&lt;/strong&gt; what they care about.&lt;/p&gt;
&lt;p&gt;– &lt;a rel=&quot;external&quot; href=&quot;http://http://unicornfree.com/&quot;&gt;Amy Hoy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Speaking on the &lt;a rel=&quot;external&quot; href=&quot;http://rubyrogues.com/072-rr-entrepreneurship-with-amy-hoy/&quot;&gt;Ruby Rogues Podcast #72&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Appcelerator: extortion is just part of the job...</title>
        <published>2012-09-22T00:00:00+00:00</published>
        <updated>2012-09-22T00:00:00+00:00</updated>
        
        <author>
          <name>Kay Rhodes</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://weblog.masukomi.org/2012/09/22/appcelerator-extortion-is-just-part-of-the-job-dot-dot-dot/"/>
        <id>https://weblog.masukomi.org/2012/09/22/appcelerator-extortion-is-just-part-of-the-job-dot-dot-dot/</id>
        
        <content type="html" xml:base="https://weblog.masukomi.org/2012/09/22/appcelerator-extortion-is-just-part-of-the-job-dot-dot-dot/">&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http://www.appcelerator.com/&quot;&gt;Appcelerator&lt;/a&gt; was recently &lt;a rel=&quot;external&quot; href=&quot;http://developer.appcelerator.com/question/142516/warning-licensing-of-titanium-chaotic-and-unclear-how-to-avoid-extortionate-fees&quot;&gt;caught extorting one of its free users, and then that users client&lt;/a&gt; for £5000, and then others spoke up to say it’d happened to them too.&lt;/p&gt;
&lt;p&gt;Initially it looked like it could have either been a bullshit company policy, or just a salesperson lacking in morals. In the end, it turns out to be both, but the response by the CEO is why I would strongly encourage you to never use an Appcelerator product (free or otherwise) for your project.&lt;/p&gt;
&lt;p&gt;He starts out with a kind of hand-wavey apology that doesn’t really address what happened, and mentions “confusion over licensing” when the user’s real confusion was why they were being extorted. But, eventually he added a comment that did address what happened … kindof:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Let me first say that you are right, this should not have happened and it is totally unacceptable to have contacted your customer if that is what you say has happened. We should NEVER do that EVER without your permission or without your assistance. This is WRONG and if this happened, it’s not appropriate. I don’t know how to be more clear than that.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;At first read, this part sounds good, but then you notice one very subtle, but important, thing that’s left out. He mentions that it’s “unacceptable” for them to have contacted the user’s customer… but there is *no mention of it being unacceptable to attempt to extort money from the user themselves. *&lt;/p&gt;
&lt;p&gt;And then there’s the “if that is what you say has happened” clause. This is after they spent time looking into the problem, and then proceeded to apologize for it. The apology implicitly states that this incident occurred, otherwise why would you apologize? To essentially say “I’m truly sorry for our actions but really you could just be a lying schmuck” That’s bullshit. You should either have the balls to accept that the bad thing happened or to call the user a liar. But that’s not the truly egregious part…&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;However, not everything is done to be malicious and we certainly NEVER intend to extort money from anyone. I simply don’t see how you can draw a straight line from spending literally tens of MILLIONS of dollars this year alone on Titanium and providing it for FREE to well over 98% of the users – and then say that we’re “extorting people”. Let’s get some perspective.&lt;/p&gt;
&lt;p&gt;Was the sales rep over eager and trying to hussle to get a deal? Probably. In my opinion, that’s the job of the rep and we work with hundreds of new paying customers each quarter and we’ve only had a few complaints about it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;“…we certainly never INTEND to extort money from anyone…” (emphasis mine). You don’t intend it but… but what? This is just “one of those things” that happens from time to time?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“…we’ve only had a few complaints about it.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Wait… &lt;strong&gt;&lt;em&gt;what?!&lt;/em&gt;&lt;/strong&gt; You’ve had &lt;em&gt;multiple&lt;/em&gt; complaints about your salespeople attempting to extort money from users in the past… and they’re still doing it?!&lt;/p&gt;
&lt;p&gt;Notice, that in none of the CEOs responses is any mention of having reprimanded, or better yet, fired the salesperson in question. There is no mention of talking to the whole sales team to make sure they understand that they are not allowed to attempt to extort people. Obviously, since this has happened multiple times in the past this is either not something the salespeople understand, or something the company is actively encouraging.&lt;/p&gt;
&lt;p&gt;If the former it speaks of a hiring process so broken that it repeatedly hires individuals with moral compasses so broken that they don’t understand that it’s wrong to extort people, and so stupid as to not realize that it’s illegal. If the latter, then you’ve got a company with a broken moral compass that is spreading that disease to its employees.&lt;/p&gt;
&lt;p&gt;There is one other logical explanation. They’ve had one particular salesperson who has been repeatedly extorting people for money, received multiple complaints, and for some inexplicable reason is &lt;em&gt;still employed&lt;/em&gt; there.&lt;/p&gt;
&lt;p&gt;So, which is it Appcelerator? Are you morally bankrupt and encouraging your employees to follow your lead? Are you repeatedly hiring morally bankrupt individuals? Or, are you so lacking in concern for your community that you refuse to fire a salesperson who keeps extorting its members?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I hope you’ll give us the same respect and professionalism as well.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;You know, I think I’ll do just that:  “Fuck you Appcelerator.”&lt;/p&gt;
&lt;p&gt;Oh, was that not respectful, or professional? NEITHER IS &lt;em&gt;REPEATEDLY EXTORTING YOUR USERS&lt;/em&gt; YOU FUCK!&lt;/p&gt;
&lt;p&gt;The iPad app we’ve been working on is currently using a very useful plugin that can only be found in the Appcelerator ecosystem. I shall be ripping that out and finding some other solution to the problem. There are plenty of competitors in this space. I think it likely that none of them consider extortion an unpleasant but acceptable consequence of having salespeople.&lt;/p&gt;
&lt;h2 id=&quot;disclaimer&quot;&gt;Disclaimer:&lt;/h2&gt;
&lt;p&gt;This is an opinion piece. The logical conclusions are ones I have come to from reading the public comments by their CEO. It is entirely possible that I am 100% wrong.&lt;/p&gt;
&lt;p&gt;But, if it were my company (and I’ve had a few small ones), everyone who was caught attempting to extort money from my customers would be handed a box and fired on the spot, along with anyone else who was found to be aware of the activity. If it turned out to be a persistent problem I would fire whoever had been hiring these broken excuses for humanity. I would call &lt;em&gt;everyone&lt;/em&gt; together after each incident and make it clear that this type of behavior was 100% unacceptable. I would tell them exactly why person X had been fired, and I would make sure that nothing like that ever happened again.&lt;/p&gt;
&lt;p&gt;I would call up the user who had been extorted and personally apologize, on the phone (not via a forum), let them know the salesperson had been fired and give them an free unlimited lifetime subscription to whatever the most valuable plan on offer was.  Morals are not trainable. Simply saying you’re sorry, but noting that this stuff doesn’t happen very often is so fucking wrong it isn’t funny.&lt;/p&gt;
&lt;h3 id=&quot;do-not-work-with-this-company-please&quot;&gt;Do not work with this company. Please.&lt;/h3&gt;
&lt;p&gt;You’re better than that. 99.99999% of humanity is better than that, and if you’ve got clients you definitely don’t want to risk your reputation with them by working with a company this morally bankrupt. If you’re a one person operation you don’t want to end up having to rewrite your entire app, or hire lawyers when they start demanding payment for their free service, or additional payment for one of their paid ones.&lt;/p&gt;
&lt;h2 id=&quot;update&quot;&gt;Update:&lt;/h2&gt;
&lt;p&gt;It should be noted that my quotes were taken from the CEOs comments to his “accepted answer”. You may need to click to expand the comments to see them.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>How to Sell... Anything</title>
        <published>2010-05-08T00:00:00+00:00</published>
        <updated>2010-05-08T00:00:00+00:00</updated>
        
        <author>
          <name>Kay Rhodes</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://weblog.masukomi.org/2010/05/08/how-to-sell-anything/"/>
        <id>https://weblog.masukomi.org/2010/05/08/how-to-sell-anything/</id>
        
        <content type="html" xml:base="https://weblog.masukomi.org/2010/05/08/how-to-sell-anything/">&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;http://s3.amazonaws.com/mobtvse_masukomi/assets/2010/05/how_to_sell.png&quot;&gt;&lt;img src=&quot;http://s3.amazonaws.com/mobtvse_masukomi/assets/2010/05/how_to_sell.png&quot; alt=&quot;Flow chart of how to sellanything&quot; title=&quot;How to sell... anything&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A flow chart of How to Sell…Anything.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Financial Entropy of a Webapp Subscriber</title>
        <published>2006-11-17T00:00:00+00:00</published>
        <updated>2006-11-17T00:00:00+00:00</updated>
        
        <author>
          <name>Kay Rhodes</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://weblog.masukomi.org/2006/11/17/financial-entropy-of-a-webapp-subscriber/"/>
        <id>https://weblog.masukomi.org/2006/11/17/financial-entropy-of-a-webapp-subscriber/</id>
        
        <content type="html" xml:base="https://weblog.masukomi.org/2006/11/17/financial-entropy-of-a-webapp-subscriber/">&lt;blockquote&gt;
&lt;p&gt;&lt;img src=&quot;/images/2006/11/17/black_hole_entropy.png&quot; alt=&quot;image&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I was consumed with dreams about Stephen Hawking’s &lt;a rel=&quot;external&quot; href=&quot;http://en.wikipedia.org/wiki/Black_hole_thermodynamics&quot;&gt;black hole
entropy&lt;/a&gt; formula
last night, which is frustrating because the math is, sadly, beyond me.
But, I mention it to you today because, knowing so little about black
holes my mind instead kept trying to change it into an formula to
calculate the Financial Entropy of a webapp subscriber.&lt;/p&gt;
&lt;p&gt;So, I put it to you, dear reader, have you, or any of your math enabled
friends, come up with a formula for calculating the finincial entropy of
a webapp subscriber? If you haven’t, but you could, there are many many
entrepreneurs who would sing your praises and happily buy you a drink.&lt;/p&gt;
&lt;p&gt;On a related note: a little Googling brings up &lt;a rel=&quot;external&quot; href=&quot;http://www.amazon.com/gp/product/0471118567/&quot;&gt;this fascinating looking
book&lt;/a&gt; whose price or
$199.95 puts it beyond that of anything I’ll buy without having a damn
good idea of what exactly is inside. Also, why is it that I never heard
the phrase “Financial Entropy” until last night in my dreams?&lt;/p&gt;
&lt;p&gt;[Edit]: 16 years later… The book is $4.99 on Amazon and I just ordered a copy.&lt;/p&gt;
</content>
        
    </entry>
</feed>
