searching for special chars in vim and setting aliases in windows cmd

Vim Spells

This morning I was looking over the old reading list and noticed that A Night in the Lonesome October had some strange characters floating around, which I wanted to delete. I felt that deleting them all using vim’s search/delete seemed like a good plan, but I couldn’t recall a way to copy the line containing the special character from the text buffer over into the command-mode search/replace/delete string. I wanted to do it without using my mouse or shell, and knew there must be a way — ahoy, to the internet!

This stackoverflow question had exactly what I needed in one answer, and then a great improvement right after. The initial solution is to yank into a letter-named register using "ayw (" = specify that a register name follows, a = overwrite the ‘a‘ register, y = yank, w = a word, so all together that command says “yank a word into register a” — you could also use, say, "ayy to yank a line, etc), and then to use CTRL-R followed by the register (in this case, a) to paste from the register straight into a command-mode string. The followup that improves this in general use is to avoid named registers and use the implicitly-filled ‘0‘ register, so you can just, say, yw as normal to yank a word, and then use CTRL-R 0 to pull from the 0 register which got filled implicitly by the yank command.

I also didn’t quite remember what the command-mode string to delete a line matching a pattern was. I tried :%d/search term/ first, but I only got trailing-characters-errors as a result, so I turned back to the internet. Google quickly turned up this vim wikia tip that it’s %g/search term/d. %g to globally search and execute a command on matching lines, and /d to specify delete as the command to be issued.

I haven’t ever really used registers in vim, so this is one more of those thousand steps up the mountain in my ongoing (decade-plus-long) vim user story. These are such arcane tools, but at least when you get them to do the work you want, it does still feel like wizardry. With luck, I’ll remember these pieces a bit better next time and cut Google out of the loop. 😀

Windows CMD Aliases

In a mildly different zone of computer use, I was missing a few of my common command-line aliases in the windows shell, cmd. I tend to use ‘s‘ for git status, ‘d‘ for git diff to see the unstaged changes, and ‘c‘ for git diff --cached to see what’s staged to commit. I have some simple alias commands in most of my unix home dirs, but recalled windows being a bit stubborn here last I looked.

Thankfully, the god-emperor of the internet Google quickly served up this fine stackoverflow, which listed a few interesting options:

  1. doskeys in an alias.cmd that gets loaded via the shell shortcut with /K
  2. doskeys in an alias.cmd that gets loaded via a registry key
  3. .bat files in an aliases folder that you add to your PATH.

These are all pretty cool ideas! I was only vaguely aware of doskeys before reading this post, so that’s a keeper at the least.

After some thought, I opted for the registry editing route — here’s why: I use at least 2 shortcuts to open cmd, and I don’t want to have to modify the launch string in both. Moreover, I definitely don’t want the potential to forget to modify one or to end up with different launch strings in different places, so the shortcut-editing answer didn’t fit my needs. The .bat-files-in-a-dir solution is aimed at reducing the computer-load of repeatedly loading all your aliases, and I only have 3 simple ones to add for now. On top of that, a .bat for each of them seems like overkill.

Over 1 Billion Yaks Shaved

All of this is, as usual, procrastination. I’m in Paris for a few weeks and taking a few grey morning hours ostensibly to look at making start on a javascript clone of Into the Breach that fuses in some more Advance Wars-esque ideas (resources, construction, territory, different map sizes) and I need to a) break that problem up a bunch, which is hard, and b) sanely upstream all of my tetris (playable link) work on creek into creek itself before I go spawning new projects like baby spiders in the wind.

Those are daunting tasks. So instead of working on them, I chose to give the world yet another blogpost with a few links deep into the stackoverflow hivemind.

I also noticed that viewing individual blogposts seems to have grown some content-type issues after the migration I did a few weeks back, so I might have to fix that before I do anything else. The procrastination show must go on!

update: fixed! Configuring nginx for wordpress just took me a lot of reading and trial and error. 😀

Hello from Hong Kong!

I’ve just migrated hosts and this blog is now running on a different operating system, web server, php version, and database version, and all of its content got pooped out into a file and slurped back up in between, so I need to make a post to test that things are actually working.

So far so good! By the way, I’ve been travelling for the last few months and am presently in Hong Kong. I’m leaving tonight to go to France, and will likely head home in the next month or so via a few other euro-countries. So far I’ve been through some limited spots in England, Iceland, Germany, Greece, Singapore, Indonesia (Bali), and China (Shenzhen). Lots of amazing things to see, but it’s been just about enough whirling of the winds!

In other wyatt-tech-news, I’ve been working on a tetris clone on and off while travelling, which you can play with here if you’re so inclined.

Progress Ratchets

Let’s just get this out of the way:

  • Ratchet (device), a mechanical device that allows movement in only one direction

