Romancing the Code: The Literacy Narrative I Did Write

As noted previously, I had to learn the hard way about how to really focus in a good writing assignment. This is the finished product, the earlier draft of which is here: Romancing the Code: The Literacy Narrative I Wanted to Write.

This is the final version of a literacy narrative, originally written for UMass Lowell (online) College Writing I, Sec. 031, Professor Richard Keating, October 15, 2018. (Note to plagiarists: This has been submitted to the TurnItIn database, <sarcasm>so, by all means, copy away</sarcasm>.)

Douglas Wilcox
Richard Keating
UML College Writing I, Sec. 031
October 15, 2018

Romancing the Code

Phase 1: Literacy Narrative

In one of several clichés employed by twentieth century science fiction, computers are autonomous problem-solvers. They are almost never seen to be programmed by humans. The idea of a computer as a tool is refocused into its metanarrative, where the computer is an autonomous yet servile agent of its human master. A query is made, and the computer—via punched paper, data cards, audible output, or screen display—provides the answer to an enormously complex problem. Although I use computers to solve a vast number of practical problems in everyday life, programming itself, begun when I was in elementary school, provides the ultimate problem-solving experience.

The same year Star Wars was released, I met my first real computer: a Digital Equipment Corporation (DEC) PDP-8, at my town’s high school. Each terminal connected to this computer was a repurposed teletype machine. There was no screen display, only a nearly-endlessly spooling roll of paper. Each keystroke from the operator or each character output from the PDP was accompanied by a wonderfully complex sound of motors and servos moving the print element and its carriage across the platen, and hammering the right letter onto the paper (262LongRunner).

I was in love.

Through another school program, I got to play on a PDP-40, a massive device that would have made the PDP-8 weep with inferiority, had it been sentient. There I discovered the text adventure “Dungeon” (nee Zork) (Anderson, Kidder).

Creating my own text adventure game became my obsession. I had grand visions. I spent hours creating maps, and working to figure out subroutines that would be able to interpret user input, track inventory, handle world descriptions and actions, and even inject some humor while tracking hunger and thirst—“You would kill for a baloney-and-cheese sandwich.” There was no way for me to do a program this large on the DEC, but the Apple IIs that the junior high had would be perfect. They even had floppy drives, so I could store this creation on my own 5¼” diskette.

Not owning my own computer, I had to work offline—truly offline. I worked in notebooks, keeping the program flow in my head, and writing the code in longhand for later entry and debugging. I had the inspiration and functional model from other, better-written software, and a clear idea of what I wanted to do. I just had to figure out how.

A text adventure needs to provide a description of each location or room, and anything that might be portable in that room. The program needs to track the player’s location, and allow the player to move through the game world. My solution for handling this was effective, but contraindicated by speed and memory limitations at the time. The key was arrays—the computer equivalent of a numbered stack of index cards. I used an array of alphanumeric variables as a container, storing the description for each of the game’s locations by element number in the array. So, if the player moved to “location 104,” the description could be displayed by returning the description in “card” 104. That system was great for things which stayed in place, but what about portable items? For that I had to push further, but was still able to use an array structure. I invented a design where each portable item would be assigned to an item number in an array, and the data for that item would be stored in a predetermined portion of a text variable that contained, among other things, the item’s description. In the metaphor of the index cards, we might imagine that specific lines on each card record a specific kind of data, such as consistently having a title on the first line of every card.

Player movement could be controlled by setting the player’s location to a particular number corresponding to the description array and item locations. Switching the location was just a matter of coding which direction’s movement would take one to which location number and using that number to access the description and item arrays.

When I finally got enough of the modules coded and debugged, I ran it. It worked! It was slow—but it worked.

Now I work full time as a programmer, as I have for more than 15 years, and every part of my workday involves applying digital literacy directly to solving programming problems. I use my store of those skills and a variety software tools to accomplish this. The problems I solve are far more complicated—although they often still involve arrays—but they apply all the digital skills and literacy that began when I was smitten by the PDP-8, in all its teletype-driven glory.

Phase 2: Analysis

