Shared posts

29 Jul 00:00

July 29, 2013


28 Jul 03:19

the sounds of twitter

by moonmilk
The sound of a cork popping out of a wine bottle, the sound of metal shoe tips on wet cobbles, the sound a dollop of yogurt makes, the sound of small shuffling footsteps on a tennis court, the sound of my dogs arse after him eating half an easter egg, the sound of hooves on pavement. I find sounds described on twitter.

[Link]
28 Jul 00:00

July 28, 2013


My pals Bill and Jeff have a new kickstarter, and if it ever hits 20k, I'll be drawing a little bonus strip!
28 Jul 18:20

Rowling and Galbraith, Strangers

The meaning of JK Rowling's attempt at pseudonymous authorship. — I did a Twitter-series on this topic this morning, and here's the Storified version of it for posterity. [View the story "Rowling and Galbraith, Strangers" on Storify]... (read more)
28 Jul 14:00

OkCupid - When using an ad blocker, ads are replaced by a...



OkCupid - When using an ad blocker, ads are replaced by a message asking for a donation to cover the lost revenue. All future ads will be removed in return.

/via Jaik Dean

27 Jul 19:33

The June 2013 Uprisings in Brazil, Part I

by b. traven
1c

In June 2013, immediately on the heels of the uprising in Turkey, Brazil erupted in nationwide turmoil. Beginning with protests against a public transit fare increase, this upheaval brought hundreds of thousands to the streets in open fighting with the police. The fare increase was soundly defeated, in one of the few victories of the past several years of global revolts. But the movement was a victim of its own success, as middle-class nationalists and pacifists joined in, clashing with other protesters and muddying the issues.

Although anarchists played a decisive role in these events, very little material about the upheaval has appeared in English from Brazilian anarchists. To correct this, we have solicited our comrades’ perspectives from inside the riots. This is the first of two collectively authored texts analyzing the conditions that produced the uprising and the lessons we can draw from it. We will publish the second shortly.

Read the feature.

27 Jul 07:25

wreaking

by uzwi
    On these upper floors, the corners are all curved. No hard edges to hurt yourself on. The curved surfaces make you feel as if you’re going mad anyway. Losing definition. Losing purchase.

The drugs make you confused. The nurses make you dependant. The building makes you ill. Everything works to make you the proper denizen of the madhouse. Sometimes, James Scudamore’s Wreaking is a little too exhaustive and could be subtitled, “Everything I Know About UK Mental Institutions Since The Victorian Age”. But it’s undeniably well-written, funny, a complex metaphor for the condition of the NHS, and full of good stuff. This, for instance:

    Sometimes he spends time with a medical dictionary trying to label his own disorders. Apophenia is one. At various other times he’s been tempted by bipolarity, dementia, hypomania, schizophrenia, syllogomania. He wonders sometimes which of the old Victorian diagnoses he might be awarded if he were in their shoes. Uncontrolled Passion. Metaphysical Speculation. Mortified Pride.

Metaphysical Speculation, I think everyone here can own up to that.


26 Jul 22:01

Monster Tea Party, Abigail Larson



Monster Tea Party, Abigail Larson

26 Jul 17:06

Legal Weed is Hurting San Francisco's Hippies

Legalized weed is putting California’s drug dealers out of business, as well as its hippies.

Read The Blog Post Here »

22 Jul 18:50

07/19/13 PHD comic: 'Zeno's Paradoc'

Piled Higher & Deeper by Jorge Cham
www.phdcomics.com
Click on the title below to read the comic
title: "Zeno's Paradoc" - originally published 7/19/2013

For the latest news in PHD Comics, CLICK HERE!

26 Jul 11:01

Life of A Sleepwalker: "Sometimes, I leave myself useful signs and symbols. Mostly, I am the ghost haunting my own house."

I’ve been a sleepwalker for as long as anyone in my family can remember.

I talk in my sleep, sometimes at length, and usually in a sort of slow-motion narrative or series of questions posited to a sleepy bed-mate who’d almost certainly rather not be up, answering stupid questions, at three in the morning.

My old window unit air conditioner used to make a little buzzing sound, so subtle you’d almost miss it, but in my sleep, I’d hear it and get up, get out my toolbox, clear a space, and carefully dismantle the unit, laying out the pieces one by one as I dug down into the guts of the machine.

"Joe, come back to bed."

"I need to get this opened up. There’s another bird caught in the air conditioner."

"There’s not another bird in the air conditioner, Joe."

"Yeah, there is. Don’t you hear it? I don’t want it to get hurt."

"I think I heard it fly back out again. Come back to bed."

"Are you sure?"

"Yes."

"That’s good. I don’t want that bird to get hurt."

That air conditioner finally wore out after twenty years of interrupted service. By the end, it was all held together with duct tape and drywall screws, where the original parts had fallen apart from being unscrewed and screwed back in. The new one is nice, and does not have a bird in it, as far as I can tell. I’ve left this one alone for two years now.

I spent years, in the nineties, back when I had my last ongoing serious relationship, waking up, shaking my partner awake, and telling him my pet ground squirrel, Alice, was in bed with us, running around in the bed linens, and that I had to get her out so we wouldn’t roll over and crush her. He’d sigh and follow the drill, climbing out of bed with a pillow, to watch me while I meticulously unfurled each sheet and blanket, shaking them out and smoothing them over with my hands. At some time in this process, Alice would always look over, sitting in her tank, and would then start running on her wheel, which made a long, whining squeak that never failed to alert me to her true status.

"Alice isn’t even in the bed. She’s in her cage."

"Yes, Joe, I know."

"Was she in there all along?"

"Yes, Joe. She is always in there.”

"Really? That’s a hell of a thing. Well, at least the bed’s all tidy now."

"Get back in bed, please."

