The Culture of Perl

This is the keynote address I delivered to the Perl Conference on August 20, 1997. Links in square brackets below point to sound files (.au format). If your browser supports .au files, you can play them by clicking on them, just as I did during my sermon, er, uh, speech. The first one was timed to start just after the clapping (pretty much expected) had peaked. :-)


    [Superman_intro_tv]

    Look, up in the sky!
    It's a bird.
    It's a plane.
    It's superman!

That’s the perception. This is the reality:

    [F-Troop]

    The end of the Civil War was near
      When quite accidentally
    A hero who sneezed abruptly seized
      Retreat and reversed it to victory.

Last week I was driving up to Sebastopol for a meeting with Tim O’Reilly, and I was trying to figure out what to say here today. For some reason, this stupid F-Troop song kept running through my head. I think my right brain was trying to tell me something. In fact, it was trying to put my left brain in its place. (My right brain does that altogether too frequently.) Be that as it may, it got me to thinking about my own personal brand of heroism, and whether that heroism came about “quite accidentally”. My left brain thought about it really hard. [working]

And having thought about that, I have to say, I think my right brain was being a bit unfair. The development of Perl was certainly no accident, and I always intended that Perl would someday become popular. And who knows, someday it might…

[thats_a_joke]

By the way, I brought my my own laugh track, just in case. [laughter]

On the other hand, maybe my right brain was onto something. The question “Was it all an accident?” wants to be answered with either a “Yes” or a “No”, and nothing in between. But that’s not the only way to ask the question. If instead we rephrase it as “Was Larry in control?” then we can answer it with a very definite “Well, kinda sorta.” Of course, you’d get the same answer if you asked whether I was out of control. [WG_control] Anyway, to keep up the F-Troop metaphor, along the way we’ve had some battles, and I sneezed a few times, and we even reversed some retreats into victory. And for sure, our little troop doesn’t like to let its spirits droop. For good or ill, our group has many resemblances to F-Troop. More on that later.

Now, this talk is supposed to be about the Culture of Perl. (Some would say “What Culture?” To which the only adequate response is, “Well, given a suitable medium, even bacteria are allowed to have a culture. [laugh] So surely you will allow Perl to have at least the status of germs…“)

And if they’ll admit that, then we’re basically home free. Because, you see, germs are infectious. We can infect everybody with Perl Culture. Then *we* can be in control, and they will all become, er, pod people.

You will be [absorbed].

Seriously though, if there’s a germ of an important idea in Perl Culture, it’s this: that too much control is just as deadly as too little control. We need control and we need chaos. We need order, and disorder. Simplicity, and complexity. Carefulness, and recklessness. Poise, and panic. Science, and art.

And if you trace it all back to its roots, we need God, the ultimate in control, and we need evolution, the ultimate in chaos. Some of you may disagree with one or the other of those assertions, but I don’t think it’s entirely an accident that Charles Darwin is entombed in a church. And I’m not really here to argue about those topics, because I’m primarily here to talk about Perl Culture.

To be sure, in demographic terms, Perl Culture is all you folks (give or take a half million people). But to really understand Perl Culture, in fact, to understand any culture, you have to understand the memes and metaphors that are propagated by that culture. And to understand the memes and metaphors that are propagated by Perl Culture, you first have to understand the memes and metaphors that are propagated by a certain Larry Wall. So I’m afraid you’re going to have to listen to me talk about me for a bit.

[pay_attention]

I’m now going to give you a catalog of some of my beliefs. I don’t think you’ll find it boring, because I believe in a large number of seemingly contradictory things, and you can amuse yourselves by deciding whether I’ve gone crazy or just mad. [mad] Now, I should warn you, I probably won’t mention Perl much in the next few minutes, but you folks are smart enough to realize that almost every point I make here has a direct bearing on how Perl Culture came about.

Anyway, my beliefs can be classified by which hat I’m wearing when I hold them. I have many hats. Some of my beliefs I hold as a theist, some as a scientist, some as a missionary, some as an artist, some as a linguist, some as a geek, and some as a professional idiot.

Now, that’s a lot of hats to wear, and I didn’t list all of my hats. When you hear my beliefs from these various viewpoints, you might be tempted to accuse me of compartmentalizing, but I don’t think that’s the case. I think my beliefs are pretty well integrated. Let me tell you why. But to do that, I first have to put on the hat of an anthropologist.

