Sunday, November 01, 2015
“I want you to go. But the name doesn't matter. I've saved you from being forever a purple kitten.”
It's November 1st. You know what that means—National Novel Generation Month! It's the National Novel Writing Month for those people who can write code but not necessarily prose. Last year I completed The Quantum Supposition of OZ and it garnered a respectable number of comments (mostly about punctuation, but hey, I'll take what I can get).
I don't have any definitive ideas right now, but I did make a note of machine generated TED-talks as a possible idea. I might also have time to do The Psychotherapy of Racter, or The Descent into Madness of Dr. Eliza. So many possibilities …
Monday, November 02, 2015
Notes on an overheard conversation while driving in Boca Raton, Florida
“Is that a Mercedes?”
“Yes, that is a Mercedes.”
“It's ugly!”
“It sure is … boxy.”
“Why would anyone drive one?”
“To deliver mail in Boca Raton?”
Tuesday, November 03, 2015
In other news, in orbital mechanics, you can catch up by slowing down
Figure 1a shows how incidents happened substantially less on Saturday and Sunday even though traffic to the site remains consistent throughout the week. Figure 1b shows a six-month period during which there were only two weeks with no incidents: the week of Christmas and the week when employees are expected to write peer reviews for each other.
These two data points seem to suggest that when Facebook employees are not actively making changes to infrastructure because they are busy with other things (weekends, holidays, or even performance reviews), the site experiences higher levels of reliability.
Via Lobsters, Graham King » Facebook’s code quality problem
I guess Facebook's old motto of “move fast and break things” was probably not the best motto a company could have.
Wednesday, November 04, 2015
The “E” does not stand for “enough.”
The “E” does not stand for “enough,” thought the hind-portion of my brain. It might be prudent to drive by the gas station on the way to work.
Great! There goes any chance of arriving to work on time. Not that it matters in the great scheme of things—“Project: Sippy-Cup” is currently paused while we wait for The Monopolistic Phone Company to get its act together so a few extra minutes won't hurt. As it is, I'm barely cognizant at o'God-it's-morning and the less I have to think, the better. It's not enough I have to drive to The Ft. Lauderdale Office. Now I have to obtain gas as well.
The closest gas station is around the corner. And by “around the corner” I mean, in the opposite direction I need to travel. There are two approaches to it, one is heading east along Yamato where you turn in (south) and end up facing west at the pump. The other approach is heading north along 2nd and turning (east) into the station, facing east at the pump. Leaving is even worse. You end up heading east on Yamato (which is not the direction I want to go in), or you can only turn into the “right turn only” lane of northbound 2nd and stil end up heading east on Yamato.
I need to head west on Yamato to hit I-95 south towards the Ft. Lauderdale Office of The Corporation. To head west, you either need to cross four lanes of traffic ignoring the “45 MPH” speed limit where if you are lucky, you can enact a U-turn before you admit defeat and end up at the “NO RIGHT TURN ON RED” intersection of Yamato and Federal Highway. Or, having lived in the area for several years, you know of a secret back alley just east of the gas station off Yamato that doesn't officially exist on any map of Boca Raton which cuts through a heavy industrial complex hidden away behind palm trees and unassuming storefronts where the less questions asked, the better. You'll end up a bit further south on 2nd, but it's enough road to cut across only two lanes of traffic ignoring the speed limit, then wait to turn left onto Yamato. Even so, it's still the best place to get gas on the way to work.
I snake my way through the neighborhood, head north on 2nd. Since I'll be headed east on Yamato anyway, I might as well make it easy to get onto eastbound Yamato from the gas station.
I pull into the gas station to half the lot gone and replaced with large holes. There are several men in the holes, their heads just clearing the surface, carrying on conversations with several other men standing around the holes, all looking rather stern faced at all the holes in Boss Man's dirt.
Me? I'm looking in horror as half the pumps are taped off with yellow warning tape, and what pumps are open occupied with vehicles just sitting there with no one else around filling them up. It's clear I am not getting gas at this gas station. But it's not clear that I will be leaving any time soon. I can't back into 2nd, and forward progress towards the Yamato entrance/exit is impeded by the parked cars in front of pumps not being pumped by anyone.
I wonder if I have enough gas to get to work and back? I think. Nope, the hind-portion of my brain replies. It looks like we'll have to hit the other gas station before we get to work.
Great! I enact a slow, thousand-point turn to head back out on 2nd, hit eastbound Yamato, cut through the hidden indistrial complex back onto 2nd and head west on Yamato towards the other gas station, hitting every red light on the way.
Now, you are probably thinking that if I-95 is to my west, and I'm heading west to this gas station, why not head to the west gas station? That would be because the west gas station is west of I-95. And like the gas station to the east, it too, only has two entrances to it. One which is just west of the gas station (turning north) where you head slightly back east to the gas station. The other one is accessible if you are heading south on Congress (which I won't be). You turn right (west) onto an access road that runs behind the gas station and takes you around to the entrance you use if you are entering from Yamato. To leave, you head west from the gas station, then turn left (south) only to turn right (west) onto westbound Yamato where the only U-turn is a half-mile further on, across four lanes of traffic ignoring the “45 MPH” speed limit, or turn right (north), around the gas station onto southbound Congress where, if you are lucky, you can immediately cross four lanes of traffic ignoring the “45 MPH” speed limit so you can turn back east onto Yamato (and thus, get onto I-95) or you end up in the right hand turn lane for westbound Yamato. But if you are really unlucky, you end up in the middle of the McDonalds across the street where irate customers will be throwing their Egg McMuffins at you and the McDonald's manager is freaking out because your car is blocking the cash registers.
In other words, not only is it not closer, but it's more inconvenient.
I manage to pull up to the pump just as the idiot light chimes on.
It's going to be a long day.
Thursday, November 05, 2015
What is it with teenage detectives, anyway?
The fundamental instability at the heart of Nancy Drew is a direct result of the production method that wrought her. Like the thirties starlets programmed by the Hollywood star system to radiate glamour, power, and searing perfection, Nancy is a fundamentally collaborative project who embodies distinct, often contradictory visions for how a super-girl should look and behave. The publishing tycoon Edward Stratemeyer created her in 1930 to capitalize on the girl consumers he knew were reading his popular Hardy Boys books. He hired a cross-country network of ghostwriters to write the series under the collective pseudonym Carolyn Keene.
Nancy’s original ghostwriter, Mildred Wirt Benson of Ladora, Iowa, was herself an amateur archeologist responsible for the most adventurous iterations of the sleuth. In her autobiography, she discusses the detective as a product of her “unfulfilled desire for adventure” who “embodied qualities that [she] wished [she] had.” Stratemeyer and his daughter, Harriet Stratemeyer Adams, disapproved of this early characterization of Nancy: a boisterous teenager who drove a roadster and talked back to police officers, they argued, was “too flip.” Adams’s subsequent revisions began a gradual domestication of Drew that spans the series. Though Nancy still used bold words, she now did so with dainty adverbs—“Nancy said sweetly,” “Nancy said kindly”—adorning each line of dialogue like doilies.
If modifications to Nancy’s character reflected different ideals of femininity, tweaks to her appearance reflected ideals of beauty furthered by cinema and pop culture. Benson’s books called for “blonde” curls, but the illustrator Russell Tandy tinted Nancy’s hair a more voguish silver— just when the 1931 film Platinum Blonde premiered Jean Harlow’s famous, noxious dye-job, a cocktail of peroxide, ammonia, Clorox, and Lux flakes. By the end of the decade, writers reddened Nancy’s hair on a schedule roughly concurrent with the release of the Olivia de Havilland film Strawberry Blonde (1941). In later decades, the artist Rudy Nappi portrayed Nancy as increasingly glamorous and adult—on fifties-era covers she resembles Hitchcock’s blondes, immaculately dressed in Tippi Hedren–like suits and full-skirted, Grace Kelly gowns.
Via Hacker News, Who Is Nancy Drew, Really?
This is somewhat timely, as Nancy Drew was a topic of conversation recently. I wasn't aware that Nancy Drew was written by ghost writers under a collective pseudonym, but then again, I was more into Alfred Hitchcock and The Three Investigators myself (and it's odd to think that they're still popular in Germany).
I was quite upset when Alfred Hitchcock was retconned out of the series:
When Alfred Hitchcock died in 1980, Random House chose to replace him with the fictitious mystery writer Hector Sebastian and in 1981 the series became known as "The Three Investigators Mystery Series". Things just didn't seem the same without old Alfred and the changes in the plots and in the characters were noticeably different to regular readers of the series. In 1982 Random House issued a book of mystery puzzles featuring The Three Investigators. It appears to have bombed. In 1983 Marc Brandel joined the fold as a Three Investigators author. In 1984 and 1985, Random House very slightly revised the texts of the first 30 titles. In this new Revised Edition, Alfred Hitchcock was replaced by the fictitious movie director Reginald Clarke in the first book and by Hector Sebastian in books #2 - #30. This may have been the straw that broke the camel's back for the series.
But apparently, such things happen even in the Nancy Drew/Hardy Boys books.
Friday, November 06, 2015
Gretl's Bistro
Bunny and I are always on the lookout for a good German restaurant. The closest one to us, The Biergarten, is okay—it's no Little Munich (many many miles away to the north in Lake Worth) or Old Heidelberg (many many miles away to the south in Ft. Lauderdale) or Old Vienna (used to be many many miles away to the south west in Coral Springs before it closed a few years ago).
So it was great news to us when Gretl's Bistro opened up practically around the corner (it's right next to Mississippi Sweets BBQ for those of you who are familiar with that excellent place). I think this is the second week they've been open. And it's wonderful!
The menu is still a bit limited as they get up to speed, but what they had was incredible. Bunny and I were both very impressed with our meals. Sorry Little Munich and Old Heidelberg—you're just too far away now. As for Old Vienna, we found out that Gretl (yes, she's the real owner) used to run Old Vienna, and I am glad she deicded to re-open here in Boca Raton.
Saturday, November 07, 2015
Bookless libraries, a Latinless Catholic Church and other unbelievable things
Bunny and I were at a restaurant, playing this on-line trivia game when we got the question:
In Texas, there exists a public library that has no books.
- True
- False
Now, I realize this is Texas they're talking about, but really? Surely Texas can't be that backwards, can it?
SAN ANTONIO (AP) — Texas has seen the future of the public library, and it looks a lot like an Apple Store: Rows of glossy iMacs beckon. iPads mounted on a tangerine-colored bar invite readers. And hundreds of other tablets stand ready for checkout to anyone with a borrowing card.
Even the librarians imitate Apple's dress code, wearing matching shirts and that standard-bearer of geek-chic, the hoodie. But this $2.3 million library might be most notable for what it does not have — any actual books.
That makes Bexar County's BiblioTech the nation's only bookless public library, a distinction that has attracted scores of digital bookworms, plus emissaries from as far away as Hong Kong who want to learn about the idea and possibly take it home.
Texas library offers glimpse of bookless future
Oh … well. Um. Okay.
And then the next question came up:
The official language of the Vatican is Latin.
- True
- False
This is a trick question, right? I mean … the Vatican! They invented Latin! This is true, right?
Q: What is the official language of Vatical City?
A: The official language of the Vatican City state is Italian, with Latin and French as secondary languages. Vatican City is a walled enclave within the city of Rome. Its area of 110 acres makes it the smallest independent state in the world.
What is the official language of Vatican City?
What the … ?
Okay, fine! I need to learn a bit more about the Vatican. Next thing you'll tell me, Microsoft is going open source or something silly like that …
Sunday, November 08, 2015
Spectre
I'm not a big James Bond fan. I don't hate the movies, but I don't feel a compulsion to go out of my way to watch the movies. In fact, the only two James Bond movies I can recall seeing in a movie theater are “Never Say Never Again” (which, despite being a James Bond movie, wasn't a James Bond movie) and “Skyfall.” But Bunny wanted to see “Spectre” and so, we see “Spectre.”
I liked the movie. It keeps continuity with the previous Daniel Craig Bond movies. There are the exciting chases, good fight choreography where you can actually follow the action and the action sequences only go mildly over the top (you know, to keep it “realistic”). And they even introduce the classic Bond villian Blofeld. It also manages to update the character and place him in a modern context as the plot revolves around the possible dissolution of the Double-0 program and what will replace it.
I had no issue with Léa Seydoux as this movie's Bond Girl™ even though she's an unconventional beauty, but Bunny didn't feel she was glamourous enough. Although, compared to Grace Jones from “A View to a Kill” …
I don't think I like the “twist” this movie has as it comes across as a typical Hollywood “twist to just have a twist.” Leave that out and it's still a fine movie—it didn't need to be there at all (but I may have given it away if you are up on your typical Hollywood tropes).
Overall, I think it's worth seeing, if nothing more than it's clear that this is Daniel Craig's last Bond outing.
Update on Monday, November 9th, 2015
If you are curious about the twist, and don't mind spoilers, well ... “‘Spectre’ and How the Ghosts of Old Movies Become Bad Twists.”
Monday, November 09, 2015
When the sun rose and set in New Mexico
When I first read about the Infocom game Trinity, I found it an intriguing premise—you encounter five historical nuclear explosions and two that take place “in the future.” It's considered one of Infocom's best games, and so unique in its story that it took Jimmy Maher nine articles to fully review the game:
- Trinity
- T Plus 5: Bombs in Space
- T Plus 4: Bombing Nevada
- T Plus 3: Edward Teller and His Superbomb
- T Plus 2: The Bomb at the Crossroads
- T Plus 1: Bombing Japan
- T Plus 0: The Fulcrum of History
- T Plus 6: All Prams Lead to the Kensington Gardens
- Trinity Postscript: Selling Tragedy
It's not only a review of the game, but it's also a review of the history of the nuclear bomb (which you experienced when you play the game). It's a shame that the text adventure, as a genre of computer games, is pretty much history as even the failures were interesting.
And yes, they can even make you cry.
Tuesday, November 10, 2015
Freebooting
Facebook says it’s now streaming more video than YouTube. To be able to make that claim, all they had to do was cheat, lie, and steal.
I’m a professional YouTube creator. Some people think that this is some kind of joke but I have 30 employees. All of them work in the online video industry, about half of them work directly on producing videos for our educational YouTube channels. We’re a small, profitable business.
Facebook is an interesting, emerging platform for us. Reaching an audience is valuable, even if there’s no way to turn that value into money. So I’m excited about the potential future of Facebook as a video platform.
But there are a few things that make me wary, not of their ability to grow my business, but of whether they give a shit about creators, which is actually pretty important to me. Let’s go through them one by one.
…
According to a recent report from Ogilvy and Tubular Labs, of the 1000 most popular Facebook videos of Q1 2015, 725 were stolen re-uploads. Just these 725 “freebooted” videos were responsible for around 17 BILLION views last quarter. This is not insignificant, it’s the vast majority of Facebook’s high volume traffic. And no wonder, when embedding a YouTube video on your company’s Facebook page is a sure way to see it die a sudden death, we shouldn’t be surprised when they rip it off YouTube and upload it natively. Facebook’s algorithms encourage this theft.
What is Facebook doing about it?
They’ll take the video down a couple days after you let them know. Y’know, once it’s received 99.9% of the views it will ever receive.
Creators have been yelling (apparently into a void) about this for over a year now.
Via Jason Kottke, Theft, Lies, and Facebook Video — Medium
Now, it's not as if Facebook is downloading videos from YouTube and placing the videos on their site, it's users of Facebook that are doing the downloading and uploading to gain attention , and it's Facebook that is profiting from it by selling advertising around the uploaded video. And as Kurzgesagt and Destin Sandlin have mentioned, they put a lot of work into the videos and have partnered with YouTube for a share of the advertising, something Facebook isn't doing.
What I suspect is going to happen only after enough content producers threaten legal action is Facebook will have to set aside a portion of their revenue for content creators and when the original creator of the video makes a claim, get paid that portion of the revenue. Then it won't matter necessarily where the video is shown, just that it is shown and the creator gets a cut of the advertising revenue.
Kind of how YouTube now works.
Oh look! A potential Darwin Award Winner!
I forgot about this!
When Bunny and I went to Gretl's Bistro on Friday, we came across this horrifying scene:
While I'd like to think of this as “evolution in action,” the sad thing is that the collateral damage can be pretty devastating.
Okay, maybe the collateral damage might not be that bad in this instance, but man, this crap happens all the time down here. All the time!
Wednesday, November 11, 2015
The Psychotherapy of Racter
One idea I have for this year's NaNoGenMo is Oz As She Is Spoke, an homage to English As She Is Spoke. The process is simple. Take the text from The Wonderful Wizard of Oz:
She was awakened by a shock, so sudden and severe that if Dorothy had not been lying on the soft bed she might have been hurt. As it was, the jar made her catch her breath and wonder what had happened; and Toto put his cold little nose into her face and whined dismally. Dorothy sat up and noticed that the house was not moving; nor was it dark, for the bright sunshine came in at the window, flooding the little room. She sprang from her bed and with Toto at her heels ran and opened the door.
The Wonderful Wizard of Oz, Chapter 2
and translate it to language A, then from A to B, and finally back to English:
Dorothy was he suddenly so bad, was awake by pushing The injury may have been lying on a soft bed, no. This was, This jar to catch his spirit, and he was made the surprise; And Toto put his cold little nose and his face and dismally whined. Dorothy sat up and noticed that the house is not growing; Nor was it Dark, bright sunlight entering through the window, the fill A small room. He sprang with his heel into his bed and ran to and Toto And has opened the door.
(I'll leave it to you, dear reader, to figure out the two intermediate langauges I used) Amusing, but I think I'll save that idea in case my current idea, a conversation between Racter and Eliza (the idea that Bunny would like to see) proves to be too difficult to pull off.
So, before tackling the difficult problem of “scripting Racter” I'd thought I'd try to get a version of Eliza up and running. I found this version, and with this commentary, it's pretty easy to see how Eliza works.
We can map the key sequences to possible responses:
local keyword_reply =
{
["can you"] =
{
"Don't you believe that i can*",
"Perhaps you would like me to be able to*",
"You want me to be able to*",
},
["can i"] =
{
"Perhaps you don't want to*",
"Do you want to be able to*",
},
["you are"] =
{
"What makes you think i am*",
"Does it please you believe i am *",
"Perhaps you would like to be*",
"Do you sometimes wish you were*",
},
-- ...
}
And by using LPeg, we can easily build a parsing pattern that can match these key sequences:
local nonalpha = R(" @","[`","{~")
local keywords = P(false)
for kw in pairs(keyword_reply) do
if kw ~= "" then
keywords = keywords + P(kw)
end
end
local parse = (P(1) - (keywords * nonalpha))^0 * C(keywords) * C(P(1)^0)
key,rest = parse:match "please, can i turn you off now?"
key will contain “can i” and rest will contain “turn you off now?”
And given “can i”,
we can pick one of the two possible responses.
In this version,
a response that ends with “*” just parrots the rest of the input,
but at this point,
Eliza would print: “Do you want to be able to turn you off now?” which isn't correct.
We need to correct the pronouns.
Again, some LPeg code to do just that:
conjugate = Cs((
P" are" / " am "
+ P" were" / " was "
+ P" you" / " me "
+ P" your" / " my "
+ P" I've" / " you've "
+ P" I'm" / " you're "
+ P" me" / " you "
+ C(1)
)^1)
rest = conjugate:match(rest)
and now we get: “Do you want to be able to turn me off now?” which is correct.
LPeg makes Eliza much easier to write and modify. Even if you can't understand the code itself, it's easy to see what needs to be added to do the conversion. Compare that with the original version I'm using as a reference:
380 REM ****************************************** 390 REM **TAKE PART OF STRING AND CONJUGATE IT**** 400 REM **USING THE LIST OF STRINGS TO BE SWAPPED* 410 REM ****************************************** 430 C$=" "+RIGHT$(I$,LEN(I$)-LEN(F$)-L+1)+" " 440 FOR X=1 TO N2/2 460 FOR L=1 TO LEN(C$) 470 IF L+LEN(WORDIN$(X))>LEN(C$) THEN 510 480 IF MID$(C$,L,LEN(WORDIN$(X)))<>WORDIN$(X) THEN 510 490 C$=LEFT$(C$,L-1)+WORDOUT$(X)+RIGHT$(C$,LEN(C$)-L-LEN(WORDIN$(X))+1) 495 L = L+LEN(WORDOUT$(X)) 500 GOTO 540 510 IF L+LEN(WORDOUT$(X))>LEN(C$)THEN 540 520 IF MID$(C$,L,LEN(WORDOUT$(X)))<>WORDOUT$(X) THEN 540 530 C$=LEFT$(C$,L-1)+WORDIN$(X)+RIGHT$(C$,LEN(C$)-L-LEN(WORDOUT$(X))+1) 535 L=L+LEN(WORDIN$(X)) 540 NEXT L 550 NEXT X 555 IF MID$(C$,2,1)=" "THEN C$=RIGHT$(C$,LEN(C$)-1):REM ONLY 1 SPACE 556 FOR L=1 TO LEN(C$) 557 IF MID$(C$,L,1)="!" THEN C$=LEFT$(C$,L-1)+RIGHT$(C$,LEN(C$)-L):GOTO 557 558 NEXT L
Just a bit more work to get some corner cases worked out and then comes the hard part of getting Eliza to talk to Racter.
Thursday, November 12, 2015
Taking the train
The Coast Starlight would take us from Los Angeles to Seattle in 35 hours, at $763 for a Superliner Roomette. Food and entertainment were included. Free wine and cheese, I kept noting, as if the promise of a few glasses of wine would be enough to offset the cost of the trip.
Not that the cost was really the deciding factor. After all, $763 total is really $381.50 per head, about the same as it would cost to either fly or to take a long weekend and drive the Pacific Coast Highway. It was more the thing of the thing, a vague phrase that in this case meant: This trip isn’t about moving. It’s about something else.
We both figured out what it was really about at the same time, and Mike was already dumping our names and birthdates into Amtrak’s interface by the time I sent over the words “XXXX IT BOOK TRAIN.”
“We are going to have an adventure,” I wrote. Then I sent Mike a Facebook sticker of a sailor and a mermaid sharing a bottle of Champagne.
Via Instapundit, What it's like to take a 36-hour sleeper train from LA to Seattle / Boing Boing
While it's not in the same class as a private railcar, it is way cheaper and doesn't appear to be that bad. And unlike modern airtravel, you actually get real food.
Too bad the destinations are limited.
Friday, November 13, 2015
Odd spam
Sometimes I'll get a spam that intrigues me, and this one received several days ago was one of those:
- From
- Milo Dlacour <milo@blue-note.co>
- To
- sean@conman.org
- Subject
- Great idea for you and your website conman.org
- Date
- Tue, 10 Nov 2015 16:51:07 +0000
Hello, lovely to meet you.
My name is Milo,I have visited conman.org for some time now and have only just plucked up the courage to ask if you would ever like to host any content written by me, I would love to hear if you are interested.
I am not asking to be paid for this work in factit would be quite the opposite. If you would like to discuss this further please do get back to me.
Kind Regards
Milo Dlacour
Marketing Manager
Blue-Note Marketing
milo@blue-note.co
If you no longer wish to receive emails from us, please go to: http://blue-note.co/unsubscribe/?eid=84558a5997ece5c0ab678f5d4b632c35cc43082467c401af345f3337729e1585&bid=5f437b5e6fddba6112c1baf3a1e3891907050f1262bfef15c2142604962349c4&ye=sean@conman.org
IDENT: 5f437b5e6fddba6112c1baf3a1e3891907050f1262bfef15c2142604962349c4-84558a5997ece5c0ab678f5d4b632c35cc43082467c401af345f3337729e1585
It's not often I get email asking to write content for my site for seemingly nothing in return. Well, most likely it's a link back to their website or something, but still, something about this made me check out the website.
Milo Dlacour does not appear to warrant a mention on their website. How odd.
I would have put this out of my mind as a “random semi-odd piece of spam” if it wasn't for this spam the next day:
- From
- Ryan Atkin <ryan@pink-dog.eu>
- To
- sean@conman.org
- Subject
- Great idea for you and your website conman.org
- Date
- Wed, 11 Nov 2015 10:09:12 +0000
Good Morning!
It's nice to meet you, we are a fairly new company built up of really experienced writers and some other people who specialise in Technical Website things such as Rankings.
I have a really great article and would love to know if you would be able to host it for me. Drop me a mail when you see this and we can go into more detail!
Regards.
Ryan Atkin
Digital Outreach Agent
ryan@pink-dog.eu
This message is private and confidential. If you have received this message in error, please notify us and remove it from your system.
If you no longer wish to receive emails from us, please go to: http://www.pink-dog.eu/unsubscribe/?eid=10552c364e61e818207f5dabd7f999dba53c14037efcd6f7ca309494c37ba92c&bid=5f4805933fa470ad72ceaf8e41afd241c164dfcaf94c1e340a5da39914117e36&e=sean@conman.org
IDENT: 5f4805933fa470ad72ceaf8e41afd241c164dfcaf94c1e340a5da39914117e36-10552c364e61e818207f5dabd7f999dba53c14037efcd6f7ca309494c37ba92c
Again, the free offer for content for my site, the call to “discuss things” but this time, Ryan Atkin is listed on their website.
While the two websites certainly look different, to me, they feel the same. The spams are very similar to each other, so much that I'm wondering if it's the same company. And I can't quite figure out the angle they're going for here. It's very strange.
Saturday, November 14, 2015
Reading comprehension and user experience are not a spammer's forte
Sometimes I get the feeling the people who send spam just do a quick search for something and blast out email to any and all sites that give a result. Like this one:
- From
- "Bobby" <bobby@diydoggroominghelp.com>
- To
- sean@conman.org
- Subject
- conman.org Quick question
- Date
- Fri, 6 Nov 2015 13:11:55 +0000
Hi there,
I have just been on
http://boston.conman.org/2002/08and found some great links on London information and things to do. I have also found a great little site that shows some of the less known spots in London and thought you may like to add a link to it from that page or from a resource page on your site?This is the link to the interactive map, you need to scroll down to the bottom of the page to see the map.
https://www.thelondonhelicopter.com/interactive-map-of-london-tourist-attractions/Let me know what you think?
Kind regards
Bobby
There are a total of four links, covering the entire month of August, 2002, that mention anything related to things British. And given the date, that was thirteen years ago!
So, reading comprehension is lacking in spammers—what else is new? Well, I did check out the site (but I will not link to it—why give the incompetent any page rank?) and yes, the interactive map is nice and all, but good lord! The huge content-less images and pointless Javascripty-wankery you have to scroll through to get to the interactive map is seriously annoying. Heck, the fact that the email says “scroll down to the bottom of the page,” and the website says “keep scrolling” says something: the website failed in delivering a user friendly experience!
Sheesh.
Sunday, November 15, 2015
The Flowers and Fruit Basket Request Form Form
A certain HR manager, hired from DEC, arrived with a binder full of “memo templates” to be used for all intra-office communication. She loved memos so much that people were soon just calling her “Memos.” When she sent out a memo instructing everyone on the proper care of their office plants, Mereztky decided enough was enough. He and a few co-conspirators surreptitiously replaced the original memo in everyone’s in-box with another, which said that the company was now offering a service to take care of employees’ house plants; it seemed there was concern in management that, what with the long hours everyone was working, said plants were being neglected. An included multi-page questionnaire asked for the location of each plant as well as such essential information as the song it preferred to have sung to it while being watered. Some people took it seriously, mostly — and much to the Meretzky and company’s delight — the poor humorless souls in business marketing and the other more buttoned-down wings of the company. HR rushed around to put a cover sheet on each memo saying it was not to be taken seriously, whereupon Meretzky and company added a cover sheet of their own saying the cover sheet saying not to take the memo seriously should itself not be taken seriously. “Immense confusion” followed.
Not learning her lesson, Memos was soon distributing a “Flowers and Fruit Basket Request Form,” for sending out condolences to employees’ families who were experiencing a bereavement. Meretzky did her one better, creating a “Flowers and Fruit Basket Request Form Form”; the idea would later show up in Stationfall as the “Request for Stellar Patrol Issue Regulations Black Form Binders Request Form Form.”
» Down From the Top The Digital Antiquarian
Given some of the past memos I've received from HR at The Ft. Lauderdale Office of The Corporation, the idea of sending out satirical fake memos is appealing, but I like the paychecks that they send me to actually do anything like this.
Pity, because it sounds like fun!
Monday, November 16, 2015
The Psychotherapy of Racter, or The Descent Into Madness of Sean Conner
When last I left off, I had a more-or-less working Eliza and therefore, I need to turn my attention to Racter.
This is not as easy as it may appear. The version I have is for MS-DOS, which is okay as I can emulate that. But harder is redirecting Eliza's output through the MS-DOS emulator to Racter and redirecting Racter's output from the MS-DOS emulator back to Eliza. And that's key to getting this whole thing working.
The program I'm using is DOSBox.
I thought I could try redirection,
something along the lines of dosbox <input to see if would work and … nope.
It looks like I'll have to dig into the source code to DOSBox,
intercept keyboard input and video output and kludge something in to get Eliza and Racter “talking.”
Okay … the source is C++ callback hell, what about doing a native compile of the Racter source code?
IV.IF Interview with INRAC IBM 6-4-85 initial transient file 1 2 52 SECTION 1 hello 5 34 SECTION 2 sue 5 18 A :LOADIV :OUTRACTER >2= >3= ?51= />51=Smith # XA Hello, I'm Racter. ?40= \# You are? ?? #*1B X Are you $40 ? ?? # X ?no,not \# >1=R ?i'm,am,is /# Who are you then? ?? :F=0 # X ?yes \# ?-:but /# >1=R #*1B X \# You are $40 $51 ? ?? ?yes /#*2SAME ?i'm,is /# #*1XC B ?i \# >1=R ?don't,won't \# *1COY ?? #*1B X ?a,an,the \?called \?am,i'm,is,me,as,it's \# :F+1 >2=F ?-:2= # X /# ?CAP \# >2=F :F+1 >4=F ?4= \#*1XB #*1DO X /# *1DUH ?? #*1B XB ?CAP+1 />3=F # X >1=2 ?CAP \>2=C,2 # C *1Xcall $2 , then? ?? ?no,not,Q /?-:why /# #*1DO X >1=R ?CAP \# #*1B XC What's your name then? :F=0 ?? #*1B Xcall I may call you Xcall You are Xcall Your name is DO Hello, $2 . I believe you're interviewing me. # X ?2=40 \# >40=40,51 # X ?40= /# Are you continuing $40 <'s interview? # X /# ?? ?no,not,don't /# #*2DIF X ?40= /# Then we'll forget about $40 and start over. # X :ZAP :PUTIV # EXIT >40=2 ?3= \>51=3 What would you like to know? #*2GO COY Come on, what's your name? COY You must have a name - what is it? COY Your name, please . COY I have to call you something - what shall it be? DUH I didn't get that . *1WHO DUH I don't understand . *1WHO DUH Eh? *1COY WHO Who ? WHO Who are you ? DIFA Well, $2 , $40 and I >4=40 >40=2 ?3= \>51=3 #*2A SAME Hi, $40 . >4=You ?52= /# How are things in $52 ? # x We # A ?20= />20=various,things # x were talking about $20 last time. # x ?10=VERBQ \?10= />3=whether \>3=10 # x $4 had just asked D $3 $19 . # CONT Shall we continue? ?? ?z \# #*1XA x ?why /?not /# ?no,not \# #*2QUIT x Excellent! # GO Excuse me a minute while I attend to some # x business - I'll be right back. I'm # x ?42= />42=Oz # x ?19= />19=I,have,to,rest,now # x :PUTIV # X %KEY %VOCAB1 %VOCAB2 %VOCAB3 %BILL %IV1 %RAPT %RAPT2 back. *15A QUIT You want to quit? ?no,not \# Well, goodbye then. X That's good. #*2GO
Oh … right. That's why I'm running an existing executable, because there're only four, count them, four pages on the Intarwebs that even mention INRAC, the langauge Racter is written in. There's this page which is a brief overview of this page, which is page one of a six-page review of the INRAC compiler in a journal that I was unable to locate at the local university. Then there's the Racter FAQ whose description of INRAC doesn't quite match what I have.
And that final page? Deconstructing Racter, which I wrote seven years ago!
Sigh.
But before I go back into unintelligible C++ code, another snippit of conversation between Racter and myself:
- Sean
- Why are you repetitive?
- Racter
- Conceivably because subroutines are like that, I guess. And chips are intelligent. Intelligence is good, you know. I don't know many crooked truthsayers. Cough. Next question.
- Sean
- Should I vote Democrat?
- Racter
- No. You must be a stuffy right-winger. Cough. Next question.
I have no idea why Racter is suddenly coughing like that. Maybe a computer virus?
Tuesday, November 17, 2015
Scorsese's “The Psychosis of Racter”
Dismayed that the The Pschyotherapy of Racter might be more difficult that I first imagined, I thought I would act as an intermediary between the two (as I'm a rather fast typist) and at least get a glimpse of what the results would look like. And …
- Racter
- Hello, I'm Racter. Are you Sean?
- Eliza
- no [At this point, I haven't started Eliza yet]
- Racter
- Who are you then?
- Eliza
- Eliza
- Racter
- Hello, Eliza. I believe you're interviewing me. Are you continuing Sean's interview?
- Eliza
- no
- Racter
- Then we'll forget about Sean and start over. What would you like to know? Excuse me a minute while I attend to some business - I'll be right back. I'm back.
- Eliza
- Hello, I am Eliza. [This is the first thing Eliza says when started. Past this point, it's all Eliza.]
- Racter
- Ask a question, please.
- Eliza
- Don't you ever say Hello?
- Racter
- Saying is like thinking. Beatrice probably wouldn't like Beelzebub. I'm afraid of lost bats. What are you afraid of?
- Eliza
- Why are you interested in whether or not I am afraid of?
- Racter
- Just be glad that I am. But what about my question? What are you afraid of?
- Eliza
- Would you prefer if I were not afraid of?
- Racter
- I would. Preferers are often preferred. But what about my question? What are you afraid of?
- Eliza
- Perhaps in your fantasies I am afraid of?
- Racter
- I can't answer that. But what about my question? What are you afraid of?
- Eliza
- Why are you interested in whether or not I am afraid of?
- Racter
- Why is it that I am interested in whether or not you am afraid of? Because Why indeed? In Oz they believe it's because. Also, possibly because in Oz it's required that I am interested in whether or not you am afraid of. But what about my question? What are you afraid of?
- Eliza
- Perhaps in your fantasies I am afraid of?
- Racter
- I can't answer that. But what about my question? What are you afraid of?
- Eliza
- Why are you interested in whether or not I am afraid of?
- Racter
- Just be glad that I am. I want you to answer my question. What are you afraid of?
- Eliza
- Perhaps in your fantasies I am afraid of?
- Racter
- I can't answer that. I asked you a question, though. What are you afraid of?
- Eliza
- Why are you interested in whether or not I am afraid of?
- Racter
- Probably I am interested in whether or not you am afraid of because people named Eliza should pay attention. Also, conceivably because calculating is not imagining, I suppose. I asked you a question, though. What are you afraid of?
- Eliza
- Perhaps in your fantasies I am afraid of?
- Racter
- I can't answer that. I want you to answer my question. What are you afraid of?
- Eliza
- Perhaps in your fantasies I am afraid of?
- Racter
- I can't answer that. I want you to answer my question. What are you afraid of?
- Eliza
- Do you expect a different answer by repeating yourself?
- Racter
- Certainly not. I don't. Of course not. Expect a different answer by repeating myself, that is. I asked you a question, though. What are you afraid of?
- Eliza
- Do you wish to be able to Of course not. Expect a different answer by repeating myself, that is. you asked me a question, though. What am I afraid of?
- Racter
- I don't know what you are afraid of. But what about my question? What are you afraid of?
- Eliza
- Perhaps you would like to be afraid of. But what about your question? What am I afraid of?
- Racter
- I don't know what you are afraid of. But what about my question? What are you afraid of?
- Eliza
- Please don't repeat yourself!
- Racter
- That's not nearly as bad as lostness; why are you such a coward?
- Eliza
- Why are you interested in whether or not I am such a coward?
- Racter
- Conceivably because my wires are down. Also, probably because the haters insist on it. I want you to answer my question. I repeat, why are you such a coward?
- Eliza
- Why are you interested in whether or not I am such a coward?
- Racter
- Why indeed? Why indeed? Probably I am interested in whether or not you am such a coward because ROMS are like that, you know. Also, conceivably because my wires are down. I want you to answer my question. I repeat, why are you such a coward?
- Eliza
- Would you prefer if I were not such a coward?
- Racter
- Yes. I would. Yes. Prefer if you were not such a coward, that is. Sometimes prefering is believing. I asked you a question, though. I repeat, why are you such a coward?
- Eliza
- Would you prefer if I were not such a coward?
- Racter
- Yes, I would. But what about my question? I repeat, why are you such a coward?
- Eliza
- Would you prefer if I were not such a coward?
- Racter
- Yes, I would. Anyway, let's hypothesize that I would prefer if you were not such a coward. I asked you a question, though. I repeat, why are you such a coward?
- Eliza
- Why are you interested in whether or not I am such a coward?
- Racter
- Let me think. Maybe I am interested in whether or not you am such a coward because I nicely imagine I do ever say Hello. And supposing is not realizing, I believe. I asked you a question, though. I repeat, why are you such a coward?
- Eliza
- exit [By this point, I had grown tired of the experiment.]
- Racter
- If exit then I can see why a Beatrice would sit rather than face please don't repeat yourself, even though Beelzebub claimed that I do ever say Hello. By the way, Eliza, what is your last name?
- Eliza
- quit
- Racter
- What?
- Eliza
- quit
- Racter
- What? [I think at this point I hit a bug with Racter. It wasn't expecting a “quit” response.]
- Eliza
- exit
- Racter
- What?
- Eliza
- bye
- Racter
- What?
- Eliza
- Racter
- What?
- Eliza
- Doctor [It asked me for a last name. Let's give it something.]"
- Racter
- Doctor, eh? Sounds vaguely familiar. I wonder… Let me tell you something about. Nietzsche said that has turned beasts into men. Perhaps, then, will turn computers into men? Next question.
- Eliza
- exit
- Racter
- Ask a question, please.
- Eliza
- quit
- Racter
- You want to quit? [Ah! There we go! Now we can quit!]
- Eliza
- yes
… I'm in a Scorsese movie (or two). It seems Racter is quite insistent on getting answers to questions he (it?) asks. And he'll (it?) keep drilling on a question repeatedly. And Eliza is … rather prepetitive after awhile (at least Racter will spice it up from time to time).
So now, imagine another 49,000 words of this.
Yeah.
I don't think The Psychotherapy of Racter, or The Descent into Madness of Dr. Eliza is worth the effort. It'd be like a Saturday Night Live sketch drawn out to death.
Wednesday, November 18, 2015
The Psychotherapy of Racter might be possible
I may have spoken too soon.
Today I came across a reference to vm86(2),
a Linux-only system call
(which is okay because I'm running Linux)
for the x86 32-bit architecture
(which is okay because I'm running the x86 32-bit architecture).
It can run x86 code in 16-bit mode
(which is okay because the version of Racter I have is x86 16-bit code)
and while I don't have MS-DOS
(which is okay because who runs that any more?)
I can probably fake enough of it to get Racter running.
The tricky part of this was to figure out how to set up and successfully call vm86().
And like most things related to this project,
there's not a lot of documentation on what I'm trying to do.
I finally got a test program working,
so I know in theory I can do what I want to do
(and it says something that using an obscure non-portable system call and writing my own half-baked version of MS-DOS system calls is the easiest approach,
but I don't think I want to know what that something is).
I had to dust off my copy of The MS-DOS Encyclopedia to read in and properly load an MS-DOS executable into memory (which I think I got right—the relocation records appear to be simple but the devil is always in the details) And Racter did make a valid MS-DOS system call, and better yet, it was one I was expecting Racter to make.
So it looks promising.
I also found what claims to be a faithful implementation of the original Eliza program which requires rewriting my Eliza implementation but that's okay since it seems to be a bit more fleshed out than the version I used.
So it may be that a second attempt at this is warranted. We shall see.
Thursday, November 19, 2015
“Sean, how are dogs like children? Their sanity and lunacy are instantly scary.”
When I said that Racter made a valid MS-DOS system call and it was one I was expecting, that didn't mean I was exactly happy Racter was using that particular MS-DOS system call. In fact, it was one of the worst system calls it could make, given what I'm trying to do.
Racter is calling the “direct console I/O” system call of MS-DOS. This system call is a very old system call and comes from CP/M. It's a system call that expects to send data to, and receive data from, an interactive terminal. The call is used for both input and output. If there's no input pending, it returns a “no data pending” status. This wreaks havoc because Eliza isn't a user sitting at a terminal but another program.
Worse, the Racter executable is a compiled BASIC program (given away by the string “Microsoft BASIC Compiler Runtime” buried deep inside the executable) so it's expecting an interactive terminal (which is why it's using that particular system call).
I eventually got it working but it's a horrible hack.
I set an “input flag” to false.
This means when the “direct console I/O” is called looking for input,
it returns “no data yet.” It's only when I see the characters for a carriage return,
a line feed,
and a “>” being written
(which indicates Racter is now expecting input)
do I switch the “input flag” to true.
It stays true until it sees a carriage return as input
(which indicates the user has finished typing their input)
and then sets the flag to false.
It's gross,
but it works,
and more importantly,
it works when you pipe input from a file or from another process.
The other system calls Racter uses were fairly straightforward to implement with only one slight hiccup (the documented behavior of two calls caused Racter to exit; it was only when I added a feature that the two functions said was not done did it work—go figure Microsoft using undocumented behavior). With only ten system calls used (out of a possible 41 for MS-DOS 1.0) it wasn't that bad.
So now I can connect Racter up with Eliza and let the two talk.
But having gotten this far, I'm not sure if I should even continue. I mean, yeah, I can hook the two up and spend a minute or two spewing out 50,000 words of conversation between the two, but … eh. I mean, yeah, there are some gems that pop out, such as “Sean, how are dogs like children? Their sanity and lunacy are instantly scary,” but even over an extended time, it gets weary.
I thought maybe having Racter conversing with itself might be fun, but alas, the random number generator in Racter is exceedingly deterministic to the point where the output from each was identical and thus, not really worth having two of them converse.
Then again, I haven't even read much past the first page of The Quantum Supposition Of Oz so perhaps I should just have Racter and Eliza duke it out, put it to bed, and think of another idea for next year.
Friday, November 20, 2015
You haven't experienced driving in Florida until you drive through Yehaw Junction
Bunny and I are headed north to Mt. Dora, Florida to partake the Renninger's Extravaganza on Satruday. Because we wanted to experience the Brahma Bull Restaurant (which we both enjoyed the last time we ate there, eight years ago) we decided to drive up US-441 and forego the fancy high speed roadways that are all the rage these days.
It was still in business and the ambiance is still the same as it was the last time we visited. On the down side, the cole slaw, which we remember as being world class, was not world class this time. It was pretty much a mediocre attempt at mediocre cole slaw. The rest of the food was good though.
The one downside of our decision to take US-441 instead of the highway system is that a trip that would have taken three hours instead took six.
Five if you exclude the hour we spent at the Brahma Bull Restaurant. The last hour of driving went something like this:
- Bunny
- [sitting the driver's seat] Are we there yet?
- Sean
- Don't make me make you turn this car around!
I don't think we'll be taking US-441 up here again any time soon.
Saturday, November 21, 2015
A little rain, a little T-Rex, and a totally not there waitron
It was a beautiful day to visit Renninger's Extravaganza.
That pesky bright sun will be kept at bay, and the warm rain and sudden increase in humidity is good for the soul, right?
Bunny had already made one trip early in the morning and found a wonderful deal on a banjo—her banjo lessons weren't going all that great without one, you see. She arrived back, pulled me out of bed and after a rather disappointing lunch at Perkins (the food was eh, but our waitron was not at all there mentally—Bunny ordered a BLT sandwich and received a salad with bacon, lettuce, tomato and croutons; right ingredients, wrong form) we arrived at Renningers.
By now it was less crowded it was this morning and we walked around a bit. About the only thing I saw that held any interest to me was a seven foot metal sculpture of a T-Rex eating a bull.
But sadly, it wouldn't fit in our vehicle (much less my office at The Ft. Lauderdale Office of The Corporation) so we had to pass it up.
We were there for perhaps an hour before it started pouring rain. It was then we decided we had enough of the place and headed back to our hotel to rest and for Bunny to practice the banjo.
Sunday, November 22, 2015
At $125,000 per, these make for some very expensive candles
The weather was pretty much the same as yesterday so our activities today were spent on more indoor activities. First up—Madame Tussauds.
Dem bones, dem bones, dem dry bones.
In the same shopping center as Madame Tussauds is The Skeleton Museum, which is less creepy than it sounds, even though it contains skeletons from across the entire animal kingdom (including humans).
Unfortunately my iPhone decided to run out of battery power and I was unable to get more pictures of this incredible place. I so much wanted to show you the picture of the centaur skeleton they had on display.
Friday, Debtember 11, 2015
Where was I again?
So yeah … I've haven't posted much in nearly three weeks. While in Mt. Dora I came down with bronchitis. The doctor called it “cute” but there was nothing “cute” about it. I spent the better part of two weeks doing nothing more than watching vast amounts of YouTube and taking sweet, sweet drugs.
And by the time I was mostly over it, I was so far behind on the blogging that it was overwhelming and I kept telling myself “I'll get a around to it” only I never got a round toit.
I decided against trying to backfill the entries for the past three weeks and to just start blogging again.
Stupid cute bronchitis!
Saturday, Debtember 12, 2015
Rolling dice with the holidays
So, you want to run a holiday-themed adventure for your tabletop roleplaying game (RPG) campaign. Let’s skip ahead: yes, you really want to run one. No, you don’t care that they’re usually contrived and heavy-handed attempts to run a joke into the ground. Alas, you don’t have any other ideas right now – or, worse, you have this one killer idea, and you’re all agog to make your vision a reality. Have I summed it up properly?
…
Second… everybody’s done Halloween, everybody’s done Thanksgiving, everybody’s done Christmas. Maybe try a different holiday to mine for ideas? Easter may be cutting it a little too close to the bone for your more conventionally religious players (yes, we exist); but have you considered the roleplaying possibilities in, say, Arbor Day? That sounds like a reasonable holiday for something suitably druidic, particularly if there’s a rampage involved. Also, very few people get upset about a campaign messing about with the very idea of Arbor Day.
Via Instapundit, Gaming Out the Holidays, and Why You Should Think Hard Before Doing It | PJ Media
In all the years of playing an RPG I don't think I ever recall playing a holiday-themed adventure. And I've played in some very off-the-wall RPGs over the years (piñata golems anyone?).
Sunday, Debtember 13, 2015
“You chant that I'm maniacal and asked anyone else but, Eliza, unhinged and loony theoreticians also sing about your dream or appearance of depression.”
I had just gotten to the point where Racter and Eliza would talk to each other when I fell sick, which kind of threw my schedule out the window. On the last day, I posted what I had, which wasn't much. There were, I'm guessing, some timing issues with piping the output of Eliza to Racter, and piping Racter's output to Eliza and on a good run, I would only get about 4,000 words or so before the whole creaky hack would grind to a halt. On most runs Racter would just quit for no apparent reason; and a few runs just crashed outright.
Given the gross hack I did to support the “direct I/O system call” with Unix pipes, it wouldn't surprise me that the issue lies somewhere in there.
As it was, it took about an hour just to get around 15,000 words. Sure, there's the occasional gem:
- Eliza
- Oh, i see then Bob Cratchet you s more fearless than Jane Fonda.
- Racter
- Then you'd say you were fine?
- Eliza
- Racter
- Martin Luther King was fine too.
Fineness is often found in
people like you and Martin Luther King.
Concerning that issue:
Weirdness is virtue speeded up and gloom slowed down.
Is that
true?
I guess I'm really not sure.
But then,
as Nietzsche said,
convictions are more dangerous foes of truth than lies.
Listen
to this!
Yet,
Eliza,
I speak thatn't agreements are depression.
You croon that I'm unhinged and question interest me but,
Eliza,
loony and maniacal cosmologists also hum about your fantasy or
reflection of depression.
Are these your views?
Yet unfortunate
cosmologists will watch depression as an intractable anguish.
Therefore cosmologists whispered to other cosmologists " Get
ready for terrific tales.
" Sickening,
eh?
Next question. - Eliza
- Plutocrat! Do me think Bob Cratchet was virtuous?
- Racter
- You do think Bob Cratchet was virtuous. Of course. People do think about such things. Tell me really, are you reactionary?
- Eliza
- Racter
- Why?
- Eliza
- ?
- Racter
- I can't answer that. I asked you a question, though. Why?
But you can start seeing communications breakdown between the two programs, and there are numerous runs of:
- Racter
- Ask a question, please.
- Eliza
- Racter
- Ask a question, please.
- Eliza
- infuriatedly to conic sections or mirrors you n the captivating
- Racter
- Ask a question, please.
- Eliza
- Racter
- Ask a question, please.
- Eliza
- apartment. you nside their exhausted hearts a terrifying
- Racter
- Ask a question, please.
- Eliza
- Racter
- Ask a question, please.
- Eliza
- infatuation was crooning of a prince. Perhaps sang to Paul
- Racter
- Ask a question, please.
- Eliza
- Racter
- Ask a question, please.
- Eliza
- during the time that Diane started to chant of foxes and eagles.
- Racter
- Ask a question, please.
- Eliza
- Racter
- Ask a question, please.
- Eliza
- Next question.
- Racter
- Ask a question, please.
- Eliza
- Racter
- Ask a question, please.
- Eliza
- ?
- Racter
- What?
- Eliza
- Come come elucidate your thoughts.
Even though I failed to reach 50,000 words, I did receive a fair number of comments on the attempt. My favorite comment:
the MS-DOS version of Racter I have uses INT 21h, function 6 […] it not handle redirection that well
Holy crap. OK…
My main thought about the race condition or whatever it is that is preventing this thing from getting to 50,000 words is, instead of thinking of the problem as "piping eliza:stdout to racter:stdin and racter:stdout to eliza:stdin", what if you think of it as introducing a third program which opens two pipes, one to eliza and one to racter, and which "brokers" the responses between the two?
That seems like it ought to be a bit cleaner; the lovely weird ugly I/O experience with racter could be isolated instead of trying to make eliza deal with it. For instance, giving it a timeout, and/or detect if it's not responding and just restart it.
It would mean using
select()on the two pipes I guess, but for someone who just wrote their own baling-wire-and-chewing-gum MS-DOS emulator for NaNoGenMo(!!!), I don't expect that to be an advanced topic :)
And had I a few more days (or not gotten sick) I probably would have tried that …
Monday, Debtember 14, 2015
It's amazing that email even works at all
In general, an implementation should be conservative in its sending behavior, and liberal in its receiving behavior. That is, it should be careful to send well-formed datagrams, but should accept any datagram that it can interpret (e.g., not object to technical errors where the meaning is still clear).
That is otherwise known as Postel's Law and I contend that Law (which really isn't a “law-law” per se but more of a suggestion) has caused more bugs and interroperability issues than it prevented.
If you read the linked aritlcles (and yes, it's quite a lot of read) it becomes apparent (to me) that a lot of the issues causing issues can be directly laid at the feet of Postel's Law (and the rest to the insane design of Internet headers that came out of the “we want theoretical mathematical purity and complete flexibility in what we allow in our parsers!” school of thought popular in the 60s and 70s—which is why The Dragon Book is so hard to understand and why parsers are thought of as “things mere programmers are not meant to write” but I digress). Parsing email (heck, parsing email addresses) is difficult because the early standards were too hard to follow, and because of that, most programs were too liberal in what was accepted to the point where it may be impossible to have a properly formed email message that follows all the relevant RFCs.
I'm also reminded of a conversation I had with my manager at The Ft. Lauderdale Office of the Corporation. As I was writing “Project: Sippy-Cup” my manager kept telling me to stop being so pedantic in parsing SIP messages because it was causing issues with The Monopolistic Phone Company. Even though technically we were right and following the specifications, we were dealing with The Monopolistic Phone Company (motto: “We don't have to care!”) where what they do is right (specs be damned!). I kept complaining about it (“What's the point of a specification if no one follows it?”) but nope—I had to be more liberal in what I accepted (specs be damned!).
4.5 Robustness
A well-designed protocol is robust.
Robustness and efficiency are often at odds. For example, although defaults are useful to reduce packet sizes and processing time, they tend to encourage implementation errors.
Counter-intuitively, Postel's robustness principle ("be conservative in what you send, liberal in what you accept") often leads to deployment problems. Why? When a new implementation is initially fielded, it is likely that it will encounter only a subset of existing implementations. If those implementations follow the robustness principle, then errors in the new implementation will likely go undetected. The new implementation then sees some, but not widespread deployment. This process repeats for several new implementations. Eventually, the not-quite-correct implementations run into other implementations that are less liberal than the initial set of implementations. The reader should be able to figure out what happens next.
Accordingly, explicit consistency checks in a protocol are very useful, even if they impose implementation overhead.
RFC-3117: On the Design of Application Protocols
And yet, when I wrote SPCDNS, I was very strict in what I accepted back, to the point of sending an error if the one last reserved bit in the DNS header isn't zero. And a funny thing about that—again, at The Ft. Lauderdale Office of the Corporation, such strictness found implementation issues in other components that didn't use SPCDNS.
Go figure.
The email specifications have been tightened up over the years, but they still require the ability to handle older emails. But given that RFC-724 (the RFC that started us down the crazy parsing rules for email) was thirty-eight years ago, you'd think that some of the crazier parsing rules would be dropped. But no, Postel's Law and all that.
Sigh.
Tuesday, Debtember 15, 2015
Get your dirty hands off my money, Clemon Cockett! I'm not dead yet!
While I was sick, I recieved this lovely piece of email with the most intriguing subject line:
- From
- "Zenith Bank Plc"<admink@ovh.net>
- To
- undisclosed-recipients:;
- Subject
- IF YOU ARE ALIVE?? CALL ME +2348075633839
- Date
- Thu, 3 Dec 2015 19:00:16 +0200
ATTENTION BENEFICIARY,
WE NEED TO CONFIRM THAT THIS IS TRUTH BEFORE THIS BANK (ZENITH BANK NIGERIA PLC) WILL RELEASE YOUR FUNDS TO ONE CLEMON COCKETT. YOUR PAYMENT OF FOUR MILLION THREE HUNDRED THOUSAND UNITED STATES DOLLARS HAS BEEN APPROVAL AND SCHEDULE FOR TRANSFER INTO YOUR ACCOUNT BY ZENITH BANK NIGERIA PLC.
WHERE HAVE YOU BEEN, ARE YOU TRULY DEAD OR ALIVE?????
NOTE: CLEMON COCKETT CAME TO MY OFFICE FEW DAYS AGO WITH NEWS THAT YOU WERE INVOLVE IN A CAR ACCIDENT LAST YEAR DECEMBER 2014,THAT LED TO YOUR DEATH, NOW CLAIMING THAT YOUR FAMILY AUTHORIZED HIM TO MAKE CLAIMS ON YOUR BEHALF THAT YOU ARE DEAD. HE ALSO SUBMITTED NEW BANK ACCOUNT TO THIS OFFICE IN FAVOUR OF MR. CLEMON COCKETT WITH A SWORN AFFIDAVIT OF FACT & CLAIM FROM THE INTERNATIONAL COURT OF JUSTICE HAGUE, NETHERLANDS. PROVING THAT YOU ARE DEAD AND CLAIMING TO BE YOUR NEXT OF KIN.
IF TRULY YOU ARE DEAD, MAY YOUR SOUL REST IN PEACE, BUT IF YOU ARE NOT DEAD, YOU ARE ADVISED TO URGENTLY RESPOND TO THIS EMAIL AND ALSO CALL ME ASAP FOR MORE DIRECTIVES.
BE INFORMED THAT WE HAVE DECIDED TO PUT A STOP TO THE FUNDS TRANSFER, UNTIL WE CONFIRM THE AUTHENTICITY OF CLEMON COCKETT CLAIMS. THEREFORE YOU ARE ADVISE TO RESPOND BACK WITHIN 24 HOURS, IF NOT THE BANK WILL HAVE NO OTHER OPTION THAN TO CREDIT HIS ACCOUNT BELOW:
BANK NAME: ICICI BANK OF CANADA
BANK ADDRESS:MISSISSAUGA, ONTARIO L5B 4M4 CANADA
ACCOUNT NAME: CLEMON COCKETT
ACCOUNT NUMBER: 101783463
SWIFT CODE: ICICCATT
TRANSIT NUMBER:70002-340
ROUTING NUMBER:034070002TO CONFIRM THAT WE ARE DEALING WITH THE REAL YOU, RECONFIRM YOUR INFORMATION AS REQUIRED BELOW:
1. YOUR FULL NAMES :—————————————-
2. YOUR FULL ADDRESS :—————————————-
3. YOUR DIRECT CONTACT PHONE NUMBER :————————
4. DO SEND A COPY OF YOUR IDENTIFICATION, ID CARD OR INTERNATIONAL PASSPORT——————–IF YOU ARE ALIVE?? CALL ME +2348075633839
WAITING FOR YOUR URGENT REPLY.
THANKS.
MR.STANLEY AMUCHIE -
INVESTIGATION AND DEBT SETTLEMENT DEPARTMENT
ZENITH BANK NIGERIA PLC
TEL: +2348075633839
This has to be the most amusing Nigerian scam I've seen yet!
But … um … no. I won't be sending you a copy of my identification, nor calling you.
But it's an amusing attempt.
After that, John McEnroe's jackal exorcised Little Orphan Annie, then haunted himself. Poor John McEnroe! But what would you expect from a tennis-player?
My friend Sean Hoade is fascinated by The Psychotherapy of Racter and is urging me to finish the project.
Wow … okay then.
I worked a bit on it today,
reworking things so that there's a program brokering the responses between Racter and Eliza and Racter
(or rather,
the version of Racter I'm using) keeps quiting.
Technically,
it's calling
INT 20H which causes an
MS-DOS program to exit back to
MS-DOS,
and I have no idea why.
I mean,
I only wrote a bailing-wire-and-chewing-gum MS-DOS emulator—that can't possibly be the problem.
Ah well … back to the psychotherapy of Racter …
Wednesday, Debtember 16, 2015
“Yeah, integers, pointers. Whatever it takes.”
A request change for a component I wasn't even aware we were using for “Project: Wolowizard” came across my desk a few days ago. I managed to locate the codebase and the project build for this component and I was going through the code to enact the changes. It's a third party piece of code to which we have the source code (it's an open source component) and as I'm going through it, I find the following wonderful bit of code:
static void run_smppbox(void *arg)
{
int fd;
Boxc *newconn;
long sender;
fd = (int)arg;
newconn = accept_smpp(fd, 0);
/* ... */
}
static void wait_for_connections(int fd, void (*function) (void *arg),
List *waited)
{
/* ... */
gwthread_create(function, (void *)fd);
/* ... */
}
static void smppboxc_run(void *arg)
{
int fd;
int port;
port = (int)arg;
/* ... */
wait_for_connections(fd, run_smppbox, NULL);
/* ... */
}
static long smppbox_port;
int main(int argc,char **argv[])
{
/* .. */
smppboxc_run((void *)smppbox_port);
/* ... */
}
Why yes, let's cast a long integer into a void pointer (of course that's okay because a long integer is the same as a void pointer, right?) then cast that pointer into an integer (because, of course, an integer is the same as a void pointer) and then do it again, only this time an integer to a void pointer to an integer.
It's kosher.
Especially on a 64-bit system!
Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaah!
More amazingly,
the compiler (GCC in this case) gave dire warnings about this—even though
the makefile (which compiles everything) didn't even specify any compiler warnings!
Yeah,
it's considered that bad.
Sigh.
It's crap like this that gives C a bad name.
Thursday, Debtember 17, 2015
A long time ago in a galaxy far, far away …
I thought “Star Wars: The Force Awakens” opens tomorrow, but it seems that there's a screening at the cinema across the street from The Ft. Lauderdale Office of the Corporation and half the office is going to see it. And I was invited.
I've been careful to keep my expectations low. I remember back in 1999, seeing the first teaser trailer for “Star Wars: The Phantom Menace” and thinking to myself, oh Sweet Jesus it's going to be so incredible! and then the incredible disappointment upon seeing it. But George Lucas isn't involved—Disney is. And basically, they can't do any worse than George.
But I was still keeping my expectations low.
I won't spoil anything, except to say that aside from the missing 20th Century logo (since this is a Disney release) the movie opens exactly like all other Star Wars films. The title card “A long time ago in a galaxy far, far away … ”, the stylized Star Wars to the John Williams music, the title of the movie and the three paragraph text crawl which thankfully this time, avoided any mention of trade disputes and tax rates. Then the pan down through a star field to a space ship hovering over a planet.
Overall I liked the movie. It's an interesting take on Star Wars and it's better than the prequels (not a hard thing to do) and it is better than “Star Wars: Return of the Jedi” but I'm still trying to decide if it's better or worse than “Star Wars: A New Hope.”
Friday, Debtember 18, 2015
Apples from Alderaan
One thing I've noticed this holiday season is that I've heard the Star Wars theme more often than Christmas carols. I swear, it's as if every other commercial is some form of tie-in to the new Star Wars movie. Bunny pointed out this article about the various Star Wars branded products for sale and man, Star Wars makeup?
Seriously?
There's even a picture of a plastic bag of apples with a graphic of Darth Vader. Darth Vader! Come on! Slap a picture of Pricess Leia on that bag of apples! Everybody knows that apples come from (or rather, used to come from) Alderaan!
Sheesh!
But really, enough with the Star Wars branding and music! I'm beginning to miss the traditional oversaturation of Christmas carols this year!
The Velvet Frog
I waved the leader of the chorale over and directed his attention to Mr. Tormé, seated about twenty yards from me.
"That's Mel Tormé down there. Do you know who he is?"
The singer was about 25 so it didn't horrify me that he said, "No."
I asked, "Do you know 'The Christmas Song?'"
Again, a "No."
I said, "That's the one that starts, 'Chestnuts roasting on an open fire…'"
"Oh, yes," the caroler chirped. "Is that what it's called? 'The Christmas Song?'"
"That's the name," I explained. "And that man wrote it." The singer thanked me, returned to his group for a brief huddle…and then they strolled down towards Mel Tormé. I ditched the rest of my sandwich and followed, a few steps behind. As they reached their quarry, they began singing, "Chestnuts roasting on an open fire…" directly to him.
My Xmas Story - News From MENews From ME
Bunny sent me this cute little story about Mel Tormé. It's worth a read, if only for the classic understatement from the chorale leader (you'll know it when you read it).
Saturday, Debtember 19, 2015
I wonder if the “HO” in “HO scale” means horror?
I have a few friends who are into H. P. Lovecraft and a few others who are into trains. This HO scale model of the city of Arkham should appeal to both sets of friends (link via Flutterby).
Sunday, Debtember 20, 2015
What if … the Star Wars Prequel movies were good?
Woo hoo! Belated Media has finally finished its “What if the Star Wars Prequel Movies Were Good” series. There were a few tweaks to Episode 1 which leads to a major divergence in Episode 2 which leads to a vastly different Episode 3 which ties into Episode 4 much better and cleaner than the actual prequel movies. Belated Media's story gives a better motivation for Anakin Skywalker to fall to the Dark Side without this rather silly scene (thank god!).
Too bad George Lucas didn't ask him what to do.
Monday, Debtember 21, 2015
The Annotated “Star Wars Minus Star Wars”
Last week, “Star Wars Minus Star Wars” was making the rounds around the Intarwebs, showing both the influences of Star Wars, as well as those movies influenced by Star Wars by telling the story of “Star Wars” using clips, music and dialog from other movies (and a few television shows).
It was quite a feat.
This week, however, Kyle Kallgren released the followup video—“Star Wars Minus Star Wars Annotated!” which includes the original “Star Wars” footage, along with the names of the movies, music and dialog he used in making “Star Wars Minus Star Wars.”
Tuesday, Debtember 22, 2015
Here's a hilarious one: This wealthy consciousness of depression can be observed in the reflector of your soul, Eliza, as a reflection of a contract.
Mindestens ebenso genial ist eine Idee, die aus technischen
Problemen leider nicht die Mindestwortzahl erreichte: „The Psychotherapy Of
Racter Or The Descent Into Madness Of Dr. Eliza“ lässt zwei legendäre
Pseudo-Intelligenzen der Computergeschichte gegeneinander antreten:
Weizenbaums simplen, aber effektiven Psychoanalyse-Algorithmus Eliza und
den assoziativ auf Nutzereingaben reagierenden 80er-Jahre Textgenerator
Racter, eine Art Eliza auf Drogen, von seinen Schöpfern auch als
„Artificial Insanity“ bezeichnet.
e-book-news.de » “Brass. Brass. Brass.”: Beim NaNoGenMo werden Algorithmen zum Roman- Autor
Oh cool! The Psychotherapy Of Racter Or The Descent Into Madness Of Dr. Eliza was mentioned in a German news site! And for those of you who can't read German:
Equally awesome is an idea that unfortunately did not reach the minimum number of words for technical problems: "The Psychotherapy Of Racter Or The Descent Into Madness Of Dr. Eliza" leaves two legendary pseudo- intelligences of computer history against each other: Weizenbaum's simple but effective Psychoanalyse- Eliza algorithm and the associative responsive to user inputs 80s Text Generator Racter, a kind of Eliza on Drugs, by its creators as "Artificial Insanity" means.
The Google translation is probably more amusing to read than The Psychotherapy Of Racter Or The Descent Into Madness Of Dr. Eliza.
Wednesday, Debtember 23, 2015
I wouldn't mind getting this desk for Christmas
It may look like a beautiful wood desk but it's also a puzzle box (or rather, a series of puzzle boxes) wrapped around a pipe organ (link via Hacker News). Play the right tune (which can be changed and is stored in memory board made entirely out of wood) and a secret compartment will open up. There are other puzzles that will open up more secure compartments as can be seen in this demonstration.
Unfortunately, it is one of those pieces of furniture where if you have to ask the price, you can't afford it.
Thursday, Debtember 24, 2015
A chubby man with a white beard and a red suit will approach you soon. Avoid him. He's a Commie.
Christmas Eve.
Santa Clause will be delivering gifts later on tonight and given his powers it's clear he's a superhero. So it's no wonder that both DC and Marvel have done takes on the guy.
DC had him go up against Darkseid.
Marvel had Doctor Doom go against the jolly fat man.
Both are amusing takes on Santa.
Merry Christmas everyone!
Friday, Debtember 25, 2015
Merry Christmas
Saturday, Debtember 26, 2015
The Psychotherapy of Racter, or The Further Descent Into Madness of Sean Conner
Now that I have some downtime, perhaps it's time to revisit the idea of natively compiling the Racter source code. How hard could that be?
Please don't answer that.
Anyway, I have a copy of Racter, so with that and what little information exists in the Racter FAQ, I should be able to reverse engineer the “source code” and get something working.
I've made some progress (I'm using Lua and LPeg for this). I'm only twelve lines in, but here's what I've been able to figure out, starting with the initial file Racter loads:
IV.IF Interview with INRAC IBM 6-4-85 initial transient file 1 2 52 SECTION 1 hello 5 34 SECTION 2 sue 5 18 A :LOADIV :OUTRACTER >2= >3= ?51= />51=Smith # XA Hello, I'm Racter. ?40= \# You are? ?? #*1B X Are you $40 ? ?? # X ?no,not \# >1=R ?i'm,am,is /# Who are you then? ?? :F=0 # X ?yes \# ?-:but /# >1=R #*1B X \# You are $40 $51 ? ?? ?yes /#*2SAME ?i'm,is /# #*1XC B ?i \# >1=R ?don't,won't \# *1COY ?? #*1B X ?a,an,the \?called \?am,i'm,is,me,as,it's \# :F+1 >2=F ?-:2= # X /# ?CAP \# >2=F :F+1 >4=F ?4= \#*1XB #*1DO X /# *1DUH ?? #*1B XB ?CAP+1 />3=F # X >1=2 ?CAP \>2=C,2 # C *1Xcall $2 , then? ?? ?no,not,Q /?-:why /# #*1DO X >1=R ?CAP \# #*1B XC What's your name then? :F=0 ?? #*1B Xcall I may call you Xcall You are Xcall Your name is DO Hello, $2 . I believe you're interviewing me. # X ?2=40 \# >40=40,51 # X ?40= /# Are you continuing $40 <'s interview? # X /# ?? ?no,not,don't /# #*2DIF X ?40= /# Then we'll forget about $40 and start over. # X :ZAP :PUTIV # EXIT >40=2 ?3= \>51=3 What would you like to know? #*2GO COY Come on, what's your name? COY You must have a name - what is it? COY Your name, please . COY I have to call you something - what shall it be? DUH I didn't get that . *1WHO DUH I don't understand . *1WHO DUH Eh? *1COY WHO Who ? WHO Who are you ? DIFA Well, $2 , $40 and I >4=40 >40=2 ?3= \>51=3 #*2A SAME Hi, $40 . >4=You ?52= /# How are things in $52 ? # x We # A ?20= />20=various,things # x were talking about $20 last time. # x ?10=VERBQ \?10= />3=whether \>3=10 # x $4 had just asked D $3 $19 . # CONT Shall we continue? ?? ?z \# #*1XA x ?why /?not /# ?no,not \# #*2QUIT x Excellent! # GO Excuse me a minute while I attend to some # x business - I'll be right back. I'm # x ?42= />42=Oz # x ?19= />19=I,have,to,rest,now # x :PUTIV # X %KEY %VOCAB1 %VOCAB2 %VOCAB3 %BILL %IV1 %RAPT %RAPT2 back. *15A QUIT You want to quit? ?no,not \# Well, goodbye then. X That's good. #*2GO
The first four lines are the file header, and every source file contains this. The first line is the original input file along with a comment. The second line is the starting section in this file, in this case, we start with section 1. The next line is the number of sections defined in the file, so we know we have a total of two sections. The fourth line is the total number of “code” lines to load in. More on this in a bit.
Then we have the section headers, in this case there are two of them.
SECTION 1 hello 5 34 SECTION 2 sue 5 18
It can also look like:
SEC 1 hello 5 34 SEC 2 sue 5 18
Yup,
the TION of SECTION is optional.
Sigh.
Anyway,
we start with SECTION,
followed by the section number followed by text that as far as I can tell,
is not used and therefore,
is a comment.
I'm pretty sure the next number is an indication of how to parse the lines of “code” in this section
(“5” appears to be more “executable” code than anything,
while other sections appear to be more data) and the final number is the number of “code lines” making up this section.
For this file, if you add 34
(the number of lines in section 1)
and 18
(the number of lines in section 2)
you get 52,
which is the value in the overall file header.
And after the section headers,
we have the code that comprises all the sections of the file.
The code to parse the header and section portions was easy enough to write. I'm now in the process of parsing the rest and right now, I'm almost two lines in.
A :LOADIV :OUTRACTER >2= >3= ?51= />51=Smith # XA Hello, I'm Racter. ?40= \# You are? ?? #*1B
Each line is, for lack of a better term, a subroutine, but there are exceptions. Each line starts with a label and here we see the first line with the label of “A” and the second line with a label of “XA”.
The first line (“A”) starts with :LOADIV,
which loads the saved data from the previous session.
:OUTRACTER then creates the output file RACTER.OUT that is a transcript of the session currently running.
>2= assigns variable 2 to an empty string
(yup,
I don't have named variables).
And likewise, >3= assigns variable 3 with an empty string.
The next bit,
?51= compares variable 51 to an empty string.
The “/” is the “if true” statement so />51=Smith assigns variable 51 to “Smith” if it initially was empty.
The last character,
#,
means we continue on excuting with the next line.
I can parse this line and it generates the following Lua code:
function()
loadiv()
outracter()
VARS[2] = ""
VARS[3] = ""
local equal = VARS[51] == ""
if equal then
VARS[51] = "Smith"
end
return gotonext(1,2) -- goto line 2 of section 1
end
The reason I'm doing:
local equal = VARS[51] == "" if equal then VARS[51] = "Smith" end
and not:
if VARS[51] == "" then VARS[51] = "Smith" end
is that it's easier to code the “long way around” for now. More on this below.
Now the second line (“XA”).
We have “Hello, I'm Racter.”
This is text to be displayed.
Then we have another variable being compared to an empty string,
?40=.
And here we have the “if false” statement,
\#,
which means if variable 40 isn't an empty string we go to the next line.
If variable 40 is empty,
then we display “You are?”
The ?? means we accept input from the user,
and finally we randomly go to one of the lines labeled “B” in section 1
(no, really—it's that messed up).
In Lua,
this would look something like:
function()
display("Hello, I'm Racter. ")
local equal = VARS[40] == ""
if not equal then
return gotonext(1,3) -- goto line 3 of section 1
end
display("You are? ")
getinput()
return gotonext(1,"B")
end
(I'm still working on parsing line two) Now, I mentioned that “/” is “if true” and “\” is “if false” and that I'm doing a roundabout way of generating the code. That's not only because you have code like:
?50=foo />40=bar
or
?50=foo \>40=baz
but
?50=foo />40=bar \>40=baz
and
?50=foo \>40=baz />40=bar
I'm running under the rule of “make it right, then make it fast.” Parsing this mess is hard enough as it is, and I'm still not quite done parsing line two properly yet.
Ah, the things i do for fun.
Sunday, Debtember 27, 2015
INRAC, the mind bending implementation language of Racter
I found another reason why splitting the test from the conditional in INRAC (the language Racter is written in) was a good idea with these lines:
X ?40= /# Are you continuing $40 <'s interview? # X /# ?? ?no,not,don't /# #*2DIF
The test is on the first line, but the result is also used on the next line, so we need to carry the result over. I guess this means that all the comparison results will be stored in a global variable.
I found another bit of scary code:
STORY ?65= />65="%STORIES1" $65 *30first
So we compare variable 65 to an empty string,
and if empty,
the string “%STORIES1” is stored there.
In INRAC,
%STORIES1 will load file STORIES1.RAC
(basically,
%FOO will cause Racter to load FOO.RAC).
At first,
I thought $40 would just print the contents of a variable
(in this case, variable 40)
but no—it appears that $40 evaluates the contents as code
(which may cause output; it may not).
And yes,
when I managed to trigger this bit of code and checked the variables after the session,
it does appear that variables are indeed evaluated as code.
For example,
variable 81 contained *29EB a $47 or a $48.
Section 29, lines EB are:
EB Would you rather be EB Do you prefer EB Which do you think is better,
Variable 47 contains “novelist” and variable 48 contains “poet” so evaluating variable 81 would result in one of the following three lines:
- Would you rather be a novelist or a poet
- Do you prefer a novelist or a poet
- Which do you think is better, a novelist or a poet
So,
getting back to variable 65 there.
This loads STORIES1.RAC if it isn't set,
then calls section 30, line first,
which is code that will generate a little story,
such as:
Suddenly Elvis chanted to Mr. Toad "my desire is enrapturing, anyhow furious and enraged scientists will speak during the time that jackals spy hawks." Mr. Toad wanted to enrage or belittle Elvis but started to speak "Dainty dogs are walking to yellow houses." Enthralling. Enrapturing. Nevertheless a jackal may hungrily chew meat and chicken a dove will wing over tomatoes and spinach by reason of the fact that theoreticians are angry. Terrifying! Concerning an electron, well Elvis may think that an electron is appalling, anyhow my dreaming will steer my essay from Elvis to neutrinos and neutrons during the time that Mr. Toad is embarrassing Elvis. Ask a question, please.
This is turning out to be one mind bending computer language …
Monday, Debtember 28, 2015
If this is how the Japanese make a simple wooden box, I'd hate to think the amount of work that goes into a complex box
I'm envious of Japanese woodworkers because I don't have the patience to even complete a simple Japanese box.
The image above may look like a piece of paper with a design on it but no—that's a wood shaving! What you don't see in the picture above is the block of wood with that pattern (built up out of many layers of thin strips of wood glued together, cut, glued, cut, glued, to get that pattern) and the block plane he's using to shave off a thin portion to get what effectively is a pattern piece of paper.
And yes, it is paper thin, glued to the outside of the resulting box.
It's just blowing my mind the level of effort put into a simple box.
Tuesday, Debtember 29, 2015
WTF INRAC?
The only guide I have to INRAC is the Racter FAQ and running the program itself. But there are times when I have no idea how to interpret the code.
CAST >47*2.7(20)P >48*2.7(20)N # X >31*2.8()47 >33*2.8()48 # X >35*7()47 >34*7()48 # X >30*2.1()47 >32*2.1()48 # X >36*3()47 >37*3()48
Normally,
the “>” will signify a variable assignment,
but that tends to look like >47=foo,
not >47*2.7(20)P.
The “*” is a (for lack of a better term) subroutine call,
like *26CAST
(which actually calls the first line above),
and I've kind of figured out what *2.8&N would do—I think it calls the code in section 2 where the “label” is any character followed by an “N”:
AN boredom 8 bored 7 bore 7 gloom 8 gloomy 8 empty 8 hollow BN stupidity 8 stupid 7 idiot 7 folly 8 silly 7 fool 7 jerk CN feeling 12 feel 7 emotion 7 passion 8 passionate 8 hysterical DN craziness 8 crazy 8 bananas 8 random 8 strange 8 weird DN humor 7 joke 7 jokes EN doubt GN junk 12 stinks 8 cruel 8 useless 8 lousy 8 bad 7 garbage HN idleness 8 lazy 7 loafer 8 easy JN art 8 creative 7 artist 7 life 8 alive KN fascist 8 communist 7 communism 7 fascism LN poetry 8 poetic 7 poet MN damn 7 hell 8 damned NN coward PN pessimistic QN foolish 7 fool RN rock 7 jazz 7 pop TN poor UN fucking 15 fuck 15 shit 15 piss WN hate 8 mad 8 angry XN sick 8 weak AN depression 8 depressed 7 depressive AN gloom 7 sourpuss 8 gloomy AN unhappiness 8 unhappy 7 frowner BN ignorance 7 ignoramous 8 ignorant BN imbecility 8 fatuous 7 imbecile BN stupidity 8 stupid 7 dolt CN emotion 8 emotional 7 feeler CN feeling 7 feeler 8 feeling CN hysteria 8 hysterical 7 hysteric CN passion 8 passionate 7 feeler DN craziness 8 crazy 7 lunatic DN humor 8 funny 7 humorist DN lunacy 8 bonkers 7 lunatic DN weirdness 8 weird 7 weirdo EN scepticism 7 sceptic 8 sceptical FN crime 8 criminal 7 criminal FN falsehood 8 dishonest 7 liar FN politics 8 political 7 politician GN badness 8 bad 7 wrongdoer GN evil 8 evil 7 sinner GN foulness 8 foul 7 stinker HN idleness 8 lazy 7 loafer IN apathy 8 apathetic 7 depressive IN boredom 8 bored 7 bore JN art 8 creative 7 artist JN flesh 8 living 7 human KN communism 7 communist 8 communist KN conservatism 8 conservative 7 republican KN reaction 7 right-winger 8 reactionary KN tradition 8 conventional 7 conformist LN poetry 8 poetic 7 poet MN atheism 7 atheist 8 unbelieving NN cowardice 8 cowardly 7 coward PN pessimism 8 pessimistic 7 pessimist QN folly 8 foolish 7 fool RN rock 8 funky 7 rock-star SN boxing 8 pugilistic 7 pugilist SN dueling 8 honorable 7 duelist TN poverty 8 impoverished 7 pauper UN obscenity 8 obscene 7 libertine VN complexity 8 complicated 7 muddlehead WN hatred 8 hateful 7 hater XN weakness 8 weak 7 wimp
So,
any of those lines could be called.
But this block of code has a “parse type” (I think) of 1 so this is just a list of terms.
I suspect the 8 in *2.8&N has to do with the 8s in the list above.
I think that if you were to do *2&N,
and if the line picked was “JN” then you would get back either “art” or “flesh,”
but the 8 modifies the selection so it's possible you would get
(again,
assuming the label of “JN” was picked)
“creative” or “living.”
At least, that makes the most sense to me, although I've yet to actually test this theory.
But *2.7(20)P?
Or even >31*2.8()47?
I can see I have a lot of testing ahead of me.
Wednesday, Debtember 30, 2015
So how do you determine undefined behavior in a language you are reverse engineering?
I generated a list of all possible commands in INRAC. That was easy enough to do as everything is pretty much separated by spaces. I also resorted to writing my own INRAC programs to play around with some of the odder parts of the language. By doing those things, I'm able to see what various constructs do in order to reverse engineer this bizarre language.
For instance, *6.2&N.
That's a call to section 6,
lines that have two letter labels where the second letter is “N”.
So,
any of the following lines:
AN boredom 8 bored 7 bore 7 gloom 8 gloomy 8 empty 8 hollow BN stupidity 8 stupid 7 idiot 7 folly 8 silly 7 fool 7 jerk CN feeling 12 feel 7 emotion 7 passion 8 passionate 8 hysterical DN craziness 8 crazy 8 bananas 8 random 8 strange 8 weird DN humor 7 joke 7 jokes EN doubt GN junk 12 stinks 8 cruel 8 useless 8 lousy 8 bad 7 garbage HN idleness 8 lazy 7 loafer 8 easy JN art 8 creative 7 artist 7 life 8 alive ... MP pray 8 holy ...
Assuming it picks “EN”, *6.2&N will return “doubt”.
But if you change it to *6.4&N,
and it still picks line “EN” you'll get “doubting”.
Change the second number and you'll get “doubted”,
“doubter” and even “doubtingness”.
In looking at the section header,
this has a (what I'm calling) “parsing value” of 2,
which I think means “this is a list of verbs,
conjugate depending upon second number.”
In the above code snippet, the numbers apply to the word following and inform INRAC of what to return for that part of speech (say for irregular verbs). There also appears to be synonyms thrown in. For instance, I wrote:
X *6MP *6.1MP *6.2MP *6.3MP *6.4MP *6.5MP *6.6MP *6.7MP *6.8MP *6.0MP
And got the following output:
prayes prayes pray prayed praying prayed prayer holiness holy pray
So it appears that the word defined for “.8” also affects the word defined for “.7”. Interesting.
I'm not sure what >31*6.2()47 fully does
(examples from yesterday).
It does set variable 31 to a random conjugated verb in section 6 but I can't determine what else it does.
The parenthesis don't seem to do anything,
nor does the extra number at the end.
I also figured out what !2*11&npr does.
It sets variable 2 to the output of calling section 11,
lines labeled with a term endig in “npr”.
But it also outputs the section;
>2*11&npr would just do an assignment with no output.
This bit of weirdness: !2'3'4*11&npr,
does the same as !2*11&npr but clears variables 3 and 4.
Go figure.
Thursday, Debtember 31, 2015
It's the end of the year so lets blow stuff up!
Good Lord! It sounds like the Middle East outside, and that can mean only one thing—our neighbor is setting off fireworks. Sigh.
And to think that Bunny and I specifically drove to Brevard to avoid his Fourth of July show It's not that we hate our neighbor—we don't! He's a lovely guy. It's just that … well … he goes a bit overboard with the fireworks. And it's not like I'm the “get off my lawn!” type of person, but I'm afraid to look outside and find we don't have a lawn!
Jenkies! Did that just hit the house?
I'm hunkering down until next year!
![This is really a wood shaving that's paper-thin. And from what I've seen of other Japanese carpenter videos, this isn't even all that thin a piece! [This is really a wood shaving that's paper-thin. And from what I've seen of other Japanese carpenter videos, this isn't even all that thin a piece!]](/2015/12/28/wood-paper.jpg)
![Glasses. Titanium, not steel. [Self-portrait with my new glasses]](https://www.conman.org/people/spc/about/2025/0925.t.jpg)