Most of what happens is sort of standard obsessive-compulsive cleaning, tidying, and preparation, but sometimes, I get up and assemble things into strange tableaus—spice jars in circles and little pyramids in the kitchen, the shower curtain folded into inexplicable origami. Sometimes, I leave myself useful signs and symbols. Mostly, I am the ghost haunting my own house.

I’ve been lucky, I guess, in that the Sleeper is benign and helpful, albeit in odd ways. Back in college, I’d get stressed out over tests, studying until the wee hours and keeling over, surrounded by books and papers, sideways on the bed, and then I’d wake up to find that I’d tidied up, packed my knapsack for the morning, showered, shaved, and dressed. As satisfying as the time savings were back then, I could not help but feel somewhat alarmed that I could stand in a shower and not wake myself up.

You wonder, I suppose, about what could happen. It’s like the fear I used to have about going on school field trips to Washington, D.C., where we’d all get off the bus and pile onto the Metro. I’d stand there at the platform, looking down at the third rail, and worry that I’d get some wild, uncontrollable impulse, just as the train was coming in, and jump onto the tracks. I’ve since learned that that’s a pretty common fear, and has a name, which escapes me at the moment, but you wonder about those things, about if you have the capacity of doing something sudden and destructive for no obvious reason.

I think, in a way, I’m lucky in that my Sleeper has had a patient series of trainers, from my family to my two ex-partners, all of whom, once over the obnoxious novelty of finding me wandering around at night, managed to respond in ways that cultivated more self-regulation and introspection. It’s all conjecture, of course—I barely know the guy, even though he’s bathed me and made me breakfast and made sure all my squirrels and birds are okay—but I suspect we have a good working relationship. If the Sleeper represents some sort of inner aspiration or ambition, I have to be glad that my secret desire is to have OCD and take care of animals and spice jars and not go on a bloodcurdling hacking spree or something worse.

The doubt, though, is why I so often follow the old gay seventies motto—in bed by midnight, home by two. It’s just easier than explaining to some strange person, or to someone I’d dated a time or two, exactly why I’m taking their air conditioner apart in the middle of the night.

"Did you hear a bird in there?"

"Holy shit! GET OUT!"

posted by sonascope at 12:53 on June 26, 2010

25 Jul 09:00

Common Sense Forestry

by mark

A woods can be managed to maximize recreation potential, or increase wildlife for hunting, or maximize timber. This guidebook assumes you’d like to optimize your woodlot’s timber potential in a sustainable fashion. Small-time woodlots with selective harvesting are a lot of work yielding little money, but with applied intelligence they can produce wonderfully rich and productive forests. This detailed manual will teach you intelligent woodlot management. What the author learned over 35 years is that you the forester should do as little as possible — just enough to encourage the woods to do as much as possible.

-- KK

Common Sense Forestry
Hans W. Morsbach
2002, 240 pages
$28

Available from Amazon

Sample Excerpts:

common-3

Here are eight steps for planting a seedling with a spud.

*

common-2

A typical oak seedling before trimming. Its roots are too long for spud planting.

*

Some time ago, I surmised that I could establish an exciting mixed-species forest simply by planting as many seedlings of different varieties as I could fit in a given plot of land. As the stand matured, I could decide which trees to keep and which to cull, creating the mixture of trees I wanted. The stand would form an early canopy and the trees would side shade each other, meaning I’d never have to prune. Natural selection would favor the best trees to survive. They would become perfectly shaped veneer logs with little lateral branching. …By any reasonable standard of investment analysis, planting in this fashion is fiscal insanity. Yet this experimental plot promises to develop into a wonderful forest better than any other scheme I’ve witnessed for planting seedlings. It will require virtually no maintenance beyond thinning, which means it will flourish even if I do nothing.

*

A site I had prepared for walnuts suddenly was inundated by giant ragweed, which grew to twelve feet in a couple of weeks, totally smothering all my seeded walnuts and oaks. Elsewhere I disced ash seeds between the rows of a walnut plantation. The ashes never appeared, but an influx of Queen Anne’s lace dominated the ground. Along a hedgerow of cedars I planted years ago, little cedars germinate in one particular spot and nowhere else. There must be something special about this spot (a “site-specific” condition, as ecologists and foresters say when they can’t explain such a peculiarity). Similarly, on property I own miles away from my main farm, I see new white spruces popping up next to their parents, while I seem to be incapable of making them germinate on my farm. The pH is not low enough at my farm, and conifers prefer acid soil.

*

I have never seen or heard of a seedling that resulted in too many trees. Experts suggest that about fifteen thousand seedlings an acre is a good number, which means about three seedlings per square foot. I suggest that you plant whatever seeds you have.

*

After having planted two fields next to a forest where squirrels stole every single nut in two successive years, I decided that I can live without walnut trees.

*

commonsense-forestry1sm

Taping a fork as shown will strengthen the branches. Later, you can remove one branch and the other will become the new leader.

*

You should also remember a suggestion I made earlier: Always cut the most inferior tree before cutting your best. You should upgrade your forest so as to maintain large, well-formed trees for future harvests. I urge you to be personally involved in deciding which trees are to be cut.

*

Mark your harvest trees carefully. Most commonly trees to be harvested are marked with a paint gun by you or a forester. It is best to mark two spots on the tree: one at eye level to be seen by the logger and a second spot at the base to assure that only designated trees are harvested.

*

An environmentally friendly method of getting logs to the logging roads is a system of winches and cables. Extracting logs by suspending them from cables does less damage to the forest than the use of heavy equipment. German foresters don’t allow skitters to move about in the woods, so all logs are dragged by cable to a logging road.

25 Jul 07:00

Wraps Saborosos para Partilhar

by noreply@blogger.com (colher-de-pau)