Anthropological Beliefs

We all move from culture to culture, and even from subculture to subculture within a given culture. Some folks are uncomfortable making these transitions, but some of us actually like to move from culture to culture. That’s because it gives us a chance to see how cultural context works. That is, your cultural context will cause you to accomplish the same thing in a different way from me. And that challenges me to look for the essential truth that is common to us both. We like to see that “There’s more than one way to do it,” because it breaks us out of our cultural preconceptions.

Equivalent truths are expressed differently in different cultures, and it turns out that a lot of the fighting people do is totally useless, because they simply don’t realize they’re using different words for the same things. Now I’m starting to talk like a linguist. But context is critical to understanding anything that mankind has to do with. Every form of expression is embedded in a context. I can make similar statements as a linguist, or as an epistimologist, or even as a missionary, because a successful missionary has to be an anthropologist too. That is, they must understand cultural context. And until they do understand it, they can’t hope to translate essential truths from one culture to another. Let’s put it in words of one syllable. If you want to get folks to switch from, say, Lisp to Perl, you must show them how to do the same things in Perl that they know how to do in Lisp. Make sense? Good. Now you know what I mean when I use polysyllabic gobbledygook such as “cultural context”.

Theological Beliefs

Now let me take off that anthropological hat and put on a couple of others, so we can see an example of how this context thing works. Suppose I put on my theological hat, or more specifically, my evangelical Christian hat. I can tell you that I believe in God. I believe mankind is morally bankrupt, and I believe that God sent his one and only Son to earth so that we would not have to continue living in moral bankruptcy. I believe that the life, death, and resurrection of Jesus Christ define the center of history. I believe that God created the universe, and that God will choose when and how the universe will end. A little less cosmically, I believe in helping people, and I believe in supporting my local church. I believe that God can certainly do miracles if he jolly well pleases, and that one of the things he jolly well pleases is that somehow or other I will live forever.

[hallelujah]

Scientific Beliefs

Now that I’ve pushed a few people’s hot buttons, let me push an entirely different set of hot buttons by taking off my theological hat, and putting on my scientific hat. I believe the earth is about 4.5 billion years old, and that the universe we see is two or three times older than that. I believe the universe might well have fuzzed into existence as a random quantum fluctuation, as Stephen Hawking has suggested. (Mind you, that’s one heck of a quantum fluctuation, but what’s a hundred orders of magnitude among friends?) I believe that we all probably evolved from the primordial ooze on some planet or other, take your pick. I believe Richard Feynman when he teaches us that real particles aren’t really real. It’s the virtual particles that are real, and what we call real particles are merely persistent accounting errors.

And if you don’t think that’s what Feynman said – well, it’s what I think Feynman said… Quantum fluctuations are not the result of the Heisenberg’s uncertainty principle. Heisenberg’s uncertainty principle is the result of quantum fluctuations. For that matter, Heisenberg himself was the result of quantum fluctuations. The basic principle of the universe is noise, and the noise far outweighs the signal. We as humans tend to keep forgetting that, because we’re built of signals ourselves. So I believe that you, my friend, are a persistent accounting error in the quantum fluctuations. Nothing more. But also nothing less. The universe is a very rich medium, and has free will built into it at the quantum level.

I believe that our personalities, our souls if you will, are entirely defined by the pattern of the physical interactions of the neurons in our brains. I like to read Richard Dawkins, and Stephen Jay Gould. I believe in natural selection, sexual selection, selfish genes, selfish memes, punctuated equilibrium, etc. And I’m likely to believe whatever the next Darwinian craze is. I believe we’re a product of our past, and I think that a large part of our behavior can be explained as the residual behavior of spoiled apes.

[monkey-1]

Now, what do you think of my two hats? We all know that there are many people in the world who reject one or the other of those sets of beliefs. If some of you are here, you know who you are. I’m not here to argue with you, because this is a Perl conference, and believe it or not, I’m talking to you about Perl Culture. I’m not here to argue with you, but I am here to say that every set of beliefs that has been communicated to you has come via a human culture. Every human culture is a human construct, and human constructs of any complexity are known to be inherently fallible. Every human culture has good and bad points. Every computer program has one more bug. Even Perl.

