Nov 13, 2018

Experience is the best teacher...

I heard it this way first, from Daniel: “Experience is the best teacher.” Why? “You get the test first, and the lesson later.”
But the quotation is attributed to Vernon Law, a baseball player. Vern Law is arguably the baseball player with the second greatest impact on modern philosophy, the first being Yogi Berra.
Law’s version:
Experience is a hard teacher because she gives the test first, the lesson afterwards.”
But no one compares to Yogi, even though he says:
“I really didn’t say everything I said.”
Here are some classics:
  • “90 percent of baseball is mental; the other half is physical.”
  • On why he no longer went to Rigazzi’s, a St. Louis restaurant: “Nobody goes there anymore. It’s too crowded.”
  • “It ain’t over till it’s over.” In July 1973, Berra’s Mets trailed the Chicago Cubs by 9½ games in the National League East. The Mets rallied to clinch the division title in their second-to-last game of the regular season, and eventually reach the World Series.
  • When giving directions to Joe Garagiola to his New Jersey home, which was accessible by two routes: “When you come to a fork in the road, take it.”
  • At Yogi Berra Day at Sportsman Park in St. Louis: “Thank you for making this day necessary.”
    “It’s déjà vu all over again.” Berra explained that this quote originated when he witnessed Mickey Mantle and Roger Maris repeatedly hitting back-to-back home runs in the Yankees’ seasons in the early 1960s.
  • “You can observe a lot by watching.
  • “Always go to other people’s funerals; otherwise they won’t go to yours.”
  • “A nickel ain’t worth a dime anymore”
  • “If you can’t imitate him, don’t copy him.”

What problem are you trying to solve?

In a previous post, Implementing a better chair in the sky, Past Me told me to figure out what problem I was trying to solve before solving it. Since Past Me often gives Present Me good advice, then-Present Me listened to it. (This is another Present Me writing this for the benefit of Future Me)
So the problem I was trying to solve is this one: I’m finishing up a post. I need to get some links. That’s annoying. I have to take the text where I want the link to be, put square brackets around it, and an open paren, then find the page I want, go to the omnibar, select the URL if it’s not selected, type Ctrl-C, go back to my document, type Ctrl-V, and then close the tab. Annoying. Chair in the sky annoying! 
And if I want to link to the title of the article, like when citing my own post, it's: look the post. Select the title. Ctrl-C. Back to the post that I am composing. Type [, Ctrl-V and then ] and (, back to the document. Click in the link. Ctrl-C. Back to the post, Ctrl-C again, and then (whew!) Ctrl-V.
So the problem is: I want to take a URL that’s on my clipboard and converted to Markdown.
So just
fuckingask Google. Or should it be: So just ask
fuckingGoogle. (I’m never sure where the fucking emphasis fucking goes.)
URL to Markdown? Easy! How about this package from the amazing Sondre Sunderhus: sindresorhus/urls-md: Convert URLs to Markdown links: Extracts URLs from text → Gets their article title → Creates Markdown linksChrome extension.
Wow! That’s a lot of links! It must have been hard to do all that copying and pasting and typing. But I didn’t! I used a Chrome extension: Copy as Markdown - Chrome Web Store Yeah, but can I use that without the environment? You can if you go to his GitHub project: chitsaou/copy-as-markdown: Copying Link, Image and Tab(s) as Markdown Much Easier.
But I want a shortcut that does that.
Easy. Go to the Extensions page, and under the hamburger menu pick “Keyboard Shortcuts and assign away. Every extension that lets you have keyboard shortcuts publishes its setting there.
Who knew?

Yesterday’s waste of time