Devo andar a ver Jamie Oliver e as suas refeições de 15 minutos a mais, porque ao preparar o jantar só me vinham à cabeça refeições improvisadas e colocadas desordenadamente em cima de uma tábua, num estilo que ele já nos habituou.
O jantar de ontem foi então assim inspirado. Bem rápido, levado para a mesa e partilhado entre mim e o Miguel partir de vários ingredientes. Fiquei a pensar que era muito giro preparar algo assim para um jantar de amigos e a ideia não me sai da cabeça. Será que resulta? Para dois, resulta na perfeição!

Ingredientes para 2 pessoas:

2 tortilhas ou wraps grandes ou 4 mais pequenos
200g de carne de porco picada
Algumas folhas de alface
1 cenoura pequena
¼ de couve roxa pequena
¼ de couve coração pequena
1 cebola grande
4 colheres de sopa de maionese
1 colher de sopa de molho sweet chilli
Sal e pimenta q.b.
1 colher de sobremesa de cominhos
Azeite q.b.

Preparação:

Descasque a cebola e corte-as em meias luas. Leve-as a caramelizar numa frigideira anti aderente juntamente com um pouco de azeite e temperadas de sal até que fiquem bem douradas. Retire e reserve.
Na mesma frigideira, e sem adicionar mais gordura frite a carne picada, temperando-a de sal, pimenta e com os cominhos. Deixe de pois cozinhar em lume brando até a carne estar macia e começar a ganhar uma ligeira crosta crocante.
Entretanto lave bem as folhas de alface e corte-as numa juliana fina. Coloque numa tacinha e reserve.
Com a mandolina corte a couve roxa e a couve coração também numa juliana fina e coloque-as misturadas numa taça. Acrescente também a cenoura ralada.
À parte misture a maionese com o molho sweet chilli e acrescente depois umas colheres de água para tornar o molho mais solto. Coloque também numa tacinha e reserve.
No bico do fogão toste ligeiramente os wraps ou tortilhas para que fiquem ligeiramente tostados.
Leve, numa taça ou tabuleiro, todos os ingredientes para a mesa e deixe que cada um construa o seu wrap a gosto.

Bom Apetite!
25 Jul 00:31

Sneak peek of Macaw

I'd never considered using a visual code editor until this  
25 Jul 00:27

Gamasutra feature on the ethics of "free-to-play" games

like in gambling, there are "whales" who devote huge chunks of their income to virtual upgrades  
25 Jul 00:00

July 25, 2013


Pow!
24 Jul 17:17

The color mixing begins. #practice #color #painting #watercolor...



The color mixing begins. #practice #color #painting #watercolor #art

24 Jul 17:14

From TVs to tablets: Everything you love, across all your screens

by Emily Wood
When I was growing up, my family had a single screen we huddled around every day: the television set in the living room. Nowadays, we “huddle” around multiple screens—laptops, smartphones and tablets—using them almost interchangeably as we navigate through our day. In a world of ubiquitous computing, life would be a lot simpler if we didn’t have to learn new behaviors and interfaces each time we switched screens—if we could have one consistent, intuitive experience no matter where we are or what we’re doing. Today, with the launch of Chromecast and the new Nexus 7 tablet, it’s even more effortless to enjoy content you care about—whether it’s video, music, movies, games—wherever you are, across your devices.

Introducing Chromecast
To help make it easy to bring your favorite online entertainment to the biggest screen in your house—the TV—we’re introducing Chromecast. Chromecast is a small and affordable ($35) device that you simply plug in to your high-definition (HD) TV and it allows you to use your phone, tablet or laptop to "cast" online content to your TV screen. It works with Netflix, YouTube, Google Play Movies & TV, and Google Play Music, with more apps like Pandora coming soon. With Chromecast, we wanted to create an easy solution that works for everyone, for every TV in the house.

Remote-free
Once your Chromecast is set up, you can use your phone, tablet or laptop to browse and cast content to your TV, play and pause, control the volume, and more. But unlike other streaming solutions, you can still multitask—send emails or surf the web—while enjoying what’s on the TV screen. It works across platforms—Android tablets and smartphones, iPhones, iPads, Chrome for Mac and Windows (more to come), so your personal device is also now your remote control.

Cast the web to your TV
In addition to apps like Netflix, you can use Chromecast to bring a broad range of content available on the web to your big screen, thanks to a new feature in the Chrome browser that allows you to project any browser tab to your TV. From sharing your family photos to enjoying a video clip from your favorite news site, it’s as simple as pressing a button. This feature is launching in beta, but we’re excited for people to try it out and give us their feedback.

Google Cast SDK preview for developers
To ensure a great Chromecast experience over time, we've built Google Cast, a technology that enables developers to build consistent, intuitive multi-screen experiences across mobile devices and TVs. Today, we’re launching a preview version of Google Cast with more information for developers on our Google Developers blog. A handful of early developers are already working on enabling Google Cast technology in their apps, so more supported apps are coming soon. And while the Chromecast device is the first instantiation of Google Cast, we expect the technology to be embedded in a range of hardware from our partners in the future.
The new Nexus 7—the sharpest 7” tablet screen ever
Together with ASUS, we took what you loved about the original Nexus 7 and made it even better. The first thing you’ll notice is the sharpness of the screen: the 323 pixels packed into every inch of the screen makes it the world's highest-resolution 7-inch tablet. It’s lighter than ever, with more than nine hours of HD video playback and 10 hours of web browsing or reading. Nexus 7 now features stereo speakers and virtual surround sound from Fraunhofer (the inventors of the MP3 format), giving you rich and immersive audio.

Android 4.3—a sweeter Jelly Bean
Nexus 7 is the first device to ship with Android 4.3, the newest version of Android. Tablets are perfect for sharing with others, so in Android 4.3, we're introducing restricted profiles, which let you limit access to apps and content. For example, restricted profiles enable parental controls, so certain family members are prevented from accessing mature content. Likewise, retail stores can use tablets to show off product information, and shops can use tablets as point of sale systems. Android 4.3 also now supports Bluetooth Smart technology, opening the door to mobile apps that connect to new devices like fitness sensors. Android 4.3 is rolling out to Nexus devices starting today.