If you think I’m arguing this from a scientific viewpoint, think again. Human fallability is a theological axiom, and when I spout this anthropological stuff I’m really just passing on what I learned when my wife and I trained to be missionaries with Wycliffe Bible Translators. (I should note in passing that we didn’t end up being missionaries in Africa. You may have noticed this…)

Anyway, we were taught that every culture has its good and bad points, and that every language makes different things easier or harder to say. We were also taught that it’s possible to bridge the cultural gap and convey truth despite these differences. In fact, we were taught a basic underlying principle that changed our lives. In fact, it’s already changed your life. The basic principle is this: If you want to feel at home in more than one culture, you can’t let yourself feel totally at home in any culture.

Now, we’re in Northern California, and so I risk being misunderstood at this point. I am not espousing cultural relativism. That is, I’m not trying to claim that any culture is as good as another. Do you think that COBOL culture is as good as Perl culture? I rest my case.

So if we see that all cultures have good and bad points, then our job in life is to pick and choose the good points from the various cultures in which we move, and reject the bad points. If you’re going to design a melting-pot language like Perl, then by all means, pick the good points of other languages and not the bad points.

So that’s what I’ve done to integrate my theological and scientific beliefs. If my understanding of God is in conflict with my understanding of nature, then it is not the case that either God or nature is wrong, but merely my understanding of one or the other. I try not to mistake my understanding of nature for nature itself. Likewise, I try not to mistake my understanding of God for God himself. It’s amazing how many people fall into one or the other of those traps, and won’t allow either nature or God to be redefined. I think we need to be able to redefine our understanding, just as we redefine our subroutines in order to do rapid prototyping. If your language is flexible and forgiving enough, you can prototype your belief system without too many core dumps.

So our belief systems need an extension mechanism. Certainly the scientific method admits as much. But it’s also true that theology thrives best when challenged, not when “wrapped up in a neat little package”. Some theists have misunderstood their own theology when it comes to the battle of ideas. “God said it, I believe it, that settles it.” In fact, one of the most misunderstood passages in the Bible is where the Apostle Paul says we are to “take captive every thought”. Many folks take this to mean that we should kill any thought that doesn’t fit into our belief system. [inaccurate] But in fact, this phrase means quite the opposite. We are to capture “foreign” thoughts and put them to work in our belief system. Paul is appealing here for integrity, not closed-mindedness.

I have a book on my bookshelf that I’ve never read, but that has a great title. It says, “All Truth is God’s Truth.” And I believe that. The most viable belief systems are those that can reach out and incorporate new ideas, new memes, new metaphors, new interfaces, new extensions, new ways of doing things. My goal this year is to try to get Perl to reach out and cooperate with Java. I know it may be difficult for some of you to swallow, but Java is not the enemy. Nor is Lisp, or Python, or Tcl. That is not to say that these languages don’t have good and bad points. I am not a cultural relativist. Nor am I a linguistic relativist. In case you hadn’t noticed. :-)

Artistic Beliefs

So far, I’ve probably not convinced you to share all my beliefs, because I’ve been arguing defensively. To go on the offensive a bit, let me share some of my artistic beliefs. I hope I can get you to see why the universe I believe in is not only possible, but is, in fact, rather desirable. Of course, I’m also talking about Perl here.

There are many definitions of art, and I can’t hope to list them all here. I’d like to focus on one aspect of art, which is the relationship between control and chaos. Call it the F-Troop relationship, if you will.

An artist is someone who is trying to be an accidental hero on purpose. We talk about artists as creative geniuses, but what do we really mean by that? The best artists are not the ones who exercise absolute, teeth-gritting control over their medium. Rather, the best artists are those who see a work of art beginning to take shape, and are able to exercise just the right amount of control to let the art have its own way. The true artist serves the work of art, and not vice versa. This shows up differently in different artistic media, but the underlying principle is the same. A good painter will use what others would call an accidentally misplaced brush stroke as a source of inspiration. A novelist will exclaim with delight that her characters have run away with the plot. A jazz musician taps into the random quantum fluctuations of his own brain in order to improvise. A game designer will purposefully design games in which polyhedral random number generators are used. Also known as dice.

So why do we hold God to a lower artistic standard? Some folks seem to think that if God used random evolution to create people, he must have been holding his nose while he did it. I don’t think so. Einstein himself said that God doesn’t roll dice. But he was wrong. And in fact, anyone who has played role-playing games knows that God probably had to roll quite a few dice to come up with a character like Einstein. :-)