Yesterday was pretty much a waste of time. Trust me, reading this will not waste your time. It will save you time. Read it and remember it.
Of course, I’m speaking to you, Future Me. Who
the fuckelse would I be speaking to. Oh, you, random reader? Well, this might help you as well. You can read it, too.
And trust me, Present Me, writing this will not waste your time. For one thing, you will be passing knowledge on to Future You. Which is your
fuckingjob, after all, isn’t it. And besides, it’s too late. Haha! You are already Future You, learning from Past You!
The jokes on (past) you!
Here’s how you wasted yesterday and part of the day before. You were working on creating an ideal authoring environment for your Future Selves. You had built a proof of concept for voice typing in Glitch. Now you wanted to the real thing. So you spent hours, integer numbers of hours, not fractional hours, trying to integrate a bunch of stuff so that it would work really fast, and just the way you wanted it to. And after large amounts of yak shaving and wasted time you were working on Implementing a better chair in the sky?
The good news is: you found it. The bad news is how much
fuckingtime you spent looking for it.
The better way is CodeSandbox: Online Code Editor Tailored for Web Application Development. It’s lightning fast for reloading user interface code. Glitch is better for doing back-ends. And it’s better for serving a full stack solution. But guess what? They’re both integrated with Github, and once you’ve got a tuned front end working on a lightning-fast generic back-end, you can run it on your customized back end.
And in the meanwhile, all you need your special purpose back in for is authentication. Which you can do with the silly little lame bit of authentication code you already have running.
Yes, I know, it would be nice if you could do everything in one place. But right now you’ve got something fantastic that requires messing around in a couple of places. Kind of like where you are right now. You’re in a Google Doc. You are voice typing. Yes, you’re going to have to copy paste it into blogger and, blah blah blah blah blah blah blah blah blah.
But it works.
So, was yesterday really a waste of time? Yes, and no. The yes is that it took you an entire
fuckingday to learn something that I could have told you in one short paragraph. Here it is:
Hey Mike! Use CodeSandbox for front ends, glitch for back-ends.
Here’s something else:
Hey Mike! Figure out what problem you are trying to solve.
Of course, I’ve taken a lot longer than one paragraph to tell you. But that’s because I had to figure it out. Just like yesterday, it took the whole day to figure out what I know now.
This is knowledge creation at work. This is your ~fucking~ job.
Do your job!
PS: I just took my own advice. See this post to see how.

Nov 12, 2018

Implementing a better chair in the sky