Ready to Play
The new Google Play Games app brings your friends together with the games you love, where you can invite a friend and start challenging gamers around the world, compete for top achievements, and race to the top of the leaderboard. You can also enjoy the world’s largest collection of eBooks, listen to millions of music tracks and immerse yourself in thousands of movies, TV shows, magazines and apps on Google Play. Plus, Nexus 7 comes loaded with your favorite Google apps, like Chrome, Maps, YouTube, Gmail and Google Now.

How to get Chromecast and the new Nexus 7
Starting today, the Chromecast device is available for $35 on Google Play, Amazon.com and BestBuy.com. It will be available in Best Buy stores across the U.S. starting July 28. For a limited time, you also get three months of Netflix included. More info available in Google Play.

Nexus 7 starts at $229, and is available in the U.S. beginning July 30 (with more countries coming soon!). Buy Nexus 7 online on Google Play, or check it out at Best Buy, Gamestop, Walmart, Staples, Office Max, Office Depot, Amazon, Home Shopping Network, Radio Shack, J&R and B&H Photo. Nexus 7 (LTE) is coming soon with support for T-Mobile and Verizon in the coming weeks. Learn more on our Nexus site.

Posted by Sundar Pichai, SVP, Android, Chrome & Apps
24 Jul 16:36

David Lee Self-Decompositions

by Vanessa Ruiz

David Lee Self-portrait decomposition series (3)

David Lee Self-portrait decomposition series (1)

David Lee Self-portrait decomposition series (2)

David Lee Self-portrait decomposition series (4)

David Lee Self-portrait decomposition series (5)

For New York based artist, David Lee, what began as a series of straightforward anatomical illustrations transcended into a deeper view of the human experience and what it means to live outside of the body.

I originally planned my series to be a more scientific view of humans, organized and divided into sterile diagrams. As I painted, I couldn’t help but to continue thinking about humans and their place in the universe, and as my perspective changed so did my work…as I believed that the human spirit transcended the physicality of the body, my work took on a more whimsical feeling. What stayed was the anatomical element as in both cases, the exposure of the inner human body became a symbol for honesty.

 

 

25 Jul 00:00

Applying the Web of Trust Model to Blog Reading

This was originally written in November of 2012, but I for some reason never published it.

There seems to be a growing trend in that reading Hacker News or Reddit is a waste of time. But, even those who agree with that statement, seem to also agree that reading blogs is quite valuable. Some will utilize their social media connections to filter, and others still will just read posts from people who they know, or otherwise respect.

How will one discover new blogs and new people to respect? I see two ways but only one is interesting to think about1.

Option 0: Code is written by people. If we discover the code (in some other way) and respect it, then we might respect the author enough to read his/her thoughts on technical things.

Option 1: Much more interesting is the Phil Zimmerman conceived "Web of Trust", which exists primarily to distribute and verify public keys in lieu of a certificate authority.

I regularly exchange emails with 3 other people regarding tech news, new algorithms, interesting CS papers, things about startups, etc. They're already in my web of trust, since I a) know them personally, b) respect their thoughts, ideas and opinions on things. I also trust that they won't waste my time with some frivolous article. So, I automatically read everything they write.2

By transitivity, I'm also likely to trust some portion of articles their web of trust writes and as a result, reading articles recommended by them, or engaging in discussion with their web of trust, is not unthinkable. I certainly don't have to trust them completely, that's the beauty of the web of trust model, but I can, if I wish, choose to trust a friend's friend because I trust the friend to not have untrustworthy friends.

Said another way, and in a more palatable way... If many people within 2 degrees of me trust a given blog, or a given author, it's very likely that I should give them a shot by reading something of theirs.

That just leaves one thing. What does an RSS/Atom aggregator look like in this model?3

  1. This only considers blog posts targetting to proggit, or the technical Hacker News, which discuss technology that programmers utilize and criticize.
  2. The same can be said for links they just happen to share related to the news. I don't necessarily have to know the author if my web of trust recommends it.
  3. Since first writing this, and *not* publishing it in a timely manner (first written in November 2012), there have been a few attempts potluck.it, and maybe less so monocle.io that make the web of trust model not so explicit, but rather subtle.
24 Jul 20:01

How Does Glitchy Art Show Us Broken Is Beautiful? | Idea Channel | PBS Digital Studios

by pbsideachannel
We all love broken things. WAIT WHAT?! Yes, you read that correctly. You may have noticed this thing called "glitch", where people purposely push machines to...
Views: 132392
4929 ratings
Time: 07:49 More in Education
24 Jul 07:30

Hambúrgueres com Molho de Leite e Cogumelos Pleurotos

by noreply@blogger.com (colher-de-pau)
José Bruno Barbaroxa

~~hamburgueres~~

Dou comigo a pensar em como eu mudei ao longo do tempo. Eu como sou mais tolerante com algumas coisas e me tornei tão pouco tolerante para outras. Como sou mais crítica, mas ao mesmo tempo como guardo cada vez mais as minhas opiniões para mim mesma. Como sou me relaciono com pessoas quem não gostava particularmente, e em como sou capaz de descobrir afinidades com algumas delas.
Não sei se é só comigo, ou se acontece com todos, Se faz parte deste processo de “crescimento” de nos tornarmos cada vez mais adultos, ou até por saber que, daqui a pouco tempo terei uma função de mãe e educadora e instintivamente olho para o mundo de uma outra forma.
Não há dúvida que mudamos muito… Numa fase achamos que sabemos tudo, e noutra que afinal não sabemos nada. Uma fase em que o mundo está contra nós, e mais tarde percebemos que afinal não é tudo assim tão mau.
Vale-me o amor pela cozinha, pelo blogue e pelos meus leitores que cresceu comigo e me ajudou também a tornar na pessoa que sou hoje.