It is part of the artistic genius of God that he invented an artistic medium like the universe, a universe in which evolution could happen, a universe in which characters could run away with the plot. I think God delights in how the universe works. He even said as much: “And God saw every thing that he had made, and, behold, it was very good.”

But an artist is more than a programmer running a simulator. A good artist also exercises the appropriate amount of control to make things come out the way they’re supposed to. So I think it’s also indicative of the artistic genius of God that he gets involved in human history. According to my own theological tradition, he wrote himself into the plot 2000 years ago, and took a dose of his own medicine, and proved that he has a very different view of death than we do. In so doing, he invented an open-ended system of memes and metaphors that persists to this day. He did it on purpose, in fact. Have you ever thought of the Church as a work of art? Listen to the interplay of control and chaos in these words. Think about fractals.

Then Jesus asked, “What is the kingdom of God like? What shall I compare it to? It is like a mustard seed, which a man took and planted in his garden. It grew and became a tree, and the birds of the air perched in its branches.”

And again he asked, “What shall I compare the kingdom of God to? It is like yeast that a woman took and mixed into a large amount of flour until it worked all through the dough.”

Some of the most interesting experiments in chaos theory have to do with mixing things together. Or how about this one:

“You are Peter, and on this rock I will build my church, and the gates of hell will not prevail against it.”

Sounds very much on purpose to me.

Now, whether you accept that Jesus Christ is the greatest of all cosmic artists, or merely a very good B.S. artist, you have to admit that it really puts an interesting spin on theology to view God as an artist. Permit me to state the obvious and point out that I view my relationship to the Perl community the same way. This is why I sometimes behave as your revered prophet and cult leader. It’s also why I explicitly reject that role periodically. As the artist in charge of Perl Culture, I reserve the right to choose where to exercise control, and where not to. Sometimes I preach love and harmony, and other times I preach nature red in tooth and claw.

With that in mind, let me give equal time to the chaotic side of the house. [splatcrash] Many of you have heard me say over the years that Perl was designed to evolve. This works on many levels. I usually talk about lexical issues like how the funny characters in front of identifiers let you keep variables in a separate namespace from reserved words. Or I talk about semantic issues like how you can redefine subroutines on the fly. But the subject is much deeper than that. I recently read a marvelous article by Stephen Jay Gould in the October ‘96 issue of Discover magazine. Gould was discussing the creativity that must have been exercised by the evolutionary process in order to produce humans. He was talking about the evolution of mankind, but could just as easily have been talking about the evoluton of computer languages. I’m sorely tempted to read the whole article to you, but I’ll just give you a taste of it. He says:

Precise adaptation, with each part finely honed to perform a definite function in an optimal way, can only lead to blind alleys, dead ends, and extinction. In our world of radically and unpredictably changing environments, an evolutionary potential for creative response requires that organisms possess an opposite set of attributes usually devalued in our culture: sloppiness, broad potential, quirkiness, unpredictability, and, above all, massive redundancy.

Sound familiar? In computer science, we do not value sloppiness. We do not value unpredictability. And we certainly don’t value redundancy. At least, not till we get on an airplane…

Yet these are the very attributes that allow evolution. The quirkiness of evolution allows a proto-insect to take a pair of heat control surfaces and turn them into wings. The sloppines of evolution allows small mammals to exist for eons despite the presence of the obviously superior dinosaurs. The massive redundancy in our genetic code allows two copies of a gene to diverge and perform different tasks.

That works in Perl culture too. As you know, the slogan for Perl culture is, “There’s more than one way to do it.” Now, thinking in evolutionary terms, let’s introduce an environmental change, say the move from Unix to Windows. Some of you know what the Perl slogan on Windows is, and you can say it with me: “It’s a good thing there’s more than one way to do it, because most of them don’t work.” But the right subset of Perl does survive. The dinosaurs will die off, and the monkeys will end up writing the poetry. Some of that poetry is even written in Perl, a language that can definitely be classified as “quirky”.

Linguistic Beliefs

This brings me to my linguistic beliefs, and you’ll probably recognize a lot of these in the design of Perl, and more particularly in the design of Perl Culture.