The rapid development of digital technologies in the digital era presents individuals in the emerging information society with situations that require them to employ a growing assortment of cognitive skills in order to perform and solve problems in digital environments. These skills are often referred to as “digital literacy” (Gilster, 1997; Inoue et al., 1997; Lanham, 1995; Pool, 1997), which is presented as a special kind of mindset that enables users to perform intuitively in digital environments, and to easily and effectively access the wide range of knowledge embedded in these environments (Gilster, 1997; Tapscott, 1998; EshetAlkalai, 2004; 2005) (Aviram and EshetAlkalai 1, emphasis mine).

The experience described in this narrative pertains to the phrase: “to perform and solve problems.” Problem-solving is the aspect of digital literacy that is most important in my life and career.

My first digital literacy skills were not very impressive, and many are now accessible by toddlers in today’s world of icons and GUIs: reading a directory, loading a program, running that program, and interacting with its prompts and output. Looking back over my computer literacy from childhood through the early days of my computer career, it is clear that my very meanest skills were a foundation of understanding that lasted for decades.

I worked in notebooks, keeping the program flow in my head, and writing the code in longhand for later entry and debugging.

Although the problems I solve are now more complex, the instant availability of explanations, sample code, and often complete example projects available online can make the level of problem solving significantly different. Given my skill level at the time, my limited access to computers, the nonexistence of the Internet, and a lack of established patterns, there was more room for innovation at a basic level. Innovation is still significant, but it tends to occur 

I spent hours creating maps, and working to figure out subroutines that would be able to interpret user input, track inventory, handle world descriptions and actions, and even inject some humor while tracking hunger and thirst….

It was somewhat surprising to explore this time period, and to renew my awareness of just how exhilarating computer tasks were. I was able to continually improve programming concepts and problem-solving by my sometimes weak attempts to replicate things I had seen. Writing my own text adventure was a wonderfully motivating force for improving my programming and the problem-solving that went along with it. I still advise those who want to learn a new platform on language to think of something that they really want to build as a first project.

That system was great for things which stayed in place, but what about portable items? For that I had to push further.

Although it is true that I knew far less, I was also working with a programming language that was more limited in its abilities, and accomplishing what I wanted often required a finer-grained ingenuity.  

The “growing assortment of cognitive skills” (Aviram and EshetAlkalai) is particularly evident in the development of problem-solving. Like any cognitive skill practice, problem-solving begets even more refined problem-solving, leading to gains in the complexity of problems that can be solved, and the ease with which they can be solved.

Works Cited

262LongRunner. “Teletype Model 33 ASR.wmv.” YouTube, YouTube, 16 Apr. 2012, www.youtube.com/watch?v=ObgXrIYKQjc. Online video.

Aharon Aviram and Yoram EshetAlkalai, “Towards a Theory of Digital Literacy: Three Scenarios for the Next Steps.” European Journal of Open, Distance and E-Learning. 2006. Retrieved from https://pdfs.semanticscholar.org/c680/679dc70baf4727cfd5f97b8535d62137914e.pdf?_ga=2.58484906.1842711008.1538448028-1659923920.1538448028. Document download.

Anderson, Tim. “The History of Zork.” The Wayback Machine, 1985, web.archive.org/web/20060427000213/http://www.csd.uwo.ca/Infocom/Articles/NZT/zorkhist.html. Web page.

Kidder, Tracy. The Soul of a New Machine. Little, Brown and Company, 2000. Print.

Feedback

Professor Keating’s Final Response:

Hi Doug,

As I read the final version of this exceptionally well revised essay, I reflect on how the vast majority of my students see digital literacy in terms of language, or a lexicon of terms common to a discipline. You see it in terms of a numerical logic, a binary code of understanding. That’s just as applicable, different cognition, same result!

Fine start to the semester, RSK


Romancing the Code: The Literacy Narrative I Wanted to Write

This was a relatively early draft and analysis of a literacy narrative, originally written for UMass Lowell (online) College Writing I, Sec. 031, Professor Richard Keating, September 30, 2018. The more concise version will be published separately. (Note to plagiarists: This has been submitted to the TurnItIn database, <sarcasm>so, by all means, copy away</sarcasm>.)

I loved writing this essay, but desperately needed to cut it down to a much smaller size and intense focus. (That was the hardest part of the work.) Still, this history of my first exposure to computers is something I wanted to publish. The final version of this essay is here: Romancing the Code: The Literacy Narrative I Did Write.