Ingredientes para 2 pessoas:

2 hambúrgueres caseiros
100g de cogumelos pleurotos
100ml de leite
Azeite q.b.
2 dentes de alho
Sal e pimenta q.b.
Salsa picada q.b.

Preparação:

Pique os dentes de alho e leve uma frigideira ao lume com um pouco de azeite. Acrescente os dentes de alho bem picadinhos e deixe começar a alourar. Acrescente depois os hambúrgueres deixando-os cozinhar de ambos os lados para ganharem cor. Junte depois os cogumelos pleurotos cortados em fatias grossas e tempere tudo com sal e pimenta. Deixe alourar mais um pouco e acrescente o leite. Reduza o lume para o mínimo, retifique de sal e pimenta e tempera com a salsa. Assim que o molho estiver reduzido e os cogumelos e os hambúrgueres cozinhados, desligue do lume.
Sirva os com batatas fritas caseiras, salada de rúcula e ovo escalfado ou estrelado.

Bom Apetite!
23 Jul 23:40

petitedeath: the-milk-eyed-mender: cutesy: why was i...

by andkatewaslike


petitedeath:

the-milk-eyed-mender:

cutesy:

why was i completely fucking entranced by this for 7 minutes

wqwhat

what the fuck

calm down grandma

23 Jul 14:30

To Steal a Mockingbird?

To Steal a Mockingbird?:

Mark Seal:

The notoriously private author Harper Lee is now waging a public courtroom battle. Her lawsuit charges that in 2007 her agent, Samuel Pinkus, duped the frail 80-year-old Lee into assigning him the copyright to her only book, To Kill a Mockingbird—then diverted royalties from the beloved 1960 classic.

22 Jul 00:00

Lenses In Pictures

José Bruno Barbaroxa

HOLY SHIT IT’S LIKE WHEN I UNDERSTOOD MONADS ALL OVER AGAIN

Lenses In Pictures - adit.io

Lenses In Pictures

You should know what a functor is before reading this post. Read this to learn about functors.

Suppose you want to make a game:

  data Point = Point { _x, _y   :: Double }
data Mario = Mario { _location :: Point }

player1 = Mario (Point 0 0)

Ok, now how would you move this player?

  moveX (Mario (Point xpos ypos)) val = Mario (Point (xpos + val) ypos)

Instead, lenses allow you to write something like this:

  location.x `over` (+10) $ player1

Or this is the same thing:

  over (location . x) (+10) player1

Lenses allow you to selectively modify just a part of your data:

Much clearer! The full example is here.

location is a lens. And x is a lens. Here I composed these lenses together to modify a sub-part of player1.

Fmap

You probably know how fmap works, Doctor Watson (read this if you don’t):

Well old chap, what if you have nested functors instead?

You need to use two fmaps!

Now, you probably know how function composition works:

What about function composition composition?

“If you want to do function composition where a function has two arguments”, says Sherlock, “you need (.).(.)!”

“That looks like a startled owl”, exclaims Watson.

“Indeed. Let’s see why this works.”

The type signature for function composition is:

  (.) :: (b -> c) -> (a -> b) -> (a -> c)

Which looks a heck of a lot like fmap!

  fmap :: (a -> b) -> f a -> f b

In fact if you replace a -> with f it’s exactly fmap!

And guess what! a -> is a functor! It’s defined like this:

  instance Functor ((->) r) where
   fmap = (.)

So for functions, fmap is just function composition! (.).(.) is the same as fmap . fmap!

  (.).(.) :: (b -> c) -> (a1 -> a2 -> b) -> (a1 -> a2 -> c)
fmap . fmap :: (a -> b) -> f (f1 a) -> f (f1 b)

There’s a pattern happening here: fmap . fmap and (.) . (.) both allow us to go “one level deeper”. In fmap it means going inside one more layer of functors. In function composition your functor is r ->, so it means you can pass in one more argument to your function.

Setters

Suppose you have a function double like so:

  double :: Int -> Maybe Int
double x = Just (x * 2)

You can apply it to a list with traverse:

So you pass in a traversable and a function that returns a value wrapped in a functor. You get back a traversable wrapped in that functor. As usual, you can go one level deeper by composing traverse:

  traverse :: (a -> m b) -> f a -> m (f b)
traverse.traverse :: (a -> m b) -> f (g a) -> m (f (g b))

traverse is more powerful than fmap though because it can be defined with traverse:

  fmapDefault :: Traversable t => (a -> b) -> t a -> t b
fmapDefault f = runIdentity . traverse (Identity . f)

What is Identity used for? See this answer.

Using fmapDefault, let’s make a function called over. over is just like fmapDefault except we pass traverse in too:

  over :: ((a -> Identity b) -> s -> Identity t) -> (a -> b) -> s -> t
over l f = runIdentity . l (Identity . f)

-- over traverse f == fmapDefault f

We’re so close to lenses! “Mmm I can taste the lenses Watson” drools Sherlock. “Lenses allow you to compose functors, folds and traversals together. I can feel those functors and folds mixed up in my mouth right now!”

I’ll make a quick type alias here:

  type Setter s t a b = (a -> Identity b) -> s -> Identity t

Now we can write over more cleanly:

  over :: Setter s t a b -> (a -> b) -> s -> t

-- same as:
over :: ((a -> Identity b) -> s -> Identity t) -> (a -> b) -> s -> t
  1. over takes a Setter
  2. And a transformation function
  3. And a value to apply it to
  4. Then it uses the setter to modify just a part of the value with the function.

Remember mario? Now this line makes more sense:

  location.x `over` (+10) $ player1

