RetroChallenge 2018/04: Week 1 Recap

Alright, one week down, and I have to say I’m relatively pleased with how things are progressing. Specifically, in the first week I:

  • Wrote code to draw game board (“road”, NOT including a lane line, at least for now)
  • Generated plot map for player’s car
  • Generated plot map for other car (obstacle)
  • Generated plot map for gas can (target)
  • Generated shape table data for player’s car, obstacle car, and gas can
  • Wrote code to populate shape table
  • Wrote code to draw shapes from shape table
  • Wrote code to capture player’s keyboard input (to control “steering” of player’s car)
  • Wrote code to redraw player’s car in appropriate position on screen (within “road”) based on keyboard input

Here’s a screenshot of what the game board looks like presently:

RetroChallenge 04/2018 #1

I have a lot to digest, as I plan for Week 2. First up, dealing with some challenges around forced branches over long distances (i.e., more than 127 bytes). Fun stuff. 🙂


RetroChallenge 2018/04: Week 1 Plan

My target for each week is to publish a “this is what I’m PLANNING to get done this week” post on Sundays and a “this is what I actually GOT DONE this week” post on Fridays.

However, with Easter falling on the first day of the RetroChallenge, that didn’t happen (though I still managed to get through another couple of relevant [i.e., related to hires graphics] chapters of Assembly Lines).

So, better (slightly) late than never, here’s my plan for what I intend to accomplish this week (Week 1):

  • Write code to draw game board (“road”, including lane line?)
  • Generate plot map for player’s car
  • Generate plot map for other car (obstacle)
  • Generate plot map for gas can (target)
  • Generate shape table data for player’s car, obstacle car, and gas can
  • Write code to populate shape table
  • Write code to draw shapes from shape table
  • Write code to capture player’s keyboard input (to control “steering” of player’s car)
  • Write code to redraw player’s car in appropriate position on screen (within “road”) based on keyboard input

Let’s get rolling!


RetroChallenge 2018/04: Taking The Plunge!

I just found out, thanks to Epooch’s blog, about the RetroChallenges that John W. Linville hosts.

