FB Doug Meet

Search This Blog

Loading...

@mrjyn

June 2, 2011

Hank Williams and Miss Audrey Praying...for MORE SIN!!!

violated content: if liking this is wrong i don't wanna be right

NEW Mickey Mouse

WWW clouds

ROLLING STONES MOTHER'S LITTLE HELPER

GARBAGE PAIL KIDS ISRAEL HEBREW

Festival of Light 2011

Фестиваль света 2011

via rutube.ru


Профайл mrjyn

mrjyn

 Fiona Apple Wants Everything - Dogmeat Fiona Apple Wants Everything - Dogmeat Fiona Apple site:whatgetsmehot.blogspot.com OR site:visualguidanceltd.blogspot.com - Google Search This video is a response to Fiona Apple - Every Single Night Fiona Apple Wants Everything via @mrjyn Every single night I endure the flight Of little wings of white-flamed Butterflies in my brain.site:whatgetsmehot.blogspot.com OR site:visualguidanceltd.blogspot.com - Google Search Fiona Apple - Google Search Fiona Apple - Google Search Fiona Apple - Every Single Night - YouTube Share a link on Twitter ‘I Just Want to Feel Everything’: Hiding Out With Fiona Apple, Musical Hermit -- Vulture Fiona Apple Wants Everything Fiona Apple Wants Everything Share a link on Twitter Vulture (@vulture) on Twitter Facebook ‘I Just Want to Feel Everything’: Hiding Out With Fiona Apple, Musical Hermit -- Vulture


via ...»See Ya

Youku Buzz


Perfect American

May 2011 Newsletter


Youku <pr.en@youku.com> Thu, Jun 2, 2011 at 2:58 AM

Youku Buzz (newsletter)May, 2011

 

Subscribe to this Newsletter

 
This Month's Most Viewed

Country Love - Professional Content

With more than 100 million views and nearly 52,000 comments since its Youku premiere on May 5, this month's most-viewed professional content is Country Love, a TV series from beloved Northeastern Chinese comic Zhao Benshan. Country Love is a light comedy that looks at the ways in which rural residents' lives are changing for the better.
 

BMW Woman vs. Karry Girl - UGC Content

This month's most-viewed UGC purports to be a paike video of a fight between a wealthy young woman driving a BMW and a (presumably) less well-off young woman driving a cheap Karry minivan. Videos dealing with the worsening gap between China's haves and have-nots are always popular with netizens, and with 3.75 million views in May, this one was no exception.

 
   
Youkulest

Pi San, Creator of Miss Puff, to share his thoughts

After four episodes and more than 7.5 million views, Pi San, creator of the Youku animated series Miss Puff, shares his thoughts on the series and on the potential of new media for independent artists.

Q: Every episode of Miss Puff revolves around a new object and a new male character. How do you come up with ways to tie the given objects to the characters in the story -- is there ever a story behind which things you choose to feature?

A: The episodes aren't just about objects; they're about Miss Puff's understanding of human emotion -- and not just of love, either. The 'hourglass' in the first episode, for instance, is a metaphor for truth and lies; the 'wine' in a metaphor for fate...every one of these, I think, reflects an aspect of Miss Puff's personality -- the way she looks at things and the way she looks at the world. Primitive peoples used to worship totems; in our stories, I think we're doing something similar, just with different people and different objects.

More of his thoughts can be found in our buzz.

 
   
Hot Topics

Yangtze Drought

The Yangtze River Delta has been hit by the worst drought in 50 years, causing massive damage to crops and necessitating an unprecedented release of water from the Three Gorges Dam upstream. More than 1,300 lakes have been rendered useless for irrigation and drinking water; boats have been left stranded, and a 220-kilometer stretch has been declared off-limits for container ships. Video from a paike outside Hengyang, Hunan province shoes how bad the situation is, with paddies rendered useless for planting and fields parched and cracked. It is a very sobering video.

The Yangtze River Delta has been hit by the worst drought in 50 years, causing massive damage to crops and necessitating an unprecedented release of water from the Three Gorges Dam upstream. More than 1,300 lakes have been rendered useless for irrigation and drinking water; boats have been left stranded, and a 220-kilometer stretch has been declared off-limits for container ships. Video from a paike outside Hengyang, Hunan province shoes how bad the situation is, with paddies rendered useless for planting and fields parched and cracked. It is a very sobering video.

 

Time to Graduate

It's graduation season, and outgoing students are uploading scores of videos looking back at their college years. Many are maudlin; most are filled with in-jokes that are probably incomprehensible to anyone who didn't share their college experiences -- but this well-made time-lapse video, featuring views of the student's campus over a four-year period, is a simple, quiet reflection on what it means to spend four years together. Well worth a look. The end credits are a mini-resume for Liu Jin, the recent graduate who made the film. Anybody hiring?

It's graduation season, and outgoing students are uploading scores of videos looking back at their college years. Many are maudlin; most are filled with in-jokes that are probably incomprehensible to anyone who didn't share their college experiences -- but this well-made time-lapse video, featuring views of the student's campus over a four-year period, is a simple, quiet reflection on what it means to spend four years together. Well worth a look. The end credits are a mini-resume for Liu Jin, the recent graduate who made the film. Anybody hiring?

 

Wang Gongquan Gets Something Off His Chest