location . x is a setter. And guess what? location and x are setters too! Just like composing fmap or (.) allows you to go “one level deeper”, you can compose setters and go one level deeper into your nested data! Cool!

Folds

So we are one step closer to making lenses. We just made setters, which allow us to compose functors.

Turns out, we can do the same thing for folds. First, we define foldMapDefault:

  foldMapDefault :: (Traversable t, Monoid m) => (a -> m) -> t a -> m
foldMapDefault f = getConst . traverse (Const . f)

What does Const do?

It looks very similar to our definition of fmapDefault above! We end up getting a new type alias called Fold:

  type Fold s t a b = forall m. Monoid m => (a -> Const m b) -> s -> Const m t

Which looks pretty similar to a Setter:

  type Setter s t a b = (a -> Identity b) -> s -> Identity t

Here’s the full derivation of Fold.

Since the signatures of Fold and Setter are so similar, we should be able to combine them into one type alias. And we sure can!

  type Lens s t a b = forall f. Functor f => (a -> f b) -> s -> f t

Lenses

Setters are for functors and Folds are for folds, but lenses are a more general type. They allow us to compose functors, functions, folds and traversals together! Here’s an example:

Don’t you hate when you fmap over a tuple, and it only affects the second part?

  > fmap (+10) (1, 2)
(1,12)

What if you want it to apply to both parts? Write a lens!

  > both f (a,b) = (,) <$> f a <*> f b

And use it:

  > both `over` (+10) $ (1, 2)
(11,12)

And lenses can be composed to go deeper! Here we apply the function to both parts of both parts:

  > (both . both) `over` (+2) $ ((1, 2), (3, 4))
((3,4),(5,6))

And we can also compose them with setters or folds!

Conclusion

Lenses can be really handy if you have a lot of nested data. Their derivation had some pretty cool parts too! Here’s the full derivation.

Sherlock gobbling up lenses

Sherlock gobbling up lenses

If you liked the visual approach, check out my post on concurrency.

References

Please enable JavaScript to view the comments powered by Disqus. blog comments powered by Disqus
21 Jul 05:21

A single game as a lifelong hobby

by Daniel Cook

Do you finish one game and then move onto the next? This is the dominant pattern of play for gamers. What happens when players stop consuming and starts investing in a single evergreen computer game for years on end?

Players of traditional games specialize

Across the 5500+ year history of gaming and sports, players typically focus on a single game and turn it into their predominant hobby. A chess player may dabble in other games, but chess is their touchstone. They join chess clubs, they play with fellow chess fans and they spend 90% of their gaming time playing chess. Overall, players specialize.

Such players do play other games, but to a far lesser degree.

There are also communities that embrace the identity of being good at multiple games or sports. These are a minority.

And some are inclined to claim all hobbyists are 'athletes' or 'players' and thus unified in some common tribe. Such verbal gymnastics rarely provide much insight into a dedicated hobbyist's specific passions or the nature of their community.

Specializing in a hobby occurs for many reasons. Traditional sports or games often have the following attributes:
  • Evergreen activities: You don't beat them. You stop when you get bored. Usually they consist of nested loops that operate on time scales of up to a generation. Consider the nesting of Match : Event : Season : Career : Training the next generation.
  • High mastery ceiling: Most are nearly impossible to master completely. You can always get a little better. You can always get better at Go, Soccer or Poker.
  • Strong communities: There exist strong social groups of like-minded players that have their own group norms, hierarchies and support structures. To be a dedicated basketball player is to be part of an extensive basketball playing network.
  • Life long identities: Someone who excels in the game starts to identify as a member of that group. The game becomes source of purpose bigger than themselves. They can look back on their life and say "There were some ups and downs, but I'm secure in my accomplishments as a player of game X"
  • Grass roots or service-based business models: Any cultural structure can be fruitfully analyzed by understanding the flow of money. Many traditional games have extremely low barriers to entry. It costs little to access the initial equipment. Often items like decks of cards or chessboards are either communally owned or purchased by a family and one set of equipment serves multiple participants.

    At higher levels of play, cash flows into the ecosystem through purchases of more advanced or higher status equipment or various service, membership or event fees. In all cases, the businesses involved have strong financial and culture incentives to get you playing and keep you playing.

Players of digital games consume

The hobby of computer or console gaming follows a different usage pattern; gamers play a wide variety of games. NPD claims core gamers buy an average of 5.4 games in a 3-month period. In a recent discussion of Steam purchases on Kotaku, commentators chimed in that they had purchased 100 to 800 games. These are played for a period of time and then set aside so that a new game might get some play.

These players specialize far less. They may prefer a genre of games such as RPGs or shooters, but they'll still consume many games within that genre.

Why the difference in playing patterns? Commercial digital games have some distinct attributes that encourage serial play instead of evergreen play. Not all digital games fit this mold, but the trends are worth noting.
  • Complete-able games: Most computer and console games can be completed in 5 to 40 hours. It is rare that you find digital games that retain users longer than 6 months. Actual playtime is shorter than the official length since most players do not complete their games and even fewer play through a title more than once. Compare this to the generational nested loops of traditional evergreen games.
  • Narrative and Puzzle-focused gameplay: The majority of the gameplay is focused on high burnout single use puzzles or evocative narrative stimuli. Designers spend their budget handcrafting specific scenarios for maximum emotional impact the first time through.
  • Low mastery ceilings: Since the design goal is to move players through the content of a game as smoothly as possible, the game mechanics are generally balanced towards the average skills of first time players. It is rare and surprising when a single player narrative computer game offers examples of masterful play. All this leads to early burnout where players rapidly become 'bored' and put the title aside.
  • Weak player identities: It is difficult for a player to establish their identity around their excellence in any one game. To be a good Braid player just isn't that special. Lots of other people have walked the same path; there is little player creativity and outside the occasional Let's Play video, few people care.
  • Content-focused business model: Digital games businesses have a strong financial incentive to get you to pay upfront and then move onto their next title. Games are treated as a content or boxed product business. An optimal strategy is to put high quality boxes on shelf (either physical or virtual) and get people to buy as many boxes as possible. Since exciting content remains a large cost center, there is ever increasing pressure to make games flashier and more marketable on the front-end and shorter on the back-end.
