Fang: I don't get to do any creative writing in my core extension class.  The next thing I have to write is about immigration.

Me: What do you have to write?

Fang: An essay from the point of view of an immigrant coming to Ellis Island.  And we have to do a bibliography.

Me: Did your teacher specify a year?

Fang: No.

Me: Well, if you choose a poor person coming over in the early 1900s, the conditions on the ships were terrible.  People huddled on the floor in family groups, not always enough beds or any beds for a transatlantic voyage, there were vermin, poor sanitation, little food ... you could tell some really gruesome stories.

At this point, Fang, who adds, quite correctly that the late 1800s also qualifies, is grinning like a jack-o-lantern.  Gruesome is his bag, baby.

MORE
11/19 '14 7 Comments
New York Harbor, 1905.
Oh heavenly, fertile writing ground.
I can smell the tertiary syphilis from here.
I'm curious to know what essay format they want him to use. we learned a funnel system leading to a thesis statement (blank must blank in order to blank), followed by examples, and then a conclusion that summed it up. I'm wondering what they want in terms of craft.


share this with him. it might help, it might not.
I write fictitious plays based on true people and events. what I do is I read as much as possible about the true people and events. then I sit back and think about them until I come up with what the characters want, how they intend to get it, and what obstacles are in their way. Then I think about how they're likely to end up as a result.
then I think about what actions they need to take to get what they want.
then I write the play.

hope it's helpful.
This is great advice.
That's my fang! (also want to read snippets!)
Gruesome is good. Will you post a snippet or two?
I'll ask him!
I'd also love to see what he does with this.
 

Hey guys, no robitussin for me tonight. So I managed to shake loose some time to work on OPW's link-sharing features. The jump from the hack I had before to handling this... closer to properly... was a big one, but there's definite progress.

Here are some examples:


This strip has nonexistent semantic markup, which is geek-speak for "it's hard to embed it right," so I'm pleased with how they turn out now when you just paste a link to that day's comic page. I had to edit the title a little, and supplied my own description; it automatically picked the right image (the largest one, by area). You can also tap on the image to cycle through alternatives, if any decent ones were present.


Girl Genius looks good too. There was a problem with overlap— oops, I fixed it.


XKCD: 100A.


This one has an automatic summary, because they supply a proper og:description element. The best available image is pretty crap, though; reminds me that I need to add an option to remove the image entirely.

I also found a few links just now that don't work at the moment. Probably I need to specify a user agent string and then they will cooperate perhaps.

This is an iterative improvement; more are planned. Please do open issues via the bug button.

Thanks!

MORE
11/19 '14 14 Comments
I heart Agatha Heterodyne. (And of course who doesn't love XKCD?) I'd never seen the mutant babies one before. Cheers for that.
When I read this post with Chrome on my Android device, the images are left-justified, but too large to display, so it cuts off about a fifth of the image on the right-hand side. Images that are not part of links, on the other hand, are shown in their entirety, as in your "An oldie but goodie" post from a while back.
Roger that. I need to check out the mobile treatment. Thanks.
Yay! Two things: 1) I did not know that clicking a pic will click me out of OPW, and coming back is always a pain because expanded posts recompress and I lose my spot; and 2) I love reading the hover text in XKCD cartoons, and it's not showing, but that's a small one.

Great work! I can imagine the jump to this required a lot of work. xoxo
Thanks for the feedback!

1. Some people love "click to open in new tab." Some people think it's the devil. Opinions welcome. As for expanded posts recompressing, that is something we ought to fix by recording that information in the hashtag part of the URL, so that we can re-open things correctly when you click "back."
2. I'm not gunning for "don't bother clicking through to the other site to read the funny" here, as content owners tend to take a dim view of that, and for understandable reasons. The size is meant to be big enough to look cool and get the idea across but still leave you interested in viewing other people's stuff. Not, um, stealing their stuff.
I'm in the camp that views opening links in a new window/tab as breaking the back button. Or, the Devil. It's trivial to ctrl-click if you want to force a new window, but there's no way to easily tell a link to open in the same window (nor should there be, because that has always been the default).

