The Boston Diaries

The ongoing saga of a programmer who doesn't live in Boston, nor does he even like Boston, but yet named his weblog/journal “The Boston Diaries.”

Go figure.

Sunday, January 01, 2017

What? You mean 2017 has finally started?

It's hard to come up with new and clever messages on New Year's Day, especially when half of them are about our crazy neighbor across the street attempting to blow himself up, and the other half are complaining about the lack of diversity in my New Year's Day messages. That gets old pretty quick. So let me cut to the chase and simply say:

HAPPY NEW YEAR!

Thursday, January 05, 2017

Bad airline! Bad! No beignets for you!

Sigh.

Time, 1:47 am.

My phone, ringing.

♫Viva Las Vegas! Viva Las Vegas!♫

Ah, it's Hoade. I'm supposed to leave in four hours to pick him up at the airport so we can drive to Wizard World Comic Con New Orleans. But something came up, and in a ten minute rambling and somewhat incoherent story, it was clear that we were not going to New Orleans.

A much better description came later from his post to MyFaceGoogleBookPlusSpace:

So this happened. Flying to New Orleans Wizard World by way of San Francisco (which is conveniently right between Las Vegas and Anchorage). Seeing that I had a very short window to make my connection, the nice lady got me on a slightly earlier flight.

Which then sat on the tarmac for an hour and four minutes. The first plane got in early. We were so late there was no flight available for me until it was going to be too late to make the Con. And apparently there was "weather" in the San Francisco area, so the airport was a madhouse of panic and recrimination.

I am now back home in Las Vegas. Comfy, but not exactly remunerative. And I missed hanging out with Best Friend Unit Sean Conner. And I had to cancel my appearance at a Con for the first time ever.

Ugh. At least the airline people were very nice and are giving me a refund. I guess I have no choice but to do some writing to take up the time. All is well and all manner of things shall be well … if a bit annoying sometimes.

Sean Hoade on GoogleMyFacePlusSpaceBook

Well, that bites. No beignets for us.

Saturday, January 07, 2017

“Every time the shipper takes away a pallet from the shipping room, the server times out within two seconds.”

Last year at my job we had a pretty severe problem just as unexplainable.

The day after an unscheduled closing (hurricane), I started getting calls from users complaining about database connection timeouts. Since I had a very simple network with less than 32 nodes and barely any bandwidth in use, it was quite scary that I could ping to the database server for 15- 20 minutes and then get "request timed out" for about 2 minutes. I had performance monitors etc. running on the server and was pinging the server from multiple sources. Pretty much every machine except the server was able to talk to the others constantly. I tried to isolate a faulty switch or a bad connection but there was no way to explain the random yet periodic failures.

I asked my coworker to observe the lights on a switch in the warehouse while I ran trace routes and unplugged different devices. After 45-50 minutes on the walkie-talkie with him saying "ya it's down, ok it's back up," I asked if he noticed any patterns. He said, "Yeah… I did. But you're going to think I'm nuts. Every time the shipper takes away a pallet from the shipping room, the server times out within 2 seconds." I said "WHAT???" He said "Yeah. And the server comes back up once he starts processing the next order."

Via Hacker News, chime comments on The case of the 500-mile email

This is every bit as amusing as the 500-mile email and shows that bugs can be very hard to debug, especially when they aren't caused by bug-ridden code.

I'm fortunate in that I've never had to debug such issues.

Sunday, January 08, 2017

Some random facts of the day, for no reason at all

Today is the birthday of the Sagacious Leader of the Democratic People's Republic of Korea, Kim Jong Un. Sharing his birthday today is Bob Eubanks and even more amusingly, Graham Chapman, a little known comedian who worked on an obscure British television show from the early 70s (an odd, but enjoyable show—I'll understand if you've never heard of it).


Notes on an overheard conversation at a high end restaurant in Boca Raton

“And here is your table.”

“Thank you.”

“Are you satisfied with the white linen, or would you prefer to have black linen?”

“I'm sorry, what?”

“Would you prefer the white linen or the black linen?”

“White … black … ? Um … ”

“The white linen is fine.”

“Thank you. Enjoy your meal.”

“What was that all about?”

“The napkins. They wanted to know if we prefered using white or black napkins.”

“But why?”

“In case the white napkins clashed with our clothing.”

“I've never encountered anything like that before.”

Tuesday, January 10, 2017

To be fair, Trump doesn't want to kill his own Vice President

A real-estate-rich, thin-skinned, temperamental, yet charismatic celebrity who runs a tell-it-like-it-is political campaign attacking corrupt elites and promising a better life for the common man is accused of being unfit to serve, but after slogging through a mud-slinging campaign, complicated by sex scandals and an electoral college kerfuffle, he shocks the establishment and thrills his supporters by thrashing his more- experienced opponent and winning the ultimate prize—the highest office in the land.

Introducing the President of the United States. . . Andrew Jackson?

Via Instapundit, Is Donald Trump a Modern-Day Andrew Jackson? | Observer

This is an interesting comparison between two US Presidents (technically, a former US President and a US Presidential Elect). Five promises of Jackson that mirror what Trump promised are covered and it shows we could be in for some fun.

Now the real question is—does Trump follow Jacksonian diplomacy?

Mead goes on to explain the political tradition that underlies this ferocity, which he names after President Andrew Jackson. Jacksonians, Mead argues, view America as a country that just wants to be left alone. They have little interest in the “Hamiltonian” project of prying other countries open to American commerce or the “Wilsonian” project of spreading democracy and liberty across the globe. But when attacked, especially by what they consider dishonorable foes, Jacksonians believe that “wars must be fought with all available force. The use of limited force is deeply repugnant.”

Donald Trump and America's Jacksonian Tradition - The Atlantic

Fun times indeed.


You thought I was joking when I said that Microsoft is a bank with a hobby in software

In other words, Yahoo became a Wall Street mutual fund who inexplicably also offered web mail and cat videos.

Errata Security: No, Yahoo! isn't changing its name

I just wanted to quote that one line.


It's that epiphany when you realize you went to high school with someone you see on television

So I'm watching some videos on YouTube when a commercial for Orchard Supply and Hardware pops up.

Hey, I recognize that voice! I think.

[Do you have a birdhouse that's like a cute little lake cottage with a decorative field stone fireplace?]

Hey! I think, I recognize her face! I went to high school with her!

That's not something that happens too often. And it's nice to know that Laura has had success with her Thespian skills.

Wednesday, February 01, 2017

“I am sorry, we cannot allow you to view this innocuous text file. For reasons.”

I found a bug in “Project: Sippy-Cup”. The nature of the bug is not important, but QA and I were able to reproduce locally the issue seen in production. So I ask QA to send a copy of the SIPp script (an XML file) so I could fix the issue.

From
QA <XXXXXXXXXXXXXXXXXXXXXXX>
To
Sean Conner <XXXXXXXXXXXXXXXXXXX>
Subject
Sipp command and xml for CP-209
Date
Wednesday, February 1, 2017 4:27 PM

Access to attachments has been blocked. Blocked attachments: sipptestCp209.xml.

Well then … okay. I have QA resend it, this time renamed to sipptestCp209.txt. This time it shows up. I save it. Then …

GenericUnixPrompt> more sipptestCp209.txt
This attachment was removed because it contains data that could pose a
security risk.
GenericUnixPrmopt>

Seriously? Just to convince myself it wasn't Mac OS-X's version of more that was doing the conversion:

GenericUnixPrompt> cat sipptestCp209.txt
This attachment was removed because it contains data that could pose a
security risk.
GenericUnixPrmopt>

So it's our overly paranoid email system's fault.

Gotcha.


Facebook is not your social life

I went down to my computers to start the day, opened up a tab on Facebook and Twitter, and was faced with pages and pages of wallowing in the horrors of current politics.

All of a sudden I was tremendously conscious of how I had been turning to Twitter and Facebook increasingly for these little bursts of validation, of interaction with other people, and how as social media has evolved to be passing around the same overly amplified horrible news stories, we've lost a lot of the personal connection that led to the friendships and amazing relationships that I have with people I've met online, from the BBS days, to Usenet, to early bloggers back in the late '90s. Friendships and relationships that continue today. My favorite social media these days is email and private slack channels and other side channels that involve those same people.

But as I gazed through Twitter and Facebook on Monday morning, what I saw was the same story repeated hundreds of time, the same people linking to different version of the stories, each of which was designed to create more and more anxiety in the reader, more and more clicks, more and more "oh my god, I have to read more".

Flutterby™! : Thoughts on social media and politics 2017-01-31 17:43:23.491303+00

I feel like the rise of FaceGoogleMyBookPlusSpace is one of the reasons I no longer blog as much as I used to. So much is now locked up in the GoogleMyFacePlusSpaceBook silo, so many people think of MyFaceGoogleSpaceBookPlus as the Internet, that it just seems … pointless … to blog on my own little insignificant corner of it. Nearly everybody reads everything on FaceGoogleMyPlusSpaceBook.

I have to shake that out of my system.

It's been in the last year or so that I've realized that some of my friends use FaceGoogleMyBookPlusSpace to rant; to get it all out of their system; to shout at the tide to stop coming in. I just wish others would realize the same thing—that a lot of the craziness and anxiety and “news” being posted is just letting off steam and it doesn't require a reply (not that I'm perfect in this—I too succumb to the occasional craziness on FaceGoogleMyPlusSpaceBook much to my dismay).

Bunny was right—she had a MyFaceGoogleBookPlusSpace account for all of six hours before she realized the horror to come. And I keep having to remind myself—the map is not the territory.

Thursday, February 02, 2017

It only takes 33 bits of information to identify a single person in the world

Speaking of FaceGoogleMyBookPlusSpace, this was quoted in one of the comments on Flutterby:

The surest way to discourage conversations is to enable likes/favorites and retweets/reblogs. These inarticulate gestures barely qualify as social. They are literally the least amount of social interaction you can have with someone. Press a button, done. Much social, wow. They are the form letters of social networks. No personal response is required. To whom it may concern: click. I would've traded one hundred likes for one person taking the small amount of time and effort to personally reply with "I like your tweet." When my tweets got likes but no replies, it was still a very empty experience for me. It still felt like I was tweeting into the void.

What's Wrong With Twitter

While “likes” might be socially meaningless, they might also be quite dangerous as highlighted here:

Kosinski and his team tirelessly refined their models. In 2012, Kosinski proved that on the basis of an average of 68 Facebook "likes" by a user, it was possible to predict their skin color (with 95 percent accuracy), their sexual orientation (88 percent accuracy), and their affiliation to the Democratic or Republican party (85 percent). But it didn't stop there. Intelligence, religious affiliation, as well as alcohol, cigarette and drug use, could all be determined. From the data it was even possible to deduce whether someone's parents were divorced.

The strength of their modeling was illustrated by how well it could predict a subject's answers. Kosinski continued to work on the models incessantly: before long, he was able to evaluate a person better than the average work colleague, merely on the basis of ten Facebook "likes." Seventy "likes" were enough to outdo what a person's friends knew, 150 what their parents knew, and 300 "likes" what their partner knew. More "likes" could even surpass what a person thought they knew about themselves.

Via Hacker News, The Data That Turned the World Upside Down

Oh, and those online quizes that often show up on FaceGoogleMyBookPlusSpace? Yeah, they work just like “likes” in pinning you down (as described in the “World Upside Down” article).

I'm just saying …

Sunday, February 05, 2017

“Ever wonder why the American public got behind the idea of mandatory minimums and stiff sentences? The Seventies. The Seventies are why!”

Clearly, the only logical thing to happen at this point in the story is for Tupac Shakur’s future stepfather to study acupuncture.

Look, I told you today’s installment gets crazy.

It turns out that Marxist education is not actually helpful in curing drug addiction, so clinic staffer Mutulu Shakur learns acupuncture. He learns from a doctor working at Lincoln Detox, but his education is interrupted when the doctor dies of a heroin overdose. IN THE CLINIC.

But he finds a new teacher and he and others eventually get doctor of acupuncture degrees from the Acupuncture Association of Quebec. Naturally, with a cushy city gig and a growing acupuncture practice, Shakur comes to the same decision you would in such a situation: “I should use this place and its connections to start robbing banks so I can raise money to start a revolution.”

“Also,” he doubtless added, “to pay for a cocaine habit that is already considerable *fnorrrrrrrrkkkkkk*

Reminder: this is all happening at a drug treatment clinic that is fully funded by the tax dollars of the City of New York!

But Shakur has never robbed a bank. He needs an experienced bank robber and oh look here comes Sekou Odinga, formerly of the BLA! Naturally, Shakur and Odinga need some logistical support, and what better place to find this than a bunch of white communist feminists —

Look, I told you this story gets crazy.

Days of Rage | Status 451

When I read this, I thought to myself, how did we ever surive the 60s and 70s? The whole sordid story comes across like a poor Monty Python sketch stretched way too long. Don't believe me?

In 1972, a group called Venceremos, from the Bay Area, literally broke out a black convict named Ronald Beaty during a prison transport so he could train them in guerrilla tactics and lead a revolution.

That was their actual plan. That was their entire actual plan.

Exactly that one bit from South Park, but a bunch of '70s white Bay Area radicals going, 'Token, you're black; you know guerrilla tactics.' (Spoiler: when Beaty got arrested again, he promptly rolled over on the white radicals.)

Days of Rage | Status 451

It goes on and on like that. I found it hilarious, even though it's about a serious topic of political activism gone terrorist. And believe me, the two bits I quoted aren't even all that outrageous. Wait until you read about the Episcopal Church funding a terrorist group out of Puerto Rico.

I wish I was making this up.

It's a long article and it's well worth reading as it points out what might be headed our way. History doesn't repeat, but it does tend to rhyme …

Saturday, February 11, 2017

Exit, stage left. Then right. Then left. Then right …

I was driving south on Dixie Highway when I noticed a slow moving freight train also moving south along the railroad tracks that parallelled the road. I hope I can beat the train to Yamato, I thought. I really don't want to wait for it to pass.

Of course I didn't beat it. Freight trains are freakishly long and it was crossing Yamato by the time I got there. And then it started to slow down. And then it stopped. And sat there. And sat there. Minutes pass. Then it started moving.

North!

WHAT THE XXXX I thought. Sigh. Just listen to the radio until the train passes.

After a few minutes it stopped. And sat there. For many minutes. Then it started moving.

South!

Really?

By this time, the SUV next to me decided it had enough and drove over a three foot median. I thought about it, but I decided against it—the median looked a bit high for my car. Meanhile, the train continued moving south for a few minutes, then it again stopped, sat there for a few minutes, then started moving.

North!

A few more minutes and the whole process repeated itself. The train slowed to a stop, sat there for a few minutes, then started moving. South, if you haven't guessed it by now.

I was amazed at just how fast it got up to speed once it started moving again. A few miles of train pass, and I was able to continue on with my journey.

Total elapsed time: 30 minutes.

Tuesday, February 14, 2017

It was very crowded tonight, as if every couple in Boca Raton decided to eat out because it was a special occasion or even a holiday of some sort

So Bunny wanted to eat out at the Biergarten in downtown Boca Raton for dinner. Hey, I'm always up for German food. Why not? We arrive, and I start driving around the expansive parking lot, looking for a space, any space, to park the car. After driving around for some fifteen minutes or so, Bunny finally saw a sign for public parking leading into a parking garage.

And yes, it had public parking. Two spots, five levels up, marked “Reserved between 8am and 5pm.”

Public parking.

Now all we had to do was find our way back down to ground level. We tried looking for an elevator, but there were no obvious elevatory looking doors to be found. One level down we found an unmarked door in an otherwise featureless wall and I figured why not? It was unlocked.

It lead into an odd shaped corridor. About halfway down was another unmarked door in an otherwise featureless wall in an otherwise featureless odd shaped corridor. It was unlocked. Why not?

I walked through the door and found myself in Biltmore. What the … I thought. This is odd.