Shortness of play is perhaps the key reason why players end up consuming multiple games. With gamers spending 16-18 hours a week gaming, it doesn't take long to burn through a single title. When a single game fails to entirely fill a person's leisure time, players buy additional games. Only a set of multiple consumable titles provides enough engagement for someone to make a full-fledged hobby out of content-based games.

This fits the general profile of a media hobbyist. As we shifted from evergreen hobbies to digital retail-focused games, we trained users to behave in a fashion similar to that of a reader who reads many books or a movie goer who watches many movies.

A media culture

To be a 'Gamer' is to buy into numerous requirements that only exist to enable the creation of easily consumable media products.
  • Reviewers exist to help players select their next media purchase
  • Critics exist to demonstrate how media conveys a message to society. They are trained (if they are trained) in other media-centric fields such as movies or literature. There is little systemic thinking since media is first and foremost not a functional system but an evocative stimuli.
  • The form of popular games is determined by whether or not it fits in a media box. Form is the standardized structure of a piece of media. The 2-hour narrative movie is a form of video. The 300 page novel is a form of writing. So too is the 14-hour adventure game or the level-based narrative FPS.
  • Stores and storefronts exist to sell the hobbyist a steady trickle of new media. Since media creation is expensive and the share of a player's time is small for any single piece of media, aggregators of content are typically 3rd parties that don't produce all the media themselves.
  • Communities are built around mass media that act as a shared experience for large populations of consumers. Big brands like Mario, Mass Effect or Final Fantasy form cultural anchors much like Star Trek or Star Wars. Comparisons, reminiscences and fan fantasies about future sequels or expansions are common.

Digital evergreen hobbies