Computers in Digital Literacy: Problem-Solvers versus Problem-Solving

Phase 1: Literacy Narrative

When I was nine years old, the world of science fiction changed with the release of Star Wars. The film is, of course, merely space opera, and more fitting of the term science fantasy than science fiction, but it was remarkable for its technical presentation and fully realized worldbuilding, rather than for its originality or brilliance of story. (See Campbell, 2008.)

In much of twentieth century science fiction, computers are autonomous problem-solvers. They are almost never programmed by humans. A query is made, and the computer—via punched paper, data cards, audible output, or screen display—provides the answer to an enormously complex problem. The idea of a computer as a tool is reduced to its metanarrative: The computer is godlike—omniscient and often omnipresent—and not necessarily benign. Star Wars avoided this trope, turning sentient, autonomous computers into a digital underclass—droids—while presenting computers with which “humans” would directly interact in a way that was more akin to our current state of the art. The Star Wars world includes custom-purposed computer appliances, such as a “navicomputer” (Wookiepedia), as well as networked data storage and retrieval devices that would not be out of place in our own world. Although we use computers to solve a vast number of problems in everyday life, even commonly as our own navicomputer devices, it is the act of programming itself which provides me the greatest problem-solving experience.

The same year Star Wars was released, I met my first real computer: a Digital Equipment Corporation (DEC) PDP-8 (Fig. 1) at my town’s high school. Each terminal connected to this computer was a repurposed teletype machine (Fig. 2). There was no screen display, only a nearly-endlessly spooling roll of paper. Each keystroke from the operator or each character output from the PDP was accompanied by a wonderfully complex sound of motors and servos moving the print element and its carriage across the platen, and hammering the right letter onto the paper (262LongRunner). This sound was so iconic that we continue to associate it with the background noises of the era’s television newsrooms.

Fig. 1. Front panel of a PDP-8/e (Claessen).

At age nine, with no previous experience with computers, I was incapable of using them for anything beyond running simple math programs written by high school students. It is difficult to appreciate now, but in a world where pocket calculators were relatively rare, having a computer prompt for two numbers and then displaying their product or dividend was a marvel.

Fig. 2. A model ASR 33 teletype machine, like those used to communicate with the PDP-8 (Hudson).

Beyond such number-crunching, computers immediately proved to be greatly entertaining. I ran student-written programs such as “Guess,” in which the user would enter a number between 1 and 100, and the computer would respond with, “Too high,” or “Too low.” I printed text-based art, my favorite being a cartoon of Snoopy, shaking his fist and saying, “Curse you, Red Baron!” (Fig. 3). One could print banners of words where each letter in the banner’s text was composed of many smaller letters. I printed calendars for the current year, my birth year, and the unbelievably far-off year 2000.

I was in love.

This elementary-school experience did nothing to assuage my longing to use computers. Through another school program I got to play on a PDP-40 at a nearby enterprise, a massive device that would have made the PDP-8 weep with inferiority, had it been sentient. There I discovered the text adventure “Dungeon” (later and more commonly known as Zork) (Anderson, Kidder). I was enthralled with text adventures. I was determined to program my own.

Fig. 3. Snoopy ASCII art (Modified from asciiworld.com).

In my junior high years, we had access to Apple II computers repackaged by Bell & Howell to be nearly indestructible. We also secured access to the PDP-8 at the high school. By this time the teletype machines were gone, replaced mostly by dot-matrix printers from DEC, and supplemented by three glorious CRT terminals, VT05s (Fig. 4). DEC had donated these CRTs to my junior high school’s HAL (High Ability Learner) program, but I was the first to negotiate access to them. I stayed after school until 5:00 every day I could, just to get time on these. I began to learn BASIC, back in the ancient times when it still required line numbers.

Fig. 4. A DEC VT05 serial terminal. (Autopilot)

Not having a computer of my own presented a problem that might seem odd today. I had to work offline—truly offline—without even a search engine, and then try to code what I had done in the time I could get access to the computer. So, I worked in notebooks, keeping the program flow in my head, and writing the code in longhand that I would hope to later enter and perfect.