After I wrote the first draft of my ranty blog post on how it is to be in an uncomfortable chair in the sky, I decided to actually try and do something about it. What a surprise! Me, doing something based on a plan.
And after a night’s sleep, I see how this thing might be scaled up and turned into a crowdcoded project. Which is pretty exciting! But that’s another post. For now let me focus. What a surprise! Me, focusd.
My starting point is to have it be like Google Docs with Voice Typing, only voice typing that I controlled. Chrome has a speech recognition API and a speech synthesis API. And I am a programmer who knows how to do this kind of shit
stuff. So why not check it out. What a surprise!
I went to one of my favorite development sites, glitch, and set up a project. Then stole
used some code that I found in a couple of places with tutorials on the API and put together a proof of concept for what I wanted. You can see it running here. It works on Chrome on desktop and on Android and might work on other browsers, but I don’t give a fuck care, because I only use Chrome. If you click on the black dot (which is supposed to be a microphone icon but may not be, then it will start listening and capture what you say. When you hear a short beep, it stops listening. I can make it restart, and might, but the time you see this. I also tested synthesis so it says back what you’ve typed.
I learned a lot about the speech API doing this little project. And I’ll document it in another blog post. Or maybe in the code. Who the fuck knows.
There seems to be a trick how the recognition and synthesis APIs work. You have to turn off speech recognition when you turn on the speech synthesis, otherwise, you get a feedback loop. It’s like the computer is playing telephone with itself. Sometimes it says the same thing over and over again, and sometimes it changes on iterations until it converges.
So I’ve got the proof of concept out of the way, and I’m ready to build the thing. I was going to call it AutoMike, but after a night’s sleep, I think I’m onto a product idea with more general use. So AutoMike is an example of a really personalized personal assistant—an AutoMe, and the process of building one’s own AutoMe I’m going to call AutoMetion. And that might be the name of the company.
AutoMike is always listening. When it finishes recognizing a text segment, it beeps gently.
How does it beep? Well, I found a website with a tutorial on the audio inteface that pointed me to the AudioContext API and with a little ingenuity, I had beeps.
So an utterance between two beeps might be a command. (Or it might be able to use other cues to let me know when it should interpret an utterance as a command.)
I’m imagining all kinds of things it could do, see random ideas at the end. But for now, let’s imagine how I’d write a blog post with AutoMike.
In its fully fleshed-out version I might say: “New Blog Post.” AutoMike asks: “Which Blog?” and tries to match what I answer to a blog that I’ve told it about (we’ll come how I’ve told it in a bit.) If I say a “Blog post in AutoMike will try to make the match. If it can’t match, it will respond with the name that it’s captured and tell me that it doesn’t know what the fuck I am talking about a blog by that name.
(Google has something called DialogFlow, that can be used to create conversational dialogues. The first level of this proposed tool might be done with DialogFlow. But to start with, I’m going to do this low-level, using Google Speech API.)
The names of blogs and the commands that AutoMike understands would be in a configuration file. To change the configuration file I can say: “edit configuration.” AutoMike will suspend what it’s currently doing (and remember what it was doing,) and let me edit its configuration. Its configuration is the JSON file, that defines AutoMike’s behavior.
But for now, the configuration will be wired into AutoMIke’s code, and there’s only one blog post to edit and by default, anything you say is appended to that post. One thing at a time.
Auto Mike has modes. A mode might be entered by “start ” and exited (to command mode) by “end ” So to do dictation, it’s “start dictation” and “end dictation.”
Right now I’ll define the following modes: command mode, dictation, edit. So a session might look something like this:
“start dictation”
> “Starting dictation”_
“start edit”  
>“Starting edit”
“end edit”  
>“Ending edit. Continuing dictation”
“end dictation.”  
>“Ending dictation. What’s next?”  
“start posting”  
>“Posting. Which blog?”  
And so on.
I’ve partly worked out the problem of posting using Google’s API for bloggers in another project.
Editing would be done in a CodeMirror editor, which a combination of spoken commands and typing.
I’d have a way to tell it to switch to markdown and back.
I’m thinking that I would build this tool as a set of microservices. Each one will operate independently. There needs to be some communication protocol between or among them and possibly an executive function. I’ll figure that out later.
Another tool would clean up the raw text. The configuration for that tool will have a bunch of respellings like “Bobbi” for “Bobby” and maybe some regex respellings to handle stuff like /^\s_quote(._?)\s_end quote\s_$/ -> ‘”$1”’
That’s the start of AutoMe, initially, just for blogging, but there are lots of other things I’d like to use it for. Because there’s a lot of me to automate.

Nov 11, 2018

When your chair in the sky is just not comfortable enough

How’s this working? Pretty good I think.
Check! Check!
Well, that’s working pretty well.
I’m voice typing. I’ve wasted too much of my life typing on these stupid keyboards. I want to be able to waste my life by talking at my computer. In fact—I didn’t realize it when I started, I want to RANT at my computer.
Somewhere in the middle of this rant, I remembered Louis CK’s epic rant, the mother of all rants.:
Flying is the worst one because people come back from flights and they tell you
their story. And it’s like a horror story. They act like their flight was like a cattle car in the forties in Germany. That’s how bad they make it sound, right.
Like, “It was the worst day of my life! “First of all, we didn’t board for tenty minutes. And then we get on the plane and they made us sit there on the runway for forty minutes. We had to sit there!”
“Oh really? What happened next? Did you fly through the air incredibly like a bird? Did you partake in the miracle of human flight, you non-contributing zero? You’re flying! It’s amazing?”
Everybody on every plane should just constantly be going: “Oh my god. Wow!”
You’re flying!
You’re you’re sitting in a chair in the sky!
So yeah, things are pretty fantastic. And I’m bitching as though I’m in the Stone Age, trying to carve my life story into a piece of granite and all I’ve got is frozen mammoth meat to carve with.
But still, I’ve got a right to bitch. Because this is America. Because it’s my fucking blog and I get to decide who post bitchy rants in my blog. And guess who I’ve decided has the right to bitch?
Right. Me.
So here’s the bitchy rant.
My friend JL ( you know who you are) has inspired me to do something I’ve been wanting to do for a long time. (Including writing this rant) Before you get too full of yourself, JL, you’re not my only inspiration. But I think what you did was the metaphorical straw that—- something, something, something appropriate to that metaphor. (Really? You think I have time to waste trying to figure out what the appropriate metaphor is? Dream on! I’ve got ranting to do.)
Anyway back to JL, who I will now refer to in the third person. He set up a Slack channel and invited me and a bunch of his friends to participate. He posts a shitload of stuff, mostly worth reading, by some definition of “worth reading.” Which translated to “might be good” as opposed to “ probably a waste of time.” So I diligently read the stuff that he posted, because given that he had gone to the trouble of posting, the least I could do was read. And I wanted to do the least I could do.
And then I started getting annoyed. Chair in the sky annoyed.
I admired him for taking the trouble to post the good stuff. And I felt bad that I was not posting too. And I felt bad that I was not commenting more. Then I thought: Fuck you, JL for making me feel bad! (Chair in the sky, anyone?)
Actually, it wasn’t his fault I was pissed off. It was mainly Slack’s fault.
When it came to the Slack interface, either I had Intuition Deficiency DIsorder (IDD) or the interface had Stupid Interface Disorder (SID.) Either way, every time I tried to create a thread to reply I had to take literally hours figuring out how to do it. You don’t believe me? Do the math. If I spent six seconds trying to figure it out—and I spent more than 6, several times,, that would be 0.0016666667 hours. So literally hours!
That got me thinking about all my other communication channels and their not-as-unintuitive but still
not-quite-intuitive interfaces. For one thing, there’s the job of finding the right channel and then doing something. I’ve got 12 Hangouts channels that I’ve used in the last several days. I’ve got JL’s Slack, which itself has a whole bunch of channels organized by topic. If I hadn’t removed myself from Facebook, G+, Twitter, Google News, and Reddit I’d be bitching about them. In fact, I will. Bitch! Bitch! Bitch!
And then there’s email. And then there are all the blogs that I read and then there are all the blogs that I’ve got and mostly never post on. Every one of these things has its own interface. They’re all slightly different. Each has some good things and some stupid things.
And it’s the stupid things that piss me off.
So I started thinking about what it would be like to live in a world with no stupidity. The only information that would be presented to me was valuable information. I wouldn’t have to waste my time getting rid of trash. We’ll come to that later. I can only rant about so much at once, and for the moment I want to rant about the production side.
I’m beyond keyboards. I’ve gotten pretty good at using Google’s Voice Typing in Google Docs on phone or desktop or Chromebook or speech to text on my phone. I’ve been writing this post on my Thinkpad in Docs and it will go out with minimal editing because I’m that good. ( You think! Says the perfectionist within me. And of course, the perfectionist is right. I am incapable of leaving well enough alone.) But even that is really annoying—the way a chair in the sky that is slightly uncomfortable is annoying. For example, voice typing lets me voice type comma, period, exclamation mark, and new paragraph. But there is no way to insert quote marks. Or colons, semicolons, or emoji.
Really, it’s a complete fucked up chair in the sky kind of annoying.
And Voice Typing persists in spelling Bobbi as Bobby because that’s the way 99% of the world spells “bah bee.” But I’m not 99% of the world. There’s pretty much only one Bobbi in my life and she spells her name Bobbi, not Bobby. And Google harvests all this information from me. It reads my email and my hangouts channel and for all I know reads my dreams at night because I sleep with an Android device to wake me up. So Google should know how to fucking spell Bobbi. Especially since I keep correcting it.
It would be nice if I could customize Docs to not make that mistake.
Right now Doc’s is the best available tool. I write most of my drafts in a document called “Drafting Document” because where else are you going to write drafts? It’s on the home screens of my mobile devices, and it’s on my browser’s bookmarks bar. So easy to get to.
But sometimes I intend to share a draft with someone else. So what do I do then? If I create another document, it’s not automatically on my home screen. Doesn’t Google know I want it available until I’ve said I’m done with it. And that aside, look at all the work I have to do to create a document. If I’m not already in a document I have to get to Docs or Drive or an existing document. And even if I am in an existing document—or once I get to one…well, just look at what I have to deal with!
First, I have to click File->New->Doc. That’s actually three clicks, plus a mouse move. And don’t give me any of that “use your keyboard” shit. It’s not my fault that I didn’t think about that until I was writing this. Anyway, I do the typing or clicking. And then what? I have to wait, literally hours for Google to get around to creating my document. Don’t believe me? I just clocked it. It took 0.00111111 hours. So literally I had to waste hours! (And my number is accurate. I just Googled “0.00111111 hours to seconds” And the answer was very damn close to what I got when I timed it.
Very often I’ll do the drafting in the drafting document and then create the Doc I am going to share. Now I’m on a new tab, and I have to go back to the original tab and select the text that I want to move over and cut it, and then switch tabs again, and then paste it into the new Doc, And then I have to go to the title, and type in a title because the default is probably wrong.
And either way, I have to file the Doc in some folder or it will add to the clutter at the top of my folder tree, which right now probably has literally tens of thousands of little files in it. (I checked. I’ve got 97 files and that’s 0.0097 tens of thousands.)
Enough bitching. (For now) Here’s what I’d like.
I’d like one place to go to to do all my writing. I’d like that one place to keep a record of everything that I’ve done in time sequence. Whether it goes to some blog or an email or hangouts, I want it all in one stream. Because now, when I’m looking for something I’ve written, I have to look in a bunch of places. Is it in my blog? In the Beyond Labels blog? Was it in a hangouts conversation? Was it an email? Was it in Slack?
You may think that this is a trivial complaint. But now that I am committed to complaining, no complaint is trivial. This is an existential problem. I’m wasting my life doing this shit. My very precious life.
I am a cyborg, and having my memory scattered and fragmented makes me a degraded cyborg. As a cyborg, I’ve got a huge memory, way bigger than I have is a human being. But it’s fragmented. I am fragmented. There is a piece of me and hangouts. There is a piece of me in Google Docs. There are pieces of me in email—under various emails. I’d like to be able to go to one place and be able to find myself—everything I’ve ever written or said and recorded or photographed. Or even looked at.
Really, even looked at. I keep finding things on the web that are interesting. Sometimes I’m diligent and I bookmark them. But I’ve got a bunch of bookmarking places. Bookmarks. Pinboard. OneTab. Various posts. And sometimes I read something and don’t bookmark it and then, 6 months later, I think “Oh, wow! There was this article I read about that.” And I can’t remember where the hell I saw it. And then I have to spend literally hours, literally days, literally years looking for it.
It would be cool to have a way to write in one place, and perhaps have the header Identify a destination. Have a document modified dynamically, with corrections based on my preferences, not everyone else’s.
That’s what I want. And today I took the first steps in that direction. But I’ve ranted enough.
Time to post this and get on to the next thing.
(Except, you know what? . I’ve got to open a new tab. I have to go to blogger and go to the right blog. I’ve got to click on something to create a new post. I’ve got to copy paste this into the new post. I have to give it a title. Because it doesn’t know what the fucking title is. Then I have to check it. Then I have to figure out what labels to give it. And then, finally, I can post it. This sucks!)
(Oh, yeah, I forgot. I have to type Ctrl-Alt-M to turn it from Markdown to HTML. And then I tried to add this by Voice Typing. But Voice Typing doesn’t work in Blogger. Will my misery never end?)

Nov 9, 2018

How stupid can I have been? Stupider, I hope.

For years I've told my kids: if you don't look back on what you've done a few years back and think that a bunch of the things that you did are incredibly stupid, then you haven't learned much in the meantime. It's painful to see that what you've done is stupid. But it's a sign of growth.

Whenever I've finally found a way to get past some big psychological problem--one of the ones I've wrestled with for years--the very last thing that I always have to deal with is this: I realize that all the suffering that I've experienced and all the suffering I've caused others because of whatever-it-had-been had been unnecessary. Entirely unnecessary. Nothing had ever prevented me from getting past that particular problem but my own ignorance and my own stupidity. And since the source of my ignorance--about these kinds of issues--was always also result of my own stupidity, then everything bad that had happened for years and years was due to two things: me, and my stupidity.

It's was always painful to recognize that I was the cause of all that suffering. It was agonizing to recognize that it was because I was stupid. Stupid! Stupid! Stupid! I hated knowing I had been stupid. And I hated knowing that the reason that I had been stupid was that I was too stupid to realize how stupid I'd been.

So why didn't I take those two well-known patterns, put two and two together and gotten something between 3.999 and 4.001? Easy. I was stupid.

Today, in a session with Mitchell, the IFS therapist I've been going to I finally added it up. And I got 4. Props for him for guiding me through the hardest job of facing my own past stupidity I can remember. It was stupidity all the way down. And this post is to keep me from stupidly forgetting what I've so painfully learned.

It should have been obvious that the only way for me to ever become wise would be to realize exactly where in the past I had been stupid. There isn't even a choice. It's math!

The only way to solve that kind of long-standing-problem is to realize that the answer has been there, all the time, and I had been too stupid to see it.

The only way for me to grow in understanding has to be to face my own prior ignorance. The price of wisdom is the price of recognizing my own past stupidity.

The more I gain knowledge the more I have to face my past stupidity. 

YMMV, but that's my story.

No one likes to feel stupid--which is why it's tough for me to take criticism, why I confirm my biases, why I don't like to think about how ignorant and stupid I still am. That's me, anyway. Maybe you're different. Maybe you're comfortable taking criticism, questioning your assumptions, and realizing that against a background of perfect knowledge and perfect rationality based on that perfect knowledge, that you must inevitably be ignorant and stupid. 

Or maybe you're too stupid to consider that possibility and the possibility that you're too stupid to see it.

Or maybe I'm being too hard on you. Just because I'm an asshole. I don't know about you, but I do know about me.

Today, I realized how stupid I was to not see that the path to knowledge leads through the realization of stupidity.

Today, I realized how hard I had worked to avoid feeling stupid. It was easier to struggle with some of my problems than admit that the reason that I had those problems was simply and only that I was too stupid to let go.

So bring on the stupidity! I've already started looking for other places where I'm being stupid. It wasn't hard to find them. And I found a couple that were ridiculously easy to fix.

Why don't I write like I'm running out of time? Stupid. Why does it take me so long to write posts for a blog that almost no one reads but me? Stupid. Why have I struggled so long and hard and unsuccessfully to change those habits? No reason, other than the desire to believe there are deeper reasons than simply: "That's stupid. Change it." 

But that means...I could have changed it any time.

And that means the only reason I didn't change it was that I was actively being stupid. 

Right.

If you know things that I am doing that you think are stupid, by all means, point it out to me. If I seem to resist hearing you out, then remind me of this post.

I will appreciate your efforts.

Unless, of course, I'm being stupid again.

Nov 8, 2018

Who wants to live forever? (Maybe me.)

Who wants to live forever
Eternime (www.eterni.me) is a company offering digital immortality—of a sort. Their website says:
Eternime collects your thoughts, stories and memories, curates them and creates an intelligent avatar that looks like you.
This avatar will live forever and allow other people in the future to access your memories.
The idea is interesting because I’m going to die soonish and I’m thinking about the best way to leave as much of myself behind as I can.
I’ve already got three samples of roughly half of my genes, (the genes a gift, a legacy, from my own parents), randomly selected from the two halves of each of my chromosomes, (not including my Y chromosome) which were mixed with similar contributions from my wife, lover, and best friend (hint, all the same person) who then painstakingly 3D printed each sample in her uterus, producing girl-children, who, once they were born, were offered the best ideas and values and othe memes we could find and afford, and who grew into three admirable, intelligent, capable, women, and now mothers with their own children, each containing a quarter of my endowment, along with equal contributions from my wife, lover and best friend, and from the men who they were smart enough to marry and who were smart enough to marry them.
So all those parts of me will all survive this part of me, I expect and hope. And I ‘ve been able enjoy all of that while I’ve been around.
And then I’ve got stuff that I’ve created, like this blog. And I live on as a character in my book, and my other book.
But wouldn’t it be nice, I think if the kids, or any surviving friends, could dial me up when they needed me? Or when they just wanted to hang out?
Or maybe wouldn’t it be nice. Maybe it would be weird.
What would a digital version of me be like?
Google’s got a product called DialogFlow and I just spent too much time looking at it to figure out how I could program it.

Pages