When going back to play an old video game with blocky polygons and low framerates, or watch an old movie with badly lit CG, or when looking at an older monitor with a lower resolution, the advances we’ve made for these technologies are obvious.

But when we first saw higher framerates, fewer polygons, better lighting or higher resolutions, it typically wouldn’t stand out as “exceptionally good”. When watching my first 720p HD video, I didn’t think “wow, this is so high res!” Similarly, not much later when watching 1080p for the first time, I just enjoyed the content.

These types of changes are only noticeable in one direction — improvement in framerate, resolution, etc. are nearly imperceptible, but degradation in the same is obvious. We experience discomfort now trying to play Smash Bros 64 with its slow, laggy gameplay, but when we first saw Smash Bros Melee, no one said “whoa this is too smooth!”

Did 480i->1080p change our lives? No, but we’d be unhappy to go back. Did 2004-era cellphones change our lives? They seemed important, but it wasn’t a huge deal when they were off — people just missed calls or texts. Compare that to 2014-era cellphones: many people express feeling alone or lost if their phone drops its network connection, let alone turns off.

A caveat to this could be something like 48 or 60fps video. It looks noticeably different, and (to my eyes) noticeably bad. There’s something about the way objects track and light looks at that rate that doesn’t sit right. Perhaps it’s an uncanny valley effect where film is now so realistic it starts to convince us it’s really real, but fails to finish that job and leaves us unsettled.

My personal bet is that a century of making films at lower speeds has led to techniques in lighting, editing, framing and motion that applied well to 24 frames per second and helped to craft the cinematic feel. Those tools and techniques just haven’t had time to be adequately adapted to higher frame rate filming, but they will be eventually. What I think we’re experiencing discomfort over isn’t the frame rate change itself (or an uncanny valley because it’s all too real), but more likely the failure of our tooling and techniques to keep up with this change, which has produced a noticeably, objectively inferior product.

Any change could be bucketed:

  1. noticeable going forward or backward
  2. noticeable only forward
  3. noticeable only backward
  4. totally beneath notice

Innovations that are only noticeable going forward may be things that sound like a big deal, but if you regress you probably wouldn’t notice a qualitative difference. One could further differentiate changes that depend on other advances to be useful, as with 24->48fps film relying on new techniques, or old vs. new cell phones relying on big screens and small, high capacity, fast-charging batteries.

There are implications here for innovators. When working on something, innovators aim to create value — if that value is not noticeable at a glance, it will require much more convincing to get it into the hands of users. If that value is not noticeably lost when slipping back, it’s unlikely to be an innovation with staying power. If it’s obviously better at a glance, and you notice it missing right away, it’s likely a pretty big deal. And if there’s some other thing missing which an innovation requires, now may be an opportunity to get ahead of the game by working on that missing thing, or setting the stage for when it becomes available.

good code is legacy code upon instantiation

This is a pretty good post (rambling, but give it some license):

http://programmingisterrible.com/post/139222674273/write-code-that-is-easy-to-delete-not-easy-to

I got there from here, also a decent read:

https://medium.com/@rdsubhas/10-modern-software-engineering-mistakes-bc67fbef4fc8

I think the first one gets across what I was going for with “Write Once, Copy Once, Refactor Once” more effectively and with an increased breadth of vision beyond the scope of what I was considering. The ideas and arguments in each should be balanced against one’s innate desire to build a temple — after all, life under any lone paradigm of thought is abominable tyranny. 🙂

In other news, wow, it is snowing a lot today.

On Distractions and Tools

I’m writing this blog post to relate the following:

I’m planning a reading tour through the American Revolution, probably starting with Ideological Origins of the American Revolution, by Bernard Bailyn. It stood out most to me after perusing multiple pages for good starting points.

Truthfully, I’m writing this blog post to relate why I’m planning a reading tour through the American Revolution. It was instigated by my sudden desire to get a grasp of the basics of the Revolution and the people and ideas around it. That came out of peeking into an IRC channel full of my American friends. Which happened because I opened my chat terminal session. Because I’d just logged on to my server.

I logged onto the server to change my status page from working.gif to dancing.gif. I was doing that because I had just visited my own blog and seen the status-page post on it. I visited to… write a brief post, about doctype vs DOCTYPE in html5 documents. I was writing that post to relate some amusing and interesting facts that came out of researching it. [1]

I found those facts after an instance of “DOCTYPE” in Bootstrap’s examples set me off reading about why people prefer the different casings and whether they matter at all.

That’s all because I sat down half an hour ago, thinking, “I should make a quick stab at building my list-webapp page, or at least think about it.” I’ve since been like a ping pong ball zooming back and forth between making and consuming, flung by inspiration and curiosity. Continue reading