I tried my hand at a number of different programs, but creating my own text adventure game became my obsession. My first attempt at a text adventure was quite limited. It offered nothing more than multiple-choice prompts to make action choices, a far cry from the verb-object command-parsing that Zork could do. My program was shameful, borrowing scenes and catch phrases from Tom Baker’s incarnation of Dr. Who, and not much more complex than a choose-your-own-adventure book. One-quarter of the way through, I ran the program, and the computer spit out an inexplicable error. It was not the usual problem of a missing parenthesis or a syntax error, but something I could not diagnose.

“Doc” (Donald Harrison), the high school’s computer science teacher, helped me out. Although my program was tiny, it was too big for the execution space on the PDP-8. He taught me how to link multiple programs so I could jump to one from another, and I was able to complete my first adventure. It did teach me the basics of programming, even though what I wrote was not much more than a pile of print and goto statements, hooked together with the occasional numeric input. Even so, knowledge of programming meant problem-solving.

I had grander visions. My next adventure was more original. I spent hours creating maps, this time avoiding established fandom, and more time figuring out subroutines that would be able to interpret input, track inventory, handle world descriptions and actions, and even inject some humor while tracking hunger and thirst—“You would kill for a baloney-and-cheese sandwich.” There was no way for me to do a program this large on the DEC, but the Apple IIs that the junior high had would be perfect (Fig. 5). They even had floppy drives, so I could store my creations on my own 5¼” diskette. Innovation was exhilarating.

There were no obvious patterns to follow, and the BASIC language itself was somewhat limited. There were no premade frameworks. I had books, which were very limited, and often inapplicable to a particular system just when I needed to learn something advanced. (The deeper one went, the less universal computer languages with the same name became—radically different from today’s write-once-deploy-everywhere languages like Java.) I had the inspiration and functional model from other, better-written software, and a clear idea of what I wanted to do. I just did not know how.

Fig. 5. A Bell & Howell Apple II+, sporting the same floppy drives we used. (Mightyohm)

In a text adventure, one of the most important things is providing a description of each location or room, and anything that might be movable in that room. In that context, the program needs to track the player’s location, and allow the player to move in a specific direction, such as “move north.” My solution may have been clever, if contraindicated by speed or memory limitations at the time. I used an array (something like a deck of cards) of alphanumeric variables as a container, storing the location description for each “room” by element number in the array. So, if the player moved to “location 104,” the description could be displayed by accessing a function that would return the description in “card” 104.That system was great for things which stayed in place, but what about portable items? For that I had to push further, and I invented a design which was not dissimilar to what is now called a bitmap. Each portable item would have an item number, but the data for that item would be stored in a predetermined part of a text variable that contained, among other things, the item’s description. In a simple example, the first three characters of the text variable might contain the location number, which could even be a number showing it to be in the player’s own inventory. The description of the item would then be the fourth character in the text to the end of it. Now we use object-oriented languages to create models of such things, in a way that often mimics the real world. A car is often used to illustrate this. A car is a generalized object, and has properties such as color, model, size, number of passengers, make, year of manufacture, or VIN.

Player movement could be controlled by setting the player’s location to a particular number, and the same location number could be used to get the description of the location and then display any portable items that were there. Switching the location was just a matter of coding which direction’s movement would take one to which location number.

When I finally got enough of the modules coded and debugged, I ran it. It worked! There was one last problem: speed. Between entering a command and waiting for the program to do something was a pause of 5 or 10 seconds. But it worked.

More than a decade later, I encountered the published source code of Zork (and even got it to run in a Windows FORTRAN environment). I was blown away by the simplicity of Zork’s code. The huge, complicated processing modules I had created were not used. Zork had a simple data structure, with a number of pointers, in some ways similar to my array-storage design, but infinitely more elegant.

Now I work full time as a programmer, as I have for more than 15 years, and every part of my workday involves applying digital literacy directly to solving programming problems, ensuring our software is secure, and giving our customers new or better experiences. I use a dizzying array of software tools to accomplish this. The problems I solve are far more complicated, but they apply all the digital skills and literacy that began when I was smitten by the PDP-8, in all its teletype-driven glory.

Someday, we may indeed interact with our computers like much of our science fiction predicted. When that day arrives, however, it will surely include its own tangle of media literacy problems to be solved.

Phase 2: Analysis