Now that I’ve returned to the of proud Apple ][ owners, this event seems like a perfect catalyst for putting aside my 30 years of excuses and learning 6502 assembly.

First up, diving into Assembly Lines: The Complete Book. The desired end state? Building the Spy Hunter-inspired driving game I longed to create circa 1985!

We’ll see how impressive it ends up being with only a month (of spare time) to dedicate to it, but I’ll be happy to complete a version 1 with a “car” you can steer, obstacles you can avoid (and/or shoot?!), and some rudimentary scoreboard of sorts.

Stay tuned, April 1st is one short week away!1

  1. This should be fun, amusing, a train wreck, or some blend of the three. 🙂

Post Notif v1.3.0 – At Long Last, Shortcodes!

Happy New Year!

For once, I am going to actually keep one of these release posts brief.

Post Notif version 1.3.0 is now available in the usual locations: the plugin directory, on its GitHub page, and here, on this site.

The main driver behind this release was the (long overdue) introduction of a shortcode to render the Post Notif subscriber form. With this version, admins can now tailor the placement of their subscriber forms within posts, pages, widgets, or any combination of the three.

At the risk of repeating myself, here is a comprehensive list of what’s new:

  • Added the [post_notif_subscriber] shortcode, with a bevy of configurable attributes, to tailor each use of (and support multiple uses of) the shortcode in a post or on a page
  • Added two new sections to the plugin settings (Settings >> Post Notif), to define shortcode default attributes and messages
  • Added the ability, for admins who are CSS-savvy, to specify a separate stylesheet to use with either the standard widget or the shortcode-generated subscriber form, allowing them the ability to target individual element ids or entire classes (for wholesale restyling of the subscriber form)
  • Added the @@postcategory variable, for use in the subject and/or body of the post notification email template

This is going to be the last minor release for Post Notif. I will continue to ship point releases, as-needed, to address bugs, add translations, etc. I feel like the shortcode was the last piece of functionality that Post Notif was really missing. So I will be shifting my development focus to other things in 2018. As always, please do let me know, either here, or in the support forum, if you run into any strange behavior with this release.


SDFloppy II – Rebooting An Apple ][e

I recently (re-)acquired an Apple ][e, the first computer that was truly my own.1

One of the few things I fully regret from my youth was getting rid of my ][e in college,2 as I moved from one residence to another every six months, and got sick of lugging it around.3

Fast forward almost exactly 20 years, and an article sent to me by a friend led me to KansasFest, promptly overwhelming me with nostalgia. An expedition to eBay quickly followed; perusing the vintage computing listings there yielded an Apple ][e setup nearly identical to my long-abandoned childhood system. The only issue was that the seller was in Florida and unwilling to ship it. 🙁 As luck would have it, however, mere days later, a Craigslist listing popped up in Colorado Springs, just down south from me. For only 10% of what I bought my system for back in 1985, I became the proud owner of a very comparable system.4 No 1200 baud internal 212 Apple-CAT II modem but there is a suitable, modern substitute for that once Paul Rickards takes a break from playing games on his Commodore PET (which, for the record, I think is totally awesome!) and decides to make a new batch.

Bob, the fine fellow who sold me the ][e, told me he thought the disk drives still worked, but that he had not tested them in a few years and no longer had any floppies to sell me. I eagerly fired up the system and did a little light BASIC programming (including some spectacular lo-res graphics!) but didn’t want to go too deep without a means to store my work or load anything other than the built-in AppleSoft BASIC. While encouraging, this motivated me to embark on my next mission – acquiring some software, all while worrying, in the back of my mind, that neither drive would work (or that, equally frustrating, the drive controller card wouldn’t work). I figured, worst-case, I could buy a DuoDisk off eBay, since I now had a DuoDisk controller card as well.

Finding blank disks proved somewhat of a challenge, but I did stumble upon Retro Floppy and what I thought might be an effective, if cumbersome, solution in Apple Disk Transfer ProDOS. Still a little concerned about the reliability of buying (even sealed) 30-year-old diskettes, through searching deeper into long-dead forums’ posts, I found Athana, who it appeared had been manufacturing new 5 1/4 floppies up into the early 2000s. After they gleaned, from a brief email exchange, that I was looking for 10s, not 100s of floppies, they kindly referred me to, from whom I procured a 10 pack of new (and relatively recently manufactured) 5 1/4 inch floppies.

Still, without a means for transferring DOS 3.3, ProDOS, or any previously existing software to my system, from the outside world, I continued searching the internet for modern solutions to bridge the gap between the sea of .dsk image files available for Apple ][ systems and the legacy hardware itself. It didn’t take long for the SDFloppy II to show up in both my search results and links from retrocomputing hobbyist sites. And days later, its creator, Plamen Vasilov, was recognized in a post on, of all places, KansasFest’s site!

The only problem was that the SDFloppy II was out of stock. I sent an email to the contact address, inquiring about future availability, and received a prompt reply, from Plamen, that there might be a few more made available in the coming weeks. And so, I continued to routinely re-visit the SDFloppy II product page, hoping to find that they were back in stock. Fortuitously, only a few weeks later, the product page allowed me to order one! And then I settled in, anticipating a lengthy wait for its arrival from Bulgaria; you can imagine my surprise when it was on my doorstep 10 days later! Though I had some lofty preconceived expectations (based on photos and glowing reviews) about what the device looked like and how it performed, Plamen’s wizardry cannot be fully appreciated until you have an SDFloppy II in hand; it is minuscule, cleanly and solidly constructed, and works like a charm!

I connected the ribbon connector between the SDFloppy II and the drive controller card and turned on the computer’s power, thinking good thoughts. Nothing happened. So I took the DuoDisk drive controller out of slot 7 and tried again;5 the SDFloppy II booted right up, with Lode Runner’s splash screen staring right back at me!

Lode Runner

As it seems likely that, at some point in the future, my disk controller card will wear out, I am eagerly waiting in line for one of the next batch of Rich Dreher’s CFFA3000 cards, which goes straight in to an expansion slot itself, mounting a CompactFlash card or USB flash drive directly on the expansion card.6

But for now, and as long as people are still selling Disk II controller cards, I am going to enjoy the SDFloppy II and the spectacular functionality it delivers. I know Plamen is hard at work building other crazy Apple ][-related hardware products, so availability of new SDFloppy IIs is extremely limited, but this little device is a must-have for anyone looking to breathe new life into a beloved old system! If you can get your hands on one, I’d strongly encourage you to buy one without hesitation!

  1. My family had a Radio Shack TRS-80 Color Computer and an Apple //c prior; the IIe was mine, which is another story for another time.
  2. The other one that comes to mind immediately was giving my brother permission to sell our Star Wars action figures at a garage sale; I’m not 100% certain he didn’t just take them when I wasn’t looking!
  3. I had a shiny new 486 I was writing C++ code on, at all hours of the night, thanks to a Windows 95/Linux dual boot; this enabled my procrastination on CS projects since I no longer had to abide by the concrete work hours enforced by the on-campus computer lab closing at midnight.
  4. It consists of an Enhanced IIe, color monitor, two disk drives, a joystick, and a bunch of cards: 80 column card with 64K memory expansion, super serial card, serial printer card, Apple II 768K memory expansion card, mouse interface card (anyone have a compatible mouse they’re looking to part with?), Disk II controller card, and DuoDisk controller card.
  5. Yes, I’m a bit rusty on boot sequencing!
  6. Plus, I want to support as many of these people doing impressive Apple II retro projects as possible.

Post Notif v1.2.0 – An Overhauled Notification System

Good evening!

As the clock ticks incessantly forward, toward the first of December, I am happy to announce that Post Notif version 1.2.0 is now available! You can grab it via the customary avenues: the plugin directory, on its GitHub page, and here, on this site.

This version contains not only additional functionality but some overdue improvements to the underlying architecture, as well.

In an attempt to be completely transparent about what is NOT included in this release, I’ll acknowledge, sadly, that shortcode functionality did not make it in. I had every intention of adding it to the plugin for this version but a couple of factors conspired to prevent me from doing so. First, the reconstruction of how the post notification send process, overall, works, was far more involved, both in design+implementation and testing (this was extremely painful, due to the [inevitable] explosion of test cases that has resulted from adding more unique paths through which authors can trigger notifications) and then the changes to shortcodes and widgets, introduced in the newly released (11/15/2017) WordPress 4.9, added to my discomfort endeavoring to hastily implement this additional functionality.

Consequently, I have pushed the inclusion of a shortcode, for collecting Post Notif subscription requests from site visitors, to the next minor version (i.e., 1.3.0).

In the meantime, I anticipate there is likely to be a version 1.2.1, consisting, at a minimum, of some translation updates, a small enhancement or two, and obviously, if needed, bug fixes. (I’d like to think my code is flawless but I know, with certainty, it is not 🙂 and with the quantity and scale of the changes, which warranted making this release 1.2.0, rather than 1.1.6, I won’t be terribly surprised if there are issues that need immediate attention and repair).

With all of that out of the way, here’s the list of what is new:

  • Added functionality to check the status of, pause, or cancel post notif processes
  • Replaced the old, read-only, View Post Notifs Sent page with a new Manage Post Notifs Sent page. This page, as did the page it replaces, displays an audit trail of the post notifications sent. However, it also contains additional (sortable) columns that display, in more granularity, the status of (future) scheduled and in-process notifications. And, finally, it allows actions to be performed (pause/resume and cancel) on individual notifications, based on their status.
  • Added a clickable link, inside the Post Notif meta box, which routes authors to the Manage Post Notifs Sent page
  • Bolstered the underlying send post notification process code to avoid PHP timeouts (thanks to Ashley Rich for inspiration)
  • Added batch mode options (batch size and batch pause), accessible via Settings >> Post Notif, to account for host throttling (i.e., limiting the number of emails sent by an account, per hour, in the name of spam prevention)

What has been removed:

  • The progress bar (and related send status indicators) has been removed from the Post Notif meta box (where it was visible when triggering post notification via “Send Now”). This was necessary due to the added PHP timeout prevention handling. I realize this may be annoying to some of you but I hope the addition of the (aforementioned) link to the Manage Post Notifs Sent page (and the expanded capabilities available on this page) provide some consolation.

And what’s been fixed:

  • Code has been added so that, when Post Notif is deactivated (via the Plugins page), all WordPress Cron events for future (scheduled and batch-paused) post notifications are deleted. In conjunction with this action, the send_status, of the corresponding post_notif_post rows, is updated to “Cancelled”.

A hearty thanks is owed to Wolfgang for his tireless patience in providing feedback and testing throughout the nearly year-long(!) ideation, implementation, and testing of the guts of this release!

As a reminder, if you are interested in the current status (and pending release target dates) of the next version of Post Notif, please monitor the Projects page – the Post Notif entry is maintained as a link to the current development version page, which contains details about what new functionality, fixes, and improvements are slated for inclusion in the next release, as well as links through which to download beta versions. Alternatively, you can always pull down the latest version (GA or beta) of the plugin from the GitHub page.

Finally, I know it goes without saying, but please do get in touch, either here, or in the support forum, if you run into anything weird or problematic with this release.


Post Notif v1.1.5 – Style Your Widget The Way You Want It!

OK, I’ll keep this brief; after waffling for (literally) months about what to include, what should have top priority, and how to handle translations in various states of maintenance and active support, version 1.1.5 of Post Notif has been released. It is available from the usual sources: the plugin directory, on my GitHub page, and here, on this site.

The primary new features in 1.1.5 consist of an expanded list of configurable settings for the Post Notif widget, namely the ability to:

  • Set First Name as a required field
  • Modify First Name and Email Address input field sizes
  • Override default theme CSS by defining:
    • Call to Action font family, size, and color
    • Placeholder font family, size, and color
    • Input fields (first name and email address) font family, size, and color
    • Error message font family, size, and color
    • Status message font family, size, and color

Additionally, the following has been repaired in this release:

  • Duplicate post notifications are no longer being sent when a post has multiple categories
  • Subscriber import (from file) is no longer erroneously failing on “invalid” categories
  • Email addresses containing “+” now work with personalized URLs

Finally, as a heads up to those who use Post Notif with non-English sites, this release marks the first one where translation files have been removed from the plugin package. Specifically, as they now have language packs (defined and maintained via the Polyglots team), all translation files for Czech and Dutch have been removed.

A special thanks goes out to Dan Heim for his suggestions related to additional widget settings and Frank for his tireless assistance in figuring out how to get language packs integrated into Post Notif and helping me determine the process+timing for hedging against English “leaks” in the translations; those who use Post Notif in Dutch will see that he managed to maintain 100% coverage in his translation as the plugin’s Stable version transitioned from 1.1.4 to 1.1.5.

There are some big improvements coming to Post Notif in the next release (shortcode and post notification send process configurability additions chief among them), so it will be released as version 1.2.0. If you’d like to see the features, fixes, and improvements slated for inclusion, target dates for each of these, or help out with testing the beta releases, please check out the development page:



On The State of Post Notif v1.1.5 Development

I know Post Notif version 1.1.5 is long overdue. And it is eating at me. So, this is what’s between me and getting it out to you; if you make it through this 🙂 and have any general feedback or, better yet, suggestions, I’d love to hear them!

OK, here goes:

  • TL;DR: Testers need to be able to acquire incremental release files and spam filters are making it increasingly difficult to send these files via email, plus, managing (potentially duplicative) testing relationships is suboptimal to testing more “out in the open.”

    I am a firm believer in the need to test code changes as exhaustively as reasonably possible. To that end, I much prefer to have people other than myself (who wrote the code and therefore is an unreliable tester at best!) perform testing on the individual fixes + new functionality that comprise a new release before I consider them for inclusion in the full new release that becomes the default download in the plugin repository. So far, my approach to the testing phase has been working one-on-one, via email, with testers (exchanging .zip files and their resultant feedback). But lately I have been having a ton of problems with emailing .zip files to people (ironic, I know, for a guy who writes a plugin for sending email notifications but life is funny like that!); email hosts have been flagging more and more of my emails as spam, even BEFORE I attempt to send a .zip attachment! So, I am leaning toward shifting to simply releasing incremental “beta” versions of the plugin to download here, on this site, and then announcing these beta versions in the support forum, encouraging anyone interested in testing to do so. I am not totally clear on how I’d manage the iterative testing and feedback loop, so I’m wondering if anyone knows of an existing plugin I could install on this site to manage that?

  • TL;DR: I don’t want to delay releases for the vast majority of users, who I suspect are English readers, BUT I don’t want admins and users of non-English sites to have a subpar experience either. Reconciling these has proven challenging thus far.

    New releases, particularly if they contain new functionality, tend to introduce new and/or modified translatable strings. The switch over to language packs for translations (which eliminates the need for inclusion of translations in the plugin package itself) is progressing (both Czech and Dutch are all set!), so that’s positive. However, I’m concerned about how to prevent English “leaks” from happening. What I mean is that I anticipate a delay between the time I introduce new strings in a release and when translators will catch up and update the language packs to account for the changed set of strings. During this time, untranslated English strings will leak into the plugin’s presentation + displays for admins and users of Czech and Dutch-based sites (since as of this writing these two have language packs). Up until now, I’ve prevented this by adding (admittedly shoddy) Google Translate “translations” in the plugin package itself, to prevent leaks until my translators could get back to me with their updates, at which time I’d roll out a small release to include their updated translations. But this won’t work with the translations moved to language packs outside of the plugin package that I control. Now, the most obvious solution would be to check in a final development version of the plugin’s new release, a certain number of days before releasing the new, “stable” version (meaning the default version that one downloads from the directory), containing the full set of current translatable strings, to give the translators some lead-time to synch up their language packs. But, per the plugin review team’s guidelines, plugin developers are not supposed to be using the repo for anything but production releases. So I remain unclear as to how to best support the translators in their mission to maintain complete language packs over time. (I’ve reached out to someone with a lot of Polyglots team experience about this so I’m hopeful I can resolve this soon.)

  • Finally, I have been thinking quite a bit about a next generation of Post Notif, building upon many of the lessons I’ve learned, from the plugin’s lifespan thus far, about what works well and what hasn’t. A current WordPress core version would be required, so it could employ some of the more recent functionality, such as the REST API. Of course I would maintain support of the existing Post Notif plugin, for a clearly-defined period of time, to allow those interested in continuing to use it to do so until they are able to get their WordPress core updated to the minimum version required for the new plugin.

So there you have it. I have every intention of proceeding with support and enhancement of the existing Post Notif plugin. I use it myself, after all, and will do so until I build something better. 🙂 But, clearly, I need to overcome some obstacles that, individually, may not look like much, but combined, have slowed my progress to a crawl. Please do let me know if you have suggestions about any or all of these items. Thanks!


Post Notif v1.1.4 – Czech It Out!

This release, coming quickly on the heels of the much larger version 1.1.3 release of Post Notif, is chiefly to include the Czech translation kindly provided by Jirka Licek. There is also a rather subtle improvement included, in the form of the email dashicon replacing the generic gear dashicon, for the Post Notif top level menu in the admin dashboard.

What this release also marks, longer term, is a change in the way translations will be managed for Post Notif going forward. Specifically, I am officially turning the future handling of translations over to the Polyglots. I no longer wish to be a bottleneck between the generous translators and those who’ve come to rely on Post Notif appearing completely translated (with no English “leaks”) into their preferred language, release after release. Instead, I will return all of my focus to promptly addressing issues raised by users and deliberately adding functionality that incrementally improves Post Notif.

I will post again once I have confirmation from the Polyglots that language packs have been created for each language Post Notif has a translation for, at which time I will remove the .po and .mo files from the ../post-notif/languages directory in the plugin package. If you would like to provide a translation for a language that has not yet been addressed or you’d like to help maintain an existing translation, please let me know and/or contact the Polyglots directly.

In the meantime, I continue to appreciate any and all feedback you have, so please let me know what you think.

And thanks again, Jirka!