Windows 10 Notes

Note: I’ve trimmed down this post for a couple of reasons:

  • I’ve migrated to Fedora as my main OS.
  • Microsoft seems to change and move options around between major updates of Windows 10, so anything I post could become outdated and misleading.

I’ve left what I think might be helpful below.


Local Account Mode

Here is an article on configuring local account mode if your installation is currently stuck with Microsoft Account authentication.


Uninstalling Groove Music

Windows 10 will not allow a straightforward uninstall of Groove Music. Doing this seems to require Windows PowerShell commands, or a power user utility like CCleaner.


Working with long filenames and/or paths

Windows sometimes has trouble with paths that are too long. The internet tells me that I should be able to make a registry edit to support long filenames, but this didn’t work for me. I followed this person’s solution and downloaded a 3rd party program to rename a file so that I could actually interact with it.

When I installed the Windows 10 Creators Update, some scripts that I had been using were no longer able to handle long paths. Others have noticed this as well. I was not able to find a solution to this other than not using long paths, and my overall patience with Windows 10 had run out at this point.


Other posts related to Windows 10

Windows 10: On lock screen, 2nd monitor does not recover from power-saving mode

Windows 10, NVidia GeForce GTX 750: OpenGL Programs Stutter Severely


(e 25/Mar/2017, 26/Mar/2017: Privacy: keyboard telemetry)
(e 6/Apr/2017: Long filename isssues: wording)
(e 16/Jul/2017: Creators Update notes)
(e 29/Jul/2017: File association grab)
(e 13/Aug/2017: Post trimmed down)


Rogue V5, as played on

Following are some scattered thoughts about the Roguelike genre, and a to-play list for myself as I explore the catalog.


Roguelikes are basically games that are like the 1980 Unix hack-and-slash Rogue. Originally played on text terminals connected to mainframes, your avatar is a little ‘@’ symbol, tasked with recovering the Amulet of Yendor from the 26th floor of the Dungeons of Doom. If (or rather, when) your character dies, it’s back to the very start with a fresh dungeon layout and new item definitions. Rogue maintains a high-score list, so that multiple users of the same system can compete for the highest amount of gold collected.


Rogue’s action is turn-based, and several aspects of the game are randomized — dungeon layouts, what potions and scrolls do depending on their description — to the point that they can’t be memorized from one game to the next. The chances of beating Rogue are very not in your favour. Luck is a large factor in determining your chances of survival, and on top of that, the difficulty curve soars during the final batch of floors.


The procedural generation systems and intense challenge make Rogue addictive and playable, and many developers have sought to emulate its appeal in the years since its release: from other terminal games, with increasingly complex underlying systems, to modern twitch-action games that have little resemblance outside of procedurally generated maps and permanent player death. I like both kinds.




Personal Roguelikes To-Play List

Will add thoughts as I play… This is going to take a while. Many interesting games are absent from the list, and I will try to flesh it out as I go along. The dates listed shouldn’t be taken too seriously, as I found them from random searches on the internet, and they don’t take subsequent work into account. I just wanted to sort the games along a general timeline.

Beneath Apple Manor | 1978
Superficially similar to Rogue, and released a couple of years earlier on home systems.

Rogue | 1980
My, what a yummy slime-mold.

Sword of Fargoal (Commodore 64) | 1982

Moria / Angband | 1983, 1990

Hack / NetHack | 1985, 1987

Larn | 1986

Omega | 198X

Fatal Labyrinth (Genesis) | 1990

Dragon Crystal (Master System, Game Gear) | 1990

Cave Noire (Game Boy) | 1991
Like a cross between Rogue and a puzzle game like Adventures of Lolo. I wrote a short post about the game here.

UnReal World | 1992

ADOM (Ancient Domains of Mystery) | 1994

Alphaman | 1995

Diablo | 1996

Linley’s Dungeon Crawl / Dungeon Crawl Stone Soup | 1997, 2006

IVAN | 2001

Doom, The Roguelike | 2002

POWDER | 2003

Frozen Depths | 2006

Brogue | 2009

Caves of Qud | 2015

Cogmind | 2015

Hauberk | In Development

 …AND MORE! Always more…


Roguelikes Reading List

John Harris wrote several “@Play” blog posts about Roguelikes, Roguelike design, and the genre’s history on GameSetWatch. His articles are collected on his blog,, and in his eBook @Play: Exploring Roguelike Games.

There are many insightful posts about development on the Roguelikedev Subreddit.

RogueBasin is a Roguelike community wiki.

Development Articles

Map Generation
Geometry, Line of Sight and Pathfinding


(e: 2017-Feb-13: Additional article links)

Android Cellular Data Minimalism Strategies

Following are some notes about getting by with a limited monthly 100MB data plan with an Android smartphone. To be expanded as I get more familiar with the platform.

Rough daily data metric is (monthlyData – emergencyData) * 12 / 365, or about 2.63MB per day in my situation.

Set up billing cycle and cap information in Data Usage panel: You can configure Android to shut off Cellular data entirely when a certain threshold is reached.

Blacklist bandwidth-hungry Apps from using Cellular data in the background: also available in the Data Usage panel. Watch for any anomalies day-to-day, and blacklist misbehaving apps.

Pre-filtered web browsing: Chrome and Opera Mini can be configured to minimize image sizes via intermediary proxy servers. Opera Mini can strip out images entirely. Probably not good for any sensitive information, but OK for a quick trivia search.

Google Docs syncing is an incredible hog: Watch out for cloud syncing. Docs uses significant bandwidth to download/upload even a simple todo list.

(e 2017/Feb/13: Emergency data)

Windows 10, NVidia GeForce GTX 750: OpenGL Programs Stutter Severely

OS: Windows 10 64-bit
GPU: GeForce GTX 750
GPU Driver:

Problem: OpenGL programs are stuttering to the point of being unusable.

Experienced with RPG Maker MV, and an old SDL+OpenGL test program that I made a while ago.

Workaround: Rolling back GPU drivers to resolved the issue. I reinstalled and set ‘Threaded Optimization’ in NVidia Control Panel to ‘Off’, and OpenGL applications seem to be working correctly now.

SNES Slap Bass

Don’t ask me why I did this, but some time ago I found the BRR sample for that silly slap bass instrument used in early SNES games (you know, the bwoo bwoo bwoo one), and did a pattern search on the entire archive for files containing a portion of it.

I remembered this sound as being kind of ubiquitous and inescapable on the system, but to my surprise, there weren’t as many matches as I thought there would be. 27 out of over 1500 SPC sets.

There were a few problems with my methodology:

  • The sample could be in an SPC file (in SNES sound RAM) but never actually be used by a track.
  • The sample could be modified slightly, still be recognizable as the bwoo bwoo bwoo we all love/hate, but still no direct match would be detected.
  • Any SNES soundtrack that is incompatible with the SPC dump format (ie any game that uploads new audio data mid-track) won’t be in the archive and therefore won’t be detected.

As an example: there is a slap bass sample in ActRaiser (Filmore) that sounds very similar, but didn’t count as a match. I’m not sure if it’s the same sample though. Paperboy 2 also seemed to dodge the list. Bwoo bwoo bwoo.

I could be missing significantly more, then. In any case, here is the list:

Darius Twin
Dungeon Master
Gan Gan Ganchan
Genjuu Ryodan
Hit the Ice
Hokuto no Ken 6
John Madden Football
Magic Johnson's Super Slam Dunk
Michael Jordan - Chaos in the Windy City
Might and Magic 2 (Japanese Version)
Mega Man X
PGA Tour Golf
Raiden Densetsu
Shinseiki Odysselya
Sonic Blastman
Soul Blazer
Spark World
Super E.D.F. - Earth Defense Force
Super Off Road
Super Soccer Champ
Vs. Collection
World Class Rugby

And here’s a list of matches for the individual SPC files.

(e 19/Mar/2017: Wording)

MIDI Masquerade

In 2015, someone posted a very large collection of MIDI files to Reddit, numbering at around 130,000 files total. I just downloaded and extracted it and I have now become this man.

Many of these files are transcriptions of pop, classical music, and video game soundtracks, dutifully sequenced by fans. Others are pretty awesome original works. Still others are just a single melody or set of chords.

It’s fun to pick a mid file at random, and if you like the track, to try and find out more about what it is, if it’s a cover of something, etc.

Some random picks:

  • ParadiseIsland.mid (Michael Walthius – Adventures on Paradise Island)
  • Streetlife-1.mid (The Crusaders – Street Life)
  • z2lapse.mid (LamSon Nguyen VanLam – Two Lapses)

But let me get to the main topic of this post. For whatever reason, some files that were not MIDI sequences were renamed .mid, and ended up in these internet collections. I guess people running MIDI repository sites weren’t very concerned about screening their files.

Here are some finds:

  • sou.mid – compressed archive containing what appears to be promotional content for a Japanese cop show.

  • how_do_i_live.mid – just an MP3 file. Spotted because it’s the largest file in the set.
  • horse03.mid WAV sample – Legend of Zelda: Ocarina of Time
  • hiatt.mid WAV sample – John Hiatt- Drive South
  • Amanda Wilson – Gotta Let You Go.mid – simply contains the ASCII text “file does not exist”
  • stereo.mid – WAV sample – “This is a journey into sound. A journey which along the way will bring to you new color, new dimension, new values.”
  • Somebody2.mid – dead hyperlink to an MP3 version of Somebody Help Me.

OK, so the only really intriguing one so far is the zip file with Japanese cop show stuff in it. Will add more to this post if I find anything worth highlighting.

1/5/2017 – Most standard MIDI files begin with either “MThd” or “RIFF” as a header identifier. Need to do some more culling, but a quick search for files that don’t match either header yielded around 1000 results.

19/Mar/2017 – Here are some more finds. I think I’ve satisfied my curiosity, and probably won’t come back to this. I just think it’s interesting how tiny bits and pieces of different things all over the world found their way into this collection.

  • andyl15.mid – Old 404 HTML page for the long-defunct web host

  • saluetg.mid – HTML page belonging to ‘The MIDI Farm’.
  • SUPPORT.MID – BBS listings for DMP / Dual Module Player, a module tracker program.
  • TwistAndShout2.mid – Someone’s HTML page about the Beatles’ Please Please Me, presumably a MIDI version of the album.
  • island2.mid – HTML page from “Miss Pita’s Domain”, a Geocities site circa 2000, now long gone. “Edited entirely by WebTv” is proudly displayed at the top. Here’s a mirror of the original site — though this one is a bit different.
  • hall_wee.mid – Multi-part MIME file with a couple of MIDIs based on the Halloween soundtrack (judith.mid and laurie.mid, already in the collection). Includes a promising warning at the top:
Content-Type: text/plain;
Content-Transfer-Encoding: quoted-printable

Do NOT listen to this music at midnight with all the lights off in the =
house. I did once and my friend came VERY fucking close to making me =
shit my pants.
  • F242.MID – This is a tracker module — a different sequencing format that includes instrument samples. F242 refers to German electronic group Front 242, which this module samples (per the internal notes).
  • bark.mid – NeXT Sound File of a dog barking.
  • swans.mid – NeXT Sound File, 19 second excerpt of a song I haven’t identified.
  • meg.mid – Shin Megami Tensei “BMS” music pack. Looping samples and a header file containing sequence data. My understanding is that this would be imported into a rhythm game.
  • bumble_b.mid – Seems to be a system component of an old version of Windows, maybe 3.0 or 3.1. References to EMS and various Windows file paths and fonts.
  • amc.mid – BMS package, similar to meg.mid above.
  • DAYSOF.MID – Sampled tracker module, like F242.MID above.
  • c04014.mid – Text file. Appears to be lyrics for a pop song by Taiwanese duo Ukulele – 《不知所措》 優客李林
  • JOYWRLD.mid – 
  • bluegrass.mid – 
  • absence_of_fear.mid – 
  • two_of_us.mid – 


And here’s a false positive: andshewas.mid is a valid MIDI file. Something prepended a text header to the top — it works if you delete that from the file.

(e:25/Mar/2017: wording)

Windows 10: On lock screen, 2nd monitor does not recover from power-saving mode

(Workaround is in place for this issue, but I want to leave some notes here in case I start looking at it again.)

OS: Windows 10 Pro 64-bit
GPU: NVidia GeForce GTX 750
GPU Driver:
Monitors: LG Flatron w1942TQ (primary), HP w1907 (secondary)

Setup: Windows 10 Desktop PC. Two monitors connected to video card in one of the following ways:

A) Video Card HDMI -> HDMI-to-DVI cable -> Monitor DVI
B) Video Card DVI -> DVI cable -> Monitor DVI
C) Video Card DVI -> DVI-to-VGA adapter, VGA cable -> Monitor VGA

I would prefer option A for contributing the least amount of physical bulk to the cabling of my system.

Problem: When locking the screen (Win+L), the monitors will go to sleep after some time has passed to save power. Upon hitting a key or moving the mouse, both monitors should wake up. When connected via DVI or HDMI-to-DVI, the second monitor will not recover until it is powered off and on again by hand.

When connected with a DVI-to-VGA converter, the second monitor recovers as expected.

Next Actions: Currently I’m using DVI-to-VGA for the secondary monitor. Another option might be to make a registry modification to disable monitor sleep on the lock screen entirely (which I haven’t tried, but someone wrote up the instructions here.)

I’m just curious why it doesn’t work with a digital signal… I haven’t done enough testing to pin down what’s at fault. I updated GPU drivers, but haven’t checked for new BIOS/UEFI versions, haven’t tested with another HDMI monitor, and haven’t swapped the primary/secondary designation for the two monitors. Had enough for today, and there are better things to do to prepare for the new year. Will update if I learn more about what’s going on.

11 Nov 2017 — Currently using Fedora 26, and the same behavior is present. I found an option in the HP w1907 which prevents the monitor from going to sleep while no signal is detected. (Management… -> Power Saver -> Off.) This prevents the issue, but leaves an annoying “Check Signal Cable” test message that ping-pongs across the display, until either the PC starts providing signal again, or you turn the monitor off. Using an analog VGA cable is still a better solution, since the PC is still able to wake this monitor back up following going to sleep.

Maybe analog VGA has some capacity to wake up a monitor that digital DVI/HDMI is lacking.

(e: 11/Nov/2017: updates)



Curses is a venerable API for interacting with computer terminals on a per-cell basis. What follows are some quick and unfinished notes about using the PDCurses implementation with C terminal programs in Windows 10 while I dabble with the library.

Many Curses functions return ERR (-1) upon failure. My notes do not cover error handling for all of these cases, because the tutorials I find on the net don’t seem to either. Nonetheless you may want to catch these error codes if you are writing something more serious.


Curses resources

Pradeep Padala’s venerable NCurses Tutorial

Invisible Island NCurses FAQ

Curses Questions and Answers on Stackoverflow

(Note: ncurses is for POSIX systems. PDCurses is a different implementation with support for Windows.)


Adding PDCurses to a Code::Blocks project

I seem to forget how to do this every time I reinstall Windows. There is video walkthrough by Cymonsgames here.


Startup and Shutdown

#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>

#include "curses.h" // Get Psyched!

int main() {
  initscr();        // Start Curses.
  start_color();    // Initialize color.

  raw();            // Accept raw keyboard input, so you don't have to
                    // strike Enter after every keypress.

  noecho();         // Don't echo user input back to the screen.

  keypad( stdscr, TRUE ); // Accept arrow keys, function keys, etc as input.

  endwin();         // When you are done, free Curses resources and return
                    // to normal command prompt behavior.

  return 0;



Printing text and drawing individual characters

Curses has a suite of printing functions, from printf()-style variable length formatted strings, to plotting individual characters. I use mvprintw() and mvaddch() most often, along with attron() and attroff() to control color and brightness.

 mvprintw( 10, 10, "Hello, World" ); // Print text (Y, X, printf-style
                                     // formatted string).

 attron( A_REVERSE );                // Reverse the FG / BG colors going
                                     // forward.

 mvaddch( 10, 22, '!' );             // Draw a single character.

 attroff( A_REVERSE );               // Disable reversed attribute going
                                     // forward.

 refresh();                          // Force screen update.

 getch();                            // Wait for user input.



With raw(), getch() will wait for the user to press a key, and return a key code. You can use getch() alone without an assignment to pause the program until any key is pressed. Many keys can be checked by their char literal value or escape sequence (like “\t” for the tab key), and PDCurses defines many macros to represent non-typewriter keys, such as KEY_LEFT, KEY_UP, etc, for the arrow keys.

int input = 0;

while( input != toupper('q') ) {
    input = getch();

    clear();             // wipe screen of previous contents
    mvprintw( "You pressed key %c, code %d.", input, input );

PDCurses doesn’t seem to have macros for the number pad when Numlock is on, so you will have to define those yourself.

Some keys generate multi-byte scancodes, particularly the Escape key. You may need to call getch() again to confirm. (Esc is scancode 27 followed by ERR (-1)).


Cursor control

The blinking cursor moves around as Curses draws and prints to the screen. If you want, you can manually position the cursor at the end of your update routine, or disable it.

curs_set(0); // 0: Don't show
             // 1: Blinking underline
             // 2: Blinking square.

move(y, x);  // Specifically move the cursor to a
             // coordinate.

Color Pairs

Though Curses does define macros to represent eight colors (0 through 7 — COLOR_BLACK, COLOR_WHITE etc), you can’t pass these to the Curses drawing functions directly. Instead, you initialize a series of color pairs, and pass the index of that pair as an attribute. If you want to address all 8 foreground and 8 background colors independently, you can initialize 64 pairs with each combination.

(Note: Color Pair 0 is already initialized, and reserved for monochrome mode.)

int cursesIndexColorPairs(void) {
    int n_colors = 8;
    int color_index_start = 1;
    int i;

    for( i = 0; i < n_colors * n_colors; i++ ) {
        if( init_pair( color_index_start + i, i % n_colors, i / n_colors ) == ERR) {
            return ERR;
    return 0;


Bright and Dark colors


The Windows command prompt supports legacy IBM PC Text Mode colors. There are 16 colors total, but they are accessed as 8 base colors, plus a brightness flag. The foreground and background of a given character get their own color and brightness parameters. In DOS, if the background color has a brightness flag, then the foreground color will blink on and off and the background intensity will be unchanged. A non-fullscreen Windows command prompt will just draw the background color as bright.

PDCurses will draw a character with a bright foreground if A_BOLD is passed as an attribute, and it will draw with a bright background if A_BLINK is passed, and both if they are passed sequentially or binary OR’d together. I can’t imagine A_BLINK serving as a bright background would be portable on other systems, but it’s the only attribute I could find that did so on Windows 10.


#define N_COLORS 8

int colorGetPair(int fg, int bg) {
  // return monochrome (pair 0) if requested colors are out of range
  if(fg < 0 || fg > N_COLORS || bg < 0 || bg > N_COLORS ) {
    return 0; 
  else {
    return 1 + fg + (bg * N_COLORS);

void colorSet( int fg, int bg, int fg_intensity, int bg_blink ) {
  if( fg_intensity ) {
    attron( A_BOLD );
  else {
    attroff( A_BOLD );

  if( bg_blink ) {
    attron( A_BLINK );
  else {
    attroff( A_BLINK );

  attron( COLOR_PAIR( colPair( fg, bg ) ) );

int main() {

  // ... snip
  colorSet( COLOR_MAGENTA, COLOR_CYAN, 1, 1 );
  mvprintw( 0, 0, "\"We need more searing Magenta and Cyan,\"\n said the CGA Project Lead." );

  // ... snip



getch() timeout via halfdelay()

halfdelay() will add a timeout to getch(), measured in tenths of a second, if no user input is received. It can be used as a 10FPS sleep timer for animations, while still allowing user intervention. Use nocbreak() to disable the timeout.


Screen Dimensions

Upon calling initscr(), the display dimensions are stored in two variables: COLS (width) and LINES (height). These variables do not seem to update upon resizing the window, but if you change the size settings, exit and restart the program, the new dimensions will be detected. My understanding is that other Curses environments are able to handle runtime screen resizing.


Windows 10 command prompt blanking on resize

If you find the Windows 10 command prompt is blanking out the display upon resizing the window:

  • Right-click the window title bar and choose Properties
  • Goto the Layout tab
  • Uncheck Wrap text output on resize




With some caveats, you can basically drop in the SDL version of pdcurses.dll, along with v1.2 of sdl.dll in place of the command line version. Screen dimensions are 80×25 cells by default — to adjust, it seems you need to change environment variables pdc_lines and pdc_cols. You can do this within your program prior to init_scr() with putenv(), or you can set the environment variables temporarily within a command prompt with the SET command.

putenv() :

putenv( "pdc_lines=20" );
putenv( "pdc_cols=20" );

// ...


Windows SET:

C:\set pdc_lines=20

C:\set pdc_cols=20



In SDL mode, you can drop in a new monospace bitmapped font with new dimensions — upon calling initscr(), PDCurses will search for and use pdcfont.bmp in the working directory. The PDCurses page on SourceForge has a set of example fonts. The font layout is Code Page 437. (Update: I’m having issues changing the foreground color when using a custom font — maybe I’ve missed a setting somewhere.)


Todo List for this post

  • Extended Character Sets (AFAIK no-go in SDL mode, but Code Page 437’s symbols should be available.)
  • Portability between PDCurses and NCurses
  • Mouse support: Curses defines structures and functions for reading mouse events. If this actually works in PDCurses and Windows 10, I would assume the command prompt application’s own mouse interactions (pausing everything to allow highlighting and copying) would interfere. But maybe the SDL port would be better for that. Will try it sometime later.
  • Setup of NCurses on Ubuntu
  • refresh() : Pradeep’s NCurses tutorial says that drawing is queued and refresh() updates the screen, however it seems that draw updates show up just fine in my programs without it. Maybe this doesn’t apply to my specific OS, or to PDCurses, or I’m missing a setting somewhere.
  • clear() : clear() wipes the screen. I have found on Win10 that it sometimes causes flicker. TODO investigate.
  • Modifying terminal colors: I can’t get this to work.
  • Curses Windowing: I haven’t touched Curses’s own windowing system. It seems to be intended for non-overlapping screen sectors.
  • Project Pluto’s PDCurses fork is a fuller implementation. This looks awesome and I need to dig into it sometime.
  • Foreground color change not working for me when I use a custom font in SDL mode.

(e: 6/Nov/2016: Screen dimensions)
(e: 11/Nov/2016: Input, Screen dimensions. SDL stuff)
(e: 3/Feb/2017: Color attribute wrapper, wording)
(e: 11/Feb/2017: Wording; corrected pdcfont.bmp; added putenv(); added a note that foreground color change isn’t working for me when using custom fonts with the SDL DLL.)

Thrift Log: Microsoft 1381 Webcam (LifeCam VX-2000)



I’ve been trying to figure out what to do for pictures in these thrift store posts. I’m one of those weirdos who doesn’t have a smartphone — nothing wrong with them, but I’ve never been able to get over the initial hurdle of cost, combined with their throwaway nature. I didn’t have a cellphone of any kind, period, until my old job put me on a weekend on-call rotation. And though my flip-phone (which is basically just a big pocket-watch that I have to charge, considering how often I use it) does indeed have a built-in camera, there appears to be no way for me to transfer those photos to another device.

The 1381 webcam is frankly pretty obsolete, but it works with Windows 10, and will suffice for the purposes of this blog. Not too bad for three bucks.

Edit 28/Nov/2016: I caved, and ordered an Android smartphone to help with my current job. It was not three bucks 🙂

Thrift Log: Intellivision TV Play Power


Paid six bucks. Disappointing unit for a variety of reasons.



The Intellivision had a crazy dial-and-keypad controller with side buttons. It supported plastic overlays for game-specific control instructions, and the dial could detect 16 directions of movement. Some would argue that the Intellivision controller was overly complicated and a pain to use, but it’s a huge part of the system’s character.

This Plug-and-Play unit uses a pretty standard layout with a d-pad, thumbstick and some face buttons. However, the directional controls are very stiff and unresponsive, and the thumbstick above the d-pad also behaves like a d-pad — not capable of detecting more than 8 directions.

So while it’s a concern that the unit doesn’t actually resemble an Intellivision controller, it’s overshadowed by not even being a competent controller.



The underlying architecture isn’t Intellivision: the games featured are reprogrammed for clone NES hardware, and if you look closely at the games, you can spot NES graphical artifacts like map palette corruption at the edge of the screen during 8-way scrolling (Hover Force).


Turn off your high-beams

Lastly, the unit has a red LED power indicator that beams in your eyes while you play.


Included games

I see there is a 10-game version that looks more like a Sega Genesis controller. The one I picked up has 25 games. Some of them are pretty cool, but the shoddy controls and inaccurate representations of the included games are a problem.

THUNDER CASTLE (missing its soundtrack!)


Not recommended.