In case you wanted opinions.
Seems like good logic to me.
Opinions appreciated!
I prefer links to by default open in a new window unless the back button works perfectly, and I mean perfectly, every time, and I mean every time.
Yeah, I think that should be our ambition but we haven't done much with paying attention to it yet.
Excellent point on both accounts. :)
The XKCD strip makes me wonder if perhaps bringing the alt and/or title (I forget which he uses) attributes across might be nice.
As I was saying to Karen, I'm actually bringing over images big enough that it's perilously close to "don't bother going to that other site that totally owns this image" as it is. So I reckon I need to leave some curiosity pointing in the direction of clicking through, or people may be quite understandably put out with me.
That is completely cool, and it did cross my mind, but you know, one likes to float ideas. :) I'm definitely all for supporting the creators, which reminds me, I need to go poke at my Patreon account...
 

Lots to love on this list.  Good food for thought.





MORE
11/18 '14
 

I loved Morgan the Unicorn so much I wanted to name a future daughter after her. I'm trying to remember how young I would have been to be into these.

MORE
11/18 '14 12 Comments
I LOVED Morgan...all things unicorn, really. I still have some of those Serendipity books and still pick up ones when I see them. Been eyeing ones on Amazon for my best friend's daughter. I was just talking the other day to someone about my unicorn collection, specifically that I still have my My Little Pony unicorns. :) This post really makes me happy that someone else remembers Morgan.
I also collected Sue Dawe unicorn posters. Remember this one? http://i.imgur.com/rhfzeQh.jpg I had it on my bedroom door for years.
I feel like an uneducated arse... I never even heard of these before. Must make up for lost childhood STAT!
No, really, this could be entirely buried under charm bracelets, Strawberry Shortcake, and all the other more common items from Way Back When. I just caught a thread of a memory when I heard the name Morgan last night. I was lucky to get a hit on the correct cover art to pick up the rest.

I am always for making up for a lost childhood. Still working on mine. (I haven't made it out of kindergarten, yet.)
I actually have never heard of these either. I probably would have loved them as a kid, too. Now I have boys and unicorns are Right Out, but since even my toddler is a rabid, drooling Labyrinth fan, I really have nothing to complain about.
I remember getting this series for my daughter, born in 1990.
Unicorn Club Forever! (I made a unicorn club when I was 11. Your daughter is an automatic member.)
I looked, just for fun. 1892 for Morgan and Yew! http://en.wikipedia.org/wiki/Serendipity_%28book_series%29
Wow, did not realize how old these were. I guess I should say I don't know how old I was when these particular printings were out. I recognized the covers instantly. Thanks for the link!
...and now I know the Morgan books came out from 1975-1982, which lines up perfectly with me being 6 and under. Nice trip down memory lane. :)

Morgan and Me 1975 Treat others the way you would like them to treat you
Morgan and Yew 1982 Love is the most important possession we can have
Morgan Mine 1982 To have a friend you must be a friend
Morgan Morning 1982 Sometimes we must lose in order to gain
my family went to nyc when i was 11.
my aunt lived around the corner from the cloisters.
seeing those unicorns locked in pens and stabbed
angrier and sadder than i had ever been before
the security guard helped me get outside like he understood
Life is a curious tapestry of events.
 

Yup it's cold in Chicago today. I hate the cold just as much (if not more) than most people I know. But ya know what? I woke up under a pile of blankets in my heated home. Took a hot shower, and then put on clean clothes that were warm and dry. With a full stomach, I chose which coat to wear and opened up a box full of mittens, gloves, and scarves to layer on. I know that no matter what happens today, I will have food to eat and safe, warm spaces to dwell. Counting my blessings today and wishing that this was the norm for everyone. ‪#‎HandHWeek‬ ‪#‎NHHAW‬

MORE
11/17 '14
 

I'm reading Wolf Hall right now.  It's the first book of three in Hilary Mantel's trilogy about Thomas Cromwell.