Into this media-centric ecosystem we've seen the reemergence of major games that hew more closely to the traditional games of old. MMOs like World of Warcraft or MOBAs like League of Legends are services. A digital game like Minecraft ties into numerous communities and is often played for years. Some like Halo or Call of Duty cleverly camouflage themselves as traditional consumable boxed products all while deriving long term engagement and retention from their extensive multiplayer services. These games share many of the attributes of older hobbies:
  1. They attempt to be evergreen.
  2. They have high mastery ceilings and robust communities.
  3. Many, especially eSports, replicate the nested yearly loops of a traditional sport.
    Each of these games is a hobby onto itself. People predominantly play a single game for years. In one poll of 5400 WoW players, 49% claimed to never actively play another MMO.

    The rise of services

    This shift to services is accelerating, driven by business factors and steady player acceptance. Developers are slowly coming around to the realization that an evergreen service yields more money, greater stability and a more engaged player base. Experiments of the past few years with social, mobile and Steam games suggest that microtransactions will likely become a majority of the gaming market. They already represent 70% of mobile revenue and continue to grow rapidly on other platforms.

    This new revenue stream places new constraints on game designs.  Types of laboriously handcrafted content that was once feasible when your game was played 10 hours is no longer profitable if revenue trickles in over hundreds or thousands of hours of play.  Deep mechanics once again matter.  Communities you want to spend time in become a competitive advantage.

    There are indeed manipulative companies scamming settlers in this newish frontier. Don't act so surprised. This is the case for any frontier and this is not the first time games have attracted disreputable developers.  Look beyond the flashy, inevitable crooks, just as you looked beyond the licensed games, the porn games and the gambling games that infest your typical game markets.  Look at the big picture and observe where the new opportunities for greatness blossom.

    No, they won't cross over

    These new evergreen players become hobbyists, but not media-centric gamers. This is most evident in the audiences that play 'casual' social and mobile titles. Many of these players never bought into the current gamer culture. It is common to see someone deep into Candy Crush and when you ask them if they are a gamer, they will deny it. They do not 'game', they never have 'gamed'. They don't share a common heritage of Mario, Zelda, COD, Halo or any of the mass media touchstones that unite current gamers. What they have is a wonderful hobby that in their mind has nothing to do with existing computer games.

    There exists a fantasy that somehow new players will get hooked on one game and then transfer over to consuming other games. Since this assumes a play pattern of high volume serial consumption, I doubt that this will occur. Great evergreen games leave little room in a hobbyist's schedule for grand feasts of consumable content. You don't finish a great hobby and then look for your next dalliance. You keep playing the game for years or even generations.

     The perfect service-based game is one worthy of your entire lifetime of leisure.

    If this seems an exaggeration and current titles feel unworthy of this high bar, wait a while. Developers are very talented. And the financial incentives to build the perfect service-based game are strong.

    Not one gaming hobby but many

    So where does that leave our understanding of 'gaming?'
    • Some people avidly knit in their leisure hours.
    • Others play a creative game like Farmville, Dwarf Fortress, Minecraft or the Sims.
    • Others participate in a social online game like World of Warcraft, Eve or Facebook.
    • And then there is a small but active community of proudly old-school Gamers that like consuming puzzles and story media.
    What we currently think of as 'gaming' becomes just another hobby amidst a vast jungle of digitally augmented hobbies.

    There are those who might see this as a threat, but that is mere fear talking. Existing hobbies tend to last for at least a generation. Those who've tied their identity to consuming media-style games as their hobby will stop participating in the hobby when they die. I expect to see 80-year olds still buying adventure games because that is what they were raised on and that is what they love. Niche producers can make good money serving these avid fans.  The rise of new hobbies thus do not invalidate a current hobby.  In fact, you'll have media-centric games for at least the rest of your life.

     Though each hobby likely will need to compete for new members.

    Impact on the cultural ecosystem

    With this shift comes change. The following may challenge your existing expectations.
    • Specialized interests, not shared experiences: The drop rates on defense potions matters little to your typical gamer. Yet it is of earth shattering importance to the community of Realm of the Mad God players, impacting hundreds of hours of their life. At a certain level of mastery, the language used to describe in-game concepts becomes indecipherable to casual audiences. This inhibits communication with external groups, but facilitates bonding within the group.
    • Deep systemic analysis, not broad media criticism and reviews. Hobbies are predominantly comprised of human systems and communities, not texts to analyze or boxes to sell. Political, anthropological or economic forms of discourse are more appropriate yet there are few game critics trained in these fields. Successful commentators are typically past players with a master-level understanding of the hobby. They are rarely dilettantes flitting from media event to media event.
    • Unique cultures, not mass cultures: A hobby can develop a set of inward facing social norms. This can be a negative if extreme viewpoints are allowed to fester. It can also be a huge positive and promote inclusivity, equality and long term positive relationships. Each hobby is a cultural petri dish that need not adopt dominant tropes or values.
    • Participation, not marketing campaigns: New players of a hobby hear about it from a friend or stumble upon a free trial. They participate first and see if they enjoy the lifestyle that the hobby promotes. Big bang media events can flood the early stages of the acquisition funnel, but they do not directly result in revenue or a sustainable community. 
    One aspect that surprises me the most is the stealthiness of inwardly sufficient hobbies. A smoothly running process is barely newsworthy for those unfamliar with the hobby. Over 5 million people partake in Geocaching, one of the greatest modern games ever invented.  Yet other than the occasional human interest story, it rarely breaks into the public consciousness. What would a media-focused rag say?  "People are having healthy fun...still.  Just like they were last year." That's not news. There is no new box to hype or content to whinge about.  There's no advertising to sell. So silence is the default until you look inside the vibrant magic circle. Geocachers return the favor by labeling outsiders Muggles.

    Let a thousand flowers blossom

    The concept of one true gamer community will be less feasible as evergreen hobbies grow in popularity. Instead, we have a crazy mixing bowl of diverse, separate, long-term communities. Few will share the same values or goals. Few players will consider themselves having anything in common with players of a different game.

    Social organizations such as PAX will still promote common ground, much like the Olympics promotes common ground between athletes. But day-to-day cross-pollination will be rare.

    I personally value a wild explosion of diversity. We need less mass culture and more emphasis on vibrant, generative communities instead of passive industrialized consumption.

    The existing society of players may be tempted to deal with those not like themselves negatively through shaming ("I can't believe you play Farmville, stupid person!") Here's how we might instead react positively.
    • Freedom of Play: Like freedom of religion, any player has a right to devote their life to any game even if it isn't something enjoyed by another player.
    • Mutual respect: Any player deserves your respect for their hobby even if you do not personally understand it. Avoid stereotypes and engage with the person.
    • Willingness to explain: Any insider should be willing to explain to an outsider how their hobby works. Proselytize by inviting them to play with you. An open-minded outsider should be willing to listen.
    The fact that individual hobbies exist is not new. The shift comes from realizing that individual digital hobbies will soon to be the default play pattern. Adapt accordingly.

    take care,
    Danc.

    References and Additional Links

    Note: Gamers often wonder why Farm Equipment simulators sell.  Judged as mass media, they are horrible.  Judged however as an independent hobby, they have many of the attributes of an engaging lifelong interest.  If you laugh at them, it is because you are outside their tribe and ignorant. 
    24 Jul 20:41

    Learning to Beat the Prisoner's Dilemma

    image

    Two economists put real prisoners through the prisoner’s dilemma. They appear to be above-average at it.

    Read The Blog Post Here »

    24 Jul 11:26

    Seen Online

    by Cobwebs

    IDEA: rental ghosts to create “cold spots” in houses during heat waves.
    KenJennings

    I’m a morning person. Then, around noon, I turn into a horse.
    mikeleffingwell

    spiders are just wee furry eight-leggedy things; think of them as two kittens taped together and you’ll be fine
    – Friend of xJane’s seen via FB

    Literally thousands of chameleons in your house right now and you don’t even know it.
    weinerdog4life

    PREQUEL: “Goddamned Mohicans Everywhere.”
    MiahSaint

    did you know? goths have 50 different words for despair
    IamEnidColeslaw

    a baby’s laughter is one of the most beautiful sounds you will ever hear, unless it’s 3 am and you’re home alone and you don’t have a baby.
    iphone420s

    You never hear about a new ghost. “Oh yeah, this place is haunted since Jeff died last Tuesday.”
    juliussharpe

    the movie “se7en” but each murder is based on a different dwarf
    twice_mustard

    SEX TIP: keep track of multiple orgasms in the voice of The Count from Sesame Street.
    KenJennings

    24 Jul 11:01

    Why sociology is important

    Next time people ask why sociology is important, I’m going to show them this video. 

    On its own, when you see one person slip, you automatically assume that person slipped, was clumsy or not playing attention. But when you look at the aggregate, you realize that the failure isn’t on the individual at all, rather the structures that cause certain people to fail with almost no fault of their own. And yet, without this data, they will very quickly ascribe the mistake to themselves. 

    It difficult to explain to someone that the reason they live their life the way they do because of the structures built to help them live that way. But imagine, instead of a stupid mislaid step, the faulty structure is a punitive late policy on a credit card, or a bank that has a minimum balance fee and very quickly the maintenance of the status-quo is laid bare.

    posted by JimmyJames at 1:19 on June 28, 2012

    24 Jul 00:00

    Scary Names

    Far off to the right of the chart is the Helvetica Scenario.