The rapid development of digital technologies in the digital era presents individuals in the emerging information society with situations that require them to employ a growing assortment of cognitive skills in order to perform and solve problems in digital environments. These skills are often referred to as “digital literacy” (Gilster, 1997; Inoue et al., 1997; Lanham, 1995; Pool, 1997), which is presented as a special kind of mindset that enables users to perform intuitively in digital environments, and to easily and effectively access the wide range of knowledge embedded in these environments (Gilster, 1997; Tapscott, 1998; EshetAlkalai, 2004; 2005). (Aviram and EshetAlkalai, 2006, emphasis mine)

My experience, described in this narrative, tends to present two foci: “a growing assortment of cognitive skills” and “to perform and solve problems.” Although the two are intrinsically linked, problem-solving is the one that is most unique to my own narrative., and the one that is most important in my life and career.

So, I worked in notebooks, keeping the program flow in my head, and writing the code in longhand that I would hope to later enter and perfect.

My first skills were not very impressive, and are now accessible by toddlers in today’s world of icons and GUIs: reading a directory, loading a program, running that program, and then interacting with its prompts and output. Tracing computer literacy from childhood through the early days of my computer career, it is clear that my very meanest skills were a foundation of understanding that lasted for decades. (RUNH was the command used to launch a program, and I only recently learned that that it was used to launch a FORTRAN module on the PDP.)

I spent hours creating maps, this time avoiding established fandom, and more time figuring out subroutines that would be able to interpret input, track inventory, handle world descriptions and actions, and even inject some humor while tracking hunger and thirst….

It was somewhat surprising to explore this time period, and to renew my awareness of just how exhilarating computer tasks were. Computers were often about games. I was able to continually improve programming concepts and problem-solving by my somewhat weak attempts to replicate things I had seen. Writing my own text adventure was a motivating force for improving my programming and the problem-solving that went along with it.

There were no obvious patterns to follow, and the BASIC language itself was somewhat limited. There were no premade frameworks. I had books, which were very limited, and often inapplicable to a particular system just when I needed to learn something advanced.

Although the problems I solve are now more complex, the instant availability of explanations, sample code, and often complete example projects can make the level of problem solving significantly different. Although it is true that I knew far less, I was also working with a programming language that was more limited in its abilities, and accomplishing what I wanted often required a finer grained ingenuity.

Works Cited

262LongRunner. “Teletype Model 33 ASR.wmv.” YouTube, YouTube, 16 Apr. 2012, www.youtube.com/watch?v=ObgXrIYKQjc. Online video.

Aharon Aviram and Yoram EshetAlkalai, “Towards a Theory of Digital Literacy: Three Scenarios for the Next Steps.” European Journal of Open, Distance and E-Learning. 2006. Retrieved from https://pdfs.semanticscholar.org/c680/679dc70baf4727cfd5f97b8535d62137914e.pdf?_ga=2.58484906.1842711008.1538448028-1659923920.1538448028. Document download.

Anderson, Tim. “The History of Zork.” The Wayback Machine, 1985, web.archive.org/web/20060427000213/http://www.csd.uwo.ca/Infocom/Articles/NZT/zorkhist.html. Web page.

Asciiworld.com: Snoopy, ASCIIWorld.com, http://www.asciiworld.com/-Snoopy,512-.html.

Autopilot. “File:VT05.jpg.” The original DEC serial terminal, the VT05, Wikimedia Commons, 6 May 2012, https://commons.wikimedia.org/w/index.php?curid=19364852. Online image.

Campbell, Joseph. The Hero with a Thousand Faces. New World Library, 2008. Print.

Claessen, Simon. “File:Digital PDP-8F.Jpg.” PDP-8/F Front Panel, Wikimedia Commons, 25 Sept. 2014, commons.wikimedia.org/w/index.php?curid=63802103. Online image.

Hudson, Trammell. “Model ASR33 Teletype.” Model ASR33 Teletype – Trammell Hudson’s Projects, Trammell Hudson, 29 Oct. 2017, trmm.net/Model_ASR33_Teletype. Web page.

Kidder, Tracy. The Soul of a New Machine. Little, Brown and Company, 2000. Print.

Mightyohm. “File:Bell_and_Howell_Apple_II.jpg.” Bell and Howell Apple II+, Wikimedia Commons, 07 Jan. 2011, commons.wikimedia.org/wiki/File:Bell_and_Howell_Apple_II.jpg. Online image.