It feels pretty much like standard historical fiction so far.  Because the back story is so complicated (dear me, but the 15th and 16th-century English royal family trees are confusing), she has lot of different tricks to give it to us: characters just recalling it as (boring) internal monologue, dialogue, legend.  It's well written, but feels anachronistic in parts.  You know, historical fiction.  In high school, to avoid 11th-grade English, I took a course called "History through Literature", which was basically a course made up of historical fiction (we did read some Shakespeare), and sure, at various times over the course of my life, I've read quite a bit of it, though my preferred English period is around 350 years earlier.

And sure, Thomas Cromwell is pretty cool to learn about.

But I can't help but think it's a little much that both this book and its successor won the Man Booker Prize. 

And yet.

There's gender afoot.  Basically, I'm saying that I don't think that historical fiction, as a genre, is really literature.  (That's probably true. I probably don't.)  But of course, it's a genre mostly written by women, while "literature" is more often written by men. 

And yet I think it's good genre fiction.  And yet, I like musical theatre, not opera, and I think that "Show Boat" is as important as any opera.

MORE
11/17 '14
 

There was a post here, but I lost it switching things around and being a general dingus. *salutes*

MORE
11/17 '14
 

Houser: My question is, how do I get you to nap?

Beeble: Your question is tigers.

Houser: My question is not tigers. Maybe that's your question.

Beeble: Nooo. My question is leopards.

MORE
11/17 '14 6 Comments
What have I til you about lion to me?
Such a cheetah.
He'll never prosper.
Hello, Dalí, well, hello, Dalí, it's so nice to have you back where you belong.
That's an Ocelot of questions!
 

This is another post about Blindside, the text-only realtime RPG I'm working on. At the moment, I'm both looking at tools and options for building game maps, and implementing tools for the game's AI.

The game is intended to be large and complex enough that I am creating it in two pieces: "engine" and "content". Let me explain, if you're unfamiliar with these ideas. The engine is software, and it does all the housekeeping like keeping track of your location, stats, inventory and health, and also figuring out what you can see, who you can attack, where you can move, and so on. The content is the all the stuff the engine needs in order to tell a story. So there's maps, descriptions, dialogue, lists of NPCs and so on.

In a sense, the engine is like a video game console. It doesn't do anything until you add some content in the form of a game. And then it comes alive. (Oldbies will be familiar with game engines like SCUMM, used for the Lucas Games graphic adventures; and the Z-machine, used by Infocom for their text adventures.)

The great thing about splitting apart the engine from the content is that if you design the engine right, you won't have to change it once it's finished. You just start the engine up and point it at the content. And you can then spend the rest of your development time working on content, and even keep making more content even while the game is running.

Because I want the monsters and NPCs in the game to have very different responses to the player, have some decent agency, and to actually be difficult to beat in a fair fight, the AI system needs to be both powerful and flexible. And when you want to teach a computer to do things both powerfully and flexibly, inevitably you'll want to create a language to do that. And, traditionally, when a game engine has a language built into it, it's called a "scripting" language, because you're creating a script for the characters, locations and items in the game. 

So Blindside will have a scripting language of its very own.  But wait, I can hear the wailing of the nerds -- there are scripting languages out there already! Why invent a new one? You could be creating content or making your engine better, why waste time on making a new language too? There are often justifications for making a new language, especially when the use for that language is very specialized.

One problem with many modern computer languages is that they are so generic -- so applicable to any problem -- that while they can do almost anything, you have to be extremely verbose and specific about exactly what you want done. You might like to think of generic languages as a big pile of 2x4 lumber and a huge pail of nails. You can build almost anything from a doghouse to a four story apartment building with these components, but it's going to take a long time and you have to be very careful and precise. A custom language, gives you the equivalent of panels for a prefabricated house. While you can only build certain kinds of rectangular houses of certain sizes with these panels, they go together very quickly and they work very well.

In computer science more broadly these kinds of specialized languages for making "prefab" houses are Domain Specific Languages, or DSLs, in that they're languages specifically made for a particular domain/use.

