Put the knife down and take a green herb, dude.
One feller's views on the state of everyday computer science & its application (and now, OTHER STUFF) who isn't rich enough to shell out for www.myfreakinfirst-andlast-name.com
Using 89% of the same design the blog had in 2001.
FOR ENTERTAINMENT PURPOSES ONLY!!!
Back-up your data and, when you bike, always wear white.
MarkUpDown is the best Markdown editor for professionals on Windows 10.
It includes two-pane live preview, in-app uploads to imgur for image hosting, and MultiMarkdown table support.
Features you won't find anywhere else include...
You've wasted more than $15 of your time looking for a great Markdown editor.
Stop looking. MarkUpDown is the app you're looking for.
|Monday, February 19, 2018|
If your architect hasn't written a tutorial -- not a cursory howto, but a tutorial -- you don't have an architect.
What does a tutorial look like? The canonical example for C# web apps, though now a bit long in the tooth, is NerdDinner:
If your architect hasn't taken the time to articulate their vision thoroughly, in plain, if expert-specific, [language of your locale], there's not much hope for your coders. Your codebase will necessarily be an unmaintainable cyborg (a topic I'm [not] surprised to find I've been ranting about since 2002).
The best job security is none. You've set your stage so well any competent programmer could come in and take over, getting up to speed incredibly quickly.
Those coders who work to ensure they're the most easily replaced are absolutely irreplaceable.
posted by ruffin at 2/19/2018 10:02:00 AM
|Wednesday, February 14, 2018|
I've been setting up a new greenfield project, and wanted to use not exactly a new stack, per se, so much as an "all-star" stack that'd capture the lessons I've learned coding recently. For me, that means it needs to be pretty straightforward, minimal dependencies, and minimal compilation. The fewer libraries and snowflake server requirements, the better.
On first take, after bypassing Node, which really is the winner,1 my guess was that my all-star stack would be...
VueJS was difficult to pick. I've used React, and almost solely React, for the last year. I like it. But I believe it contributes to monolithic source that's not necessarily factored well. The more interdependencies your code has, the more maintenance is an issue. And doing good React essentially requires, at this point, using Babel, and as soon as you're transpiling, well, the surrounding tooling and library dependencies skyrocket. Not to mention that debugging transpiled code either means you're wading into transpiler-generated muck, or you've got to maintain yet more tooling to step through things in something that's not the browser.
I was originally going to use Handlebars, which I've liked for years for its exceptional thinness & the way it encourages minimal business logic on the client, but caught Shawn Wildermuth on Jesse Liberty's Yet Another Podcast, and heard him talk about VueJS. VueJS is essentially Handlebars with, afaict, a few more recent lessons baked in. The syntax is actually very similar to Handlebars in many ways.
It looks like we've got good room to grow using VueJS' conventions if we want to do a full SPA in the future.
I also debated not using Bootstrap, but I don't think it's worth the time to roll your own responsiveness when Bootstrap does it so well. It's over 200 KB total, but if you have it cached, that's a one-time hit that's smaller than most images. You're fine.
jQuery was also debatable, since you can handle DOM manipulation fairly well by wrapping vanilla JS with some convenience wrappers to check for DOM existence, but at 69 KB? Come on. It's well known, rock solid, and has good industry support. Use jQuery.
I was going to go through my headaches setting everything up here, but I'll split that into a new post later. The quick version? Because of a wack nuget configuration I didn't realize was an issue (command line nugget didn't pick the "right" nugget server; I had a local one set up in VS2017 as well), I'm using SQL Server for now, though I will probably give PostgreSQL another look before I settle on a dbms.
1 If you want the cleanest stack, there's nothing more advantageous than using the same language on the server and the client. Node lets you do that. There's some overhead (learning & setup tedium) standing up a web server -- do you just use Express everywhere, or serve from Nginx? -- but nodejs is The Right Answer, imo. But I'm a C# guy "professionally", and there still seem to be more opening for C# devs than node, so I think there's an argument that a C# server-side should be easier for a customer to have maintained going forward.
posted by ruffin at 2/14/2018 11:10:00 AM
|Thursday, February 08, 2018|
And I do mean to resonate with Darwinism there.
posted by ruffin at 2/08/2018 11:56:00 AM
|Monday, February 05, 2018|
Have you ever opened frozen concentrated juice and had it look less juicy and more syrupy? I have.
After looking at it strangely for a few minutes, and remembering that it'd been in the fridge for months on months, though still well within its due date, did you remember that someone'd left the freezer door open overnight not that long ago? Boy, I did.
And that's probably what happened, confirmed by New York State's Department of Agriculture:
(Ok, yes, I'm mixing it in a growler. Unlike the Yankees, I couldn't find any pitchers.)
posted by ruffin at 2/05/2018 09:54:00 AM
|Friday, February 02, 2018|
There's something in "massively multiplayer online games" called theorycrafting. It's when you take a game and play it with an eye to figure out the numbers beneath it. You've probably seen Dungeons & Dragons played in a movie or television show, where dice are rolled to see if a player, say, escapes from a monster's grasp.
When you're playing with dice, you can see the numbers. "To escape, you need to roll greater than a fifteen on a twenty-sided die," your referee might tell you. When you play a game online, like World of Warcraft, the "dice" are hidden, the server is the referee, and some software is coming up with all of the percentages and values.
But "theorycrafters" want to see the dice. They'll play in ways where they can take known situations and outcomes, change a single variable, and then see how the known values change. They'll record things in spreadsheets, or even use programs written specifically to watch and record values as they play.
What theorycrafters are trying to do is, in effect, exactly like counting cards in blackjack. If you know what the system is doing... that there are, say, six decks in a shoe, and 13 kings have been played... your odds of winning, and what the odds are for winning what you want, go waaaaay up.
With online games, it's sort of like playing blackjack without knowing which cards were removed from the deck. The servers could be running whatever numbers they want.
Now, if you ask me, theorycrafting isn't fun. When I play, I want Blizzard (Warcraft's developers) to take my dice, please, and let me forget what I'm doing isn't much different from playing blackjack or slots.
Unfortunately, this attitude keeps me from participating fully in the game. In "raids", where 30-40 people cooperatively1 fight the most powerful creatures in the game, everyone is supposed to be familiar with all sorts of theorcrafted knowledge...
If you're not well-versed, and your character is wearing or doing the wrong things, especially in the toughest parts of the game, you're liable to get kicked out of the raid.2 And those links I've included, above, were for just one "specialization" of the thirty-six in the game! Phew.
You get the picture. It's insane the amount of studying that needs to go on to simply know the results of theorycrafting, much less to do the theorycrafting yourself. And it kills some of the fun. Ultimately, there are other games I could be playing.
Which brings us to the lesson I'm trying to push here: Theorycrafters might be playing the same game as me, but being a theorycrafter is work, hard work.
Targeted advertisements are like theorycrafting. Discuss.
How does this connect with being an indie app developer? Well, MarkUpDown, my Markdown editor for Windows 10, is getting reasonably mature, and over the last year or so, I've had my ears open to other indie developers that talk about advertising. There's a decent amount of advice about how to market, but I noticed that I bristled when I heard about one kind of marketing in particular. It took me a while to figure out why: It's because there's a particular type of marketing that reminds me of theorycrafting, and I'm not convinced the juice is worth the squeeze.
I'm going to lump the advertising methods I've heard discussed into two categories: Broadcast and microcast.
(Dare you to figure out which one I like more.)
You're used to broadcast advertisements. Television, radio, and newspapers are the conventional examples. In a figurative since, there's always a lot of "bycatch" in broadcast. You're casting the net out broadly, knowing a good percentage of the people who are exposed to your ad aren't in your market.
(Source: Wikimedia commons)
You certainly want to cast the nets where you think you'll maximize the market you're after, but you're not being that careful. Fill it up!
Here's one example of a "new media" broadcast from John Saddington's blog, where he's talking about spending $9000 to advertise his Desk app on Daring Fireball:
News flash: It did.
That's expensive, and risky, but fun.
An aside on advertising dollars
I can hear folks saying to themselves, "Nine grand?!! Are you OUT OF YOUR MIND?!!!"
One thing I feel I should point out: If you've written a detailed app, you've already invested lots more than nine grand in your endeavor. I don't want to think about it too much, but I probably have $30-40k of time in MarkUpDown. That's insane. It's a great Markdown editor -- the best on Windows, I don't mind believing -- and that's probably about what it'd cost to get someone with my experience to write it.
But that's a ton of cash -- or, to be kinder, a huge investment. If you won't drop $10k to get the word out on something that ran you $35k to write, well, your don't value your time enough.
I know, I know. As an indie, getting to write what you want is a huge part of the gig, and by "part", I mean "reward". And I know the feeling of wishing you could give some cash back to your employer to work on what you wanted to, even if it was constrainted to something in their app! I often feel that way about tech debt. Gosh, I'd work for half-price now to make my future work so much easier.
Regardless, the advice here is don't be penny wise with advertising and pound foolish with your time. $5-10k is not a lot to spend on effective advertising.
The question I keep asking myself is, "What advertising is going to be effective?" And with that, we're back to our consideration of...
Facebook and Twitter, even Google AdWords to a degree, offer a different sort of advertisement than traditional broadcast. Targeted advertisements allow you to cast your net more precisely, reducing the bycatch significantly.
Now, instead of broadcasting to everyone at a website (can you imagine if Google search had static banner ads?), you get to wait until the user has performed some action that hugely improves the chances they're interested in what you're selling.
These are increasingly specific demographics. You're no longer broadcasting to a group that you hope largely overlaps with your market. You're lasering in on people you already know are your market, and hoping your net works.
Of course, this service is going to cost you more per impression too.
Theorycraft and Microcasts
The thing that bugs me is how theorycrafty app developers sound when they're working on their targeted microcasts. Like theorycrafting a game, finding the right target for your advertisements is hard work. I understand the appeal that if you get everything dialed in perfectly, you could theoretically take your hands off of that perfect combination, step away, ramp up your advertising budget, and hit Phase 3. Profit.
But it always sounds like there are too many dials.
Here's a quick introduction to how it feels to use Facebook ads from Charles Perry and Joe Ciplinski on the Release Notes podcast, episode Sorta Cool, Sorta Creepy, from back in December 2015 (link is cued up to 8:33 - transcriptions and any errors therein are mine!):
And from the same episode a few minutes later on...
Man, that's a lot of dials. And each one could be the barrier to hitting your target market. Who is more likely to use Bombing Brain's Setlists app? What if it's, strangely, drummers, even though there's a huge emphasis on chords in the app? You might never think to add them to a targeted ad, though a broadcast ad on The Garage Band podcast (made up name) would've hit them all. That is to say, microcasts seem to operate as opt-in operations.
Or here's Curtis Herbert's blog post, That Dirty M[arketing] Word:
That sounds like theorycrafting.
Or on the Under the Radar podcast, episode #49, App Store Search Ads:
Theorycraft or carpet bomb?
Look at the emphasis on cost per acquisition in the last two microcast quotes. That's the right metric, but I'd suggest "per user" is the wrong unit.
Maybe it's just mentality, but I think it's also largely medium. There are places your potential users live. If you can blanket one of those places that overlaps with your potential users closely enough, it seems worth it to me to broadcast there.
Now I figure part of the lure of microcast is microspending. You can spend $20 (or less) a month on these media if you want. If you target too broadly, your cash will be spent quickly, and you'll hit folks who weren't in your market. But if you start with the pico instead of the micro, you can work your way up, minimizing the cash you've wasted on bycatch.
But I also worry the time it takes to "pico-theorycraft"3 an advertisement... oh, the time. What features did you not add because of the time you spent theorycrafting advertisements? I think Curtis is happy with his results, but every time I have a process that complicated (including writing blog posts), I look up at the clock and say, "Where did today's time go?!"
And if the ads don't scale, even if our theorycrafted dials were working great, what time we've wasted! If I had to tune all those knobs over days or weeks, then cranked my spending from $20 to $2000, and didn't get 100x results, well, man. What a waste.
If you have a broad enough market, and the market congregates in a few specific places that are marketable, I think the lesson is that you go advertise on those media first. The broadest exposure is the best exposure, and has the best follow-on benefits. I also wonder how much of, say, Daring Fireball readers also would be the ones hit by a well-theorycrafted advertisement.
If I had a marketing department with people who really knew how to do this, I would expect them to make these experiments. When it's just me, well, easier is better. Time is money and all that.
But for a niche app like MarkUpDown, even though there was, a few years ago, at least one decent Markdown editor on Windows making enough money it got rewritten, I have to consider just how big my total potential market is. If I could reach everyone who would spend $23 on not just a Markdown editor, but my Markdown editor, how many would that be? If I could find Desk App's Daring Fireball equivalent, could I pull down 550 purchases? Or should I just consider this app a labor of love? If the market is thousands, and I can find the right source, broadcast makes sense. If I want to maximize the return on a labor of love, then I should keep up the hobbyist mentality and microcast.
(And then I think there's probably a middle-ground, where big companies carpet bomb with "targeted ads", but the ads really aren't all that targeted at all, since the markets are so large. "People who watch the NFL," doesn't really require theorycraft-level consideration, and if you're already advertising on TV during games, why not Twitter and Facebook too? Honestly, that's probably the best answer. If Saddington didn't market on Daring Fireball and then to Daring Fireball readers on Facebook and Twitter, he missed a great opportunity. If you buy into the whole saturation thing.)
In any event, there are my current thoughts on advertising, as I try to determine where to sink my hard-earned dollars so that they'll best make friends and bring more dollars home.
1 No joke! From [wikia.com](http://wowwiki.wikia.com/wiki/Raid):
Raid groups are a way to have parties of more than 5 and up to 30 (40 for some old raids) people, divided into up to 8 groups of up to 5 players.
2 Interestingly, as I've argued before, this means the game developers expect and effectively require you to play outside of the game to fully experience it. I'd argue that, additionally, Blizzard's level of financial success demands and depends on theorycrafters as well.
3 I realize I'm misusing "theorycraft" here. There are no hard numbers behind the scenes when you're talking about people. Oh sure, we can play amateur economist, or pretend our experiments in Facebook targeted ads are representative, or apply sampling statistics until we're blue, but we could be wrong too. See the major new networks from our last presidential election. That said, the methods between targeted ads and theorycrafters are similar, and the results could be too. Let's pretend the comparison works.
posted by ruffin at 2/02/2018 02:20:00 PM
|Friday, January 26, 2018|
I realize I'm old, but I still haven't swapped from buying music to streaming all of it.
Seems like folks like me are being underserved. It's not that we don't like to buy music. In many cases, it's the opposite. I buy more albums & tracks each year than I'd like to count.
Why don't any of these music cloud services provide good, ad-free recommendation services for music buyers, not renters, like me? They're sitting on millions of people's listening habits. Why not convince me to buy more with spot-on suggestions?
For Apple, Spotify paid, and Amazon Unlimited, I've yet to find that I need to pay $10 a month or so to listen to everything. That's about ten new albums a year plus a few guerilla tracks, which seems enough, so far.
These are closed ecosystems. I can't easily get just the recommendations. I hear Spotify has great recommendation playlists, but ads are too annoying to listen to when I use my music (and I do, mostly to give myself a little more energy when coding). I'm not going to pay for recommendations if I don't know they'll be pretty good, and I'm not excited about listening to music with ads. I'd rather buy the good stuff. Nor do I want to pay so much for recommendations that I can't afford to own anything new. I'm not a fan of subscriptions in general... Enjoying music shouldn't be a capital addiction, just an emotional one.
And why don't I trust recommendations? I used & enjoyed Pandora for a while, and it was initially great for giving me suggestions for new music, but once good suggestions ran dry (and they did dry up -- at first the suggestions were great, but then they became repetitive and/or reaches that didn't quite fit), the honeymoon, as they say, was over.
Ads plus the same rotation of songs, plus a few new misses when I sign back in every few months? No thanks. If they were as good as they once were, I'd consider $5 a month for "personalized radio with no ads". But I'm afraid that because they're doing this with "curation" (human and algorithmic) rather than actual listeners' habits, the recommendations simply aren't as good as they should be.
Here's an easy example: For the most part, I like hard rock with female front'men. Why do they give me so many whiny dudes? NO WHINY DUDES, PANDORA, KK? THX. Apparently the music genome has no concept of XX.
Three services I actually use
Amazon Prime hits a sweet spot. In one app, I can listen to all of my own music that I've uploaded, and its catalog is just big enough and its recommendations are just good enough for me to occasionally discover new artists without ads when my ear starts wanting to wander. This is sort of how the radio used to work, but adless.
(It's worth mentioning that I listened to a lot of cassettes when I started driving. I don't like ads. And that means I've known a few albums -- Knowledge is Power, Pump, Aftermath -- really well for decades.)
Occasionally, I hear of something new that's not on Prime or an artist that I've "discovered" on Prime doesn't have their entire discography there, and that's where Spotify's free tier pops in.
Yesterday, I bumped into Samantha Fish on Prime (a follow-on from listening to Halestorm, I think), but the most recent record, Chills and Fever, that was on Prime, wasn't nearly as good as Black Wind Howlin' from a few years back, at least not for a Halestorm fan.
A little sleuthing later determined that she has two albums from last year, and that the Chills & Fever one was a little experimental. Belle of the West is a little more like her earlier stuff.
Spotify lets me take a quick listen with minimal ads to see if this I'm buying a track or two or the whole CD.
And where did I do this research? The last of the three services I use: YouTube. I really thought this one was "just for the kids", but, newsflash, it's MTV. This is not new, no matter what the internets are telling you.
And YouTube's related videos list is a pretty good place for discovery too.
What can Apple learn?
As a stockholder, this pains me a little. Probably the coolest picture of Steve Jobs is the one when he's sitting, cross-legged on the floor, at home, with his albums, hifi on the floor behind him, fancy-pants light over his head, drinking tea. Minimalist. Relaxed. Big honkin' speakers. Good sound. Good albums.
(image from geeksandbeats.com)
You know what's most important to folks listening to music? Good music. Knowing which albums to buy. Why do I use Amazon streaming? Because it's all of my music plus more, and that more is curated for me in a way that's not annoying to access.
But, like Jobs, at least in 2007, said, [some] folks prefer to own music.
Why can't folks who are stuck in 2007 get good recommendations from Apple Music? Why can't I play even the stuff I've purchased from Apple on the Android Apple Music app? Why doesn't Apple try to sell and sell me good music? Why does Apple Music feel like a closed system, and the iTunes Music Store feel a little like Tower a month or two before they started discounting for clearance?
Good recommendations are out there. Apple has them. Why can't I hear the recommendations without ads or a monthly access charge?
And if you hooked me on enough recommendations, enough that it'd far exceed my album budget to keep up? I wonder what I might finally do...
Painfully, I've ironically spoken too soon.
posted by ruffin at 1/26/2018 11:38:00 AM
|Friday, January 12, 2018|
You know how you keep private information private? You take it off of the internet.
Firewalls don't count. OFF of the internet. If you have sensitive, proprietary data, "air gap" that portion of your company's network.
If you have to shoeleather data you don't mind getting out from one network to another, you essentially completely eliminate the possibility of a non-geographically confined attack against the data you want to keep safe. That is to say, people in Russia can't steal your data unless your network extends to Russia. Pro tip: The internet extends to Russia.
There's this bad joke in the preamble to the Dead Milkmen's song, Bitchin' Camaro (lyrics here, but they're not safe for polite consumption) that goes something like this...
YOU CAN'T STEAL A CAR FROM THE BAHAMAS AND DRIVE IT TO THE US. Get my drift? You want a car to be reasonably safe from US car thieves, put it in the Bahamas. Geography still matters. You want to keep your data safe from data thieves? Don't put it on a network that extends to their apartment.
More to the point, why is my personal credit data on the same network as Playboy? Doesn't that strike anyone else as a little odd?
It drives me absolutely mad how much we pay every year in breaches for the convenience of not having to separate networks. I can wait 48 hours to know if I qualify for a car loan, okay? Or, crazy thought, how about have the dealership call in the request?
Now all that said, please heavens tell me this dude knew to make periodic backups onto at least two jump drives. Or to at least print it out every so often.
posted by ruffin at 1/12/2018 02:22:00 PM
All posts can be accessed here:
Just the last year o' posts: