Posts

A Cold Wind From the USSR - Part 2, Keyboard Emulator for a PDP-11

Image
To read Part 1 of this series, click here . The Russian Elektronika DVK-3 PDP-11 clone is a very fascinating computer to me, and I want to share it with the world.  Part of that endeavor involves allowing people to actually interact with it and play games on it remotely, not just see videos of me using it.  To get this to happen, I need to actually allow people to input into the system via the keyboard.  I could build a ridiculous robotic action to hit the keys on behalf of remote users, but this would likely introduce a great deal of latency into the system and would not be good for those critically-timed Tetris block rotations.  The best bet is to spoof the keyboard by basically building a whole new one, but instead of keys, use an Internet connection and microcontroller to generate the scan codes. The Elektronika MS7004 keyboard is based on the DEC LK201 keyboard interface , standard for PDP-11 minicomputers.  It utilizes the RS423 serial communication st...

Tensorflow, from Scratch to the Cloud

Having used plenty of pre-built machine learning models using Tensorflow and GCP APIs, and having gone through the pains of setting up Tensorflow on plain vanilla Amazon EC2 AMIs (not even the pre-configured ones with all the goodies installed already) and getting it to run classifications through the GPU and on Tensorflow Serving, I thought it was high time I try coding my own machine learning model in Tensorflow. Of course, the thing most folks aspire to do with Tensorflow when starting out is to build a neural network.   I wanted to model my basic neural network based on the MNIST examples just to get my feet wet, but use a dataset different than MNIST.   There are many datasets on Kaggle to choose from that could fit the bill, but I decided to use one of my own from a while back.   It consists of skin tones found in pictures, cropped carefully and aggregated into a dozen BMP files.   Don’t question where I got these skin tone pixels from, but rest assured tha...

A Cold Wind From the USSR - Part 1

Image
In my retrocomputing adventures, I have sought things not purely based on style alone, but based on combinations of processor, wide 3rd-party adoption and support, and "interesting" factor.  Having picked up at least one system from each common type of processor (8088, x86, Zilog Z80, 6502, 68xx, 68xxx) and the schemes popular in the USA (IBM & compatibles, Apple, Commodore, Amiga, Atari, Tandy), I thought it was time to try for something from overseas.  Plenty of computers were made for the UK market, such as the Amstrad, Acorn, and BBC Micro, and Japan had many interesting varieties of computers offered by NEC alone, not to mention their other manufacturers such as Sharp and Fujitsu. However, really not much is known (in English) about computers from behind the Iron Curtain. A Brief History of Why This Is a Thing One thing that is for sure: in the 1970s, the Soviet Union, in an effort to keep up with rapidly-evolving Western technology, decided to put an end to ...

Journey to a Fully Custom Pinball Machine - Part 2

Image
From walking the show floor at Texas Pinball Fest 2016, I couldn't help but get the vibe that something novel and big would be in store for TPF 2017 -- something beyond the big but also typical/expected releases of commercial games such as The Big Lebowski and Ghostbusters  (more on those later), but in fact the ushering in of a new era: totally home-brew and open-source pinball.  As the re-themed games became more impressive from 2015 to 2016, and with easy access to leaning about hardware, fabrication techniques to develop new things and restore/renew/improve on old things, and a rejuvenated fascination with pinball in general, it was not surprising to me in the least that we would see someone totally knock it out of the park like Scott Danesi did at TPF 2017 with Total Nuclear Annihilation . However, just in case Scott wasn't there with his amazing game (for which I placed one of the pre-orders slated to ship sometime in 2018), I wanted to produce some work as well in or...

A "Baby Tornado" to aid in Python server development

Why? Since my last post, I've been highly focused on Tensorflow projects at home and at work.  In the process of running Tensorflow behind an API, I've needed to make code changes to the "secret sauce" (business logic) that stands before Tensorflow and actually provides it with its data.  This could be in the pipeline of multiple Tensorflow models chained together, image manipulation, working with data that gets outputted from the model, or whatever other reasons.  Unfortunately, it is often slow and wastes a bunch of time to constantly restart the whole server (including reinitializing Tensorflow for 20 or 30 seconds), especially when you simply made a typo or used the wrong variable name or something like that. Besides the Tensorflow work, I've been involved in many blog-worthy pursuits since my last post but simply haven't had time to write about them.  (In fact, I meant to write this last week, but forgot.)  Anyway, at the end of June, right before my...

My Tensorflow Project Isn't Saving the World

Among all the hype around the latest and greatest technologies, there is so much publicity devoted toward how they are being used in grand schemes to cure cancer, reduce energy waste, conserve water, solve poverty, and so forth.  While all these things are wonderful to humanity, there has to be someone left in the background who helps all the do-gooders unwind when it's time to take a break! The TL/DR Version: Get To the Point! Use clever arguments when loading up your Docker container so you don't have to shut it down and restart it when you want to mount external directories from the host filesystem or expose the port for the Tensorboard server.  There is also nvidia-docker available if you want to use your CUDA cores. sudo nvidia-docker run -it -p 6006:6006 -v ~/Pictures/video-game-training/:/video-game-training gcr.io/tensorflow/tensorflow:latest-devel-gpu bash Use the  --output_user_root  option in your Bazel builds so you can save it to that external ...