The goals for the AI language are that it should be very easy to understand (so one can review it at a glance), very easy to write (so I can teach it to others), be both terse and obvious, and still be flexible enough to allow lots of different tactics. 

The language is still in flux but I thought I'd show you a bit of what it will look like. This little bit of code might be attached to an NPC that is part of a team of fighters, or maybe even a friend or companion to the player. 

See if you can figure out what this does just by reading it.

  first ally poisoned having health<25% order by health
    definitely cast remove poison order by speed
    possibly use remove poison having quantity>3


It should be pretty clear: If there are any allies who are poisoned and dangerously low on health, pick the one who has the least health and cast the fastest spell available to cure their poison and then end the turn, but if no such spell is available or we can't cast it, then if we have at least four items in our inventory that can cure poison then we might use one, but we'll also check for other things to do.

This is some pretty complex behaviour expressed in a fairly concise fashion.

And this code actually works, at least to a degree. What is happening right now is that the above three lines are converted by a compiler into about twenty lines of Javascript that do exactly what is described. (I'm not going to show it that because it's huge and ugly).

The cool thing about a compiling the AI code right into the same language that the engine is written in is that the AI code runs just as quickly as the engine itself. This is kind of unusual for DSLs and scripting languages in general -- usually they're interpreted step by step by the main engine program, or by a helper program called a library. 

But making this a compiler is great news for Blindside -- it means the AI can be quite complex and still not bog down the system even if there's a few thousand creatures roaming around with their own little agendas. It also means my job creating the engine is somewhat harder, but that's a good trade-off. As a programmer, my job is to make computers useful and helpful.

And if by putting a little more effort into my work makes the work of others much easier, then that is what I like to call design leverage. If I spend an extra hour, or week, or month, in making something better so that all of the dozens or thousands or millions of people who use it can get an extra second, or minute, or hour of time back or make their use of my project more enjoyable, or at least suck less, then that is time very well bargained.

And now we're at risk of veering into my whole philosophy of engineering so I think I'll wrap this up now. Thanks for reading, if you made it this far, and thanks for trying, if you didn't.

MORE
11/16 '14 8 Comments
Although I wonder if you are actually using SQL on the back end, since it reads like that flavor of language.
I've adopted a few SQL-like idioms, but not for technical reasons. There's also a AppleScript feel in the simple declaratory English verbs, and the use of prepositions instead of punctuation.
Nice! Just to play devil's advocate, you could say this not too much more verbosely if you wrote it in JavaScript using lodash... Well, you'd have to type "function" a lot. You could target that with your computer for output that is easier for you to follow perhaps.
With your compiler rather.
It indeed uses map, filter and sort functions to do some of the heavy lifting, but there's also some context management and dereferencing going on which bloats it up.
Something to consider is to try and get a minimal viable product in place, and to open it up to a small set of people to start to play with. Are you going to allow community to help create content?
Indeed, the short-term goal is to get a full stack engine with basic content up as soon as possible. Realistically it will probably be a few months even to that point because I don't want to be changing things too much once the world begins to connect to it.

I am still on the fence regarding community content. On one hand, yes I'd like to be able to flesh the world out quickly and with many varied experiences, but on the other hand I very much want the user experience to be consistent and progression-driven, which is tricky even in a tightly-knit group of developers.

The answer may lie in an approach such as that offered by e.g. Little Big Planet, where there's a main story that's tightly architected, and then user content that lives in its own shards and puts the player completely at the mercy of those who construct it. I used a similar approach in the early 90s in a somewhat similar multi-user environment called Universe, and it was effective enough but did have the problem of too many cooks creating too much tepid soup, and not enough customers willing to taste their way through the menu.
Glad to hear you are at least considering community content. I agree that a lot of community content is of questionable value, although there is often a rare contribution or two that can even outshine the primary source.
 

I attended Barcamp Philly today.

"What the heck is a barcamp?" you cry. A barcamp is an unconference.

"What's an unconference?" you ask. An unconference is a DIY conference. People who want to speak show up bright and early, write their name and the title of their talk on an index card, and slap it up on a grid of times and conference rooms. The board fills up, aaaand... that's the conference! Attend whatever talks strike your fancy.

