S3 drivers for Windows 3.1

I’ve been playing with Windows 3.x on Dosbox and Dosbox-X – the S3 drivers found on Vogons have not worked for me.

I don’t know if these work, but it is possible to get the original first party S3 drivers via archive.org: https://web.archive.org/web/20090611100530/http://www.s3graphics.com/en/drivers/legacy_software_archive.aspx#id_765drv

Now also mirrored at https://cubiclehermit.com/w9524107.zip in case archive.org goes back down.

Programming Languages, as I learned them (pt1)

I wrote this around 6 months ago, and somehow never published it

BASIC

(1980-83: CP/M MBASIC, Commodore, BASICA, QuickBasic, VB6; a little bit of AppleSoft and TRS-80)

Somewhere around the holidays in 1980 or perhaps early 1981, I had my first encounter with a computer thanks to one of my parents’ friends noticing I was bored at a holiday party. This created a bit of a monster, wherein I’d attempt to borrow time on any of my parents’ friends’ machines I could reasonably borrow. I initially learned just enough MBASIC to load the text based games of the time – Star Trek, Wumpus, that sort of thing – but I got interested enough to start writing simple loops and interactive stuff, and acquired a couple of books about it.

Over the next two years, my elementary school acquired a room full of already-somewhat-aging PETs (some 2001s, some newer) and I attended a programming for kids enrichment program at LaGuardia College in NYC wherein I annoyed the instructors by getting too far ahead. Perhaps more memorable than the curriculum was the fact that they used the dark-case Bell and Howell Apple “clones” (a quick scan of retrocomputing sites suggests they were actually made by Apple and rebadged)

I spent a semester in California (thanks to my dad being on a visiting faculty semester at a university out here) in the spring of 1983 and got exposed to the Commodore 64, which was the first machine I learned some minimal graphics programming on. I got my own 64 that fall — I had been told for about 6 months that we were getting me a Timex-Sinclair for my birthday, and then when prices on the Commodores dropped sufficiently, it turned into a much better machine.

As my folks’ friends moved around that period from CP/M to PCs machines and clones (or in one case, an odd hybrid called the Seequa Chameleon), I learned a fair bit of BASICA/GW-BASIC.

My only major exposure to a non-Commodore consumer rather than business 8-bit version BASIC was on the TRS-80, which the magnet school I attended for one year in 6th grade had a full room of (mix of Model 3 and Model 4 one-piece machines; I had no idea at the time what the difference was) and my main memory is of writing a very simple Rogue-like (in the traditional sense) “move the character-based player around a text map on the screen” UI, although I don’t remember whether there was any “game” to it or just the PC movement. I think the TRS-80 basic had “PRINT @” rather than having to use cursor-movement characters or POKE the screen RAM as on the Commodore.

My folks got a PC (an original IBM XT, in fact) at some point during the in the 1986-87 school year, and I started got pretty good with BASICA, and later with compiled MS BASIC (or IBM Basic; I’m not sure at this point where the copy of the basic compiler came from.) Later, in high school, I got my hands on QuickBasic.

I learned VB6 much later; my employer during my mid-1990s break from college was a consulting firm that was, among other things, a Microsoft reseller. While I didn’t have an MSDN subscription through them, we had access to not-for-resale versions of almost anything Microsoft sold — my understanding is that this was for demo and training purposes, and as an employee I was allowed to order them up and reimburse the company. So I bought VC++ 6.0 and VB 6.0; while I was pretty comfortable with C and C++ (to be covered in later entries in this series) and learned to use both to an extent, doing actual Windows (MFC, etc) programming in C++ never clicked. VB, however, was probably the easiest language I’ve ever used to do desktop GUI development and the language itself was kind of just QuickBasic with a UI designer tagged on. Until I later, when had to do professional work with it, I liked it.

