MacBook, defective by design banner
Back-up your data and, when you bike, always wear white.

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

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.

Learn more or head over to the 'Store now!

Monday, February 20, 2017

From Jslint Is Not A Code Quality Tool For 3rd Party Code – Hugh FD Jackson:

Crockford is an opinionated, experienced and charismatic guy. As such people often do, he has gained significant influence. In this post, I’m going to focus on what Crockford thinks the role of JSLint is, as typified by this suggestion:

“There is one reliable, objective metric of JavaScript code quality that can help you in making your choice [… of library …]: JSLint. If JSLint finds problems in a library, then dump it and move on to the next one.”

I firmly believe that this attitude is damaging; and worth focusing on given his potential influence.

Yeah, wow, no. That is bad advice.

As I've said on Stack Overflow before:

As a rule, you should exempt 3rd party libraries from your linting. There's nothing you can do about external libraries unless you want to fork them and lint them yourself, which is, well, insane. ;^) And, again, minified code often takes shortcuts that aren't lint-friendly.

Lint your code before you minify to keep its quality high, but don't worry about QAing libraries you shouldn't be touching anyhow. Assume they have another method for ensuring high quality, which might include using a different linter, or a linter with a different set of rules.

I'm a huge fan of linting your JavaScript code, and there's no more thorough linter for less investment on your part than JSLint. Nothing it forces you do is objectively wrong, and you don't have to worry about getting everyone in a room to set up an ESLint rule set before you get started.

But there's absolutely no reason not to use libraries that aren't themselves lintable in their original. There's a clear interface between you and that code. It's sort of like how RMS wishes you wouldn't use any non-GNU code. A proscription from using non-JSLinted libs is more political than rational.

Labels: , , , ,

posted by ruffin at 2/20/2017 08:42:00 AM
Tuesday, February 14, 2017

From Netscape Goes Bonkers – Joel on Software:

The sheer volume of bugs, it seems, proves that rewriting code from scratch does not make for a better code base, it makes it worse. Old code doesn’t rust, it gets better, as bugs are fixed.

Someone should tell that to StackOverflow.

New (2017) StackOverflow menubar

Oh, I know, I know. This is design, you say, not code as such. But riddle me this, Batman: Was anyone not using SO because of the design?

I'm going to hazard a guess that the code behind that menubar/toolbar was heavily refactored too. Could be wrong. Hope I'm wrong. Idk. But in either event, I'm not sure the old site's design had rusted.

Labels: , , ,

posted by ruffin at 2/14/2017 09:07:00 AM
Thursday, February 09, 2017

Finally bagged some Solo3s. They're nearly as good as advertised. I'm surprised by their range. Depends a little on weather, but I've been able to leave my iPhone inside, walk out the front door and about 30-40 yards further outside before I even got the "left ear orientation" issue -- the antenna seems to be in the left ear of the Beats, and it keeps the connection longer if the left ear is pointed towards the iPhone.

Anyhow, I wanted to write a review, but kept waiting until I had time. Instead, let me point out this review, which covers almost exactly everything I was going to say.

I'll add that the Solo3s don't automagically pair with my iPhone every time, however. The magic pairing is sooo much better than Bluetooth is usually, but I did run into this...

Connection Failed -- W1 chip (Beats Solo3 and Airpods)

So that could've been better. It's rare, but it happens.

Otherwise, though, they're great. When people say that Apple's missing out on Alexa and other personal assistants, these headphones make it obvious that they really aren't, they're just concentrating on personal computers. As long as I'm not planning to have multiple people listen to something, I now use my Solo3s instead of Alexa. Podcasts, weather, reading texts... they're all with me all the time now. The Beats really are an interface.

Oh, and though the range of the headphones for audio out is incredible, the range of the microphone isn't nearly as impressive. I've tried replying to texts that Siri read to me fairly cleanly from two three rooms down from my iPhone, but its transcriptions from the same distance are crap until I get lots closer. Pairing also seems much more range intolerant.

I'll also add that being able to hook up a cable to listen to music from the old jack without power is pretty cool too. That is, even if your batteries die, you can listen to music with a simple 3.5mm jack cord.

Overall, I'm paying entirely too much for easy pairing, but once you get over the $150 premium for fancy Bluetooth ($70 worth of headphones from $220 Solo3s), they're really nice. Long battery life, no reason to charge twice a day, and no reason to have my phone "Find my Beats".

Because if you have to add something to your phone OS to find your headphones, I don't care what you say about them being hard to lose, you've got a door with a sign that says push.

Door handle that visually says pull, but has a sign that says push

Solo3s are a better solution.

Labels: , ,

posted by ruffin at 2/09/2017 08:24:00 PM

From (via Michael Tsai):

For a while, I’ve been using a different definition of Technical Debt. It helps teams frame their work in a way that highlights their choices and it can lead to better ones.