“I don't think we want this door,” said Bunny.

“Yeah,” I said, backing through the door and into the oddly shaped corridor. “I don't think we want that door.” I walked down the corridor a bit more, around a three-quarter turn to find yet another unmarked door in an otherwise featureless cul-de-sac. It too, was unlocked.

We walked through, down two and a half steps, along another oddly shaped corridor and found, yes, another unmarked door in an otherwise featureless cul-de-sac. Fortunately for us, this one actually lead us outside the parking garage somewhere in downtown Boca Raton. We started walking and after a bit, found ourselves along Federal Highway a few blocks north of the Biergarten.

Several minutes later, we arrived at our destination. Despite the serious lack of parking, the place itself wasn't crowded and we were able to get seats immediately.

“I smell smoke,” said Bunny almost immediately upon sitting down.

“Smells like pipe smoke. All the windows and doors are open,” I said, looking around the place.

“Must be coming in from the lounge area,” said Bunny. “Pardon me.”

“Yes?”

“Can we sit elsewhere? The smoke is bothering me.”

“You can try over here.”

“Hmmm … no. I can still smell it. I'm sorry, I think we have to go.” Bunny is very sensitive to smoke.

“I'm sorry.”

“Maybe next time,” said Bunny as we left. The Biergarten is in a large shopping center and there were plenty of other restuarants within sight.

“There's an Indian place over there,” I said, pointing to a restaurant a few dozen yards away.

“Let's try it,” said Bunny.

I was a bit fearful as there were throngs of people milling just outside the restaurant. But the place was in a throng of restaurants in this section of the shopping center, so it was hard to tell if the Indian place was crowded or other restaurants were crowded and spilling out. We made our way into the restaurant and it wasn't completely crowded—there were a few empty tables.

And it smelled wonderful!

We stood there, waiting for a maitre d' or a host or a waitron or anybody who worked at the restuarant to notice us. There were plenty of waitrons rushing about, both inside and out, but for some reason, we were invisible. It got rather freaky when I intentionally stepped in front of a passing waitron and he just … appeared to pass through me? Around me? Somehow he ended up on the other side of me and kept on going.

By now, there was a sizable crowd of people waiting just inside the door with us, and just as invisible. None of the staff were paying any of us attention.

After a few minutes of being ignored, Bunny and I left. We decided to try one of the restaurants along Federal Highway that we passed, and that's how we found ourselves walking into Roots Italian Kitchen, a small place nestled between an Irish pub and a Vietnamese grill house. It was crowded, but not so much that we had to wait for a table. The service was professional, friendly and not too slow, not too fast.

And the food?

[A picture of a plate full of food is so cliché.  Why not mix it up a bit with a picture of a post dinner plate?  Who knows?  It could be the next fad!]

Too good to pause long enough to take a picture. Everything was fresh! Even dessert, which we could smell being made. And yes, it was wonderful.

Wow!

And because Bunny and I ended up closing out the place, the owners gave Bunny a long stem rose and a piece of cheesecake, made fresh earlier in the day.

[I swear it felt like a holiday or something.]

It was an amazing find.

All we had to do afterwards was locate the car, parked on the fifth level, in a parking garage, somewhere in downtown Boca Raton.

Friday, February 17, 2017

Bunny and I subject ourselves to the Carbonaro Effect

Bunny and I went to see Michael Carbonaro at the Au-Rene Theater at the Broward Center for the Performing Arts. Carbonaro is a magician known for his television show The Carbonaro Effect, a show in the vein of Candid Camera, where he performs magic tricks on unsuspecting people. We were not entirely sure what to expect for a live performance though.