When, coming out of college I got my first programming job, I had VB6 on my resume. That company, Kana Communications (later KANA Software) had both a web client and a VB6 based “Power Client.” I was hired onto the server team – what we’d call back-end now – and was warned at the time not to tell anyone I knew VB6 — I assume lest I be pulled into working on the Power Client (more about this, and Kana in general, under Perl/Java).

When the dot-com bubble burst, and the company became much smaller, one of the things happened was that we needed to get someone to maintain the Power Client, and I ended up volunteering. It was already in maintenance mode (the newest release we were putting out retired it and deprecated the Web Client, in favor of a Java Swing app via WebStart) so there wasn’t a ton of new development, but I did learn to have a thorough distaste for what was by then (late 2001 into 2002) very dated tooling. I’ve half wanted to try VB.net since I became aware of it, but it’s never gotten anywhere near the top of my to-learn queue.

Honorable Mentions

In addition to languages I actually learned, I’m going to have a few other mentions, of languages I’ve gotten exposed to but where either I never finished learning them, or where they’re IMO too close to something else to claim credit for learning a new language.

Honorable mention 1

Logo

(sometime around 1981, revisited in 1986)
I got exposure to this in school a number of times, starting with the PETs whenever it was that my school got them, and at some point I played with it on PET, C64, Apple II and TI. Like pretty much anyone else my age, it was cool creating graphics with the Turtle, and by the time I re-encountered it in 6th grade on the TI, I remember doing some parameterized functions along the lines of “give a number 3 or higher, and my function generates a star with that many points” but I never learned to do much of anything else with it.

Exposure to Python

Python is a language that does not show up on my resume, because my last professional exposure to it (at Panta, in 2004-5) was very negative, and I’ve found if you have something on your resume — no matter how obscure/brief the mention is — someone is going to try to hire you for it. That said, I’ve been doing a modest bit of it lately for a project at my present employer and between support for it in IntelliJ and and ~13 years of improvement, I can tolerate it.

On a second round of use, I’ve found I really appreciate its expressive power, and I can … just barely… tolerate the dynamic typing.

On the down side, I have strongly confirmed my initial impression that it has some of the most unpleasant aesthetic syntax choices of any modern programming language — possibly the worst I’ve come across, barring esolangs, and surviving pre-C languages. It literally manages to make Perl seem like a pleasant alternative.

Java vs. C, a totally unscientific microbenchmark

Java vs. C — inspired by an interview question, I wrote a little bit of sample code to create an array of a billion random integers, and either (A) take the sums as I go, or (B) go back over and sum it on a second pass.

In C (cygwin, gcc 6.4.0 64-bit):
– summing as I go, about 3.7 seconds on my laptop, -O3 doesn’t make much difference
– two passes, about 6.5 seconds unoptimized, about 4.1 seconds with -O3
– time to malloc(sizeof(int) * 1000000000) < 1ms

In Java (jdk 10):
– summing as I go, about 12.1 seconds
– two passes, about 13.4 seconds
– time to new int[1_000_000_000] about 1.7 seconds

So Java sucks, right?

Replaced random integer with consecutive integers, all in two passes:
Java : 2.7s
Unoptimized C: 6.1s
C at -O3: 2.1s

Given how much of that time is the equivalent of malloc in Java zeroing the memory, that’s pretty impressively fast.

So the real issue seems to be that Random.java is WAYYYY slower than rand()?

JVM performance over time

Out of curiosity, I decided to run some quick (and non-repeated, largely unscientific) benchmarks of a Gentoo (-march=native,etc etc) OpenJDK/IcedTea build vs. actual Sun/Oracle JVM builds. Interestingly, the Gentoo builds are slower. Unsurprisingly, the JVM gets noticeably faster across versions from 1.6->1.7->1.8

Continue reading “JVM performance over time”

Inside baseball, Linux edition

I love the title of this article: “
¿Por qué SystemD es una mierda?