I happen to be of a school of linguistics called tagmemics. I can’t hope to teach you all the buzzwords of tagmemics in a minute, but I can point out a basic principle of tagmemics. Every piece of language you care to talk about has a multi-part meaning, part of which is assigned to it by convention, and part of which comes from the context in which the expression finds itself. We know arbitrarily that “bed” is a noun. We also know that nouns can be used as verbs in English. That is, a part of speech can have a function other than that originally intended, if the environment of the expression is quirky enough. Think of it as evolution in action. Words can mutate. So you can take the noun “bed”, and under the proper circumstances, you can “bed” someone. Presuming they have a bed method. Of course, one can always claim that in evolutionary terms, the genetic mixing of multiple inheritance is just a weird form of sex. [female_computer]

Moving right along, I believe that learnability is a laudable goal, but frequently misplaced. The purpose of a language is not to help you learn the language, but to help you learn other things by using the language. We don’t water down English to make it easy to learn. We prefer English to remain a rich language, quirky, sloppy, and full of redundancy. Same for Perl.

A corollary to that is, while we don’t water down the language itself, we do allow people to speak subsets of the language. We don’t expect a five-year-old to speak with the same diction as a fifty-year-old. We don’t expect a native German speaker to use the same subset of English as a native Mandarin speaker. Similarly, we don’t look down on people for using subsets of Perl. There are certainly enough of them. You can write Perl programs that resemble sed, or awk, or C, or Lisp, or Python. This is Officially Okay in Perl culture. By way of contrast, try writing in the C subset of C++ and they’ll make a laughingstock of you. [laugh]

I also believe that, while languages can have efficiencies and deficiencies, the languages themselves are essentially amoral. Language is not the level at which we should enforce “good thoughts”, if we want our language to be maximally useful. You can’t enforce morality by syntax. In English it is just as easy to say “bless you” as it is to say “fuck you”. You may argue that in Perl it’s easier to use the verb “bless” because it’s built-in, but in actual fact, Perl lets you define “fuck” any way you choose. You can also “goto hell” if you like, which will of course work better if you’ve defined the label “hell”.

But seriously, many computer scientists have fallen into the trap of trying to define languages like George Orwell’s Newspeak, in which it is impossible to think bad thoughts. What they end up doing is killing the creativity of programming.

A more insidious trap, promulgated in many places these days (including the most recent Discover magazine), is that a computer program should be beautiful. Let me tell you that when it comes to computer languages, this is totally bogus. If you want to do beautiful art, you don’t go out and buy a beautiful canvas, and a beautiful brush, and a beautiful palette, and slather beautiful paints on it. If you want to write beautiful poetry, this doesn’t happen because you started with a beautiful language. Languages are an artistic medium. I don’t want Perl to be beautiful–I want you to write beautiful programs in Perl.

Finally, I believe that any language essentially should be out of control, because no one person or institution is capable of controlling a language (or a culture, for that matter) without destroying it. Living languages are always a cooperative effort, and I want Perl to be a living language.

What next?

Well, I could go on from there, but the fact is, you didn’t really come to this conference to here me blather on about philosophy. Well, maybe you did, but by now you probably have your fill of it. You already have a pretty good idea of what Perl is. What you really came here to get was an answer to the question: “Where do we go from here? What next?”

Let’s start with some obvious predictions. It’s obvious to me, just by looking at all of you sitting there, that Perl Culture is starting to blossom. We’ve been doing spadework for ten years now, and people are starting to notice the flowers. This is the first Perl Conference – and the response has been so overwhelming, it’s already been decided that we’ll do this again next year. The bud is opening one petal at a time, and we should enjoy this bright time in Perl’s existence. Eventually, of course, Perl Culture may go to seed, but I hope it’s not for a good many years yet.

Other things are also pretty easy to predict. I will, of course, continue to try to balance my control of Perl with my lack of control of Perl. It is a natural process that, as Perl grows up, my control over it decreases. After all, there are more and more of you, and only one of me. And it is a normal process of growth. Sooner or later, Perl will grow up and leave home entirely, and when it does, I hope Perl will come back home to visit occasionally. (And hopefully leave again.) At the moment, though, Perl is going through a kind of adolescence, which is a very, um, exciting time. Since Perl is still living at home, it also means that Perl still has to obey a few house rules.

[pay_attention]

So please pay attention to what I’m going to say, and allow me to exercise a bit of parental control for just a little bit longer. Say, for the next five minutes or so. After that, you can do whatever you feel is right.