Technical Debt is the refactoring effort needed to add a feature non-invasively


But with their example -- granting it's a simplest case, "staged house" example -- no. No. Heavens no.

While they admit it a bit...

It’s easy to challenge this example. It borders on over-engineering.

Yes. It doesn't just border, it's over the line.

Over the line reply

Labels: ,

posted by ruffin at 2/09/2017 09:30:00 AM
Wednesday, February 08, 2017

One of my favorite commands on *NIX is ls -alF, or "list Alf" as I usually remember it. It gives you not just a list of file names in a directory, but what they are, what permissions they have, and shows hidden files and folders to boot.

But when I come back to Windows, PowerShell's ls alias doesn't work as well. It's just a wrapper/alias for Get-ChildItem (iirc), and you have to add the -Force param to it to see everything. So ls -Force shows hidden items, but ls and ls -alF doesn't.

I made a quick alias for PowerShell so that I could type ls-alf instead -- or actually ls-[tab]. The problem is that you can't set up an alias that includes attributes, so I have to make not an alias but a function...

function ls-alf { Get-ChildItem -Force }

(fwiw, you can use ls or gci or another alias for Get-ChildItem in your function.)

That works for the window you're in, but to make it permanent, you need to put it into your profile file, which luckily is kept in the $profile variable. For instance...

vim $profile

For me to do that, though, I had to make this directory first ($profile linked to a path that didn't exist):

mkdir C:\Users\MyFreakinName\Documents\WindowsPowerShell

Now you slap in the function, and you're done. Unless you haven't set your execution policy on your current box yet. Then you run a PowerShell console as admin, and run...

set-executionpolicy remotesigned

Finally. Success-ish.

Labels: , ,

posted by ruffin at 2/08/2017 10:53:00 AM
Tuesday, February 07, 2017

Can't see output from gulp when run in PowerShell, even though when you cut and paste it's there again?

From gulp-print in Powershell is empty - Stack Overflow:

I looked at the gulp-print GitHub and there is supposed to be a way to disable the color but it isn't working. However, in gulp-print.js I changed magenta = colors.magenta to magenta = colors.white and it's working. Quite sure it isn't an ideal solution as it will be overwritten by an update and someone smarter will suggest something better but it works for now. – hlo Apr 19 '16 at 0:18

Of course, now you have to find the right gulp-print.js file. ;^)

Labels: ,

posted by ruffin at 2/07/2017 10:42:00 AM

Sometimes, it's easy to tell yourself that you shouldn't need to advertise, and that if you wait long enough, discovery will happen, and your work will produce results simply by being obviously better than existing alternatives [in some unique way, at least].

if you build it, you still have to let them know

(The worst part is that this dream of "if you build it, they will come" is even true for the lucky, whether that "lucky involves hard work" means knowing people who appreciate your work and can kickstart it (a blogger, a podcaster, etc) or that you have a mailing list from another, or some other means of celebrity or visibility.)

On his Release Notes podcast, Joe Cieplinski tries to twist your conception of advertising backwards. From about 8:40 into episode #195...

And B, in some cases, you're kind of doing them a disservice. People have needs... and if you have a product that actually addresses that need, you're not doing them any harm by letting them know that you exist.

He's talking about cold-emailing someone to tell them about your product or service, in this case, Joe's specifically talking about drumming up contract work. There, cold-contacting someone is essentially a requirement.

But don't let that talk you out of it applying to your situation as an indie developer, if that's what you do. Cold contact reviewers, podcasts where you could sponsor, visible people who could benefit from your app and who essentially serve to represent a market... those visible people that the lucky already know. Get to know them, and bother them. Because, done right, you're probably not bothering them.

It's okay to advertise. It doesn't [inherently] cheapen your work.

Just because you primed the pump doesn't mean the water's bad.

Labels: , ,

posted by ruffin at 2/07/2017 09:41:00 AM
Saturday, February 04, 2017

Testing blogo

Why is the picture at the bottom of the page? Can I not put this inline?

And the preview doesn't work. And there's some keyboard toolbar that's flashing, but won't stay visible. I think the app wasn't tested on a 5-SE. Appears to be stuck behind the strange insert/preview/keyboard down toolbar.

Why does the Markdown toolbar keep disappearing?
/sigh. Let's see if it posts.



posted by ruffin at 2/04/2017 07:55:00 PM
Friday, February 03, 2017

I was listening to the Supertop Podcast today (you should too -- in the past, this show has had some great sponsors), and they were discussing Manton Reece's Kickstarter, which added and met a stretch goal at $80k before it was all said and done.

I shelled out $10 to see the ebook, mostly because I'm intrigued, but not real sure what the project is about. On a past episode of Supertop, the guys mentioned that they weren't real sure what the project was precisely about themselves (EDIT: Turns out Daniel on Release Notes told Manton this same thing back on January 20th!).