"Why's it called barcamp?" you inquire. Because O'Reilly Associates, the people who publish those technical books with the animals on the covers, sponsors an annual conference you're not invited to called foocamp. And programmers like variables named "foo" and "bar." (Plus: "Friends Of O'Reilly.") Thus the joke.

"Why foo and bar?" you persist. The generic term "foo" dates to the 1930s and was popularized by a Smokey Stover cartoon, according to Internet RFC 3092, "Etymology of Foo." It was likely derived from the Chinese character "Fu." During World War II, GIs popularized the phrase FUBAR (F****d Up Beyond All Recognition). Thus after the war it was natural to think of "bar" as what comes after "foo."

"What talks did you attend?" I went to "You Are Not the User" by Shawn Berven, who covered a table with diabetes test gear and then explained what it takes to design products that are right for actual people... people who are not you.

I went to "Come On... It's in the Requirements" by Sloan Miller and Abby Fretz, who discussed the concept of the HIPPPO... the HIghest Paid, most imPortant Person in the room... who is guaranteed to be ill-informed and have strong feelings about everything.

I went to "Urban Exploration," by phillystomp, who showed us what she found when she snuck into abandoned Philadelphia public schools.

I missed an awesome talk by an eight year old girl about how to use iMovie because I was giving a talk of my own.

I went to "Web 0.9," where Greg McGee told us about headspinny new toys like WebGL and WebRTC.

And I wrapped up my day with "Geek Theater," an improv experiment by Lauren Galanter and friends. This turned into a panel discussion between an eight-year-old boy, an angry Philly cyclist, and Neil deGrasse Tyson. Hilarity ensued.

"Hey wait up! Did you say you spoke today?" Why yes, I did. My talk was entitled "javascript games, a HOWTO: thanks, Obama!"

"Why 'thanks, Obama?'" Because my friend turned 40. My friend sells health insurance, and his career got going as Obamacare was gearing up. I happen to think Obamacare has helped millions of people. It's also been an administrative clusterf***, no question. That created opportunities for people like my friend. So for his birthday, I whipped up a video game in which he must intercept as many potential customers as possible without running into any Tea Partiers. Because that makes Obama sad, you see.

This morning, I realized the game was just a talk waiting to happen, so I made a few changes to respect his privacy and "Willy Loman Sells Obamacare" was born.

"Why JavaScript?" It's the language of the web browser. And lately, the webserver too, but that's off topic. Everything can browse the web at this point, and it's a very easy language to code in, so if you want to whip up a game in a hurry that's your ticket.

"So you spent 45 minutes explaining a simple video game?" Well yeah, because details matter. But it was also a trojan horse for my favorite geeky rant, "this" considered harmful, in which I tell JavaScript programmers to stop stuntin' and frontin' and doin' things that are hard and save their best energies for the actual problem they are trying to solve.

"So how was it?" Oh, it was a blast, straight up. I've attended barcamps before, but it's been a while since I spoke at one, and I'd forgotten how good they can be. I attended JSFest in San Francisco this year— which required I get on airplanes— and honestly I got just as much out of barcamp today in many ways. I just love the vibe. I like the technical stuff, but I think I like the nontechnical stuff even more. You should absolutely attend the next barcamp in your area.


MORE
11/15 '14 5 Comments
Fantastic! I'm gonna send "Willy Loman" a link to your post.
I actually never knew the origin of the name.

Also? Super glad you gave a talk. Just wish I could have been there.

Also also? I bet "Willy Loman" loved it.
I really like how much the people on your post feel the need to tell you that, once you became a decent JS programmer, you wouldn't need this crutch.

When I stopped trying to pretend there was any chance I could learn C++, I took a moment to be grumpy at all the people who told me that all I needed was time. "No, you *$!(&), what I needed was the language's inheritance model to make sense, or for there to be a workaround."
Indeed. My ability to handle it is not in question. Everybody else's grasp of time management is.
This sounds like a Really Good Time.