“Navigation Computer.” Wookieepedia, FANDOM, 25 Apr. 2015, starwars.wikia.com/wiki/Navigation_computer. Web page.

One Cool Hotspot

Okay, wanna see something really cool? (Actually, it’s kinda hot …)

Below is a cropped image from a 1969 National Geographic map of the seafloor, showing the Pacific basin. What’s the cool part? See that long, almost L-shaped line of ridges and seamounts and islands that has Hawaii at the very end? That’s where the Pacific Plate has slowly moved over a hotspot in the earth’s mantle, which causes seamounts to form, and, occasionally, islands like Midway or Hawaii.

Pacific Floor Ocean Map, National Geographic, 1969.

The ridges show the movement of the Pacific plate over the last 75,000,000 years. Kind of slow movement, only about 6,000 km in that time, or 0.000000009132 km/h, about 80 mm/year.

That bend in the L is where the Pacific plate shifted direction 43,000,000 years ago.

In case you’re wondering where it goes as it moves, you can see the trenches on the top and left edges of the plate. Those are subduction zones, including the Marianas Trench, the deepest part of the ocean on earth. That’s where the Pacific plate is moving underneath the other plates, getting recycled very, very slowly.


Notes:

The Signs of Science

One of the best parts of the March for Science Sarah and I attended on April 22, 2017, in Washington, D.C., was the nearly endless creativity the marchers put into their signs. Not too many were repeated, and few would have been considered offensive. The preview image here is my sign, cribbed from “Stand back! I’m going to try science!” of XKCD origin.

All the signs we photographed:

Signs of Science
Don't Tread on My Watershed
Don't Tread on My Watershed
« 1 of 107 »

 

TramBot (Originally published in 1998 or 1999)

The TramBot—When my nephew Dave Matheson (a veterinary grad student at Prince Edward Island) stopped in for a day-long visit, we constructed a TramBot that ran on a string stretched across an upstairs room with a light-activated set of “grabs”—perfect for bombing runs. This was inspired by the “Bomber Fly” seen in assorted Lego media.

Yes, I Always Over-Design

If you’ve seen the Bomber Fly in the Lego publications, then you will immediately notice that my creation is much bigger, and probably heavier. I developed a fear of minimalism after my very first RIS creation quite literally shook itself to pieces in under 10 seconds.