Manton has discussed on his podcast, Core Intuition, several times about how much he's sweated the video for that Kickstarter (come to think of it, I don't think I ever watched!), but his real kicker (har har) is that he never actually precisely described what it was he's doing, so we're left to imagine to be whatever we want it to be. It's a book about bringing back blogging, and it has a Twitter-like component. Not only that, it promises to "embrace... the open web". These are all laudable goals. Who wouldn't want to be on board?

But isn't that two services?

Interestingly, the stretch goal was...:

Stretch goal update: if we reach $80,000, I'll hire a community manager for to help build a safe community from the start. See this update on Kickstarter for details on the stretch goal and a new feature called Safe Replies.

A community manager? Wait, what? An open web service with a manager? How do you pull that off, exactly?

There are a number of obvious strategies. One is that the manager lords over a single server which is used to disseminate posts, and that your publishing process lets that server know as you're posting your content. Then others subscribe to that server in typical client-server fashion.

But that kills the open, doesn't it? Someone holds your access to your own subscriptions!

Maybe you could have a service that gives out guids for posts -- or even users -- that it doesn't feel a cultured schmoe would like to see, and your client uses those review services to pre-censor your open content. Nevertheless, management is much different than open.

I think a management/review service is a very different project from this one:

Do you remember how the web used to work? How the web was supposed to work?

In the earlier days of the web, we always published to our own web site. If you weren’t happy with your web host, or they went out of business, you could move your files and your domain name, and nothing would break.

Hopefully what this means is that we have two services. One is an open stack for publishing & consuming and the other is a review service that you can optionally use.

What is

Whether is open or managed is precisely what I've wondered from the start. Manton's mentioned using (or replacing) Webmention, a w3c spec, a few times. That's an interesting move.

Webmention is sort of like an anonymously built webring -- remember those? When you'd slap a banner on your site so that anyone clicking could go to the "next, prev, or random" member of the same virtual community? Webrings built some of the first web-based, self-consciously social networks, versus, say, simply chatrooms and newsrooms based on topics, though I guess chatrooms and IRC were close.

Anyhow, webrings are sort of what Medium has effectively replaced. Now your blog has a social component [again]. Before, you had related conversations linked together. Now you link the conversations themselves. Webmention and Medium both accomplish this in one form or another.

What's necessary to have an open conversation?

But is apparently more than that; it's also a Twitter replacement. And for that -- high intensity, short-form conversations broadcast publically -- you either have to subscribe to an RSS feed (or equiv) for someone's "micro blog posts" and then follow all reciprocally linked replies, or you'd have to have a centralized server which keeps track of unique names and collects and gives out all of the posts/information.

The first, a feed subscription, is a Webmention (or effectively a webring, though often even webrings had a server providing the "random" linking) like function. The second is a centralized client-server setup that's more susceptible to command and control. Even if there are, in theory, thousands of potential manager servers, it's still not really an open system.

And it's not really the openness that necessarily drives growth. I mean, there are already open Twitter alternatives. Building it doesn't mean that they'll come. There's a reason Twitter is still the 800 lbs gorilla.

Also remember that one of the giveaways for backing was, "You can reserve your username even before the book is finished." Username? How is there a unique username on the open web without, say, an ICANN? Nonprofit or not, you're still centralized. Users won't own everything until you're using a mesh/p2p-ish network with the possibility of data collision -- and the algorithms to manage them. (Welcome to the world of public keys...)

In any event, I hope the book makes this stuff clear, and some folks bite on creating infrastructure. Even if Manton's holding the keys to "the" central server, it's an interesting experiment. How much can he offload hosting to keep costs down, but still provide reliable content? And how difficult would it be to make an Android client... ;^) is an interesting pie in the sky, but it's going to be a real pain to pull off and deliver on all the ambiguous promises it's perhaps unintentionally made. I wish him luck.

Labels: , ,

posted by ruffin at 2/03/2017 01:57:00 PM

Support freedom
All posts can be accessed here:

Just the last year o' posts:

URLs I want to remember:
* Atari 2600 programming on your Mac
* joel on software (tip pt)
* Professional links: resume, github, paltry StackOverflow * Regular Expression Introduction (copy)
* The hex editor whose name I forget
* JSONLint to pretty-ify JSON
* Using CommonDialog in VB 6 * Free zip utils
* git repo mapped drive setup * Regex Tester
* Read the bits about the zone * Find column in sql server db by name
* Giant ASCII Textifier in Stick Figures (in Ivrit) * Quick intro to Javascript
* Don't [over-]sweat "micro-optimization" * Parsing str's in VB6
* .ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture); (src) * Break on a Lenovo T430: Fn+Alt+B
email if ya gotta, RSS if ya wanna RSS, ¢ & Δ if you're keypadless

Powered by Blogger Curmudgeon Gamer badge
The postings on this site are my own and do not necessarily reflect the views of any employer, past or present, or other entity.