The control I would like to exercise over you is to ask yourself whether your belief system is closed or open when it comes to Perl. Can you think new thoughts about Perl, and about Perl Culture? Can you imagine Perl evolving to fill new ecological niches, while still remaining the same comfortable, old Perl?

I’m a firm believer in having my cake and eating it too. You know I am, if you know Perl. I’m into synthesis. I like to bring things together. And I see two things that need to be brought together, and I’d like to ask for your help in bringing them together.

Many years ago, all we had was commercial software, by and large. Sure, we all rolled our own software too, but there wasn’t a good mechanism in place to share software, and you certainly couldn’t get your company to distribute free software officially.

Then along came the free software movement. Of course, we all think of Richard Stallman at this point, and he was certainly the chief lightning rod of the movement, but the fact is that the time was ripe for it, and many of us were publishing free software at the time. We had to do it in spite of the commercial interests of the time, and we had to invent our own infrastructure, so naturally there arose an antagonism between the commercial software community and the free software community. It was a natural overreaction that continues to this day, and there are some of you sitting right here who are on opposite sides of that battle.

Some of you believe that free software has its place in spawning new ideas but that a piece of software isn’t really successful until it has been taken over and commercialized by industry. Others of you sitting here believe that once any commercial entity takes interest in a piece of freeware, you might as well kiss it goodbye, because they’re gonna hoard it, and piss all over it, and spoil it.

These two ideas are dangerous. They’re dangerous, not because they’re false, but rather because they’re both partly true, and you’re afraid that they might be totally true. But a year and a half ago, I began to suspect that they didn’t actually need to be true. I’m even surer of that today than I was then. I’m here to tell you that we can at least begin to think about negotiating a cease-fire between the commercial world and the freeware world.

I want to tell you to put aside your fears and your preconceptions, and help us do something new. A new model of cooperation is emerging. A new breed of entrepreneurs is arising that understands the dynamics of the freeware community. Tim O’Reilly happens to be one of them. (In case you hadn’t noticed.) If you really listen to what Tim is saying, you’ll discover he’s been listening to you.

Tim and I have been listening to each other, and we agree that there has to be a new, intermediate model in which the freeware community does what it is good at, and the commercial community does what it is good at (apart from screwing people), and both communities are better off for having cooperated with each other. If you believe that’s impossible, then you can stop listening now, and go out into the hallway, and start fighting with each other.

But that would offend my artistic tastes. It would also offend my biological and theological tastes.

So let me close with a biological metaphor, and then a theological metaphor. If you believe in evolutionary metaphors as I do, then perhaps you can see that not all relationships have to be predatorial or parasitical. How ‘bout let’s evolve a symbiotic relationship instead. We really do need to learn to depend on each other. Believe it or not, there are things that the freeware community cannot do well. Believe it or not, there are things that the commercial community cannot do well. But we can do those things for each other.

Before we get to the theological metaphor, I should first state for the record that I am not very religious about free software, per se. Ethically, of course, I believe that if someone gives something away, nobody else should be trying to make a quick buck on it. And if you ever feel like that’s happening to you, you have the right to squawk, and squawk loudly.

But I do not fundamentally believe that information wants to be free. Rather, I believe that information wants to be valuable. Now, providing information for free is one way of increasing its value to you, the consumer. But I’m not a communist when it comes to information, and if we’re to build an information economy, then information must have some value to me, the producer.

The theological metaphor I want to leave you with is simply that it is better to give than to receive. In western culture, we tend to value a person by what they have acquired. Instead, we really ought to emulate the American Indians of the Pacific Northwest, who invented what they called “potlatch”. In that culture, you were valued not by what you acquired, but rather by what you gave away. But please note: you have to get it first to give it away. We can give things away because we’ve invested our time and money, and often our company’s time and money, and we’ve produced something of value. Only if we have the fundamental right to own information do we also have the fundamental right to give information away, freely and without coercion. Simply because we want to, not because we have to.

I’d like to close with the words of John Wesley, who summed this up quite nicely, and who incidentally founded the Methodist church, from which my own Church of the Nazarene is derived. He said simply:

Gain all you can. Save all you can. Give all you can.

So, folks. Give it all ya got!

[Thank_you_very_much]

[thats_all_folks]

Tags

Feedback

Something wrong with this article? Help us out by opening an issue or pull request on GitHub