The opening act was meh (a comedian who laughed at his own jokes, has a website at … um … “drunken … mumble … something dot … com?” Not very memorable) but Carbonaro was great! His magic isn't anything we haven't seen before—mostly standard magical acts (restoring a torn newspaper, some mentalism acts, turning a coin into a gold fish) but it was his presentation that made them work (the torn newspaper done as an example of déjà vu, having a tatoo of an audience member's name on his chest, using a child to color a quarter orange before turning it into a fish).

He also has a wicked, but family friendly, sense of humor that made the two hour show fly by.

And his use of shaving cream was unique. I've never seen that done and frankly, never thought of using it in that way.

Oh, what way? I'm sorry, you'll just have to see the show to see how he transforms shaving cream into something special and unique.

Saturday, February 18, 2017

I don't think we have to worry about the Vice President killing anyone this time around

To your request of my opinion of the manner in which a newspaper should be conducted, so as to be most useful, I should answer, "by restraining it to true facts & sound principles only." Yet I fear such a paper would find few subscribers. It is a melancholy truth, that a suppression of the press could not more compleatly deprive the nation of it's benefits, than is done by it's abandoned prostitution to falsehood. Nothing can now be believed which is seen in a newspaper.

Via Hacker News, Amendment I (Speech and Press): Thomas Jefferson to John Norvell

1807!

We've been worried about “fake news” since 1807!

And yet, somehow, we've survived.

As I've said, history doesn't repeat as much as rhyme

Monday, February 27, 2017

An implementation of coroutines for C

I use coroutines in Lua and I do miss having them in C. Sure, there are a number of coroutine implementations for C, but they all generally fall into two camps:

  1. they rely upon setjmp()/longjmp(), which is problematic because it is seriously abusing those two functions (which exist to give C a form of exception) and
  2. they rely upon ucontext.h, which has been deprecated by POSIX (and the API is a bit clunky for what I want to do)

But really, I just wanted to write my own implementation, because.

So the idea is to write some code that works like:

extern int       coroutine_create(coroutine__s **pcp,coroutine_function__f fun);
extern uintptr_t coroutine_yield (coroutine__s *co,uintptr_t value);
extern int       coroutine_free  (coroutine__s *co);

uintptr_t sub_task(coroutine__s *self,uintptr_t value) /* [1] */
{
  value = coroutine_yield(self,value); /* [2] */
	/* [3] */
  value = coroutine_yield(self,value); /* [4] */
	/* [5] */
  value = coroutine_yield(self,value); /* [6] */
	/* [7] */
  return value;
}

void main_task(void)
{
  coroutine__s *co;
  uintptr_t     v;

  coroutine_create(&co,sub_task); /* [8] magic here! */
	/* [ 9] */
  v = coroutine_yield(co,v); /* [10] */
	/* [11] */
  v = coroutine_yield(co,v); /* [12] */
	/* [13] */
  v = coroutine_yield(co,v); /* [14] */
	/* [15] */
  v = coroutine_yield(co,v); /* [16] */
	/* [17] */
  v = coroutine_yield(co,v); /* [18] */
	/* [19] */
  coroutine_free(co);
}

It's a contrived example that one would not use coroutines for, but it does serve to illustrate the issue that popped up while developing the code for this. And I"m going to start coroutine_yield(), as that does the actual switching of the stack to another “unit of execution” (note: this code is for the Intel 32-bit x86 architecture):

%assign	P_param		8 + 16
%assign	P_co		4 + 16

coroutine_yield32:
		push	ebp			; save callee saved registers
		push	ebx
		push	esi
		push	edi

		mov	eax,[esp + P_param]	; return parameter
		mov	edx,[esp + P_co]	; get stack to yield to
		xchg	esp,[edx]		; YIELD!

		pop	edi			; retore registers
		pop	esi
		pop	ebx
		pop	ebp
		ret

Since this is interfacing with C, I have to use the x86 32-bit calling convention (and for the record, I'm using the Intel syntax, not the AT&T syntax). Parameters are passed on the stack, and the callee (in this case, coroutine_yield32()) needs to save certain registers.

Normally, when switching a “unit of execution” such as a thread or process, one needs to save the entire CPU state. But I can cheat here—I'm calling a function, so I can skip saving registers the callee can use (read: trash), which saves a bit of time in the switching. So that's what's going on here. I have the registers that the C calling convention require saving, putting P_param into EAX to return it, get the pointer to the stack we're switching to and at the line that states “YIELD!” we switch the “units of execution.” The final five instructions are running under the coroutine, where we pull the registers saved and return into our now running coroutine.

But now here's the problem—this assumes the stack for the coroutine is properly initialized. Refering back to the C code, line 12 will yield back to line 3 and it works there because everything has been set up. But line 10 is problematic—that's the first switching of execution, and we haven't actually started sub_task(), which is expecting arguments already existing on the stack. Furthermore, for the C calling convention to work, we need to actually call sub_task(). I really don't want to mess up coroutine_yield() with special code to handle that case (that's just … ugly). I want to handle this cleanly.

So the first coroutine_yield() needs to call into (as per our example) sub_task(). The code for that looks like:

		push	eax		; return from coroutine_yield
		push	<coroutine self parameter>
		call	<our function>

Setting aside where we'll get the coroutine self paramter and the address for the function, we just need to ensure that our first call to coroutine_yield() resumes to this code fragment. And we can do that in the coroutine_create()—initialize the stack of the coroutine properly such that that happens. So let's name our fragment:

start_it_up:	push	eax		; return from coroutine_yield
		push	<coroutine self parameter>
		call	<our function>

and we can initialize the coroutine stack:

		mov	dword [ecx + 16],start_it_up
		xor	eax,eax
		mov	[ecx + 8],eax		; "saved" EBX
		mov	[ecx + 4],eax		; "saved" ESI
		mov	[ecx + 0],eax		; "saved" EDI
		mov	[edx],ecx		

For now, just accept that we have the new coroutine stack pointer in ECX (the final version uses ECX but I don't want to spoil things too much at this point). This populates the stack with the values needed for coroutine_yield() to fall into our code fragment, which is techincally a thunk. Now we turn our attention to saving the data required for our new thunk to call our function.

Now, on the 32-bit x86, a classical stack frame will look something like this:

Typical stack frame
offset from EBPcontents
12parameter 2
8parameter 1
4return address
0previous stack frame address (previous EBP)
-4local variable 1
-8local variable 2

The thunk doesn't need paramaters, nor does it need the return address or even a previous stack frame. We just need some local variables. So set up the stack like:

Coroutine stack contents
EBP of coroutine
coroutine pointer
address of sub_task()
address of start_it_up
stack frame for start_it_up
“saved” EBX
“saved” ESI
ESP of coroutine“saved” EDI

We can fix start_it_up:

%assign L_co		-4
%assign L_fun		-8

start_it_up:	push	eax
		push	dword [ebp + L_co]
		call	[ebp + L_fun]

And with our C example, this will get us to through line 15. At line 16 we have an issue, where we resume at line 7 and our coroutine now returns. Well, we did call it, so we get its return value back to our thunk. Well, the easy thing here is to just yield it back. And since we have the stack set for a call, we can save some instructions:

%assign L_co		-4
%assign L_fun		-8
%assign C_param		-12

start_it_up:	push	eax
		push	dword [ebp + L_co]
		call	[ebp + L_fun]

		mov	ebp + C_param],eax
		call	coroutine_yield32

And that will get us to line 18. But now we no longer have a running coroutine and we've run off the bottom of our thunk. There are two options here:

  1. call (or JMP) to abort();
  2. just yield the value back.

Both are valid responses, but I like the second one better as you might not know if a coroutine has finished or not. And that just requires one more instruction to start_it_up:

%assign L_co		-4
%assign L_fun		-8
%assign C_param		-12

start_it_up:	push	eax
		push	dword [ebp + L_co]
		call	[ebp + L_fun]

do_it_again:	mov	ebp + C_param],eax
		call	coroutine_yield32
		jmp	do_it_again

And there you go—coroutines for C.

The 64-bit version is pretty much the same—just that the registers needed to be saves are different, and the parameters are passed in registers instead of the stack, but overall, it's the same approach.

Should this code be used in production? I don't know. It works for Linux (both 32 and 64 bit versions) and for Mac OS-X (64 bit version). And while you can use setjmp()/longjmp(), you CANNOT do so across coroutine stacks (within the same coroutine—fine). And this has only been tested for C, NOT for C++. I don't know enough about C++ (or its calling conventions or exception handling) to recommend this for that.

But really that's all there is to it for coroutines in C.

And the final question—what are coroutines good for? That's for another post.


The Lego Batman Movie

I seriously did not expect “The Lego Batman Movie” to be a romantic comedy. A somewhat twisted romantic comedy, but a romantic comedy none-the-less. At the same time, it's a good Batman movie, really getting the notion of his character—he is the Batman, and Bruce Wayne is the mask he wears. It also showcases the conflict between him and Superman way better than “Batman v Superman: Dawn of Justice (way better—skip that movie and watch this twice).

Plot wise, there isn't much here you already haven't seen before. The Joker wants to take over Gotham and Batman has to stop him, while learning a valuable life lesson. But you aren't going to watch this for the plot, but for the humor and character interactions. Oh, and the meta humor. Alfred: “Sir, I have seen you go through similar phases in 2016 and 2012 and 2008 and 2005 and 1997 and 1995 and 1992 and 1989 and that wierd one in 1966.” Batman: “I have aged phenomenally.” Great stuff.

And lest I forget to mention it, Batman's Rogue Gallery, including Condiment King (yes, Bunny, he really is a Batman villian) show up to help ruin Batman's day.

I was also surprised at the cameos—and no, I don't mean actors who supplied voices, but actual character cameos that showed up for the final act of the movie. That I did not see, and it was most entertaining.

So come for the comedy, stay for the shark repllent Batspray. You won't be disappointed.

Friday, March 17, 2017

Brain Candy

Adam Savage, of Mythbusters fame, is yet again on tour. Only his co-host is not Jamie Hyneman (who no longer wishes to tour and is on to other things), but educator Michael Stevens. Their show—Brain Candy Live.

Bunny and I saw them at The Parker Playhouse in Ft. Lauderdale, and it was an amazing show. Light and breezy, they presented a lot of scientific concepts that one might not even think about, presented in an entertaining and humorous way. So entertaining that it did not feel like two hours.

Monday, April 17, 2017

Notes on the hundredth overheard conversation about an expired warranty

“Hello?”

“Hello?”

“Hello‽”

“Hello there, sir. This is the Chevrolet Division of General Motors about your Chevy Impala. Do you still own it?”

“Sigh. Yes.”

“And about how many miles are on it?”

“About 40,000.”

“Our records indicate that your factory warranty has expired.”

“Yes, you and a dozen other companies call me weekly to remind me of that fact.”

“So you are aware that it's expired, good. Can we transfer you to a specialist to talk about your options?”

“Sigh. Yes.”

“Okay, hold on sir.”

“Holding on by my finger tips.”

“Hello, sir?”

“I'm still here.”

“Could you please hold?”

“Sure, I have a few minutes before my fingers lose their grip and I plummet to my death.”

“Thank you. Um … um … what? Oh … there … but … Can we call you back? I'm currently having issues dealing with this call.”

“Sigh. Okay.”

“It will only be a few minutes.”

“I'm sure it will.”

“Thank you for calling us about your warranty needs.”

“I didn't call—”

Click.

Tuesday, April 18, 2017

We're not all dummies at the office

Edvard has some new friends:

[Where are we?  Why is it so hot?  And why are we in this basket?]

They were just hanging out in the conference room at the Ft. Lauderdale Office of the Corporation. On the up side, they're pretty quiet. On the down side, they're no showroom dummies.


Welcome back, Bunny

Because it's the anniversary of our first meeting face-to-face (Bunny and I met online), I thought I would take Bunny to Roots Italian Kitchen, the place we stumbled into on St. Valentine's Day. Fortunately for us, we were able to find parking outside the non-Euclidian, Escheresque parking garage from the 8th Dimension sitting smack-dab in downtown Boca Raton.

“Welcome back! We are so glad you have returned to dine with us!” the owner said to us as soon as we entered.

Welcome back? I'm thinking two things at the same time. One, they must not get many customers to recognize us after nine weeks. Two, they must really know how to run a restaurant.

Not only did we end up with the same waiter, he too, remembered us from nine weeks ago!

[I came close to licking the bowl clean.  And this was just the salad!  Yes, the food is that good.  And I'm still hoping pictures of empty dinner plates becomes a thing.]

The Chef even came out and discussed the food he was about to serve us. This place is insanely good.

I'm really glad we found this place.

Thursday, May 18, 2017

Swimming in gold

Batman has the Batcave, Superman has his Fortress of Solitude, and Scrooge McDuck has his money bin. For 70 years, the maternal uncle of Disney’s Donald Duck has been portrayed as a thrifty—some might say miserly presence in cartoons and comics, a waterfowl who has such deep affection for his fortune that he enjoys diving into his piles of gold and luxuriating in them.

It’s a rather gross display of money worship, but is it practical? Can anyone, including an anthropomorphic Pekin duck, actually swim in their own money, or would diving headfirst into a pile of metal result only in catastrophic injury?

Via GoogleMyFacePlusSpaceBook, Fact Check: A Physicist Weighs In On Whether Scrooge McDuck Could Actually Swim in a Pool of Gold Coins | Mental Floss

Sadly, no. Even Carl Barks knew this and on several occasions had Scrooge mention it was a trick.

[“Unca Scrooge, how come you dived all the way from that bluff, and you didn't get hurt?”—Huey, Dewey and Louie] [“Well, I'll admit—it's a trick!”—Uncle Scrooge]

But it's still fun to fantasize about swimming in three cubic acres of gold coins though.

Saturday, May 20, 2017

For those times when downloading over the Internet is too slow

Andrew Tanenbaum has been quoted as saying, “Never underestimate the bandwidth of a station wagon full of tapes hurtling down the highway.” And yes, if you have a large amount of data to transfer, sometimes it is better to physically move it than transfer it over the Intarwebs.

And if you have a metric buttload of data?

AWS Snowmobile is an Exabyte- scale data transfer service used to move extremely large amounts of data to AWS. You can transfer up to 100PB per Snowmobile, a 45-foot long ruggedized shipping container, pulled by a semi-trailer truck. Snowmobile makes it easy to move massive volumes of data to the cloud, including video libraries, image repositories, or even a complete data center migration. Transferring data with Snowmobile is secure, fast and cost effective.

Via Lobster s, AWS Snowmobile – Massive Exabyte-Scale Data Transfer Service

And for the record, a petabyte (PB) is 1,125,899,906,842,624 bytes which I think is the expected size of the next version of Windows.

Wednesday, May 24, 2017

I'm sorry, but I'm not fond of kids

From
"XXXXXX XXXXX"<XXXXXXXXXXXXXXXX>
To
undisclosed-recipients:;
Subject
Re: Hello Dear
Date
Wed, 24 May 2017 22:03:12 +0300

Hello Dear,

How are you doing today? am XXXXXX and i must tell you how delighted i am to send you this mail. Am a single parent from Chicago,and i hope you don't get angry at my little note, I have been a widower for the last couple of years, After the death of my wife some years ago, i decided to move on in search of a partner.And I hope we can get to know more about each other! A friend of mine found his soul-mate through this medium. I like us to get acquainted via the exchange of mails as it takes time for people to compose an email and say a little about themselves. I have a son and a Bulmastiff as family and will like to know more about. Attached with this mail are my pictures for your perusal. I look forward to reading your mail. Here is my email ( XXXXXXXXXXXXXXXXXXXX ) God bless and have a nice day.

Regards XXXXXX

This is perhaps the oddest spam I've received. Yes, it came with two pictures of “XXXXXX” and they could be the same person, although it's hard to tell. And yes, one of the them does include a picture of “XXXXXX” and his son.

Usually, email of this type is a woman trying to start a relationship, but this is the first time I've received one from a man (not that there's anything wrong with that). It seems so sincere (especially with the two pictures), but I have to wonder, if “XXXXXX” actually sent this, why he would spam random people? Or is this a prank by someone “XXXXXX” knows?

Or an actual spammer trying to validate an email address?

Odd.

Very odd.

Friday, June 02, 2017

Notes about an overheard conversation while driving to lunch

“Oh my! That's so pretty! I wonder what it is?”

“A tree?”

“I know, silly. But what is its name?”

“Frank?”

“No, no. A lot of streets down here are named after it.”

“NW 25th Street?”

Must … control … fist … of … death …

Thursday, June 08, 2017

You know, giving the customer unfettered access to a device that can scan credit cards might not be a good idea

A few cow-orkers and I are at Chili's for lunch and I'm disappointed to see they still have those insipid Ziosk things on the tables. I personally can't stand them (and it seems like I'm not alone in that) and I'm heartened to see the waitron remove the thing from our table.

Lunch passes. We're waiting for our waitron to bring the bill. And waiting. We wait some more. It becomes apparent that our waitron has been abducted so one of my fellow cow-orkers grabs the Ziosk thing so we can pay our bill.

Only the Ziosk thing has crashed.

We flag down another waitron to explain our dilemma. The waitron grabs the Ziosk thing, rips the battery out and snaps it back into place. “It's the only way to reset the thing.”

A few minutes go by and we attempt to pay our check yet again. And yet again, the Ziosk thing crashes.

We flag another waitron down and explain our dilemma. This time, the waitron retakes our order so that the check can be split four ways. And here I thought it was supposed to save time and be an easy experience.

Friday, June 09, 2017

I can't decide if this is an inspired or insipid idea

I've just come across what has to be the oddest feature I've ever seen on a laptop to date—a physical on/off switch for the wifi connection.

Not one for the camera, mind you—the wifi!

I can only guess it's there to keep those wily hackers off the computer.

Saturday, June 10, 2017

Perhaps this time, there is a difference

First it was CGP Grey and his video “Humans Need Not Apply.” Now it's Kurzgesagt and their video, “The Rise of the Machines.”

There's not much more I can add to this but … um … I—­for—­one—­welcome—­our—­new—­robotic—­overlords.

Tuesday, July 04, 2017

Be careful, for tomorrow could be Sorrowing Day—the 5th of July

My friend Hoade sent me several stereoscopic pictures (and a viewer) for Christmas. One struck a chord with me:

[For some reason, this reminds me of Bunny and her brother.  I don't know why ...]

(and yes, I'm trying to give you, the reader, an impression of viewing a stereoscopic picture on the Intarwebs)

On the back is written:

No 1128 (b). SORROWING—JULY 5.

This is the same little boy who started out to make so much noise and smoke yesterday celebrating the Fourth. In the United States in one year, according to the figures gathered by experts, there were 168 boys and men and a few girls, too, who, like this boy, started out celebrate [sic], and wound up by leaving sorrowing friends, for that many were killed by explosions or died from lockjaw as the result of celebrating just one July 4th; and besides that, there were hundreds upon hundreds—something like 7,000 boys and men and girls maimed and crippled in that same celebration. Most of those who died were killed by lockjaw, one of the most terrible of diseases.

Perhaps five whole regiments of young men and boys are killed or injured every Fourth of July by fireworks and revolvers and mostly by toy pistols that shoot caps and torpedoes—for these cause most of the lockjaw.

Is it worth while to celebrate that way, and kill and maim in a celebration so many whose lives are useful to their country? Would it not be better to leave the fireworks to those skilled in handling them, and instead of devoting July 4th to fun, to make it a day of patriotism, to teach to all Americans what the Declaration of Independence means?

No year is given on that particular picture, but some of the others have “1925” so I guess they are all from about the same time period. And given the number of times “lockjaw was mentioned, it appears it was a grave concern at the time.

Nowadays, you have to concern yourself with burnt hair from overzealous neighbors.

Be safe, and remember, there's a reason professionals exist.


Oh make a little smoke, make a little fire, get BBQ tonight! Get BBQ tonight!

Last week I decided I wanted to do barbecue ribs for dinner tonight. And by “barbecue” I mean “barbecue,” with real smoke and everthing. Bunny got two racks of ribs, and yesterday, I spent some time doing some prep work.

First, we need some chunks of hardwood to produce the smoke. We have a bag firewood Bunny brought some time ago, so I grabbed half a log, and on the table saw, split it in half, and then cut it into four chunks.

[It's log, it's log,/it's big, it's heavy, it's wood./It's log, it's log, it's better than bad, it's good.] [It's log!  Now with chunks!  Fun for the whole family!]

I wanted to use the bandsaw, but unfortunately, the tire on the lower wheel disintegrated, rendering the bandsaw temporarily out of commission.

[Thank God it was just the tire!  The sounds and vibrations it made just before it gave out was horrendous!]

I can't say I enjoyed using the table saw for this, but using the The Gripper for splitting the log, and the cross-cut sled for the chunks certainly helped to keep my fingers safe. But for wood sold to be used in a fire, it was very nice wood.

[This wood is good enough for a wood working project.]

Then, just before bed, I spread some yellow mustard over the ribs—this will help the rub to stick. Then, the rub (brown sugar, salt, many, many spices—there are plenty of recipies out on the Intarwebs), then wrapped the ribs in foil and placed into the refrigerator overnight.

[Don't ask me what's in the rub.  I'd have to marry you, or kill you, and I'm already spoken for.] [I don't think you need to go overboard with the mustard.  I just used plain old yellow mustard here.  The rub has plenty of spices.] [Don't be stingy on the rub.  Go wild!  Coat those suckers!]

Around noon today, I started the barbecue. I don't have a smoker, but I do have a classic Weber Kettle Grill, which can do the job in a pinch. The method I'm using is the “snake method.” You arrange charcoal around the edge of the grill:

[It's just like playing with blocks!  Only blocks that leave your hands black as coal.  But whatever you do, don't play with the grey blocks.  Trust me on this.]

I placed one layer two bricks deep, then another layer on top that was two bricks deep. On top of that, the wood chunks are placed to provide the smoke. And yes, three chunks was more than enough to impart a smokey flavor to the ribs. You only need a few hot coals placed at one end to start things off. Over time, the coals will slowly catch fire down the snake and if you get it just right, you won't have to add any coals at all (the above lasted 4½ hours, which was enough to cook the ribs—more on that below).

I do recommend using a starter chimney:

[It's worth using, even if you have to put up with Dick Van Dyke and his awful “that is NOT a Cockney accent” Cockney accent.]

All you do is spread some vegetable oil on some newspaper (makes it burn longer), wad it up, place it in the bottom of the chimney and light it on fire. Then walk away. Just walk away. It'll light the coals and when they're starting to ash over, pour them out at one end of the snake.

Once that's done, add a foil pan with hot water (I placed the pan on the level with the coals, then used an electric kettle to boil the water and pour it into the pan). This not only helps with the smoking, but it also helps to regulate the heat during cooking. Place the grill grate on the grill, and slap those ribs on it, as far away from the heat as possible.

[You can see the pan of water just below the ribs. That thing in the upper left portion is a digital thermometer.] [If you look closely, you can see the snake is half burned, along with the chunks of wood.  They did their job.] [Lip-smaking barbecue-ribby goodness.  These are ready to come off the grill!]

Place the lid on, with the hood vents placed as far away from the heat as possible. This forces the smoke across the ribs. Also, you'll want to adjust the vents on the top and bottom to keep the tempurature as close to 250°F as possible (220° would be ideal). This may require some fiddling until you get it right. I checked on the them about every hour for the first three hours, then every 30 minutes thereafter. You can tell the ribs are done by sliding some tongs along the length of the ribs about half-way, and lifing them up. If the meat “cracks” then they're done. Slather any barbecue sauce you want on them, place the lid back on for another 5 to 10 minutes, then pull them off.

[That's our largest cutting board.  It's also our heaviest cutting board.  It takes a small crew of men to carry it around.]

All that's left was to carve them up and eat.

[Home barbecued ribs and home made potato salad (totally---even the mayonnaise is home made).  How can you go wrong?]

As a first-time experiment, they were good, but there are a few things I will change for next time. First, the ribs were tender, but not “fall-off-the-ribs” tender, and I think that's because I left the rub on just too long. I think I would go no shorter than an hour, no longer than two, before cooking. Second, our grill was barely large enough to handle two racks of ribs (and I suspect these were larger racks—between the two of us, we only ate about 2/3 of a single rack), so next time, one rack.

Other than that, I think this was a success.

Monday, August 14, 2017

Extreme taxidermy, Ormond Beach, Florida edition

Bunny and I are on our way to Brevard, North Carolina (like we do every year) and our primary goal this year is to view the solar eclipse. Unfortunately, the weather is looking a bit grim in Brevard as it's expected to be raining next Monday, but who knows? Perhaps it will clear up by then.

Our first stop to refuel was in Ormond Beach, Florida, where we saw this beautiful example of classic American kitch:

[Here, have a stuffed alligator wearing an American flag somewhere in the Deep South. You are welcome.]

How did we ever survive not seeing this?


Pecan Encrusted Brie, is there nothing you can't do?

We have finally arrived!

[It's like our home away from home, only a bit more expensive.]

We made excellent time this trip, having taken a bit over eleven hours to drive the 750 miles. As usual, we're staying at The Red House Inn.

And as usual when we arrive on a not-Tuesday day of the week, we have dinner at The Square Root, an excellent restaurant tucked away in an alley in downtown Brevard (and who would have thought that Brevard was large enough to have an alley, much less one large enough to hide a restaurant?).

[I think they wanted to call the place 1.732050807568877, but that was just too long to use on a sign.  Also, those roots aren't square.]

We just can't get enough of the Pecan Encrusted Brie (“Delicious Fried Brie Served With Granny Smith Apples and Crackers With a Frangelico Praline Sauce”). Mmmmmmmmmm … Pecan Encrusted Brie …


Extreme white squirrels, Brevard edition

I can't quite place my finger on it, but I think the local white squirrel population is planning something.

[The alien white squirrel from Scratazon is here to abduct all native nut life forms.]

Tuesday, August 15, 2017

The warping of space and time

Saturday, I spent ten hours at my high school's 30 year reunion (which I didn't blog about because other than the participants, who wants to read about a bunch of people you don't know? Also, what happens at Las Vegas stays at Las Vegas). Sunday was the every-other-week D&D game (which I don't blog about because other than the participants, who wants to read about a bunch of people you don't know pretending to slay dragons? Especially when said players don't slay the dragon?). Monday was an eleven hour drive to Brevard (which, unlike the previous two days, I did blog about because who doesn't want to see a stuffed alligator wearing an American flag?). It all finally caught up with me. I went to bed early (well, early for me). I reluctantly got up late (well, still early for me, but given the time I went to bed, it was late).

[The view from our pourch. Real trees! Shade! And we don't have to worry about alligators as there are none around here for miles! But there are bears ...]

Bunny and I had lunch at the Pisgah Fish Camp (and here I would include a link to the website, but apparently, The Pisgah Fish Camp is so busy serving up good food, they don't have time for a pesky website). But while the experience there was pretty typical (order and eat good food—seriously, the fish there is good) the experience getting there is anything but. It's odd, but space and time are warped here in Brevard. It seemed like a long drive to the Pisgah Fish Camp (and on one of the walls is a quote from the founder—“people called me crazy and said no one would drive this far out of Brevard for a meal.”) and yet—it was only four miles! Heck, Bunny and I drive farther than that just to our nearest IHOP, and that doesn't seem all that far for us. But here? It seemed like a long drive.

Traffic here is also weird. There is much less traffic here than back in Lower Sheol. And yet, it's still annoying. I'll pull up to a clear intersection, and just as I'm about to turn, an enevitable train of cars just moseying along the road materializes out of nowhere, too close together to make a safe turn, far enough apart to trick you into thinking you can make a safe turn, but no, you can't.


The alien white squirrels really are trying to take over

I was trying out a new search engine, Million Short (which allows you to easily exclude the top N websites) and while trying it out, I came across this:

There are a few towns in the US, though, that have very high numbers of white squirrels. This could be for a few reasons. First, predators in towns tend to be low. This cancels out the negative selection against the white morph. Sometimes in towns, a few neighbors will also select against the normal coloration of eastern grey squirrel. Yes, that happens. After a few generations, all you get are whites, and they can spread to the rest of the town! Fascinating!

The Big 5 White Squirrel Towns

The White and Albino Squirrel Phenomenon + New US Maps!

It's interesting that there are quite a few “Home of the White Squirrel” across the country.

Wednesday, August 16, 2017

Extreme portraiture, Brevard edition

A lot of restaurants here in Brevard display art from local artists, and Marco Trattoria is no exception. Hanging on the wall above our table was this lovely sculpture:

[Deep down, you know he's judging you on your choice of dessert, despite not ordering one.]

Thursday, August 17, 2017

Thankfully I'm in North Carolina, where all I have to worry about are alien white squirrels

The department tweeted this week a map of where folks are said to have spotted lizard people in the past, out of concern that paranormal activity might be on the rise during the eclipse. "Regarding possible paranormal activity potentially occurring during the #SolarEclipse2017. As always, if you see something, say something," the department tweeted alongside the graphic, with tongue possibly in cheek (though who knows).

Via FaceGoogleLinkedMyPlusInSpaceBook, THE SOLAR ECLIPSE COULD BRING LIZARD PEOPLE, SOUTH CAROLINA EMERGENCY OFFICIALS WARN (REALLY)

Man, the crazy things people believe about this eclipse …


Extreme white squirrels, Brevard edition part deux

Bunny and I were in downtown Brevard on our way to eat at Rocky's Grill and Soda Shop when we came across a white squirrel:

[The white squirrel population here is quite large.]

I'm beginning to sense a theme here …


“Dude! You don't remember the Harmonic Convergence of 1987?”

After lunch, Bunny and I headed into the Penny Lane Exchange to pick up some new Hawaiian shirts. We entered, and the proprietor asked us if we were in town for the upcoming eclipse. We answered affirmatively, he then went on to ask if we recalled the Harmonic Convergence of 1987 and the emergence of a new paradigm of peace and harmony (no, really, it was a thing, thirty years ago today). Sadly, we had to inform him that no, we did not recall the Harmonic Convergence of 1987 but we really liked the shirts.

I have to remind myself that Brevard is in the shadow of Berkeley of the East.


Extreme globe, Brevard edition

Bunny and I stopped off at an antique store and there, I saw this really cool globe for sale:

[It was tempting. Oh so tempting. But I have to ask myself, “Self, just where are you going to put it?”]

The ranged rings aren't printed on the globe—it's a clear plastic hemisphere that can be repositioned. And because I was curious, I placed the center point on Korea. Not North Korea mind you, Korea! The globe is so old that the Korean peninsula is Korea.

And that clear plastic hemisphere … I have never seen such a feature on a globe before. And it might have been quite progressive at the time, for it has both miles and kilometers marked off.

A very cool globe.

Friday, August 18, 2017

Meat and conversation

Bunny and I decided to try Magpie Meat & Three, a restaurant in the industrial section of Brevard.

[This used to be on the wrong side of the tracks, until the tracks were removed. Now it's just the industrial side of the town.]

It wasn't immediately obvious where it was located, but we eventually asked and learned that it was behind the Squatch Bikes & Brew, a combination bike store and bar.

Seriously.

But like most food places around here, it's worth it.

[If they ever wanted to expand, they could always go for a loft approach.]

They also have a large selection of craft beers on tap, for those that are into that sort of thing.

[I suspect people don't drink the Stone Ruination DIPA for the taste.]

Nothing like good North Carolina BBQ for lunch.


Extreme plates, Brevard edition

As we were driving around, it looked like an interesting place. So we stopped by Mud Daubber's of Brevard. On the outside, it's a ramshackle building that looks like a stiff breeze would knock it over. On the inside is an incredible collection of pottery, all made locally.

One piece caught my eye—a plate:

[This is giving those 19th Century illustrators a serious run for their money.]

The level of detail is incredible and upon asking, I learned that the artist pressed real leaves into the clay before firing. The leaves burn away, leaving an impression that is then enhanced, giving it this beautiful 19TH Century illustrative look.

It's just an incredible piece of work.


I'm older than these are! How can they be antiques?

Another store we stopped at was the Shabby Shack Mall (no link for them—they only have a page on MyFaceGoogleLinkedBookPlusInSpace, which makes it nearly impossible for me to link to—damn those proprietary walled gardens!). It's supposedly an antique mall, but then they have stuff like this:

[A plastic Madonna doll, how appropriate.]

These aren't antiques! They're from a 1990 movie for crying out loud! They're younger than I am!

Sigh.

They also had this sign, which both Bunny and I found amusing:

[Those bullet holes really drive the point home.]

“Hi, I'm Sean. And I'm a globaholic.”

I couldn't help myself—I got the globe.

[I failed my “save vs. globe” throw.  Also, my iPhone identified this as a selfie—how scary is that?]

How could I not? It came with a geometrical plastic hemisphere!

[Lines, grid marks and numbers! Oh my!]

How many globes have you seen with a geometrical plastic hemisphere?

Saturday, August 19, 2017

Extreme barshopping, Brevard edition

Bunny and I stepped into DD Bullwinkels Outdoors (which used to be next door to Rocky's Grill and Soda Shop but moved about a block away in the former Belk store on Main St.) so Bunny could pick up an Eclipse 2017 shirt.

Apparently, the big thing in Brevard is “barshopping,” where a store will have an indoor bar:

[Sadly, they do not have Stone Ruination DIPA on tap or in bottles.]

This isn't the first store we've seen that does this. It's just the first one with an impressive setup.


Extreme reminders, Brevard edition

I found this sign at Underground Storage (yet another business here who's web presence is on MyFaceGoogleLinkedBookPlusInSpace making it hard to link to):

[I drove 760 miles north from Ft. Lauderdale and what happens? I'm told to keep Ft. Lauderdale clean.]

I found it ironic (which I don't think is actually “ironic”, ironically enough).

Sunday, August 20, 2017

The eclipse is not the only thing to see on Monday

In less than two weeks, millions of Americans will witness day turn to night as the moon blocks out the light from the sun, but there is more to the celestial spectacle than many think.

While all attention will be on the sun and the moon, many people's surroundings will change during the brief moments of totality.

Subtle differences may be noticed in areas that only experience a partial solar eclipse, but much bigger changes will take place along the narrow path from Oregon to South Carolina that see a total eclipse of the sun.

Via GoogleLinkedMyFaceInSpaceBookPlus, 5 surprising effects the total solar eclipse will have besides darkness

I've recently heard about the “shadow bands” (#5 on the list), but it never occurred to me that Mercury would be visible.


Planning for a shadow event

In the parking lot of the Red House Inn was an odd sight indeed:

[Mama always told me not to look into the eyes of the sun. But mama, that's where the fun is.]

A chap from England was set up in the parking lot, testing out his small telescope, with sun filters. We chatted a bit, and he let me look at the sun through his telescope. It was cool seeing the activity on the sun, a few sunspots and even a solar flare or two.

I attempted to get a picture of the sun with the iPhone, but it had trouble focusing through the lens.


Extreme shoes, Brevard edition

[Dorothy Gale of Kansas refused to comment.]

Monday, August 21, 2017

IT HAS BEGUN!

It's starting. People are moving. Things are happening!

[Take us to your nut storage centers!]

IT'S THE INVASION OF THE ALIEN WHITE SQUIRRELS!

RUN!


Rocking the eclipse

[The future's so bright, I gotta wear shades.]

O'br/ hpy ,u [rto; drmdsyobr dim ///

I should take those off before typing.

I've got my peril sensitive sunglasses, courtesy of the fine folks at the Red House Inn, and so far the eclipse is impressive. I've tried taking photographs, but even when I put my peril sensitive sunglasses over the camera, all I get is a bright blob that maybe, if you squint hard enough, looks kind of like a sun going through an eclipse. But that could very well be due to squinting too hard.

So I'm just sitting back and enjoying the event.

Bunny and I decided to stay put at the Red House Inn. We can see the eclipse just fine from here, and it avoided the craziness of downtown Brevard. Traffic was horrendous earlier today (we were out getting lunch) and we ended up driving along back roads to avoid the heavy traffic (which, oddly enough, would be considered “normal traffic” back home; my how time and space are warped here).


The end is over

[If you look closely enough, you can see the alien white squirrel invasion fleet pouring through.]

“Sean! Come quick! Look! Shadow bands!”

And sure enough, wriggling over the porch of the Red House Inn were shadow bands. Unfortunately, I was not able to capture a video of them—they did not last long at all.

And then—TOTAL ECLIPSE!

It looked like a hole in the sky. What an incredible sight. We could hear the cheers from downtown Brevard.

And like that, it was over. The sun is waxing, the temperature is rising, and the alien white squirrels are gone.

Tuesday, August 22, 2017

The quest for an alien white squirrel banner

About those banners:

[I, for one, welcome our new alien white squirrel overlords.]

Yes, those banners.

I wanted to know if I could obtain one (or two). So, after lunch, I walked to the Brevard city hall to ask about them. I figured that was the best place to ask, since it was city propery the banners were hung on. Now, city hall is located on the west end of Main Street, on the south side. It's not terribly far from the Red House Inn where we're staying.

The clerk at the main window informed me that the city had nothing to do with the banners in question. No, it was The Heart of Brevard who was responsible for the banners. And they're located on the east end of Main Street, on the north side. So I walked across town.

The receptionist at the Heart of Brevard informed me that they had nothing to do with the banners in question. No, it was The Transylvania Times (the local newspaper), located just a block north of the center of town.

More walking. The general manager at the Transylvania Times informed me that, yes, they were responsible for the banners about town. But no, they had no idea of the reception the banners would make and were still trying to decide on how much to charge for them. As it was, they ran out of the eclipse T-shirts and needed to get more.

So, I left my contact information with the general manager and hopefully, I'll get an officlal alien white squirrel invasion banner some time in the future.


Extreme mashups, Brevard edition

Without comment:

[I ... I got nothing, folks.]

A stuffed bear, wearing a white squirrel mask and an eclipse T-shirt.

Wednesday, August 23, 2017

Logan Lucky

Ah, “Oceans 7-11”.

Bunny and I saw Logan Lucky today (at the Co-ed Cinema in Brevard, a charming little one-screen theater downtown, and the only time I've been able to park right in front of the theater).

The movie is not as quirky and madcap as the trailer makes it out to be. But that's not to say it isn't good. It is, but it's not fast moving (although it's not slow—the pacing is actually spot on). Nor is it something you can half watch, as it turns out to be a rather cunning heist movie with more going on than expected. The two main brothers, played by Channing Tatum and Adam Driver, are much smarter than they come across. And Daniel Craig shows just how versatile he is as the demolitions expert Joe Bang.

It's not going to win any awards, but for a fun summer time movie, you can't beat it.

Thursday, August 24, 2017

The last day of summmer vacation

Today is the last day Bunny and I are in Brevard. We met with an old college friend George at 12 Bones, a well known barbeque restaurant in Asheville. It was quite the interesting place, located between the river and a railroad among graffiti filled buildings. And there was a line out the door. Like I said, it's well known in the area.

The food was good. And plentiful. Both Bunny and I had the ribs with the pineapple habanero BBQ sauce, and yes, it had a definite bite to it.

Afterwards, Bunny and I headed to the WNC Farmer's Market, also in Asheville. We are now the proud owners of a peck of peaches, a bushel of tomatoes and a seemingly endless supply of corn. My car now smells like the produce section of a supermarket.

Not that I'm complaining.

Unfortunately, due to circumstances beyond my control, I cannot post any more pictures to the blog (the circumstance—I upload the pictures to my server at home for processing, but there was a power outtage that lasted longer than the UPS; bummer!). I wish I could, because then you could see the graffiti filled buildings surrounding 12 Bones, and the very scary looking bee at the WNC Farmer's Market (but in reality, your imagination will probably be scarier than the real thing).

Tomorrow, the long drive back to Florida!

Friday, August 25, 2017

There and back again

Home again, home again, jiggety-jig!

Now sleeeeeeeeeeeeeeeeeeeeeeeeeeeeezzzzzzzzzzzzzzzzz–

Saturday, August 26, 2017

Pictures from the past few days

Now that I'm rested and my computers are back up and running, I can post the few remaining pictures I would have liked to post but was unable to.

First up, when I mentioned parking right in front of the theater, I really meant it:

[Alas I could not get any closer as the city of Brevard frowns upon the sidewalk parking of cars. Bummer.]

I also mentioned that 12 Bones was located among graffiti filled buildings.

[While there is a line out the door, the staff at 12 Bones ensures snappy service, otherwise, the graffiti artists would certainly tag the parked cars for a lack of clean surfaces to graffiti upon.]

Then there was the trip to the WNC Farmer's Market, which not only had a scary honey bee mascot:

[If this is going to haunt my dreams, it's going to haunt your dreams as well.]

but also Christmas decorations:

[Don't worry, the tree will fatten up by the time Christmas rolls around.]

For nothing says “Chrismtas” like a hot August day.

And finally, I'm glad to see that Yorick finally got around to it.

[Because being dead is no excuse after all.]

Or two.

Tuesday, August 29, 2017

Having great customer service will excuse a multitude of sins

The longer I use Apple products, the more I feel like I don't actually own the equipment, and that Apple wants me to use it according to how they want me to use it, not how I want to use it. But then there are the times when I'm reminded why i use Apple products—the curated experience is wonderful!

I was reminded of this recently. On Saturday, Bunny spilled water on her Mac laptop. Now, all the advice I read said that the first thing you do, before anything else, is to

TURN OFF THE COMPUTER! IMMEDIATELY!

Unfortunately, we didn't know this and thus, the screen on Bunny's laptop went deathly white and it started making this horrible death squeal as Bunny was trying to sop up the water with a towel.

Sigh.

The second thing all the advice I read said was to dry out the laptop by keeping it open, placing it keyboard down on a towel over a milk crate and use a fan to blow air over it to dry it out, and to keep this up for up to 96 hours.

We managed maybe 48 or so before heading off to the Apple Store to see if they could help. Nope. It was dead. So we ended up getting a new Macbook Pro for Bunny. The sad part is, the new Macbook Pro had less memory (8GB) than her now dead Macbook Pro (16GB) and (as it turned out, but I'm getting ahead of myself) a smaller harddrive (128GB vs. 256GB).

We took it home, hooked up the external backup drive (Woot! Backups!), turn on the laptop and waited. That's when we “recalled” her old laptop had a larger harddrive. And at this point, it was a lost cause. The restore procedure stated insufficient storage space and it was a rather painful process to get past this. I tried doing a partial restore, selecting this and that to restore, but it just didn't really work (I suspect the programmers at Apple never really tested a partial restore). God it was painful. I could get nothing restored properly.

So Tuesday we repacked the new laptop back into its box, and headed back to the Apple Store. Now, despite the controlling nature of Apple, they do have fantastic customer service and there was no issue at all at exchanging the laptop we returned for one with a 256GB harddrive. Once back home, we plugged in the backup drive, turned on the computer and waited.

A few hours later, (and all we did was just let it do its thing) everything was back to the way it was before. Other than it being a new laptop, it was like she never dropped water on it. Yes, you pay a premium to use Apple, but sometimes, it's just worth it.

Thursday, August 31, 2017

Say, isn't it time I get a new office? Why yes, it is

I'm in a new office!

[Edvard is a bit stressed with moving to a new office. Then again, Edvard always has the same reaction to everything.]

The Ft. Lauderdale office of The Corporation has expanded and as a result, we're in the process of playing “Musical Offices.” But unlike my just now previous office, I have a view outside!

[Because of my seniority, I get the spectacular view. My fellow cow-orker gets to view the wall behind me.]

And for the next week or so, my fellow cow-orker and I will have the entirety of the new expanded office space to ourselves.

Friday, September 01, 2017

The quest is over

IT ARRIVED!

[And you thought vampires are bad. They're nothing compared to the alien white squirrels!]

Two days after my quest, I received an email naming a price (which was pretty much what I thought it would be) and that they had set aside one of the banners. Unfortunately, I received the email too late to pick it up that day. I replied that I would pick it up on Friday as we were leaving town. Shortly thereafter, I received another reply that it would be waiting for me at the front desk.

Unfortunately, on Friday, with all the packing and loading of the car and it being o'god-it's-too-early-to-be-doing-this, we were a solid fifty miles out of town before I remembered I was supposed to pick up the banner.

Sigh.

I called to say I would call back on Monday to do the order and have it shipped.

On Monday, I called, only to find out the person responsible was out of the office and would call me back on Tuesday.

On Tuesday, I called just before they closed and again, the person responsible was out of the office.

On Wednesday, at o'god-who-is-this-calling-me-at-this-time-of-the-day, I finally received a call back. The sale was made, the shipping was paid, and then it was a waiting game.

I did not expect it to be delivered so quickly.

Monday, September 04, 2017

Cleaning up the cobwebs

As a holiday project, I decided to make a few changes to the old website (why yes, I have an actual website in addition to the blog, in case you didn't know), as it has been a few years since the last major update. The big changes were redirecting the “Software” section to my github page, removing the merchandising link (yes, there was one—and no, I never made any money from that) and cleaning up the “Projects” section.

I also went over the entire site (excluding the blog) and either removed or updated any links. It was amazing at just how many of them were dead (actually, the domains still existed, but were now owned by squatters wanting to sell the domain at an exorbitant prices). Especially in the “Metasearch Engine Years” section. Yes, I probably could have made links to The Wayback Machine (like Armigeron) but the issue there is when current owners of the domain put up a restrictive robots.txt— The Wayback Machine will then make the archive of said domain unavailable.

Why take the risk of potentially breaking the site? It's probably best to just remove the links and let the past be the past.

It was also a bit sobering to think that “Project: Brainstorm” (aka “Project: Brainstem” as it was called around The Office at the time) is far enough in the past that, if it were alive, it could legally drink! I still recall writing the software, using a text editor written in 1982 for MS-DOS 1.0 and a version of make from Microsoft. This was pretty much about six months after Java was officially released and there were no IDEs for it (not that I use IDEs as I'm a language maven, but the one time I tried using one, it crashed hard). The one problem I had not mentioned was writing myself into a circular dependency with the Java classes where you couldn't compile the code solely from source—class A required class B to be compiled first, and class B required class A to be compiled first. It's all too easy to fall into that trap with incremental development, and not quite so easy to break the cycle once one finds out.

There were some other minor changes I made, but they will probably go unnoticed by most people.

What can I say?

Wednesday, September 06, 2017

Something wicked this way comes

I'm at The Ft. Lauderdale Office of The Corporation, and as I'm stowing my computers into an inner office, I see this out of the window of another office in our new space:

[I … I don't think that's fog enveloping the airport …]

That's the Ft. Lauderdale Executive Airport, and the odd thing is, Hurricane Irma is to the east, the airport is to our west!

Yikes!

Thursday, September 07, 2017

And here I thought it was a mass of clouds headed our way

From the “So Obvious It's Obvious Department,” comes this lovely piece of email from OnStar:

From
"OnStar Member Services" <XXXXXXXXXXXXXXXX.onstar.com>
To
<sean@conman.org>
Subject
A hurricane is on the way. OnStar Crisis Assist can help
Date
Thu, 07 Sep 2017 13:02:07 -0600

Hurricane Irma is coming your way. OnStar Crisis Assist can help keep you safe.

Please be advised that a hurricane is heading your way …

My initial thought was, no XXXX, but it's clear that OnStar is trying to say they can help us to survive Hurricane Irma (it's mainly “we can help you travel safely out of the area”). I think what I found most egregious about this email is the subject line, “A hurricane is on the way.” Perhaps a better subject line would have been “Let OnStar help protect you and your family durring the hurricane.” Because if you haven't heard there's a hurricane coming to town, you are either a misanthropic hermit living the middle of a Florida swamp, or in a coma for the past two weeks.

But it's nice to know that OnStar cares enough to send an email, though.


All sealed up at Chez Boca

Bunny and I are preparing Chez Boca for our most unwelcome guest, Hurricane Irma. It looks like Mother Nature is really giving it to the US right up the ol' Florida.

Ouch.

[It's now a room without much of a view.  Not that there will be much to look at during Hurricane Irma—rain, wind, the occasional piece of debris, Margaret Hamilton riding around on a bicycle.  Besides, it's better to be safe than sorry.]

We've good our food, water, batteries and other supplies already laid in. We've got most of the shutters in place. The only ones left are the large sliding glass doors on the back porch and we'll be doing those tomorrow. As well as bringing in items from the back porch inside.

Chez Boca itself is concrete construction so it should weather the storm. I'm not particularly worried about the storm per se, but the loss of power after the hurricane passes.

That's going to suck!

Friday, September 08, 2017

An increase of storm activity over time

The article “What Lies In Irma's Path” has an interesting graph:

[The first satellite was launched by Russia in October of 1957, yet this graph shows a remarkable uptick in storms starting around 1951.  I have to wonder what changed to cause more storms to be tracked.  The National Hurricane Research Project, which later became the National Hurricane Center, wasn't started until 1955.  Perhaps alien white squirrels?]

That uptick in activity around 1950 is due to better weather monitoring and not because of some anthropomorphic deity trying to smite us out of existance. The rest of the article isn't really worth reading as it comes across as scare-mongering, much like the rest of the reporting about Hurricane Irma. Personally, I find the reporting from the National Hurricane Center to be the best—it's level headed and not so “in-your-face” about the dangers. But they don't try to sugar coat the threat either. It's actually quite refreshing from the rest of the media storm (pun intended) going on.

And meanwhile, Bunny and I await the coming storm.


And now we wait

Well, let's see …

  1. Food … ✓
  2. Water … ✓
  3. Shutters … ✓
  4. Clean porch … ✓
  5. Batteries … ✓ (except for 6 volt batteries—we didn't get any in time)
  6. Gas … ✓
  7. Kerosene … ✓
  8. Generator … ✓
  9. Obsessively checking the National Hurricane Center for updates … ✓

Nothing much more to do than to wait.

Are we there yet?

Monday, September 11, 2017

Report from the far side

Well, that was interesting.

Hurricane Irma went further west before turning north, so while Tampa got hit (I guess) with the full force of an operational hurricane, all we got here in Chez Boca was maybe hurricane class 1 type winds and rain.

We lost internet connectivity (our DSL failed way before our power did, and as of this writing (3:00 am) we've been sans power for about twelve hours now.

The only weird thing to have happened was around 8:30 am Sunday as the storm was approaching. The door bell rang suddenly, and when I looked out the peep hole, I could have sworn I saw someone at the front screen door. The person wasn't there very long, for when I looked back to make sure I saw what I saw, no one was there! Dun dun dun!

Sleeping in the bedroom was difficult, as the bougainvillea was trying its damdest to get inside out of the storm. It was a horrible racket that made sleeping difficult. And yes, that's pretty much what we did today—sleep. Not much else to do except listen to the squeals of the UPSs as the power finally died.

So now the storm is past. We're one of the few neighborhoods here in Boca without power (as is usual for our area). So unless the power is back on in the morning, we shall be hooking up the generator! Dun dun dun!


Murphy's Law strikes again

Hmm … interesting.

I'm having to use the web interface to post to my blog and unfortunately, it's one of the least tested parts of the code since I rarely use the web interface (mainly because editing in the web browser sucks). I generally use the email interface, but given the lack of power around here, that's not an option.

Anyway, I wrote the previous entry and when I went to view it before posting it, nothing happened other than the browser just sitting there, waiting for a response back from the server. I did that several times before I remembered the definition of insanity. Then I just tried posting it. The entry was posted, but the browser was still waiting for a reposnse from the server.

At least that isolates where the problem might be.

Anyway, I'm just writing this so I remember to come back and fix this once power is restored.

Tuesday, September 12, 2017

“And why did you skip high school?” “Because I was governor of Vermont.”

BRISTOL - Whether by design or accident, Vermont's founders imposed no age requirement on those who could run for governor of this state.

The constitutional quirk paved the way for Ethan Sonneborn, 13, of Bristol, to announce this summer that he's running for governor.

Eligible candidates must have simply lived in Vermont for four years before the election — "which I’ve tripled, and then some," said Sonneborn, a 13-year resident of Vermont.

[H]e admits it will be challenging to travel the state and simultaneously attend eighth grade. Hitting the campaign trail will mean getting rides from his parents. But he expects that ultimately his age will be an asset, not a liability.

"We elected our oldest president ever," Sonneborn said, "and he tweets like a kindergartner."

Via Jason Kottke, Meet the 13-year old running for Vermont governor

I'm like, this is amusing! Bunny is like, “Of course, it's Vermont!

More power to you, Ethan Sonneborn.

Wednesday, September 13, 2017

Survival, day 3

We're still on generator power, so we aren't completely dying in the heat and humidity, just mostly dying in the heat and humidity with a few fans to keep us company.

So I get word that The Ft. Lauderdale Office of the Corporation has power, which means Internet and more importantly, air conditioning! The elevators aren't working, but hey, what's eight flights of stairs when there's sweet sweet A/C at the end?

A XXXXXXX ton of stairs, that's what.

But hey, that sweet sweet air conditioning!

It's also amazing that our office received a ton of water damage. Yes, we're on the eighth floor of a ten story building, and no, none of the windows were smashed. The office does have a patio and the doors aren't exactly water tight so there was several inches of standing water in that portion of the office.

But other than the standing water and non-working elevators, things are fine at The Ft. Lauderdale Office of the Corporation.

The neighborhood around Chez Boca isn't too bad either. Yes, there were tons of downed branches and palm fronds (and one house with an uprooted banyan tree that miraculously missed the house) but no real significant damage. And the traffic to the Ft. Lauderdale Office of the Corporation wasn't insane or even heavy. I'll have to enjoy that while I can, because Real Soon Now™ “The Season” starts and traffic really becomes a mess.

So other than the lack of power, things could be worse. And for that, I am thankful.

Saturday, September 16, 2017

Survival, day 6

When the power goes out for the neighborhood, it's always the same few score of houses that are without power. Bunny and I suspect it's because we're at the tail end of our particular power grid and there's a critical breaker tripped or wire down that is feeding our neighborhood. And because of the low number of houses affected by our particular outage, it's likely we would be one of the last group of people FPL will fix due to Hurricane Irma. We're expecting sometime around tomorrow evening.

Also of concern here at Chez Boca is the Internet connection. It went out first, and from what we heard from The Monopolistic Phone Company, it wouldn't be until next week before we get the land line fixed (we have DSL).

We're roughing it here. And I don't even like camping!

So this morning as I was sleeping, something in my hind-brain noticed that it wasn't as miserably hot and humid in the bedroom—it actually felt cool! What? I look—and there's the alarm clock blinking. Blinking? Blinking … this means somethi—POWER!

We have POWER!

Oh that sweet sweet air conditioning! Praise be FPL!

That still meant we have a week or so before we get Internet connectivity back, but lo', it too, was back up!

Praise be The Monopolisic … er … no. I just can't praise the Monopolistic Phone Company.

Anyway, all is right with the world (or at least our little corner of it). We have Internet. We have power. What could possibly go wrong?

Tuesday, September 19, 2017

Wake up! Time for DDoS

From
"MrSmith" <maillist@mailserver.com>
To
<root@conman.org>
Subject
DDoS Warning
Date
Tue, 19 Sep 2017 22:08:05 +0400

Hello, root@conman.org

FORWARD THIS MAIL TO WHOEVER IS IMPORTANT IN YOUR COMPANY AND CAN MAKE DECISION!

We are Phantom Squad

Your network will be DDoS-ed starting Sept 30st 2017 if you don’t pay protection fee - 0.2 Bitcoin @ 1W5FWQjvHGMkaPeuR4SvRNojsv64WgJNt.

If you don’t pay by Sept 30st 2017, attack will start, yours service going down permanently price to stop will increase to 20 BTC and will go up 10 BTC for every day of attack.

This is not a joke.

Not quite as dramatic as the last email I received from a black-hat cracker but I do have to wonder—why me?

I'm not a company. I don't make money from this blog. Heck, I don't make any money from my website at all. So why target me? It doesn't make sense—I'm not a big enough target. Why not go after something with a bit more money, like a sports gambling site?

I mean, if this is the same Phantom Squad that took down XBox Live and PlayStaton Network over Christmas of 2015, then yes, this could be bad. But as far as I could tell, that's the only attack Phantom Squad has done and they've been very quiet since. This might even be a scam.

I talked with my hosting company, and they said not to worry. If it happens, just give them a call and they can start working with their upstream provider to mitigate the attack. And under no circumstance am I to pay the danegeld (which at the time of writing, 0.2 BTC is worth $802.46).

Sunday, October 01, 2017

“I aint' got no DDoS. You ain't got no DDoS. We ain't got no DDoS. Where the hell's the DDoS?”

It's October 1st, and my server is still up and running. No DDoS is happening as far as I can see. It appears that the “threat” was indeed, a joke. Not only did I not pay the danegeld, but I didn't have to move my site to Cloudflare.

And that Bitcoin address I was mailed? Still no funds in it (I decided to make the Bitcoin address known—no reason to hide it), which makes me feel better about the whole thing.

Thursday, October 12, 2017

Blade Runner 2049

Bunny and I just saw “Blade Runner 2049” and I have to say, I'm conflicted—I don't know if I liked it or not. Don't get me wrong, the movie is just as visually stunning as the original Blade Runner, the cast and script are just as good if not better (exposition is handled much better than in the original).

And as a sequel, it works. There are two major versions of “Blade Runner”—the happy human Deckard and long living replicant Rachael ending, and the ambiguous, maybe human, maybe replicant Deckard and replicant Rachael with short replicant lives ending. And “Blade Runner 2049” works as a sequel to both versions. Ridley Scott, director of “Blade Runner,” has stated that he considers Deckard a replicant, while Harrison Ford, who plays Deckard in both movies, says that Deckard is not a replicant. “Blade Runner 2049” calls out that dichotomy and it's still ambiguous whether Deckard is a replicant or not.

And it's not like it's missing iconic scenes—there's the scene between Deckard and Wallace (this movie's possibly evil captialist overlord played by Jared Leto; I'm sure Deckard's saying “Her eyes were green!” will go down as a quotable moment). Then there's the scene between Lieutenant Joshi (played by Robin Wright) and replicant Luv (played by Sylvia Hoeks as this movie's Roy Batty) showing why it's not a good idea for a human to go up against a replicant, and finally the love scene between the main character “K” (played by Ryan Gosling) and his holographic girlfriend Joi (played by Ana de Armas)—that scene was completely mind blowing for how it was done.

So if the movie is so good, why am I still so conflicted? I think it comes down to mismanaged expectations. Contrary to what others may believe, I don't think “Blade Runner 2049” is even close to being neo-noir. The original “Blade Runner” was very much noir (or neo-noir if you will) with a dark tone and (in at least one version) an ambiguous ending. “Blade Runner 2049?” Not so much. Yes, it's bleak with it's post-apocalyptic feeling but the ending isn't quite so ambiguous (Deckard notwithstanding) and in fact, does have (in a way, if you squint just right), an uplifting ending (but to say more would be to spoil the movie).

So neo-noir, I don't buy.

And it doesn't feel like the type of story Philip K. Dick would write. His book, Do Androids Dream of Electric Sheep? was the basis for “Blade Runner” and it shows to some extent the themes that PKD writes about, there's even less of that in this movie, in my opinion. The story in “Blade Runner 2049” just doesn't seem very Philip K. Dicksian to me.

And it's those two things that have me conflicted about the movie, and they're both about my expectations of what a “Blade Runner” sequel should be.

So, it it worth seeing in the theater? Yes, if just for the cinematography alone.

Also, if you have some forty minutes to kill, there's a discussion of the movie (with spoilers! Oh are there spoilers!) with Adam Savage (of Mythbusters fame), where he gives in movie evidence (using both “Blade Runner” and “Blade Runner 2049”) of why Deckard is a replicant (which works for either version of “Blade Runner”). I think it's worth listening to.

Friday, October 20, 2017

Authenticate all you want, but pointing to a Wikipedia article does not authentication make

From
"Alice Walton" <joy.ege@manginasal.com>
To
Recipients <joy.ege@manginasal.com>
Subject
YOUR GIFT
Date
Fri, 20 Oct 2017 23:03:10 +0100

I, Alice Walton authenticate this email, you can read about me on: http://en.wikipedia.org/wiki/Alice_Walton ,

I write to you because I intend to give to you a portion of my Net-worth which I have been banking. I want to cede it out as gift, hoping it would be of help to you and others too. Respond to this email: info4walmart11@gmail.com

With joy,
Alice Walton

Methinks someone has been watching “Mr. Robot” a bit too closely. Just like I'm sure that Alice Walton didn't really send me that email.

Sunday, October 29, 2017

So far, the only fully negative review of “Blade Runner 2049” I've seen

Jamie Zawinski (of Netscape fame) does not like “Blade Runner 2049”. I'm not sure if I hated it as much as he did, but I don't disagree with anything he said.

He also brought up a point I forgot to mention in my original review—the score. I loathed the score, and I'm sure if that's because I don't care for the Hans Zimmer horn—you know, that deep horn BRRR­RRRR­AAAA­AWWW­WRWR­RRMR­MRMM­RMRM­MMMM that is omnipresent in every one of his scores, or the fact that the theater had the volume cranked to 11 which was threatening to blow out the speakers. Sure, there were moments when you could (BRRR­RRRR­AAAA­AWWW­WRWR­RRMR­MRMM­RMRM­MMMM) hear the (BRRR­RRRR­AAAA­AWWW­WRWR­RRMR­MRMM­RMRM­MMMM) original (BRRR­RRRR­AAAA­AWWW­WRWR­RRMR­MRMM­RMRM­MMMM) Vangelis score (which added to the neo-noir atmosphere of “Blade Runner”), but such moments (BRRR­RRRR­AAAA­AWWW­WRWR­RRMR­MRMM­RMRM­MMMM) were overshadowed by (BRRR­RRRR­AAAA­AWWW­WRWR­RRMR­MRMM­RMRM­MMMM) Hans Zimmer's score (BRRR­RRRR­AAAA­AWWW­WRWR­RRMR­MRMM­RMRM­MMMM).

I did not like that, Sam-I-am.

And I'm still conflicted if I liked “Blade Runner 2049.”

Monday, October 30, 2017

Si placet tibi ut quærat pulicem unum mercatus

I was talking with Dad when the Swap Shop came up. The flea market was always a fixture growing up (I moved down here to Lower Sheol in 1979) but it's been years since I last went there. I know the location in Margate is no longer there, and for all I know, the main location in Ft. Lauderdale might be gone too.

Nope. It still exists. And there are now locations in Tampa and Lake Worth. But the description for the Lake Worth location is a bit suspicious:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed at ante. Mauris eleifend, quam a vulputate dictum, massa quam dapibus leo, eget vulputate orci purus ut lorem. In fringilla mi in ligula.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed at ante. Mauris eleifend, Lorem ipsum

Locations | Swap Shop

Somehow, I think someone forgot about the placeholder text

Wednesday, November 01, 2017

“More than iron, more than lead, more than gold I need electricity. I need it more than I need lamb or pork or lettuce or cucumber. I need it for my dreams.”

Today is the first of November, which means it's the start of NaNoGenMo. I finished one novel, had one collapse in on itself, and all the intentions of doing one but missed a year. I hope to do better this year.

I've spent the past few hours coming up with a few ideas (even if one is to just write a program that spews “meow” out 50,000 times) and doing a deep dive into the dark musty corners of my harddrive for resources (I just found a file containing the parts of speech of over 100,000 English words I downloaded (or generated) from somewhere in 2004—wow, useful!), so I'm expecting to have something by the end of the month.

Sunday, November 05, 2017

The Boston Diaries—now ad free!

Way, way back in February of 2006, I added the block of Amazon products to my blog (and frankly, I'm surprised it was that long ago—who knew?). At the time, I was picking one of the “keywords” (which I keep for all entries, and are more like phrases than actual words) at random from all the entries on the page being displayed. Over three years later (September of 2009, no blog entry about this) I changed to just picking a random “keyword” from the top entry on the page. My thought for that change was that since the ad block always appears next to the top entry, I might get a better response from readers if the book selections from Amazon matched the topic of the entry they were next to.

Okay, there were still the odd problems, like when the keyword “dead zombie languages rising from the dead” was picked (I don't blame Amazon for giving up and displaying a generic ad when given that as a search term). But it was better than before.

Then in January of this year (again no blog entry about this) I thought it might be better to actually pick the “keyword” I sent to Amazon instead of having it picked at random. That might actually improve the selection process a bit more, so I added some code to handle that.

Which brings us to today.

I have noticed over the past month or so that Amazon is always displaying a generic “Shop at Amazon” banner and try as I might, I could not get a list of books (or any other product) to show up. I wondered if the link changed (but Amazon is pretty good about keeping links working) so I checked and no, pretty much the only ads you can run now are either the generic ads like I'm getting (and that's all you can get at the size I use) or ads for a particular product.

Well … darn.

Here I went to the trouble to try to target specific items (mostly books) to readers, and Amazon has finally said, “Nope. Not gonna do it.”

So that's that. The Amazon block is gone. Besides, it wasn't worth it anymore, as I haven't earned enough for a cup of coffee from Starbucks since my last payout (whenever that was, it's been that long). And it sucks, since when it was working, the books being shown were relevent to the post and could (in theory, if my blog were a bit more targeted towards a demographic or topic) benefit both me and Amazon with a sale. That's one thing that I really haven't seen outside of GoogleLinkedMyFacePlusInSpaceBook—well done targeted advertising (inside GoogleLinkedMyFaceBookPlusInSpace? Scarily targeted advertising).


My stance of tail call optimizations has changed over time

In writing the previous entry, I came across a post I made ten years ago about tail call optmization where I stated that I disliked it. But that was then, this is now, and now, I like tail call optimizations.

At the time I wrote that, I only thought tail call optimzations applied to a certain class of recursive functions, but no, it can be done in non-recursive functions as well. There may be limitations in when it can be done, but it's applicable to more than just recursive functions.

It's just a shame that such things are taught poorly and with bad examples (if at all—the term “tail call optimization” never came up in college). Of course, it would help if the language used for teaching supported the concepts as well (when I was in college, it was FORTRAN-77, Pascal and C—I'm not sure if FORTRAN-77 even supports recursion; Pascal was a pedagogical language designed by a computer scientist well known for being critical of the computer industry; and C was just a step above assembly language). Even some population langauges used for teaching today (cough—Python—cough) don't support tail call optimization because it's confusing or something.

Sheesh.


How come the “easy projects” never are?

My idea for NaNoGenMo 2015 was based off an idea that A. K. Dewdney had in 1985 [Yeah, that worked out so well. —Editor] [Shut up, you! —Sean], so I thought I would return to that well and implement an idea that Douglas Hofstadter had in 1983:

You can amuse yourself by looking up the definition of a common word in the dictionary and replacing the main words in it by their definitions. I once carried this process out for “love” (defined as “A strong affection for or attachment or devotion to a person or persons”), substituting for “strong”, ”affection”, “attachment”, “devotion”, and “person”, and coming up with this concoction:

A morally powerful mental state or tendency, having strength of character or will for, or affectionate regard, or loyalty, faithfulness, or deep affection to, a human being or beings, escpecially as distinguished from a thing or lower animal.

But not being satisfied with that, I carried the whole process one step further. This was my result:

A set of circumstances or attributes characterizing a person or thing at a given time in, whch, or by the conscious or unconscious together as a unit full of or having a specific ability or capacity in a manner relating to, dealing with, or capable of making the distinction between right and wrong in conduct, or an inclination to move or act in a particular direction or way, baving the state or quality of being strong in moral strength, self-discipline, or fortitude, or the act or process of volition for, or consideration, attention, or concern full of fond or tender feeling for, or the quality, state, or instance of being faithful to, those persons or ideals that one is under obligation to defend of support, or the condition, quality or state of being worthy of trust, or a strongly felt fond or tender feeling to a creature or creatures of or characteristic of a person, or persons, that lives or exists, or is assumed to do so, particularly as separated or marked off by differences from that which is conceived, spoken of, or referred to as existing as an individual entity, or from any living organism inferior in rank, dignity, or authority, typically capable of moving about but not of making its own food by photosynthesis.

Isn't it romantic? …

Metamagical Themas: Questing for the Essence of Mind and Pattern (hey, I may have gotten rid of the Amazon ads, but I still have my affiliate link)

It's a straightforward program:

  1. Set our corpus to a single word, “love.”
  2. For each word in our corpus, replace said word with its definition.
  3. If we haven't reached 50,000 words, repeat step 2.

It can't be that hard, right? It should only be an hour of work, at the most, right?

Two days later …

Well, that was easy! [See? —Editor] [SHUT UP! –Sean]

So it starts out with a dictionary I downloaded from Project: Gutenberg. Oh look—it's in some vague HTMLish markup language (even though the file says it's HTML, it's not HTML) so I should be able to parse what I want out of this. It can't be that much work. The format is straightforward:

otherstuff <hw> word </hw> otherstuff <def> definition </def> otherstuff

And I'm not two dozen words in when parsing fails. I check, and the text I'm up against is:

<hw><hw> word </hw> ... <hw> otherword </hw> ... <hw> ... <def> definition </def>

You have got to be kidding me! That is not even valid HTMLish markup! So I code, and I code and I code code code …

<mhw> ... <hw> word </hw> ... <hw> otherword </hw> ... </mhw> ... <def> definition </def>

It's not even consistently bad markup! So I code, and I code and I code code code …


<hw> word </hw> ... definition </def>

<hw> word </hw> ... <hw> word </hw> ... <def> definition </def> ...

And I'm not even past “AD” in the dictionary!

I do what I should have done when I encountered the first problem and search for a better machine readable dictionary online. And I find one. The markup is sane! And documented! A few hours later and I can parse every one of the 106,622 definitions in the dictionary!

Now I can implement my idea.

Sheesh.

Tuesday, November 07, 2017

The Shadow Sean Conners

I've had a Gmail account for nearly a decade now, although I never use it. I think I got one back in the day to see for myself the hype around this new email service from Google. I obtained the account early enough to snag the address sean.conner@gmail.com (but don't send anything there—it might be months before I get to it).

But the weird thing is that I constantly get email meant for other Sean Conners. I checked today and …

And all this just in the past week!

What I find amazing and uncomprehensible is … do these other Sean Conners not know their own email address? Do they just assume sean.conner@gmail.com will somehow, magically, get to them? Do they not care? Do other people sending the email just assume that sean.conner@gmail.com will get to the Sean Conner they know?

What's going on?

I do respond to some of these (the ones that don't appear to be spam at least), informing the sender that they have the wrong Sean Conner, but rarely do I ever get a message back.

It's bizarre.


Love is … a freaking wall of text

And so I implemented my idea in about all of an hour. The code itself is pretty straightforward:

require "org.conman.math".randomseed()

local fixcase = Cs(
                    (R"az" / function(c) return c:upper() end + P(1))
                    * P(1)^0
                  )

local function lookup(term)
  local list
  
  if dict[term] then
    list = dict[term]
  else
    local l = fixcase:match(term)
    if dict[l] then
      list = dict[l]
    else
      return term
    end
  end
  
  return list[math.random(#list)]
end

local word   = R("''","--","AZ","az")^1
local term   = word / lookup
             + P(1)
local corpus = Cs(term^1)

local count  = Cf(
                   Cc(0) * (word * Cc(1) + P(1) * Cc(0))^1,
                   function(acc,count)
                     return acc + count
                   end
                 )
                 
local text = "Love"
local num
local loop = 0

repeat
  loop = loop + 1
  text = corpus:match(text)
  num  = count:match(text)
until num >= 50000

print(string.format([[

                                 Love is ...

                            A Definitional Novel
                        in %d expansions and %d words
                        
                        
]],loop,num))

print(wrap(text))

The first line initializes the random number generator, then an LPeg expression to uppercase the leading character of a word (that's how most of the terms in the dictionary I used appear). Then we have a function that returns either a random defintion of a given term, or if no definition exists, the term itself. Next is the definition of a “word” with the expression word—one or more letters, dashes or apostrophes. The next expression, term, either finds a “word” and does the definition lookup via lookup() or just whatever non-word text it finds (punctuation marks mostly). The expression corpus will run term multiple times, replacing the input with the translated output (this is a “substitution capture as it's called in LPeg).

The count expression just counts words—it's a folding capture which accumulates a single result. In this case, we start with 0 (Cc(0)), then for each “word” in the input it returns a 1; otherwise a 0 (word * Cc(1) + P(1) * Cc(0)), which is added to our accumulator using the given anonymous function.

Then it's a matter of starting with “Love” and running this a few times until we get over 50,000 words.

What I didn't expect (but should have) is the “Wall Of Text” that is generated:

To denote having as a possession or an appendage; as, the firmament with its stars; a bride with a large fortune. One of whom inquires can be made as to the integrity, capacity, and the like, of another. Apposition; connection; antithesis; opposition; as, they engaged hand to hand. a That which terminates, circumscribes, restrains, or confines; the bound, border, or edge; the utmost extent; as, the limit of a walk, of a town, of a country; the limits of human knowledge or endeavor. Denoting nearness or distance, either in space or time; from; as, within a league of the town; within an hour of the appointed time. The period at which any definite event occurred, or person lived; age; period; era; as, the Spanish Armada was destroyed in the time of Queen Elizabeth; – often in the plural; as, ancient times; modern times.; as, With privilege or possession; – used to denote a holding, possession, or seisin; as, in by descent; in by purchase; in of the seisin of her husband. an A measure of distance traveled.; As a substance for any noun of the neuter gender; as, here is the book, take it home. happened One who is in office; – the opposite of out. See Thee. A wooden block shaped like the human foot, on which boots and shoes are formed. A division of the Roman people formed according to their property, for the purpose of voting for civil officers.; To inclose; to take in; to harvest. all Of or belonging to me; – used always attributively; as, my body; my book; – mine is used in the predicate; as, the book is mine. See Mine. The potential principle, or force, by which the organs of animals and plants are started and continued in the performance of their several and cooperative functions; the vital force, whether regarded as physical or spiritual‥ A Freely; licentiously. Yellow or gold color, – represented in drawing or engraving by small dots. Worthy of consideration; requiring to be observed, borne in mind, or attended to. A numeral; a word or character denoting a number; as, to put a number on a door‥ phrases, and To denote a connection of friendship, support, alliance, assistance, countenance, etc.; hence, on the side of. That which refers to something; a specific direction of the attention; as, a reference in a text-book. Extent; limit; degree of comprehension; inclusion as far as; as, they met us to the number of three hundred. a The space or thing defined by limits. Denoting the agent, or person by whom, or thing by which, anything is, or is done; by. To measure, as in music or harmony.; as, With reference to circumstances or conditions; as, he is in difficulties; she stood in a blaze of light. an Fixed or appointed time; conjuncture; a particular time or occasion; as, the hour of greatest peril; the man for the hour.; As a substitute for such general terms as, the state of affairs, the condition of things, and the like; as, how is it with the sick man? happened With reference to circumstances or conditions; as, he is in difficulties; she stood in a blaze of light. A word placed before nouns to limit or individualize their meaning. A wooden block shaped like the human foot, on which boots and shoes are formed. A division of the Roman people formed according to their property, for the purpose of voting for civil officers.; The specific signification of in is situation or place with respect to surrounding, environment, encompassment, etc. It is used with verbs signifying being, resting, or moving within limits, or within circumstances or conditions of any kind conceived of as limiting, confining, or investing, either wholly or in part. In its different applications, it approaches some of the meanings of, and sometimes is interchangeable with, within, into, on, at, of, and among. all Of or belonging to me; – used always attributively; as, my body; my book; – mine is used in the predicate; as, the book is mine. See Mine. Figuratively: The potential or animating principle, also, the period of duration, of anything that is conceived of as resembling a natural organism in structure or functions; as, the life of a state, a machine, or a book; authority is the life of government‥ (usually Relating to, or containing, more than one; designating two or more; as, a plural word.) an acquaintance Ere; before; sooner than. acquaintances Originally, an interrogative pronoun, later, a relative pronoun also; – used always substantively, and either as singular or plural. See the Note under What, pron., 1. As interrogative …

Love is …

and so on for another 12,856 lines.

A literal “Wall Of Text.”

It also overshot the 50,000 words by 120,007 words. Yes, there are a total of 170,007 words (minus the title) in this “novel.” And what was totally surprising to me is the number of times through the expansion loop—only four.

From “Love” to “To denote having as a possession or an appendage; as, the firmament …” in four steps.

I found the “ending” to be somewhat amusing:

… Denoting identity or equivalence; – used with a name or appellation, and equivalent to the relation of apposition; as, the continent of America; the city of Rome; the Island of Cuba. To work, as raw or partly wrought materials, into suitable forms for use; as, to manufacture wool, cotton, silk, or iron… adventures.

Love is …

Apparantly, love contains tourist hotspots, industrial production and adventures. Who knew?

Monday, November 13, 2017

It shouldn't be this hard to support another syndication feed format

A few days ago I came across a new syndication feed format (like RSS or Atom)—JSON Feed:

We — Manton Reece and Brent Simmons — have noticed that JSON has become the developers’ choice for APIs, and that developers will often go out of their way to avoid XML. JSON is simpler to read and write, and it’s less prone to bugs.

So we developed JSON Feed, a format similar to RSS and Atom but in JSON. It reflects the lessons learned from our years of work reading and publishing feeds.

See the spec. It’s at version 1, which may be the only version ever needed. If future versions are needed, version 1 feeds will still be valid feeds.

JSON Feed: Home

It's not like I need another syndication format, and it's still unclear just how popular JSON Feed really is, but hey, I thought, it should be pretty easy to add this. It looks simple enough:

{
    "version": "https://jsonfeed.org/version/1",
    "title": "My Example Feed",
    "home_page_url": "https://example.org/",
    "feed_url": "https://example.org/feed.json",
    "items": [
        {
            "id": "2",
            "content_text": "This is a second item.",
            "url": "https://example.org/second-item"
        },
        {
            "id": "1",
            "content_html": "<p>Hello, world!</p>",
            "url": "https://example.org/initial-post"
        }
    ]
}

I just need to add another entry to the template section of the configuration file, create a few templates files, and as they say in England, “the brother of your mother is Robert” (how they know my mother's brother is Robert, I don't know—the English are weird like that).

But the issue is filling in the content_text field. The first issue—JSON is encoded using UTF-8. For me, that's not an issue, as I'm using UTF-8 (and even before I switched to using UTF-8, I was using ASCII, which is valid UTF-8 by design). But in theory, someone could be using mod_blog with some other encoding scheme, which means an invalid JSON Feed unless fed through a character set conversion routine, which I don't support in mod_blog.

But even assuming I did, that still doesn't mean I'm out of the water.

Suppose this was my content:

<p>"Hello," said the politician, lying.</p>

<p>"Back up!" I said, using my left hand to quickly cover my wallet in my back pocket.
"You aren't getting any money from me!"</p>

If you check the syntax of JSON, you'll see that the double quote character " needs to be converted to \". A similar transformation is required for the blank line, being converted to \n. And I have no code written in mod_blog for such conversions.

It's not like it would be that much code to write. When I added support for RSS and Atom, I had to write code. But it irks me that I have to special case a lot of string processing.

Yes, yes, I know—mod_blog is written in C, which is a horrible choice for string processing. But even if I picked a better language suited to the task, I would still have to write code to manually transform strings from, say, ISO-8859-1 to UTF-8 and code to convert HTML to a form of non-HTML:

&lt;p&gt;&quot;Hello,&quot; said the politician, lying.&lt;/p&gt;

&lt;p&gt;&quot;Back up!&quot; I said, using my left hand to quickly cover my wallet in my back pocket.
&quot;You aren't getting any money from me!&quot;&lt;/p&gt;

(Not to get all meta, but to display the first example HTML, I had to encode it into the non-HTML you see above, and to display the non-HTML you see above, I have to encod the non-HTML into non-non-HTML—or in other words, convert the output yet again. So, to show a simple & in this page, I have to encode it as &amp;, and to show that, I have to encode it as &amp;amp, in ever deepening layers of Inception-like encoding. By the way, that was encoded as &amp;amp;amp;—just for your information.)

I spent way too much time trying to generalize a solution, only to ultimately reject the code. I'll probably just add the code I need to support JSON Feed and call it a day, because solving the issue once and for all is just too much work.


It shouldn't be this hard to deploy a new version

I spent more time fighting git and Github than I did in writing the code to support the JSON Feed. Yeah, the code was straightforward and I had it done rather quickly. Deploying the code was something else entirely.

So I finished the code, and the new templates to generate the feed and my tests were good and life was fine. I then committed my changes to git and that's where the first problem occured—not all the changes were committed! The issue came down to an overbroad directive to git to ignore a certain file—it was a general “ignore all files of the given name” instead of “ignore this one file” that I forgot about. So I tagged the release (version 5.0.0), pushed the changes to Github (for public consumption of the source code) and then went to update the copy of mod_blog on the server. It was there when I discovered the critical missing file (one of the templates for the new JSON Feed).

Sigh.

I had been a bit too hasty in pushing the code out to Github, so now I was stuck with releasing version 5.0.1. Only now something got munged up with my copy of the code on the server since it compiled the program with a version number of 5.0.0-1-gd096362 instead of a version number of 5.0.1.

A bit of background: I use git to tag versions, and in the Makefile I have the following bit of code:

VERSION := $(shell git describe --tag)

...

override CFLAGS  +=-DPROG_VERSION='"$(VERSION)"'

so I don't have to update the version number in code by hand (the override exists so I can specify different compiler flags and still have the version information propagated to the program; I also handle the case when git isn't available, but that comes in later in my tale of woe). Running git tag showed a tag of 5.0.1, but git describe --tag was only coming up with 5.0.0-1-gd096362.

Wat?

Did I not update things properly? Was it a problem with the version of git on the server? Did I lose the signal? Was it lost in translation? Wat?

Some quick changes, try version 5.0.2. That worked—kind of. Now on the server the version was reporting back version 5.0.1.

Then I discovered another issue. I have code in the Makefile to handle the case when the version number isn't available through git—it's just a check to see if git describe --tag returned anything and if not, use a hard coded version specified in the Makefile. Now, to prevent me from pushing an update to Github with an incorrect version number in the Makefile, I have a script that is supposed to run when I push changes to Github (specifically, when I push changes to a remote host). Only the last change to that script rendered it non-executable, so it wasn't running. The version on Github had the wrong version number specified in the Makefile, and I was still having this weird “one version back” problem on the server.

I was still having problems with version 5.0.3 when I gave up. I wanted a nice, clean, 5.0.0 release, and instead, I was on my way to version 5.0.137 the way things were going. And all because I didn't check in a critical file because of a typo. If only I hadn't pushed the code to Github so quickly. If only there were a way to remove the tagged versions from Github, but there didn't seem to be an obvious way to me.

As I eventually found out, there was a way—from the command line on my development machine, I just had to run this blindingly obvious sequence of commands:

GenericUnixPrompt> git tag -d 12345
GenericUnixPrompt> git push origin :refs/tags/12345

Obvious.

I'm surprised I didn't realize that sooner.

So I removed the tags for versions 5.0.3, 5.0.2, 5.0.1, and 5.0.0, made sure I had all the files and whatnot, and re-released version 5.0.0.

Good Lord!

So now all is right with the world, and I have a new JSON Feed file.

Tuesday, November 14, 2017

My­Face­Google­LinkedBook­Plus­In­Space is stalking me

I was a bit surprised to see an ad for the ceramic Department 56 National Lampoon Christmas Vacation The Griswold Family Tree on Face­Google­Linked­MySpace­Book­Plus­In. It was surprising because yesterday, Bunny came across a picture of an inflatable National Lampoon Christmas Vacation The Griswold Family Tree and was threatening her brother with it. She did a search and found the one on Amazon and sent her brother the link.

Now, why would I be getting the ad on Linked­My­Face­GoogleIn­Space­Book­Plus? Is Face­Google­Linked­MyBook­Plus­In­Space listening in to us via our phones? Does the NSA have a sideline of selling information to advertisers to help their bottom line? Is Linked­My­Face­GooglePlus­In­Space­Book psychic (or psychotic—could go either way)?

No. It's just simple tracking via the web [“Simple,” he says. Ha! —Editor].

Bunny did a search for the Griswold Family Tree (or something along those lines) and some of the resulting pages she visited included bits of of HTML or Javascript or images that said “person from such-n-such IP address did a search for this.” And some of that tracking is either done directly by Google­Linked­My­FacePlus­In­Space­Book or is sold to them. Bunny does not have a Linked­My­Face­GoogleSpace­Book­Plus­In account (she did at one point, several years ago, for all of five hours) but that doesn't mean Face­Google­Linked­MyPlus­In­Space­Book doesn't keep track of her. They do.

But what does that have to do with me?

Well, I do have a My­Face­Google­LinkedIn­Space­Book­Plus account. And Google­Linked­My­FacePlus­In­Space­Book knows I log in from the same IP address that did a search for “The Griswold Family Tree” and while I may not have been the one that did the search (since the search wasn't tied to an account—and just because I'm not logged in doesn't mean Linked­My­Face­GoogleIn­Space­Book­Plus can't track my viewing habits on the web), I did come from an IP address that did! And thus, I too, might be interested in the ceramic Department 56 National Lampoon Christmas Vacation The Griswold Family Tree.

No, not really.


New York? Chicago? They have nothing on Detroit pizza

My favorite pizza place is a bit of a drive. A twenty-hour drive of nearly 1,350 miles to Buddy's.

Yeah, I don't go there that often. It's a shame, because the pizza is that good. It's Detroit-style pizza, made in square, blue steel pans (from the automotive industry) with the sauce on top, and yes, Buddy's defined Detroit-style pizza.

And guess what? There's a video on Youtube about Detroit-style pizza:

[If properly dried and trimmed, New York-style pizza could be used to make a box for Detroit-style pizza.]

My dad, who probably hasn't had Buddy's Pizza in thirty years, still pines for it, and kicks himself to this day for not getting the receipe from his sister (who worked at Buddy's for a number of years).

Darn. Now I want Detroit-style pizza.

Update on Thursday, November 16th, 2017

Now I really want Buddy's pizza.

Thursday, November 16, 2017

I know! I know! I should just get in the car and start driving

Apropos my previous post, Dad sent along this review of Buddy's pizza:

[The reviewers are right!  That crust is some seriously buttery Christmas right there.]

Yeah, Buddy's pizza is just that good! And my reaction to pizza crust matches that of Corey's—it's usually just there but the crust on Buddy's pizza can easily stand on its own.

Gosh darn it. Now I really want Buddy's pizza.

Friday, November 17, 2017

I'm no expert in search engine optimizations, but I think I know more about the subject than this guy

From
David Parker <davidparker@weboptimizes.com>
To
sean@conman.org
Subject
Serious issue found while visiting your website
Date
Fri, 17 Nov 2017 06:17:14 -0500

Dear owner of conman.org <http://conman.org>,

Hope everything is fine at your end.

Would you like to know some of the reasons why your website is not getting enough visitors who might turn to be your potential customers/clients?

I am SEO expert of a leading SEO service provider company. As per my analysis , your website is not performing well in the Google organic search. Also your traffic is poor form last couple of months due to some of the reasons. Some of the aspects given bellow.

          Due to poor back links
          Irrelevant content used in website
          Keywords not in good position
          Due to errors and issues present in the website
          Unorganized social media accounts

If my proposal sound's interesting for your business goals, feel free to email me, or can provide me with your phone number and the best time to call you. I am also available for an online meeting to present you this website audit report.

I look forward to hearing from you - thanks!

We also provide Web-designing and development service.

Best Regards,

David Parker

SEO Expert

PS: I am not spamming. I have studied your website, prepared an FREE audit report and believe I can help with your business promotion.
[image: beacon]

Sometimes, a piece of spam will catch my eye, and this otherwise unexceptional piece of spam did. Aside from a few grammar mistakes (“sound's” and “an Free”) and the horrible HTML (although it did include a plain text version, so there's that) used in the email (probably vomited up by Microsoft Word from the looks of it) I'm not sure why this caught my eye.

To me, it's obvious that he never even looked at my site as I don't sell anything. I also have to wonder what “errors and issues present in the website” David is referring to, as I can't find any errors. Broken links, check. Keywords not in a good position, um … I guess? Errors and issues? I'm not seeing any.

But I was curious, and I decided to check out the domain he sent the email from, weboptimizes.com. And wow, what a wonderful site:

Index of /

Apache Server at weboptimizes.com Port 80

Index of /

Index of /

Half the links there are forbidden, and the other half return no information.

I really have to wonder how much of an “expert” David is, and what “leading SEO service provider company” he works for. Because so far, I'm not seeing “expert” or “leading company” in this email.

So of course I replied.

From
Sean Conner <sean@conman.org>
To
David Parker <davidparker@weboptimizes.com>
Subject
Re: Serious issue found while visiting your website
Date
Fri, 17 Nov 2017 18:31:56 -0500

It was thus said that the Great David Parker once stated:

Hope everything is fine at your end.

It is, thanks. How are things with you?

PS: I am not spamming. I have studied your website, prepared an FREE audit report and believe I can help with your business promotion.

A free report? Sure, please send it to me.

I can't wait for my Free report!

Update on Monday, November 20th, 2017

I got my FREE report!

Monday, November 20, 2017

“And why beholdest thou the mote that is in thy brother's eye, but considerest not the beam that is in thine own eye?”

From
Victor Green <sales@qtonix.com>
To
sean@conman.org
Subject
Re: Attract more customers to your Website Sean - 2G
Date
Tue, 21 Nov 2017 04:27:17 +0530

Hi Sean,

Just took an initial look at your site http://www.conman.org/ and found that there are not enough keywords in the source code of your website resulting in loss of valuable opportunities.

About us, we are Qtonix Software and have been in this domain for the last decade and have amassed 500+ clients in the US alone. For details, please visit http://www.qtonix.com/.

We will not only put your site at the top of Google, but also ensure visits from target viewers. We will do a total competitor analysis and market analysis and give you 50 targeted key words to choose from (a mixture of long tail specific keywords and high volume ones). That done, we will optimize your website as per those keywords to attract the target visitor.

Your social media presence is minimal and not integrated with your site. We will do regular postings on your behalf and create and manage your brand awareness, driving in more traffic from Social Media.

Today visitors depend a lot on reviews and we will ensure that you have only positive reviews on Social Media as well as your website.

The site has an alarming 6 HTML Coding errors making it difficult for Google to navigate the site properly. You can check the link https://validator.w3.org/nu/?doc=http%3A%2F%2Fwww.conman.org.

Organic Traffic to your site using the concerned keywords is only 5 and there has been a disastrous reduction in traffic since August 2017.

I saw this spam, and I thought, this is how you sell yourself as an SEO expert! You give your company name, and specific indications of what you can fix. It wasn't until I got to the bottom of the email that I realized this was my “Free report!”

Unlike most companies, we are offering you a unique Money Back Guarantee, under which you can get all your investment refunded within the first 30 days, in case you are not happy with our services. For more details, please visit http://www.qtonix.com/money-back-guarantee/.

Please send me your direct number and a convenient time so that I can share more with you.

Thanks

Victor Green
/SEO Consultant/
Qtonix Software Pvt Ltd
p: XXXXXXXXXXXX m: XXXXXXXXXXXX
s: sales.qtonix
w: www.qtonix.com <http://www.qtonix.com> e: sales@qtonix.com

On 11/20/2017 9:39 PM, Alisha Qtonix wrote:

———- Forwarded message ———-

From
Sean Conner <sean@conman.org <mailto:sean@conman.org>>
To
David Parker <davidparker@weboptimizes.com <mailto:davidparker@weboptimizes.com>>
Subject
Re: Serious issue found while visiting your website
Date
Sat, Nov 18, 2017 at 5:01 AM

It was thus said that the Great David Parker once stated:

Hope everything is fine at your end.

It is, thanks.  How are things with you?

PS: I am not spamming. I have studied your website, prepared an FREE audit report and believe I can help with your business promotion.

A free report?  Sure, please send it to me.

So … David Parker is Alisha Qtonix? Or David Parker forwarded it to Alisha Qtonix? Who then forwarded it to Victor Green? Okay …

But then immediately afterwards, I received another email from Victor Green:

From
Victor Green <sales@qtonix.com>
To
sean@conman.org
Subject
Re: Attract more visitors to your Website Sean - 2G
Date
Tue, 21 Nov 2017 04:41:18 +0530

Apologies, the trailing mail was sent inadvertently. (Subject was wrong!)

Victor Green
/SEO Consultant/
Qtonix Software Pvt Ltd
p: XXXXXXXXXXXX m: XXXXXXXXXXXX
s: sales.qtonix
w: www.qtonix.com <http://www.qtonix.com> e: sales@qtonix.com

On 11/21/2017 4:27 AM, Victor Green wrote:

Hi Sean,

Just took an initial look at your site http://www.conman.org/ and found that there are not enough keywords in the source code of your website resulting in loss of valuable opportunities.

About us, we are Qtonix Software and have been in this domain for the …

It quoted the entirety of the previous email.

Wow.

I honestly didn't expect an answer back. And now I know where the “errors and issues present in the website” came from—an experimental HTML validator. I'm using HTML 4 for my website, and had he used the main validator, Victor would have seen my site passing quite readily. Just for kicks, I decided to return the favor and validate one of the sites sent as an example of their work and man … fifty-three errors! And just to make sure it wasn't an anomaly, I tried another one (out of the 11 sent) and this was better—only fifty errors.

Their own site does much better—only three errors, but still, if you are going to show me the errors on my page, it might be a good idea to check your own site first.

I'm just saying.

I think I should point this out to them.

Friday, November 24, 2017

Microsoft Corporation has stopped the Windows services on my computer. Fancy that

I notice that I missed a call from 866-978-7311. It's not unusual for me to miss calls on my phone, but it is unusual when unknown callers leave voice mail. Must be important, I thought, for them to leave a message. I better listen to it.

The voice is obviously a robot with a feminine voice. “8387. Let me repeat. This is very imprtant call to notify you, that your Microsoft Windows License Key, has been expired in your computer, so Microsoft Corporation has stopped the Windows services in your computer. To renew the Windows License Key, please call me 66 [sic] 978-8387. I will repeat, 866-978-8387.

Okay then! Good thing to know that Microsoft Corporation has stopped all the Windows services in my computer, given that I don't have Windows install on any of my computers. I just hate it when Windows services just run all willy-nilly on my computer. How nice of Microsoft to shut them down.

I'm not even upset that my Microsoft Windows License Key has expired, as I never purchased a copy of Windows in my entire life.

So thank you, robotic female voice from 866-978-7311 for giving me such good news.

Thursday, November 30, 2017

While my chances of winning are zero, I still have my dollar

From
John Hawthorne <XXXXXXXXXXXXXXXXX>
To
root@conman.org
Subject
Feedback
Date
Thu, 30 Nov 2017 00:09:50 +0000

Hello there,

On your page http://boston.conman.org/2009/09/14.1 I noticed that you are linking to an article about the chances at winning the lottery. I just wanted to ask for some feedback about what you thought of an article that I recently wrote.

You can see it right here:

https://www.lottoland.com.au/magazine/want-to-improve-your-chances-of-winning-the-lottery-heres-how.html

If you were interested it would be great if you wanted to add my article as a resource on the page I mentioned. If you prefer you may also republish the article.

Thank you,

John.

I suppose John was operating under the theory that “it doesn't hurt to ask.”

The post in question isn't so much about the chances at winning the lottery (although I stand a better chance of being Tom Cruise than of winning the Mega Millions Jackpot) as it's best not to play at all.

There's nothing in my post (or the article I linked to) about how to improve your chances at winning.

Sigh.

The advice given in the link (which I read so you don't have to) simply boils down to “buy more tickets with less commonly picked numbers” with some dodgy math thrown in, like this bit from the page:

Ethan Wolff-Mann puts it this way: In a basic lottery with just one prize, $1 tickets, and 100 people playing, any jackpot over $100 will mean that a ticket will be worth more than the $1 it costs. If you bought all the tickets for $100, you would win the jackpot and take home more than what you paid. So theoretically, at a certain size, a lottery ticket can actually be worth more than what you pay for it.

Yes, but …

In this case, yes, the expected value is greater than $1. So if the jackpot is $200, then the expected value is $2. But that's not the case for most lotteries. I'm looking at the latest Florida Lottery payouts, and man, the expected value just isn't there. The chance of getting 3 out of 6 numbers (easiest to win) is 1 in 71 (1.4% chance) and for that, you spent $1 to win $5, or an expected value of 7¢.

Yeah, lotteries are a tax on the innumerate.

Friday, Debtember 01, 2017

Tiny bubbles waiting to be popped by a SWAT team

Early this year, someone I haven't talked to in eight years called me out of the blue with a “business deal.” Curiosity got the better of me, and I spend most of a day talking to X about his proposal. It was odd—he was planning on taking out a loan against his house, but because he was self-employed, and his (then pregnant) wife was bumped down to part time, he was unable to get a loan of the amount he wanted. But if he got a co-signer, then he could get more than he was asking for.

And that's where I came in. He wanted me to co-sign the loan, and any excess money over what he wanted (negotiable) would come to me. Even if he defaulted, I wouldn't be on the hook because the house was worth more than the loan in any case. There was simply no “down side” to this (his words). No risk at all.

We would then use the proceeds of the loan to “invest” in Bitcoin. I told X back then that I felt it was a bubble, that I didn't know much about it, and what I did know didn't make me feel confident about it, especially the insecurity of the various Bitcoin exchanges [and to further pour salt onto the wounds, at the time, Bitcoins were worth $2,000.00 and as of today, they're worth $11,679.00. —Editor] [Yes, but the markets can remain irrational longer than you can remain solvent, and I didn't see you buying any at the time. —Sean] [Touché —Editor].

It also turns out I wasn't the first person he asked about this. X just couldn't understand why anyone would pass up such an opportunity.

I ended up passing on the opportunity. Even though I tend to view “good credit” as a means of going into debt faster, I didn't want to put my financial health (such as it is) on the line for a rather dubious sounding proposal.

I'm only bringing this up today because I heard, through a third party, what happened to X over the past few months. I haven't been able to verify this but I do trust the source.

It seems that over the past few months he grew more paranoid and irratic. He (and here the story gets a bit garbled) built? some sort of bubble machine and was trying to sell it to Disney. He spent over a month at a hotel in the Orlando area (I don't recall if it was on the Disney property or not) and eventually barricaded himself in the room with several video cameras providing coverage of the immedate area. It took a SWAT team to pull him out and in the end, he was committed to a facility under the Baker Act. His wife took their kid and disappeared, no one knowing where she went. Not even X's family knows where she is.

And that's that. A rather bizarre end to a bizarre “business deal.”

Sunday, Debtember 03, 2017

Yorick loves it when a plan comes together

[He won't tell me what he did, for dead men tell no tales.]

Yorick smoking a celebratory cigar after finally getting around to it.

Or several.

Monday, Debtember 04, 2017

“Sorry I was late to the meeting, but the firemen wouldn't let me in the building for some reason … ”

Nothing quite like showing up to work at The Ft. Lauderdale Office Of The Corporation during a fire alarm.

The cause?

The fire alarm today was indeed a real fire alarm not a test. The alarm was due to a faulty smoke detector.

It's going to be a long day …


WHAM WHAM WHAM WHAM WHAM WHAM WHAM WHAM RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR

It's still a long day.

Now there's construction going on in the office one floor up. Either that, or some firemen are still trying to rescue people from a nonexistent fire.


Yet another case where a spammer didn't bother to actually read the page

From
Jen Miller <XXXXXXXXXXXXXXXXXXXX>
To
sean@conman.org
Subject
Research on Mattresses
Date
Mon, 4 Dec 2017 09:13:34 -0800

Dear Editor,

My name is Jen and I’m a writer at Jen Reviews. I was doing research on mattresses and just finished reading your wonderful blog post: http://www.conman.org/asg-x/links.html

In that article, I noticed that you cited a solid post that I’ve read in the past: https://www.slumberland.com/

I just finished writing a guide that is even more detailed, updated and comprehensive on how to choose a mattress - 9 factors to consider according to science. It is over 7,000 words and packed with practical tips and advice. You can find it here: https://www.jenreviews.com/mattress/

If you like the guide we’d be humbled if you cited us in your article. Of course, we will also share your article with our 50k newsletter subscribers and followers across our social platforms.

Either way, keep up the great work!

Warmly,
Jen

I swear, my pagerank must be increasing or something, because I'm getting a lot more of these types of email lately. And it's clear the sender never bothered to look at the page as the page in question isn't even a blog post. It's from way in the past—October of 1998, to be exact (and I know that because this page caused Welcome Wagon International, Inc. to send a “cease and desist” letter to my previous host for violating their copyright, thus forcing me to register my own (and still current) domain).

The http://www.slumberland.com/ link on the page was actually linking to Wendy Dunlap's homepage and not to a matress company. To tell the truth, I would be surprised if any of the links on that page work—even the link to me (where my last name is mispelled “Connor”) points to a non-existant domain (which wasn't even correct when I mirrored that page in October of 1998). The only reason that page is still here is because “cool links don't change” and I was doing the smooth transition from the old host to new one. In fact, until today, I had forgotten that page even exists.

And as for what ASG-X actually was, will have to wait for another time.


“This site under construction”

And speaking of websites from the 90s, I recently came across wiby, a search engine that only returns pages that fit the 90s asthetic—no Javascript, <TABLE>-based layouts and endless “Under Construction” animated GIFs littering the page.

Wonderful stuff.

I don't even bother with searching, instead I prefer to hit the “surprise me …” link. As Douglas Adams once said, “I may not have gone where I intended to go, but I think I have ended up where I needed to be.”

Tuesday, Debtember 05, 2017

No, I didn't miss your email, I'm ignoring it on purpose

From
John Hawthorne <XXXXXXXXXXXXXXXXX>
To
root@conman.org
Subject
follow up
Date
Tue, 5 Dec 2017 05:02:45 +0000

Hey there

Just a quick follow up in case you’ve missed my email. If you’re short on time right now — no worries. I won’t bug you about it again. I forgot to mention in my previous email that you may republish my work if you prefer.

Thank you,

John.

The email continues with a quoting of his previous email.

This is something else I've noticed with this type of spam—follow-up messages when I didn't respond. I guess it works (or they wouldn't bother with it), although now I'm thinking I should update the post in question with a link to this entry just to see what happens.

Saturday, Debtember 09, 2017

A rare sight indeed

[It's sad to think that Clark Kent has to travel to West Palm Beach, Florida to change into Superman these days.]

Now that I think about it, it seems strange that Clark would even consider using a phone booth for changing into Superman. They aren't known for being all that spacious (unlike British police boxes) and they lack any sense of visual privacy.

And yet, here we are, Clark in mid-change.

Monday, Debtember 18, 2017

Star Wars: The Last Jedi

When we last left our heros, Luke looked confused, Han should have shot first, and Fin could use some Bactine.

And now on with the show …

So of course Bunny and I went to see “Star Wars: The Last Jedi” (aka “May the Porgs Be With You”) and overall, my reaction is mixed. The movie is beautiful, but that's pretty much been the case with all the Star Wars movies (even with “Star Wars: The Phantom Menace”). It's just I found the movie very uneven.

I loved the plot involving Luke, Rey and Kylo. The characters do play off each other quite well in the movie. In fact, I find Kylo to be a fascinating villain. He's dangerous but at the same time clearly conflicted with the whole “be evil” business. And I can't recall the last time I saw a villain throw tantrums like he does.

The rest of the movie? I found it mostly filler and most of it could be removed from the movie with no ill effect, especially the casino bits. The cantina in “Star Wars” was clearly a bar while at the same time being alien (I mean, aside from all the aliens in the cantina). And even the opera in “Star Wars: Revenge of the Sith” was both alien while being familiar enough to recognize it for what it was. It might seem like a weird point to make, but if you are padding a Star Wars movie, at least try to make it visually interesting to distract us from the pointless filler, and less like The Bellagio with aliens wearing tuxedos.

Overall, for me, the Jedi bits were worth suffering through the non-Jedi parts. Your milage may vary. I really can't say more without major spoilers, which I may do at some point in the future.

But I will leave you with one small spoiler—this is the first Star Wars film to show actual paper!

Sunday, Debtember 24, 2017

This is the type of White Christmas I can get behind

“You know it's Christmas Eve, right?” asked Bunny.

“Um … yeah.”

“I'll let you open a gift tonight.”

“Really?”

“Yes. No, not that one.”

“Oh.”

“No, not that one either.”

“Well, which gift then?”

“Look in the freezer.”

“The freezer?

“Yes. The freezer. The one in the garage.”

“Okay. … NO WAY‽

“And check the oven for the authentic automotive industry steel pan.”

NO WAY‽

[It came in a box made out of New York style pizza.]

An authentic Buddy's pizza, delivered over 1,200 miles frozen, and a proper pan to finish cooking it in.

I can't thank Bunny enough.

Monday, Debtember 25, 2017

Welcome back, Bunny, part II

Because we loved it the last two times we ate there, and because it was a special occasion, we went back to Roots Italian Kitchen for Christmas dinner.

As soon as we sat down, the owner came over to our table. “You were here last Valentine's Day, weren't you?” he asked. “And you were here one other time, right?”

It's one thing to remember customers after nine weeks, but to remember them after nearly nine months? We're just amazed each time we come back to this place.

The food was so good this time, I forgot to take the Obligatory Picture of the Empty Plate.

Obligatory Picture

[The future's so bright, I gotta wear shades]

Obligatory Contact Info

Obligatory Feeds

Obligatory Links

Obligatory Miscellaneous

You have my permission to link freely to any entry here. Go ahead, I won't bite. I promise.

The dates are the permanent links to that day's entries (or entry, if there is only one entry). The titles are the permanent links to that entry only. The format for the links are simple: Start with the base link for this site: https://boston.conman.org/, then add the date you are interested in, say 2000/08/01, so that would make the final URL:

https://boston.conman.org/2000/08/01

You can also specify the entire month by leaving off the day portion. You can even select an arbitrary portion of time.

You may also note subtle shading of the links and that's intentional: the “closer” the link is (relative to the page) the “brighter” it appears. It's an experiment in using color shading to denote the distance a link is from here. If you don't notice it, don't worry; it's not all that important.

It is assumed that every brand name, slogan, corporate name, symbol, design element, et cetera mentioned in these pages is a protected and/or trademarked entity, the sole property of its owner(s), and acknowledgement of this status is implied.

Copyright © 1999-2024 by Sean Conner. All Rights Reserved.