Features and Innovation Details

  • The forward-reverse pulleys are driven by a belt drive, although a geared drive would have been fine in this case.
  • There are bumpers connected to touch sensors on each end that reverse the drive pulley motor when triggered. Because the string is at about a 45º angle to the wall, we added the tires to keep the bumper rods from slipping. (Before this was done, the bumpers would sometimes just glance off the wall without triggering the touch sensors, as the robot tried to keep moving.)
  • We solved the problem of timing on the “grabs” (the name alludes to Gerry Anderson’s Supermarionation Thunderbirds program—see https://www.gis.net/~fm/) by using a belt drive, and setting the motor run time to one second longer than the absolute maximum necessary. This allowed the grabs to automatically re-synchronize, be movable by hand, and grip objects of various sizes.
  • The grabs are light-triggered. We used the Lego light sensor, and programmed it so that a flashlight beamed on it would trigger the grabs’ open or close sequence. This allowed for precise payload delivery.

 


My sons Isaac and John, my Nephew Dave, and I perform some final adjustments and testing.

To Boldly Go …

3-Year-Old Builds Lego MindStorms Robot

Isaac’s First Robot—The “Punching Robot”

(Original date, approximately 1998.)

Hey, He Was Only 3

At three years old, my son Isaac might have been the youngest person ever to construct a Lego MindStorms project. Although he calls it a robot, it is more of a contraption than a real robot … but I cannot help but be impressed.

Isaac built this entirely without help—he even connected the RCX to the motor properly on his own. The design is entirely his; I never built anything similar.

Isaac grins as he contemplates his world conquest.

This contraption, which he calls a “punching robot,” uses an assortment of Lego axles that rest within a 40t gear, that is directly mounted on the motor. Attached to several of the outer axles are the shock absorber pieces. These shock absorber pieces extend outward from the central gear when the motor is activated, and will repeatedly punch whatever the robot is placed near.

A close-up of the punching mechanism.

Crazy to Get to Space

Remember Scotty’s remark about his nephew in Star Trek II: The Wrath of Khan? (No, of course you don’t.) Scotty explains to Kirk, after an inappropriately emotional response by Midshipman Preston: “My sister’s youngest, Admiral. Crazy to get to space.”

going-to-space
“Come on, R2, we’re going.”

Although I never pursued a career as an astronaut, I certainly remain, “Crazy to get to space,” and the description from Khan still resonates with me. I may yet get there, in my lifetime, especially with companies like SpaceX competing to make the cost of getting to orbit as low as possible.

For now, I’m going to have to settle for a proxy. Eliszabeth* MacDougal, one of the human family members I inherited when I married Sarah Latimer, has a friend, Cian Branco, who offered her the chance to send something small up on the Terrior Improved Orion rocket as part of the RockSat-C program. Eliszabeth realized this would be thrilling to me, and passed along her opportunity.

I ordered a new Lego R2-D2 minifigure, and a few parts to complete another mini-me as an astronaut, and shipped them off to Eliszabeth. They will be going up on Thursday, June 23, 2016, somewhere between 6:00 and 10:00 am, from the NASA facility at Wallops Island, Virginia. (My son, David, and I stood on our roof in the cold in October, 2014, to watch a night launch from Wallops.)

Geeking out!

Thank you, Eliszabeth!

New: I have just learned that my minifigs will have company on this voyage: Benny, from The Lego Movie will also be on this flight.

———————–

*Yes, this is the correct spelling.

————————

Update: (June 23, 2016)

:: sigh :: Postponed until tomorrow.

postponed

————————

Update: (June 24, 2016) I got up early to watch the launch today! In my mind, I was thinking, Saturn V. Long, slow acceleration. This is, uh, quite a bit smaller, and it zoomed upward so quickly I missed the rocket itself in the launch video screen capture. (The video will be posted soon by NASA/Wallops, anyway.) The crew was worried about missing the launch window due to weather, and debated skipping the camera alignment step. In addition to the pad camera, there was a UAV (drone) flying around, as some of the pictures below show.

The rocket got to its apogee of 119.08 km (74.0 miles) almost immediately. The payload detached successfully, and hit splashdown in the Atlantic, where it would be recovered, only 8 or 9 minutes later.

Very exciting! I reiterate my gratitude.

Here’s the official NASA post: NASA Successfully Launches Suborbital Rocket from Wallops.

kdiff3 6242016 60716 AMs

kdiff3 6242016 60327 AMs

kdiff3 6242016 60614 AMs

kdiff3 6242016 60617 AMs

————————

Update: (June 24, 2016, 16:05) Just got the official word from Cian: “Hey Doug, will send pics a bit later, currently wrecked. Your minis all went up and returned fine. I have pics of reintegration. Cheers!”

————————

Here's the recovered payload module, showing where my guys were attached in their Crew Module.
Here’s the recovered payload module, showing where my guys were attached in their “Crew Module.”

The Crew Module was carefully sealed with electrical tape.
The Crew Module was carefully sealed with electrical tape.

 Another view of the Crew Module.
Another view of the Crew Module.

Here's how the minifigures actually traveled.
Here’s how the minifigures actually traveled.

 And here they are, reassembled, along with Benny, who was glued into another part of the payload module
And here they are, reassembled, along with Benny, who was glued into another part of the payload module.

Video of the Launch:

Video from an observer to whom I am grateful.

Here is the launch from the NASA/Wallops feed!

Dear QuickBooks:

Dear Intuit/QuickBooks:

When importing an IIF (Intuit Interchange Format) file, you might report “The NAME field in this file is too long” as something other than “Error on line X – You can’t change the type of a name or a add a duplicate name.” (You may recall, this is the same problem that remains unfixed from QuickBooks ’99.)

—A Customer

P.S.: Thank you for removing my online banking support, unless I choose to upgrade for several hundred dollars.

ux_fail

Pagination Control While Printing in Flex: Unwrap mx.printing.FlexPrintJob’s Private flash.printing.PrintJob Variable

I’ve worked with Adobe’s Flex platform now for several years, beginning with my Star Trek transporter simulator, a project I wrote for a Boston University course.

Now, my job at Transparent Language involves mostly FFA (Flash/Flex/AIR) development, and I enjoy the challenges of working in this fairly cutting-edge environment. This week, though, I was shocked by an apparent limitation in the mx.printing.FlexPrintJob class: It doesn’t return the operating system’s print dialog information to the Flex application. So, if I want to print, say, the first five pages of a document, it cannot normally be done. It’s all or nothing, regardless of what I specify in the OS print dialog.

Windows XP operating system print dialog.

The FlexPrintJob class wraps an older class, PrintJob. The primary difference is that PrintJob, designed for Flash, takes a Sprite as passed parameter to its addPage() function, whereas FlexPrintJob’s equivalent addObject() takes a UIObject. Fair enough.

But, what’s weird, is that the FlexPrintJob class contains a private PrintJob object, but it doesn’t expose any of the useful properties of that PrintJob object, except pageHeight and pageWidth. Want the printer name? The first and last pages in the page range the user has entered? The paper size? The orientation? Forget it! None of them are accessible.

Granted, most of these properties are AIR-only, but I’m working on an AIR project, and it would be darned useful for my users to be able to control their output, which can often run to many tens of pages, so I really need access to the properties of the “hidden” PrintJob object.

Thankfully, there’s a relatively easy solution. I can du plicate the FlexPrintJob class, and add accessors (getters) that will allow me to read the variables I need. Normally, I’d extend the class, but because the object and properties I need are private, I can’t even do that. I have to essentially clone the class, and add what I need to it. Thankfully, FlexPrintJob is part of Adobe’s code that has been open-sourced, so I can do this with impunity, and even distribute it.

So, I open the FlexPrintJob code, copy it to an empty class, rename it to FlexPrintJobExtended, and remove the reference to import Version.as, and add the following:

//--------------------------------------------------------------------------
//
//  Additional accessors for PrintJob object
//
//--------------------------------------------------------------------------

public function get copies():int {
    return printJob.copies;
}

public function get firstPage():int {
    return printJob.firstPage;
}

public function get isColor():Boolean {
    return printJob.isColor;
}

public function get jobName():String {
    return printJob.jobName;
}

public function get lastPage():int {
    return printJob.lastPage;
}

public function get maxPixelsPerInch():Number {
    return printJob.maxPixelsPerInch;
}

public function get orientation():String {
    return printJob.orientation;
}

public function get paperArea():Rectangle {
    return printJob.paperArea;
}

public function get paperHeight():int {
    return printJob.paperHeight;
}

public function get paperWidth():int {
    return printJob.paperWidth;
}

public function get printableArea():Rectangle {
    return printJob.printableArea;
}

public function get printer():String {
    return printJob.printer;
}

Then, wherever I needed the FlexPrintJob class, I can then use my FlexPrintJobExtended class instead, and get access to all the glorious properties on the now-much-friendlier printJob object. Note that I’ve kept the properties read-only, by only writing getters. I did not envision any need to change the values: I only wanted to know what the user told the operating system.

The next obstacle is in the sample code provided for printing multipage documents. Begin by consulting the published examples for Printing with multipage PrintDataGrid controls. I’m not going to elaborate too much on this, merely illustrate how to get to the next step, printing multiple pages using the pages the user specified.

Looking at the section of the sample code marked with // The function to print the output, there are only a few things we need to change.

First, we need to change the FlexPrintJob instance created to use our new class:

// Create a FlexPrintJobExtended instance.
var printJob:FlexPrintJobExtended = new FlexPrintJobExtended();

The user might not have chosen to start on page one, so we need to advance to the first page the user has chosen.

// Jump to the first specified page, not necessarily page 1.
while (errorPrintView.pageNumber < printJob.firstPage && errorPrintView.printGrid.validNextPage) {
	thePrintView.printGrid.nextPage();
	thePrintView.pageNumber++;
}

Then we modify the

while(true)

so that it won't go further than the number of pages the user has specified.

// Loop through the following code until all pages are queued.
// If the user has chosen to print all pages, printJob.lastPage will be zero.
while(printJob.lastPage == 0 || thePrintView.pageNumber <= printJob.lastPage)

Voila!

Feel free to download the code cited in this post: FlexPrintJobCode.zip.

If you find this to be useful, or find a better way to do it, let me know, by e-mailing "doug" at this domain. Cheers!