Too tired tonight to read the whole thing in Spanish — I’ll feel dumb if the implications of the title aren’t their point — but wanted to share somewhere. Disabling the FB/Twitter publicize for this one for obvious reasons if you can follow the literal translation.

A fascinating article on evolution.

On the PLOS blog (found via Medium) there was a really interesting post discussing the intersection of environmental conditions and genetics, and their impact on human evolution. The title may be either off-putting or funny to some, but it’s worth a read both on general interest or to those who have a particular interest in either human evolution or environmental science. Other than using the clinical term for the male genitalia, totally safe for work:

Plastics, tiny penises, and human evolution

An Italian study in 2012 found that men’s penises were growing smaller over time — two centimetres lost from grandfather to grandson in the twentieth century. Conservative radio bloviator Rush Limbaugh knew who to blame: ‘feminazis, the chickification, and everything else’ linked to feminism. Other commentators, a bit more scientific, pointed the finger at endocrine disrupting chemicals, such as pesticides and hormones fed to cattle, as likely culprits.
[…]
To anticipate how xenoestrogens or any other synthetic chemical that influences fertility might affect human evolution, it helps to consider niche construction theory.

It goes on from there. Go read it.

Fun with Gentoo

Nightly auto-upgrades are great, except when they aren’t. In this case, going from app-misc/screen-4.0.3-r7 to app-misc/screen-4.2.1-r2 changed the default SCREENDIR from /run/screen to /tmp/screen. Normally wouldn’t care, but I had running screen sessions and couldn’t get in; oops!

Only realized about the SCREENDIR variable after I’d already downgraded back to 4.0.3-r7.

What I was doing at age 18

I recently realized that a very important aspect of what I have done for the past year in my day job is echoing how I got started in my career. That is, I spent a bunch of time last year and this year justifying a large technical project — in writing for a less-technical audience — and then working with other people to get it organized and deployed. I’ve also recently in my work gone back to that project — documenting the project so that other folks could finish it, and a non-IT PM could manage it — so that I can get back to programming.

Realizing that, it inspired me to see if I still had the documents I’d written for that original project. It turns out, I did — both the original proposal, and a mid-year budget for the actual ordering once we got the project approved.

So, what was this project? Getting my high school computer lab on a LAN, and on the internet — the latter isn’t mentioned in the original proposal, so I guess it was scope creep, but it was awesome. The project lead to my first full-time summer job and my first full-time job when I took my break from Dartmouth (both doing Novell server admin work plus some desktop support) and I’m pretty sure the project itself — still underway — made a difference in my college applications.

A PDF reconstructing the original documents is here: Networking Computer Resources for Hunter College High School: A Modest Proposal Below the break, reminiscences and a text version of the document itself.

Continue reading “What I was doing at age 18”

Parts from my old (failed) attempt to build a small computer

_MG_0184

Finally inventoried the parts after years in storage. Lot of chips, though nothing that rare or interesting. Somewhere I have the schematics I designed. Will scan them when I find them. I doubt it really would have worked, and I never got an EPROM programmer working. Very tempted to try to figure out how to reuse some of this building something like N8VEM.

List below the fold. Continue reading “Parts from my old (failed) attempt to build a small computer”

A quick bit of FFMPEG magic to improve VHS rips

fmpeg -i Old_VHS_copy.avi -threads 0 -aspect 4:3 -vf "pp=ac/lb/ha/va/dr/al,frei0r=brightness:0.625,frei0r=contrast0r:1.05,frei0r=saturat0r:0.10,hqdn3d=4:4:7,scale=480:-1,unsharp" -codec:a libfaac -b:a 64k -codec:v libx264 -profile:v high444 -preset:v placebo Much_Better.mkv

Found the frei0r contrast/brightness/saturation controls MUCH better than the MP2 ones.

Amount of de-noise (before downsize) and sharpening (after) is to taste, obviously, as is the amount of brightness/contrast improvement. This source was AWFUL!