Billionaire investor Wang Gongquan made headlines earlier this month when he announced on his Sina Weibo microblog that he was leaving everything behind to elope with his long-term mistress and fellow venture capitalist Wang Qin. He'd been working up to it for some time, though, starting with cryptic little messages on his Weibo account and building up to his 'Song of Elopement,' a stirring ballad of his own creation, in which he sings that throughout the ages, love has always been more precious than gold.

Internet users, being a cynical sort, have suggested that Wang only made the announcement as a way of promoting himself. It's been two weeks since he eloped, and so far no answers have been forthcoming.

 
   
This Month in Kung Fu
On May 12, Shi Liliang, a kung-fu master in Quanzhou, Fujian province, set a personal record for the Shaolin technique of 'shui shang piao' ('drifting over the water') when he ran 40 meters out into the water supported by nothing more than a few flimsy pieces of plywood. One of our paike was there to capture the scene.  

Barack Obama Savors the Moment

One of the sweeter bits of video editing we've seen in a long time, this user-generated video depicts the inside of Barack Obama's head after the weekend in which he destroyed both Donald Trump and Osama Bin Laden.

 
   
Viral Ad of the Month
High School Teacher Rocks iPod Touch

A teacher at the experimental school affiliated with Xiamen University shows off his piano chops (and his ability to navigate two tiny piano keyboards with hardly any slipped notes) by playing the theme to 'Pirates of the Caribbean.' We're not actually 100% sure that this is a viral ad, but netizens are, as usual, asking the questions nobody else dares to ask -- in this case, why the envelope bearing the name of the school is so prominently displayed.

 

Happy Children's Day!

June 1st is Children's Day in China, and we're celebrating with a dose of Xiao Bao, everyone's favorite pint-sized pirouetting prodigy. Xiao Bao won hearts around the world with his Michael Jackson dance routines; in this video, we take a look behind the scenes at his history and all the hard work he puts into training. Happy Children's Day from all of us at Youku!

June 1st is Children's Day in China, and we're celebrating with a dose of Xiao Bao, everyone's favorite pint-sized pirouetting prodigy. Xiao Bao won hearts around the world with his Michael Jackson dance routines; in this video, we take a look behind the scenes at his history and all the hard work he puts into training.

Happy Children's Day from all of us at Youku!

 
   
   
   
http://www.youku.com  

May 2011 Newsletter ...»See Ya

June 1, 2011

Лучшее видео за неделю от Rutube


Лучшее видео за неделю от Rutube


Салют, наш ненаглядный пользователь! Надеемся, что лето наступило именно там, где ты живешь. И что оно зацепило выходные!;-)

Мы продолжаем искать сумасшедших людей, чтобы пристроить мини-чоппер, вело-чоппер или ролики! Участвуй в нашей видео-битве «Crazy»! Сними crazy-ролик, выложи его на странице конкурса и получай призы! Известность прилагается!;-) Инструкция - здесь!

Лучшее видео за неделю от Rutube:


Милые, смешные и забавные детки жгут!
http://rutube.ru/tracks/ 4473179.html


Это было уморой дня, а стало уморой недели!
http://rutube.ru/tracks/ 4487288.html


Совершенно сумасшедшее катание на снегоходах в новом трейлере Slednecks 14. Просто эпик!
http://rutube.ru/tracks/ 4485963.html


Самый известный в интернете кот - Мару - отмечает День рождения. А мы смотрим чумовую подборку о нем.
http://rutube.ru/tracks/ 4470428.html


Арктика в Time Lapse HD. Нереально красиво!
http://rutube.ru/tracks/ 4491789.html


Мегамульт! В то время как жена проходит курс «похудения», любопытствующий муж узнает различные секреты этого не совсем обычного центра.
http://rutube.ru/tracks/ 4485028.html


Армин Ван Бюрен и Софи Элис-Бекстор - великолепное видео на отличный микс!
http://rutube.ru/tracks/ 4473837.html

Спасибо, что ты с нами! Пятница скоро!;-)


Искренне твоя, команда RuTube

Если тебе не нравится что-то в рассылке и ты знаешь, как сделать ее лучше - пиши! Ну а если почему-то все-таки хочешь отписаться, то ты можешь сделать это в разделе настроек подписки своего профиля: http://rutube.ru/journal/ profile.html?rm=subscribe

Лучшее видео за неделю от Rutube Салют, наш ненаглядный пользователь! Надеемся, что лето наступило именно там, где ты живешь. И что оно зацепило выходные!;-) Мы продолжаем искать сумасшедших людей, чтобы пристроить мини-чоппер, вело-чоппер или ролики! Участвуй в нашей видео-битве «Crazy» ! Сними cra ...»See Ya

MAGAZINE MOUNTAIN

I have to get rid of some magazines before my shelves collapse! I'm going to sort through them, I've got to keep my favorites!

Wearing Prada pumps, AG jeans, a cashmere turtleneck from a thrift store, and a vintage stole. I got the glasses from a vintage store in Austin.

 

Kim loves to read!

I have to get rid of some magazines before my shelves collapse! I'm going to sort through them, I've got to keep my favorites! Wearing Prada pumps, AG jeans, a cashmere turtleneck from a thrift store, and a vintage stole. I got the glasses from a vintage store in Austin.   Kim loves to read! via sea ...»See Ya

Google 'Number One's' All Over Facebook!

Add the +1 Button to Your Blog

Posted by Marcos Almeida, Software Engineer

“+1” is often used as a digital shorthand for “this is pretty cool.” It’s also a way for friends, contacts, and the rest of the world to find great things on Google search. Google launched the +1 button back in March as a way to help share web content and make search more personal and relevant. For more information about the +1 button, you can watch this short video:

Since Google made this feature available, web publishers and bloggers have been asking us how they can add the +1 button to their sites, including Blogger blogs. Today, we’re excited to let you know that you can add the +1 button to Blogger blogs with just a few clicks.

To add the +1 button to your blog, you’ll need to enable Share buttons on Blogger. To do this, go to Design > Page Elements on your Blogger dashboard, find the Blog posts area, click on Edit, and select the “Show Share Buttons” option. If you are already using Share buttons, the +1 button will automatically show up as a new share option.

By adding the +1 button to your blog, you’re providing an easy way for your visitors to recommend your posts to their friends right from your blog. Here’s how it works: Let’s say you blog about biking. One of your readers, Tom, finds your recent post about mountain biking interesting, and clicks on the +1 button. Now, when Tom’s friends and contacts search for biking or mountain bikes and your post appears in Google search results, they might see an annotation showing that Tom +1’d your post, helping your content stand out.

[Example of how a blog post +1’d by visitors appears on the Google search results page]

We hope +1’s will help your blog stand out better in search results, which could increase both the quality and quantity of traffic to your blog. Now, that’s indeed a big +1, isn’t it?

Add the +1 Button to Your Blog Posted by Marcos Almeida, Software Engineer “+1” is often used as a digital shorthand for “this is pretty cool.” It’s also a way for friends, contacts, and the rest of the world to find great things on Google search. Google launched the +1 button back in March as a way ...»See Ya

DTs

Native food (1945) - National Library of Medicine

May 31, 2011

night.css - Google Search Trend Volcanic

  • Weirdest CSS #3 'Night Vision' Style Fantasai - Dogmeat Pad

    May 31, 2011 ... Appendix B: Night Vision Style Set Tags The following style tags are defined by this appendix: day This style set provides a color scheme ...
    limbsandthings.typepad.com/.../weirdest-css-3-night-vision-style-fantasai.html

    You You shared this
  • [Fix] night.css footer position fix - Bugs & Error reporting ...

    4 posts - 3 authors - Last post: Apr 3
    [Fix] night.css footer position fix (Page 1) - Bugs & Error reporting - Codefuture Forum - PHP Scripts, Css, HTML, Javescripts Code Generators.
    forum.codefuture.co.uk/viewtopic.php?id=95 - Cached
  • Lobster Night CSS

    Hi All! I see Lobster Night is on Wed at CSS. Is Lobster served at all the restaurants? Any suggestions of where to eat or the best dish?
    couples.com/mb/showthread.php?2627-Lobster-Night-CSS - Cached
  • Armies of Night CSS Clan Video

    4 min - Sep 26, 2006 - Uploaded by sverginator
    Counter-Strike Source Video about the Armies of NIght CSS Clan (2005). Fun & CW contests.
    www.youtube.com/watch?v=4XGm2qgHgoA
  • Weirdest CSS #3 ' Night Vision' Style Fantasai - Dogmeat Pad May 31, 2011 ... Appendix B: Night Vision Style Set Tags The following style tags are defined by this appendix: day This style set provides a color scheme ... limbsandthings.typepad.com/.../weirdest- css -3- night -vision-style-fantasai.ht ...»See Ya

    W3C Emotion Incubator afraid "Do I have to go to the dentist?"

    A2.7.1.7 Emotion intensity

    Intensity can be based on numeric values (0-100), or low-medium-high categories.

    <afraid intensity="50"> Do I have to go to the dentist? </afraid>
    via w3.org

    A2.7.1.7 Emotion intensity

    Intensity can be based on numeric values (0-100), or low-medium-high categories.

    A2.7.1.7 Emotion intensity Intensity can be based on numeric values (0-100), or low-medium-high categories. Do I have to go to the dentist? via w3.org A2.7.1.7 Emotion intensity Intensity can be based on numeric values (0-100), or low-medium-high categories. ...»See Ya

    bernie

    female

    Media_httpwwwvhmlorge_adric

    All-Naked Female Japanese Orchestra
    MOTORHEAD HEADGIRL (FEMALE MOTORHEAD DISCOVERY)

    via vhml.org All-Naked Female Japanese Orchestra MOTORHEAD HEADGIRL (FEMALE MOTORHEAD DISCOVERY) ...»See Ya

    mongolianpicker

    tones

    Weirdest CSS #3 'Night Vision' Style Fantasai

    Appendix B: Night Vision Style Set Tags

    The following style tags are defined by this appendix:

    day
    This style set provides a color scheme suited for daytime use (light background, dark text). This tag is mutually exclusive with night.
    night
    This style set provides a color scheme suited for nighttime use (dark background, light text). This tag is mutually exclusive with day.

    In the following example, the author provides style sheets for both both day vision and night vision presentations of the document. Both horizontal-text and vertical-text presentations are available, but the horizontal presentation is preferred:

    <link rel="alternate stylesheet" href="vertical.css" class="vertical" title="Vertical Day"/> <link rel="alternate stylesheet" href="day.css"      class="day"      title="Vertical Day"/> <link rel="alternate stylesheet" href="vertical.css" class="vertical" title="Vertical Night"/> <link rel="alternate stylesheet" href="night.css"    class="night"    title="Vertical Night"/> <link rel="stylesheet" href="horizontal.css" class="horizontal" title="Horizontal Day"/> <link rel="stylesheet" href="day.css"        class="day"        title="Horizontal Day"/> <link rel="stylesheet" href="horizontal.css" class="horizontal" title="Horizontal Night"/> <link rel="stylesheet" href="night.css"      class="night"      title="Horizontal Night"/>

    Of the preferred style sets, the day vision variant is listed first, and so in the absence of other preferences will be loaded by default.

    The same effect can be created with fewer link tags by using @import statements: <link rel="alternate stylesheet" href="vertical-day.css" class="vertical day" title="Vertical Day"/> <link rel="alternate stylesheet" href="vertical-night.css" class="vertical night" title="Vertical Night"/> <link rel="stylesheet" href="horizontal-day.css" class="horizontal day" title="Horizontal Day"/> <link rel="stylesheet" href="horizontal-night.css" class="horizontal night" title="Horizontal Night"/>

    /* vertical-day.css */ @import "vertical.css"; @import "day.css";
    /* vertical-night.css */ @import "vertical.css"; @import "night.css";
    /* horizontal-day.css */ @import "horizontal.css"; @import "day.css";
    /* horizontal-night.css */ @import "horizontal.css"; @import "night.css";

    Acknowledgements

    This draft resulted from discussion in the CSS Working Group and EPUB Working Group and would not exist without the particular suggestion of Anne van Kesteren.

    References

    [HTML4]
    David Raggett; Ian Jacobs; Arnaud Le Hors. HTML 4.01 Specification. 24 December 1999. W3C Recommendation. URL: http://www.w3.org/TR/1999/REC-html401-19991224
    [HTML5]
    Ian Hickson. HTML Specification. W3C Working Draft. URL: http://www.w3.org/TR/html5

    Appendix B: Night Vision Style Set Tags The following style tags are defined by this appendix: day This style set provides a color scheme suited for daytime use (light background, dark text). This tag is mutually exclusive with night . night This style set provides a color scheme suited for nighttim ...»See Ya

    vertical-bouten

    Degauss

    Degauss

    Ever wonder what that "degauss" button on your monitor does besides make a buzzing noise and cause the screen to go crazy for a second? Though that's its main purpose, the degauss button has another useful feature. To understand it, you'll first need to know that the earth has natural magnetic fields. The magnetic charges from these fields can build up inside your monitor, causing a loss of color accuracy. Degaussing scares the bad magnetism out of the monitor and fills it with good karma. If your monitor doesn't have a degauss button, fear not -- many new monitors automatically degauss themselves. If you have a flat-panel display, there is no degauss button because magnetism doesn't build up in flat screen displays.

    Degauss Ever wonder what that "degauss" button on your monitor does besides make a buzzing noise and cause the screen to go crazy for a second? Though that's its main purpose, the degauss button has another useful feature. To understand it, you'll first need to know that the earth has natural magnet ...»See Ya

    My Computer Mom's New Job

    I confess to whomever may read this: I am blogging not for the sake of writing, or because I am driven to express some urgent opinion or news. I started this blog so that I can experience blogging itself. I’m a technical writer working again after a four-year hiatus, for Flock, a Web 2.0 company. If I’m going to write Help information for Flock’s users, I’ve got to understand their world, which includes blogging. So here I am.

    After giving it some thought I realized that the subject for my blogging would not be politics, or culture, or every day life. No, the obvious topic for me is what it’s like to re-enter the world of beta software and new tools and daily builds. Especially given that I’m rapidly approaching fogey-status, as a 51-year-old mom who first held a computer-related job over 35 years ago.

    My lineage is Apple, Netscape/Mozilla, and Eazel. This represents a clear path leading to Flock. But I think choosing to work within the open source community requires something more: a come-to-Jesus moment, when one realizes that the best way for a tech writer to combat evil and support the good is to work with companies building on open source. As an ex-hippy flower child sort of person, I want any work I do in the world to support people of good will, not empire builders and greed-motivated monopolies. But enough of my politics.

    My first job in computing was as a high school junior. I was given a security clearance and a stack of questionnaires containing personal data for hundreds of Coast Guard cadets. My company was trying to help the Coast Guard understand which cadets would quit after a short stint, and which ones would stay on. My job was to take data from the questionnaires and record it on giant code sheets, which would then go to keypunch operators. The resulting punched cards could be batch processed and statistically analyzed by an IBM mainframe. I don’t know if the answer was ever found. But four years ago when everyone was raving about “hanging chads,” I knew exactly what that meant.

    The best part of that job was those huge code sheets, which had the words “FORmula TRANslation” printed at the top. Also, “FORTRAN Statement.” What wonderful words! Between that and the security clearance, I felt like I was involved in some sort of arcane secret society. I didn’t resemble the rest of the company, though. While everyone else came to work in white shirts and dark neckties, I wore sandals, long skirts, beads, and the standard hippy girl long straight hair.

    I attended college at Wheaton College — not the evangelical school, but a small women’s school by the same name, located in in Norton Massachusetts. It was a great place for an incipient feminist to attend college. Wheaton was too small to have its own computer, but we had time-sharing with Dartmouth. Our time to use Dartmouth’s computer always seemed to be in the wee hours of the morning. I was one of students and faculty who took advantage of this resource. I don’t recall what I did — but I suspect it had less to do with work and more to do with figuring out the computer itself. Games? Poking around? I can’t remember, but I probably did both.

    Graduate school at Yale, in political science, brought me back to batch processing and punched cards. Woe to she who dropped a stack of cards! My most vivid memory is of offering up my stack of cards, including data cards and instructions for the statistical analysis to be performed, to the card reader. If you received back a thick stack of printout, you won. (If the stack was thin, you lost — the error statements were short.) The computer itself lived behind closed doors, serviced by quiet, nerdish technical people. In another room, behind large glass windows, sat the select group authorized to use the interactive terminals that talked directly to the computer. Later, as acting director of a data analysis center at the University of Vermont, I found out that the interactive users were simply entering lines of code that looked just like the data on punched cards.

    It was at Stanford University that I actually became hooked. As a research assistant for the Hoover Institution’s house Democrat (political scientist Heinz Eulau), I became one of the first users of the Hoover’s brand new computers. The Hoover was late in coming to computers, but someone donated two: a PDP-11 and a VAX. With my fellow research assistant and best friend Nancy, I devoted many hours to exploring these state-of-the-art machines via the text-based game “dungeon.” No graphics, no sound… just lines of text, such as “You have entered a dark cave. There is a jeweled box in the corner.” (One must type in a reply; in this example “take box” is the obvious response.)

    Soon, however, I was recruited into writing small manuals for each Hoover department that wanted to use the computers. Someone pointed out that I could be paid good money for end-user technical writing. So just as I was beginning to realize that I hated political science and could study it no longer, an alternative career presented itself.

    I convinced the technical writing department at Four Phase, a company later bought out and closed down by Motorola, to hire me as an entry-level writer. The publications group was large — we had a lot to write about, since the software was hard to use — and we worked in a set of astoundingly ugly pre-fab offices on the site that later became Apple’s campus. In 1985 I left Four Phase for maternity leave, never to return. Four Phase went out of business, and I was laid off while on leave.

    It was around that time that Nancy and I decided, in conversation over lunch at Chef Chu’s in Mountain View, that we needed to buy personal computers. I remember we agreed that PCs had been around long enough that most of the bugs had probably been worked out. I purchased an 8088-based computer with no hard disk. A few months later I installed my first drive, and set myself up with a word processor so I could work as a consultant. Eventually I worked on a technical glossary for Apple’s corporate library, met some of the staff writers at Apple, and after a few more years of consulting, became a regular Apple employee.

    Before Apple, I had worked strictly on a command line basis. I scorned menus. Why bother working one’s way through a menu hierarchy, when it was so much faster just to enter commands on one line? (I could touch type, too.) But the Apple computer I used for the library’s project had a mouse attached to it. Suddenly the point of the graphical user interface became clear. I tried an early version of Windows on my own computer (by then a 286-based one). Apple’s version was so much better — smiley icons, cute noises, etc. — that I became a faithful Apple user, as I am to this day.

    At Apple I authored many Mac manuals, graduating over time to senior and principal writer. I worked on the first generation of Power Macs, and on the first implementation of Apple’s online Help system (Apple Guide). But the romance of the browser wars — or perhaps it was masochism — enticed me to move to Netscape. Sadly, at Netscape I became mired in Netscape 6. I keep my Netscape 6 tee shirt deeply buried in my dresser drawer, but I still proudly display my Mozilla memorabilia.

    Mozilla taught me about the concept and mission of open source, giving me new hope that creativity would triumph over commercialism. At the end of the year 2000, I eagerly moved on to a position at Eazel, a startup company developing an easier user interface for Linux. Six weeks later, as the economy began its long slide, I was laid off.

    I admit: I figured that with the economy headed down the toilet, open source would die out and Microsoft would win. September ushered in a new era of bleakness and despair. I decided to retire permanently to spend my time gardening, quilting, and being a mom. I retreated. I made a lot of quilts. My daughters became adults. My husband continued to work, much too hard. Four years passed.

    Eli Goldberg, an old friend from Netscape and Eazel, finally suggested that I take a look at Flock. Bart Decrem called me, and I wandered over to Flock’s headquarters. It didn’t take long to fall for the garage filled with computers, beanbag pillows, and white boards. I discovered that the help text I’d written for Mozilla hadn’t changed much in four years. Perhaps no one’s working on it anymore. The possibility of doing a little something to help along a noble project, and lots of coffee, have drawn me out of my retirement.

    So that’s how I came to Flock, to work once again on the open source browser. It all makes sense now that I read over this saga — I can’t resist a chance to work on something that challenges that looming force in Seattle. I’m pretty confident — actually, I’m VERY confident — that Microsoft can’t dominate the Web 2.0. It simply isn’t cool enough. That, and the fact that I can walk from my house over to Flock, and the presence at Flock of many great people and one very sweet dog, makes me feel ready to work one last time on the rough edge of the software industry.

    But after this, I’m retiring for good.

    I confess to whomever may read this: I am blogging not for the sake of writing, or because I am driven to express some urgent opinion or news. I started this blog so that I can experience blogging itself. I’m a technical writer working again after a four-year hiatus, for Flock, a Web 2.0 company. If ...»See Ya

    Programming Shakespeare

    Introduction

    Late at night sometime in Februari, Kalle Hasselström and Jon Åslund (that is us, we, the authors) were sitting with a programming assignment due for demonstration at nine the following morning. It was assignment number four in our Syntax Analysis course and we were pretty tired with it. The last assignment, on the other hand, seemed like much more fun, because you were allowed to do pretty much whatever you wanted as long as it involved lexical and syntactical analysis. So instead of finishing the fourth assignment, we started making up some great ideas for the fifth, the kind you only conceive of when you really should be asleep.

    A few weeks earlier we had discovered a number of truly fascinating programming languages, such as Java2k1, Sorted!2, Brainfuck3 and Malbolge4, and we wanted to make our own. We have no idea why, but that night we were also thinking about Shakespeare in general, and Shakespearian insults in particular and three hours later we had come up with this amazing idea: the Shakespeare Programming Language, SPL.

    This is the documentation of the language and how we made it.

    Design Goals

    The design goal was to make a language with beautiful source code that resembled Shakespeare plays. There are no fancy data or control structures, just basic arithmetic and gotos. You could say we have combined the expressiveness of BASIC with the user-friendliness of assembly language.

    The course was about syntactic analysis, not compiler construction. Thus, we didn't make an SPL compiler, just an SPL to C converter. This proved to be fairly simple, since SPL can be translated directly to C, one statement at a time.

    Hello World!

    Since we don't want to break with ancient tradition, let's begin with a simple example: a Hello World program. Though it might seem otherwise, the sole purpose of this program is to print the string ``Hello World!''. It resides in the file hello.spl, and also in appendix [*]. If you want to run it yourself, consult section [*].

    Let's dissect the program and see how it works.

    Title

    The first line of every SPL program is the title. Or actually, everything up until the first period is the title, whether it's one line, three lines, or half a line. You're generally free to insert space and newlines wherever you want in the code, but we urge you to please indent tastefully.

    The title serves only aesthetic purposes. From the parser's point of view, it's a comment.

    Dramatis Personæ

    The next few lines are a list of all characters in the play. Think of them as variables, capable of holding a signed integer value. You must declare every character you intend to use, or the program won't compile.

    A declaration consists of a name, followed by a description of the character (which is ignored by the parser). You can't pick just any name, however; you must use a real Shakespeare character name, such as Romeo, Juliet, or the Ghost (Hamlet's deceased father).

    Acts and Scenes

    The purpose of acts and scenes is to divide the play into smaller parts. A play consists of one or more acts, each act consists of one or more scenes, and each scene consists of lines (where the characters say something) and enter and exit statements, which cause characters to get on and off the stage.

    Acts and scenes are numbered with roman numerals. They begin with the word ``Act'' or ``Scene'', then the number, and then a description of what happens in that act or scene. Just as with the title and the character descriptions, these descriptions are ignored by the parser.

    Besides being beautiful and descriptive, acts and scenes also serve as labels, which can be jumped to using goto statements. There are no gotos in the Hello World program, however, so we'll talk about that later.

    Enter, Exit and Exeunt

    To be able to speak their lines, characters must be on stage. The character they address as ``you'' (or ``thou'' or any other second-person pronoun) must also be on stage. But if there is yet another character on stage, it's not clear which one is intended. This is frowned upon by the parser.

    Enter Enter and Exit5. These directives cause characters to get on and off stage. ``Enter'' is followed by a list of one or more characters. ``Exit'' is followed by exactly one character. The plural of Exit is ``Exeunt'', which is followed by a list of at least two characters - or none, in which case everyone leaves.

    An Enter directive given to a character already on stage, or the other way around, will cause a runtime error.

    Lines

    A line consists of the name of a character, a colon, and one or more sentences. In the Hello World program, only two kinds of sentences are used: output, which causes output to the screen, and statements, which cause the second person to assume a certain value.

    Constants

    First, we'll explain how constants (that is, constant numbers, such as 17 and 4711) are expressed.

    Any noun is a constant with the value 1 or $-1$, depending on whether it's nice or not. For example, ``flower'' has the value 1 because flowers are nice, but ``pig'' has the value $-1$ because pigs are dirty (which doesn't prevent most people from eating them). Neutral nouns, such as ``tree'', count as 1 as well.

    By prefixing a noun with an adjective, you multiply it by two. Another adjective, and it is multiplied by two again, and so on. That way, you can easily construct any power of two or its negation. From there, it's easy to construct arbitrary integers using basic arithmetic, such as ``the sum of $X$ and $Y$'', where $X$ and $Y$ are themselves arbitrary integers.

    For example, ``the difference between the square of the difference between my little pony and your big hairy hound and the cube of your sorry little codpiece''. Substituting the simple constants with numbers, we get ``the difference between the square of the difference between 2 and 4 and the cube of -4''. Now, since the difference between 2 and 4 is $2 - 4 = -2$, and the cube of $-4$ is $(-4)^3 =  -64$, this is equal to ``the difference between the square of $-2$ and $-64$''. The square of $-2$ is $(-2)^2 = 4$, and the difference of 4 and $-64$ is 60. Thus, ``the difference between the square of the difference between my little pony and your big hairy hound and the cube of your sorry little codpiece'' means 60.

    As you see, this way of writing constants gives you much more poetic freedom than in other programming languages.

    Assignment of Values

    Now, how do we use those numbers? Well, just have a look at the two statements ``You lying stupid fatherless big smelly half-witted coward!'' and ``You are as stupid as the difference between a handsome rich brave hero and thyself!''

    The first one is simple: A second person pronoun, followed by a number. The effect of this statement is to assign the value of that number (in this case, $-64$) to the character being spoken to. Think ``$X=-64$''.

    The second one is slightly more complicated. For starters, what is the value of ``thyself''? That's not a noun, that's a reflexive pronoun. It's value is the current value of the character being spoken to. So the number in the second statement is $8 - X$, where $X$ is the value of the character being spoken to. And just as you might expect from your experience with English, the second statement is just another assignment. Think ``$X$ = 8 - $X$''. Being ``as bas as'', ``as good as'', or as [any adjective] as something else, means being equal to that something.

    Output

    The other kind of sentence used in the Hello World program is output. There are two different output sentences, ``Open your heart'' and ``Speak your mind''. The first causes the character being spoken to to output her or his value in numerical form, and the other, being more literal, outputs the corresponding letter, digit, or other character, according to the character set being used by your computer.

    In this program, we use only the second form. The whole program is a long sequence of constructing a number, writing the corresponding character, constructing the next number, writing the corresponding character, and so on.

    A Slightly Less Trivial Example

    Now for a slightly less trivial example: computing prime numbers. In the file primes.spl, and in appendix [*], is a program that asks the user for a number, then prints all primes less than or equal to that number.

    There are three things in this program that we havn't seen before: input, gotos, and conditional statements.

    Input

    The input statements work just like the output statements, except that they read instead of write. To read a number, as in this program, use the sentence ``Listen to your heart.'' To read a character, use ``Open your mind.'' The value will be assigned to the character being spoken to, as usual.

    Gotos

    A sentence like ``Let us return to scene III'' means simply ``goto scene III''. Instead of ``let us'', you may use ``we shall'' or ``we must'', and instead of ``return to'', you may use ``proceed to''. If you specify a scene, it refers to that scene in the current act. There is no way to refer to a specific scene in another act - you have to settle for jumping to the act itself.

    Conditional statements

    Conditional statements come in two easy steps, as illustrated by the following code fragment:

    Juliet: Am I better than you?  Hamlet: If so, let us proceed to scene III.

    First, someone voices a question. This is some sort of comparison, which will be either true or false. But more on that later.

    Then comes, at some later point, a conditional statement. This is constructed by putting either ``if so'' (or ``if not'') and a comma in front of any sentence - that sentence is only executed if the answer to the last question was yes (or no).

    This is pretty much like how you would do conditional jumps and things in many assembly languages.

    Comparisons

    Comparisons are constructed the way you would expect: ``is $X$ as good as $Y$'' tests for equality, with $X$ and $Y$ being arbitrary values. You may substitute ``good'' with any adjective. ``is $X$ better than $Y$'' tests if $X > Y$. This works for any positive comparative. If you want to test whether $X < Y$, use a negative comparative, such as ``worse''.

    If you want to invert the test, say ``not as good as'' or ``not better than''.

    A Slightly Less Trivial Example

    One might almost say that the language described this far ought to be able to do anything that can be done with other programming languages, albeit more flowery, were it not for the fact that the storage capacity is severely limited. There are only so many Shakespeare characters (some one hundred of them are recognized by the parser), and each of them can only store an integer of finite size. Thus the storage capacity is finite, and it follows that SPL can only handle problems of finite size.

    Realizing this, we added stacks to the language. We'll describe them in just a minute; but first, have a look at how they can be used. The program in the file reverse.spl - which can also be found in appendix [*] - reads any number of characters, and then spits them out again in reverse order.

    Stacks

    Characters in the Shakespeare Programming Language are not simple-minded, limited to remember just one number. Like normal people, they can actually remember several. In accord with modern, highly experimental psychological research, this is implemented with stacks.

    Every character can push integers onto their memory, and pop them out again at a later time. Pushing is done like this:

    Lady Macbeth: Remember me.

    This of course causes whoever Lady Macbeth is speaking to to push the value of Lady Macbeth onto his or her stack. Popping is even simpler:

    Lady Macbeth: Recall your imminent death!

    The only significant word here is ``recall''; everything that follows is artistic fluff. This piece of code causes whoever Lady Macbeth is speaking to to pop an integer from his or her stack and assume that value for him- or herself.

    Trying to pop when the stack is empty is a sure sign that the author has not yet perfected her storytelling skills, and will severly disappoint the runtime system.


    How To Compile Your SPL Program

    There is no SPL compiler. We do encourage you to write one, but at present there is only a translator, which translates SPL to C. The C file is then compiled and linked the usual way.

    Figure: Flow chart of how SPL programs are compiled.
    \includegraphics[width=1.0\textwidth]{makehello.eps}

    The entire process is visualized in figure [*]. There are two things to note. First, spl2c reads from stdin and writes to stdout, so to accomplish what you see in the figure, you would write spl2c < hello.spl > hello.c. Second, the object file must be linked with the library libspl.a, which contains such stuff as dreams are made on.

    How We Compiled the SPL Translator

    The SPL to C translator was built using Flex6 and Bison7. Flex creates a lexical analyzer, which eats source code and spits out tokens. Bison creates a parser that builds a parse tree out of these tokens, whereupon it is converted to C code.

    We did not write the lexical analyzer specification by hand, since it contains a large number of very simple, very similar statements. Instead, we wrote a small program to do it for us.

    The lexical analyzer and the parser are linked into the same executable, along with some string manipulation utilities that the parser uses a lot.

    Last, we also build a library containing all the functions used in the C files generated by the translator.

    Figure: Flow chart of how the SPL translator is compiled.
    \includegraphics[width=1.0\textwidth]{makespl.eps}

    Figure [*] depicts the build process. makescanner is the program that creates the lexical analyzer specification (scanner.l). It reads a number of word list files, which list all SPL certified nouns, adjectives, character names, and so on.

    Examples


    Hello World!

    (This is the contents of the file hello.spl.)


    The Infamous Hello World Program.  Romeo, a young man with a remarkable patience. Juliet, a likewise young woman of remarkable grace. Ophelia, a remarkable woman much in dispute with Hamlet. Hamlet, the flatterer of Andersen Insulting A/S.   Act I: Hamlet's insults and flattery.  Scene I: The insulting of Romeo.  [Enter Hamlet and Romeo]  Hamlet: You lying stupid fatherless big smelly half-witted coward! You are as stupid as the difference between a handsome rich brave hero and thyself! Speak your mind!  You are as brave as the sum of your fat little stuffed misused dusty old rotten codpiece and a beautiful fair warm peaceful sunny summer's day. You are as healthy as the difference between the sum of the sweetest reddest rose and my father and yourself! Speak your mind!  You are as cowardly as the sum of yourself and the difference between a big mighty proud kingdom and a horse. Speak your mind.  Speak your mind!  [Exit Romeo]  Scene II: The praising of Juliet.  [Enter Juliet]  Hamlet: Thou art as sweet as the sum of the sum of Romeo and his horse and his black cat! Speak thy mind!  [Exit Juliet]  Scene III: The praising of Ophelia.  [Enter Ophelia]  Hamlet: Thou art as lovely as the product of a large rural town and my amazing bottomless embroidered purse. Speak thy mind!  Thou art as loving as the product of the bluest clearest sweetest sky and the sum of a squirrel and a white horse. Thou art as beautiful as the difference between Juliet and thyself. Speak thy mind!  [Exeunt Ophelia and Hamlet]   Act II: Behind Hamlet's back.  Scene I: Romeo and Juliet's conversation.  [Enter Romeo and Juliet]  Romeo: Speak your mind. You are as worried as the sum of yourself and the difference between my small smooth hamster and my nose. Speak your mind!  Juliet: Speak YOUR mind! You are as bad as Hamlet! You are as small as the difference between the square of the difference between my little pony and your big hairy hound and the cube of your sorry little codpiece. Speak your mind!  [Exit Romeo]  Scene II: Juliet and Ophelia's conversation.  [Enter Ophelia]  Juliet: Thou art as good as the quotient between Romeo and the sum of a small furry animal and a leech. Speak your mind!  Ophelia: Thou art as disgusting as the quotient between Romeo and twice the difference between a mistletoe and an oozing infected blister! Speak your mind!  [Exeunt]


    Primes

    (This is the contents of the file primes.spl.)


    Prime Number Computation in Copenhagen.  Romeo, a young man of Verona. Juliet, a young woman. Hamlet, a temporary variable from Denmark. The Ghost, a limiting factor (and by a remarkable coincidence also Hamlet's father).   Act I: Interview with the other side.  Scene I: At the last hour before dawn.  [Enter the Ghost and Juliet]  The Ghost: You pretty little warm thing! Thou art as prompt as the difference between the square of thyself and your golden hair. Speak your mind.  Juliet: Listen to your heart!  [Exit the Ghost]  [Enter Romeo]  Juliet: Thou art as sweet as a sunny summer's day!   Act II: Determining divisibility.  Scene I: A private conversation.  Juliet: Art thou more cunning than the Ghost?  Romeo: If so, let us proceed to scene V.  [Exit Romeo]  [Enter Hamlet]  Juliet: You are as villainous as the square root of Romeo!  Hamlet: You are as lovely as a red rose.  Scene II: Questions and the consequences thereof.  Juliet: Am I better than you?  Hamlet: If so, let us proceed to scene III.  Juliet: Is the remainder of the quotient between Romeo and me as good as nothing?  Hamlet: If so, let us proceed to scene IV. Thou art as bold as the sum of thyself and a roman.  Juliet: Let us return to scene II.  Scene III: Romeo must die!  [Exit Hamlet]  [Enter Romeo]  Juliet: Open your heart.  [Exit Juliet]  [Enter Hamlet]  Romeo: Thou art as rotten as the difference between nothing and the sum of a snotty stinking half-witted hog and a small toad! Speak your mind!  [Exit Romeo]  [Enter Juliet]  Scene IV: One small dog at a time.  [Exit Hamlet]  [Enter Romeo]  Juliet: Thou art as handsome as the sum of thyself and my chihuahua! Let us return to scene I.  Scene V: Fin.  [Exeunt]


    Reverse

    (This is the contents of the file reverse.spl.)


    Outputting Input Reversedly.  Othello, a stacky man. Lady Macbeth, who pushes him around till he pops.   Act I: The one and only.  Scene I: In the beginning, there was nothing.  [Enter Othello and Lady Macbeth]  Othello: You are nothing!  Scene II: Pushing to the very end.  Lady Macbeth: Open your mind! Remember yourself.  Othello: You are as hard as the sum of yourself and a stone wall. Am I as horrid as a flirt-gill?  Lady Macbeth: If not, let us return to scene II. Recall your imminent death!  Othello: You are as small as the difference between yourself and a hair!  Scene III: Once you pop, you can't stop!  Lady Macbeth: Recall your unhappy childhood. Speak your mind!  Othello: You are as vile as the sum of yourself and a toad! Are you better than nothing?  Lady Macbeth: If so, let us return to scene III.  Scene IV: The end.  [Exeunt]

    Introduction Late at night sometime in Februari, Kalle Hasselström and Jon Åslund (that is us, we, the authors) were sitting with a programming assignment due for demonstration at nine the following morning. It was assignment number four in our Syntax Analysis course and we were pretty tired with it ...»See Ya