Sebastian Morr's blog https://morr.cc/favicon.ico https://morr.cc/ 2019-09-04T14:40:00+02:00 Making video games in a weekend game-jam-talk 2019-09-04T14:40:00+02:00 Sebastian Morr sebastian@morr.cc At the Chaos Communication Camp 2019, I gave a talk about “the why and how of game jams”! This is an extended version of my earlier talk Dare to Ludum Dare, offering a more general view on game jams.

Here’s the recording - you can switch between English audio and a German live translation via the cog icon. If you prefer, there are also English and German versions on YouTube. You can open the slides here.

Game Jams

Engines

Software

Game I worked on:

Ludum Dare

One Hour Game Jam

]]>
A Flicker of Hope a-flicker-of-hope 2019-08-07T13:45:00+02:00 Sebastian Morr sebastian@morr.cc This is the second full song I ever created!

I had been flirting with the open source music creation software LMMS for many years, and always found it quite archaic and ugly. But a few weeks ago, I was annoyed how that prevented me from actually making music, so I decided to try to become friends with it. And while there are some annoying things missing for a really smooth workflow, I was actually pretty happy with the software.

I had the lead melody for this track in a drafts folder for several years, and expanded it to a full song. Thanks a ton to lastfuture, who gave me incredibly helpful advice, that made the song a lot better!

You can listen to it on SoundCloud or download it as MP3 or FLAC. The LMMS project file is available here, you’ll need the FluidSynth soundfont for the distorted guitar.

]]>
The Hitchhiker's Guide to Iceland hitchhiking-iceland 2019-08-05T14:32:00+02:00 Sebastian Morr sebastian@morr.cc Rohieb and me just spent 10 days in Iceland! When we initially planned this trip, we realized that Iceland is an expensive country. So we figured that, instead of renting a car, or booking apartments, like many people seem to do, we could bring a tent, and hitchhike around! The two of us had already hitchhiked for a short section of our trip in the Scottish Highlands last year, which was the first hitchhiking experience ever for both of us. That had been exciting, and also went reasonably well, so we agreed to try that again in Iceland. We didn’t really know what to expect, of course. Here’s what happened.

From Reykjavik to Mosfellsbær

For the first three nights, we booked an AirBnb in Reykjavik (or, as we abbreviated it, R7k, because we’re lazy and have no manners). I slept pretty badly the night before we had to leave our apartment, and was nervous all morning. What would happen? Where would we end up? Would we actually be able to find a place to put our tent, and find water and electricity? And would people actually stop when we put out our thumbs?

Adding to that, it was raining that morning, not ideal conditions for trying this for basically the first time. We sighed, put on our rain jackets, pulled rain covers over our backpacks, and headed outside. We had a destination in mind: Þingvellir (the Þ is pronounced like the th in “thing”), which is of historical importance to Icelanders - an early form of democratic assembly met there for hundreds of years, and it’s also where the independence was declared in 1944. To get there, we knew we had to get to the Ring Road (Road 1) that goes all the way around Iceland, follow it a bit to the north, and then head east. We walked up to a somewhat traffic-heavy street in central Reykjavik, found a bus stop, and raised our thumbs.

We had written a sign (on a sheet of A4 paper) that said “[1] North / Þingvellir”, that we showed to cars that passed by. Of course, the sign got wet and soggy, and people didn’t really seem to notice us. We tried another section of that street, a bit further down the road, but didn’t really notice a difference. A man who lived in a nearby building stepped outside and approached us, and recommended to take a bus to a better traffic hub. We thought that seemed like a good idea; positioning ourselves closer to the edge of the city in the right direction would make it more probable that cars would go our way. So we paid 440 Icelandic króna each (about 4 USD/3 EUR), and actually took a bus to one of the last towns inside Greater Reykjavik - Mosfellsbær (the æ is pronounced like the i in “icy”), which also already was located on the Ring Road.

From Mosfellsbær to Þingvellir

We figured that Þingvellir might be a popular destination for people passing through Mosfellsbær, so approaching tourists at a gas station might work. We spent 15 minutes or so asking people who stopped for gas “Excuse us, are you going to Þingvellir?” Not a single soul did. A friendly-looking man with an Icelandic accent recommended we should position ourselves next the street that went alongside the gas station. We decided to also take that advice, and soon realized that was a pretty good spot: that section of the street came out of a roundabout, so people were driving slowly, and actually had time see us and our sign. There also was a conveniently placed lay-by, where cars would be able to stop safely.

It was here where we first got some reactions from the drivers: some shrugged apologetically, because they had no room left (either because their car was filled with their own luggage, or with kids riding in the back seats). Some seemed to applaud our valor, and cheered us on with various gestures - shaking their fist, flexing their biceps, or putting up their thumb in response to ours. Some waved very friendly, a reaction that was not very helpful for us. Many people just seemed to be delighted and amused by the idea of people trying to hitchhike along the Ring Road, and we exchanged many smiles with people, which was always nice. Standing in a spot like that was actually a lot of fun for me! By far the most common reaction, though, was no reaction at all.

Very quickly, though, after at most 10 minutes, an older lady stopped in the lay-by. For a second, we were unsure whether she actually stopped for us, but after she waved at us, we approached the car and opened a door. “I can take you in the right direction!”, she said. She allowed us to put our luggage (two large backpacks, two small backpacks, and a tent) in the trunk of her car, and we got in. She told us that she lived a bit behind the intersection where we needed to turn east, but kindly offered to take us a bit into the correct street, to a place where other people would be able to pick us up again. We mentioned that we were from Germany, and, after maybe half a minute of consideration, she said “Wir können uns auch auf Deutsch unterhalten!” Which we did for the rest of the short trip! She dropped us off at a campsite on the road to Þingvellir, and recommended to check out the nearby farm, where they would grow delicious vegetables!

We decided we wanted to keep going instead. Figuring out the best place to stand always took some guessing – we wanted to be seen by as many cars as possible, with many of them going in the right direction. They had to drive pretty slowly, and it had to be safe for them to stop. In this case, we stood next to the street to Þingvellir, in front of another bus stop, on the corner to the road to the campsite, so we would catch both streams of traffic. The road to Þingvellir was very straight at this point, so people could see us from far away – plus, all cars heading east were going in the right direction!

It took maybe 15 minutes for another car to stop, which was large and fancy. We introduced ourselves, and the driver introduced himself as Omar. He was headed for a place well behind Þingvellir, where he was going to spend the next weeks in his summer house with his family, which was already there. He enthusiastically described landmarks as we passed them – Þingvallavatn, the largest lake in Iceland, and Hengill, a nearby, prominent volcano. “You’re not scared of the car, are you?”, he asked, as he stepped on the gas pedal. “The speed limit is 90 km/h here, so we can drive 140!” He strongly stepped on the brakes again, as the car he wanted to overtake pulled out. “Tourist…”, he sighed. “Uh, I trust you!”, I said. We chatted a bit about our impressions of the country so far, and how there were so few trees. Omar told us a joke: What do you do when you get lost in a forest in Iceland? – You stand up! He also told us that all sheep in Iceland were roaming freely during the Summer, and that the owners would find them by their markings later in the year. Omar also spoke some German, because he had worked in Stuttgart many years ago, but he didn’t feel very comfortable using the language. He dropped us off at the Þingvellir Tourist Information Center, which was also where the campsite we wanted to go to was located. We were so excited after that, seeing that our plan had actually worked out, and getting there had been so much easier than we expected!

From Þingvellir to Mosfellsbær

Two nights later, we were ready to leave Þingvellir again. This section of Iceland has no bus network whatsoever, so we knew that hitchhiking had to work somehow. But, given how well getting there had worked, we were not too worried. Our destination for the day was Húsafell, a small town with a charming campsite, about 90 minutes to the north. There was a road directly going there, but we knew it passed through mountainous terrain, and we were not sure how many cars would take that route. We gathered our things, found a good spot to stand at the side of that road, and waited. We started the habit of using a timer on our phones, to know how long we had been there. This road indeed seemed to have very, very little traffic. We counted maybe 7 or 8 cars in the 30 minutes we waited there. One driver made a gesture to signify he wasn’t going very far. He stopped in the picnic parking spot opposite to us, got out with another person, they walked up a nearby path, and disappeared. When they returned 10 minutes later, we approached them. “If you’re trying to hitchhike there, you’re going to wait for three days”, he said with that distinct Icelandic accent, “few people take that road, because it’s so mountainous. Going back to the Ring Road and heading north would be your better option.” We nodded, as that was indeed our backup plan. “We don’t assume you’re going there?”, we asked. “No, I’m actually working, I have to safe a company bus. Uh, also, if you walk up that path, you’ll find a pretty creek! No tourists there, at all!” Again, we decided to take both pieces of advice. We quickly checked out the creek (it was indeed very pretty!), and then found another spot by the street going back to the Ring Road.

I think we waited for another 20 minutes, before someone stopped. Again, the person behind the wheel was an Icelander who was driving by himself. He introduced himself as Helgur. I had gotten into the habit of asking people about their experiences with hitchhikers, because we started to see a pattern: all people who picked us up told us that they often would see hitchhikers on the road, and would take them whenever possible. Helgur was no exception. He was just returning from a stay at his summer house, and was on his way to Reykjavik, where he lived. Getting to casually chat with locals was something I really enjoyed; we asked about Hákarl, the fermented shark that we had seen in the supermarket. At least Helgur didn’t like it at all, but had some family members who did. His hobbies included skiing, and he said that he would sometimes do that after work, half an hour away from Reykjavik. He also mentioned that, close to his summer house, there would be a geothermal area with hot water in the ground. His family had made a special bread there called hverabrauð (“hot spring bread”): you put a special bread dough in a container and bury it in the ground for 24 hours, after which it is done. As we stopped at the intersection with the Ring Road, he got a large package of that bread from his trunk and let us try it – it was delicious, very dark and sweet and dense, almost like cake. “Here, you can have it all!” We couldn’t thank him enough. This seemed worth the long wait!

We scouted around for the next location to stand. We needed to go north, and Helgur had dropped us off at a traffic-heavy, almost highway-like street coming out of another roundabout, with no buildings in sight whatsoever. In the direction we needed to go, the best spot we found was next to an emergency lane, but we soon realized this was a bad location to hitchhike: cars were going too fast, and they were busy watching the road, and where they needed to go. To make things worse, two tracks of the street merged into one at that point, so drivers were focusing on that, as well. We first sat down in the middle of the roundabout for lunch, and then headed in the direction of the closest village, which was a few kilometers away. This was one of the things we learned that day: try to get dropped off at a good location, definitely not at busy highway-like intersections, and preferably, close to some civilization… The village we reached was, again, Mosfellsbær, where we had started our first hitchhike. We stocked up one some food in a nearby supermarket, and stood at exactly the same place as the first time, this time only showing the half of the sign that said “[1] North”.

From Mosfellsbær to Borganes

We had luck again: after 15 minutes or so, a woman stopped. “I’m not going far”, she said, “only to Grundarhverfi”. We looked it up on the map, it was mabye one fourth of the way to Borganes, where we would have to leave the Ring Road again. But we thought that going in the right direction was a good idea. The woman seemed quiet and a bit shy, but while I was careful not to annoy her with too much conversation, she was the one that kept asking questions and finding things to talk about. She was driving back from work to where she lived. Interestingly, Grundarhverfi still belongs to Reykjavik, even though it is seperated from the city center by 10 kilometers of water, and there are no bridges or ferries, you have to drive all the way around a fjord. We told her that we were interested in the Icelandic culture and the language, and that we had installed Icelandic keyboards on our phones, which she found hilarious. Because of Iceland’s history, all school children learn Danish, and I asked about how that language compared to Icelandic from her point of view. “It’s so bad! Ughh!”, she spat out, and imitated some cawing noises, “all that chhh and tchhhh! I don’t like it!”

As we approached Grundarhverfi, we realized we might run into a problem: the village was tiny, and there were definitely no good places to stand - cars would move way to fast along the Ring Road. So our only option was to stay on the town’s gas station, and hope that someone of the few people stopping there would take us with them. A bit worried, we showed our sign to the few cars leaving the gas station. Incredibly, after at most 5 minutes, a driver lowered his side window. “Hi, I can take you!” Another Icelander. Of course. “Are you afraid of dogs?” We told him that we would be fine, and he made some room for our luggage in his little bus. One of us had to squeeze in next to a cage on the back seat row, which contained a calm, 1-year-old dog, which was sleeping pretty much all the time. The driver, Ivar, was a young, athletic person with a short beard and a restless energy. His bus was old, but seemed to be cared for well. Ivar turned on the radio. He was actually going through Borganes, and then was headed into the backcountry, to go to… his summer house. Well, what else did we expect. He showed us some pictures on his phone, which was mounted next to the steering wheel. They showed an aerial view of a large house next to a lake, built into a thick forest, unusual for Iceland, and also some jets skis. “Yeah, it’s fun there! We also have snow mobiles!” “And camera drones, apparently?” He smiled. “Yup!” Ivar was going to meet a friend, who would stay in the house the next weeks, and in exchange, Ivar would borrow his caravan.

The way to Borganes was long, and we got to touch on many different topics. Ivar also had been in Germany, “to train with GSG 9.” “Are you working in security, then? Or for the police here?” “Yeah, police.” I asked about Icelandic names, and if people would ever use someone’s last name. “No, never. I’m just Ivar, the second part of the name is not important.” He told us that a recent law had allowed people to take on arbitrary first names, independent of their gender identity or presentation. “Times are changing”, he remarked, but from what I could tell, he rather liked that change, and thought it was progressive. “And the second part of the name is derived from the father’s name, most of the time. My son is called ‘Ivarsson’, for example. But that doesn’t have to be the case.” I asked how he had experienced the financial crisis of 2008, which had hit Iceland especially hard. “Oh yeah, I lost a lot of money back then… that was not a good time.” We drove through one of Iceland’s longest underwater tunnels, and passed a long fjords, which housed two aluminium smelters, and a whale hunting company – a touchy subject for many Icelanders, so I bit on my tongue, not to ask any more questions about that. Ivar also remarked on how he thought Icelandic politicians were corrupt and not telling the truth most of the time. While my impression of Icelandic politics had been pretty positive, I guess the internal perspective can be quite different…

“We’ll be in Borganes soon! I’m going to take you over the bridge, into the city, so you can go to another gas station.” That was really thoughtful. Ivar even recommended a specific gas station, and dropped us off there. We said our heartfelt thanks, and he went on his way. At this point, it was already pretty late, and it had been a long, exhausting day, so we decided to stay in Borganes for the night. That’s one of the great things about Iceland: it has a really extensive network of campsites! There’s one in practically all larger towns, and also in some of the very small ones, which gave us a lot of flexibility.

After that night, we changed plans. The final leg of the journey we now had in mind was getting to the peninsula Snæfellsnes, all the way in the west of Iceland. (A friend remarked that Icelandic place names all sound like little dragons :3) That day, we spent many hours at gas stations and bus stops trying to get a hitchhike, but this time, it didn’t work out at all. Granted, the road there was long and lonely, and doesn’t have a lot of traffic. So in the evening, we concluded our hitchhiking adventures in Iceland, and just took a bus there.

Lessons learned

The only people who took us were Icelanders driving on their own, and we sometimes wondered why that was. Maybe Icelanders felt more obliged to help people visiting their country? Maybe the tourists travelling along the Ring Road had a lot of luggage of their own, and were not sure we would fit in? Maybe they were anxious about what would happen if they took us with them (I certainly would be!), or maybe couples wanted to spend their time alone? Another hitchhiker we met on the campsite in Borganes told us that some tourists had stopped for her, and that two guys would probably have a harder time.

Our A4-sized sign was definitely too small, it was only readable from a distance of 15 meters or so. We thought that getting a large piece of cardboard from a supermarket, and using a felt pen instead of a pencil would be a good idea. During our fruitless wait in Borganes, we looked around online for tips and tricks. Some people recommended holding the sign upside down, so people would stop out of pity. :P Or writing something silly on it, like “I DON’T STINK!” or “Runaway bride”…

The location makes all the difference. Like mentioned, places where drivers go slowly, don’t have anything else to focus on, and are headed in the right direction anyway, seem optimal, but they can be hard to find. Talking to people at gas stations didn’t work for us, but that’s maybe also because we had rather obscure destinations in mind. Taking locals’ advice on where to stand or on how to behave, however, worked well for us.

Doing this trip definitely gave me a strong sense of self-efficacy, the feeling that I’ll be able to deal well with similar situations in the future. Travelling as spontaneously and flexibly as we did was exactly what I needed, and I can’t wait to do more of that!

Maybe hitchhiking is also something you could try? :)

Further resources

While writing this post, I found Hitchwiki, which is a brilliant, extensive resource. Wikivoyage also has a short site about hitchhiking.

]]>
The Recurse Center, month 3 rc-month-3 2019-07-05T13:42:00+02:00 Sebastian Morr sebastian@morr.cc The last part of my daily checkins at the Recurse Center, after months 1 and 2! In this month, I transitioned to doing much more graphical/interacive stuff.

2019-06-03

Hey everyone! :green_heart:

Friday:

  • Created an animation with @Winston Smith (S1’19)! We used p5, and learned things about easing functions, and about how to plan and structure this kind of multi-step animation! Also, publishing this as a GIF on Twitter was a pain in the ass, we got the best result when exporting all frames individually, opening them as layers in GIMP, and then exporting them as a GIF. :confused: Even though, in the resulting tweet, everything still looks a bit blurry. As for actually making the animation happen: we don’t store any state, but have formulas in place that give us the transformations we want. You can peek at the p5.js source code here, if you want. Fun fact: we actually had another movement pattern in mind, but a bug produced this, so we decided to keep it! Out of appreciation of the fabulous @beesandbombs, we internally called this project wasps and (gre)nades. :P arrows.gif
  • Crawled the RC API to get people’s metadata and profile descriptions, then finetuned a GPT-2 model on that. Again, I’m amazed by how fast I got good results. Funny highlights:

Bio

My name is Dasabuki Shinoda. I was born in Kyoto, Japan but spent most of my life in Tokyo. I was a professional model in two stylists’ and an assistant manager’s jobs. I then started working as a model in a fashion photography studio, and found that modeling, photography, and editing were not the most exciting and fulfilling of my interests.

I’ve since discovered the power and joy of design and programming, and have been working for a well-appointed desk ever since.

I’m now trying to figure out what the heck I really am.


I’ve been programming for a while, and recently fell in love with the idea of living in the past, and using computers as a tool for self preservation.


What I’d like to learn and work on at RC

Go, go, go


In programming I’ve primarily used Python, which is my natural language and the most natural language for programming I have.

Other than programming I love to listen to and study to the same.

Most of all, I want to get better and master my passions (music and food).


Installing ImageMagick 3.0 and getting some testing/predicting working.

Installing and setting up a “no-fuss” automated testing environment for my codebase.

Getting some “yes” questions from the community about my codebase and project in general.

Today:

  • Give a juggling workshop!
  • More GPT-2 finetuning. Maybe create a tiny web interface to display the results?

2019-06-04

Hello, friends! :recursecenter:

Yesterday:

  • @Tim Vieregge (SP2’19) and I wanted to get back into the habit of meditating regularly, so we made an accountability/support group in the #meditation stream, and are doing micro check-ins there since Monday. Join us! :slight_smile:
  • The juggling workshop was so fun, thanks everyone for joining! Let’s do another iteration of the Recurse Circus next Monday!
  • Paired with @Alan Chu (SP2’19) on the command line tool that helps you insert Co-authored-by tags into commit messages. All Git repositories have the convenient .git/hooks/prepare-commit-msg hook that allows you to modify the commit message before it is opened in your editor! We first wrote a shell script to insert co-author tags, and then rewrote the thing in Go, which took 10 times as many lines, but is also (at least) 10 times prettier! And it’s unit tested!
  • Was surprised to see that my brain still can spit out some Blender shortcuts after almost a year of not really using it. (@Nick Aversano (SP2’19) tried to extrude 2D vector graphics of bugs into 3D, and had some… bugs in his workflow :P)

Today:

  • I didn’t get to the thisrecurserdoesnotexist web frontend yesterday, so I might do a bit of that today! よし!!

2019-06-05

Hey :}

Yesterday:

  • Started making an ambient generative art thing with @Kate-Laurel Agnew (SP2’19)! The vision is a Zelda-style pixelart garden landscape. We started out with a prototype in Nicky Case’s Emoji Playground, where we defined rules for a complex cellular automaton: empty spaces sometimes spawn a seedling, which can grow into a tree, which occasionally drop nuts. Then we had squirrels moving around, which multiply when there are many nuts, but die from overpopulation. And so on. IMG_20190604_115336.jpg
  • After that, as a first step for implementing something similar ourselves, we wrote some Javascript that fills a canvas with randomly colored squares! :palette: Also, keycodes.info seems helpful for figuring out the keycodes of Javascript input events!
  • Made a web interface for This Recurser Does Not Exist! You can check it out here: REDACTED! Because the model could hypothetically leak real personal information, it’s password protected: Username “REDACTED”, password “REDACTED”. This version contains about 500 pre-generated profiles. Please send me a screenshot if you find something funny! :) screenshot-2019-06-05_134132.png

Today:

  • Would be a fun exercise to also generate photos for This Recurser Does Not Exist! The model would probably take the full name of a person as an input? I might do some research on how to do that today.
  • I brought my roommate’s watercolor supplies for crafternoon! Never tried that before!

2019-06-10

Long time no see, #checkins stream! :O I had a lovely, quiet weekend. Got some organizational stuff done, got eaten by mosquitoes, and tried using watercolors for the first time! Wrote 25 postcards in total, that I’ll send off to 5 countries today! \o/ #victory 2019-06-08.jpg

Wednesday

  • Attended the fast.ai study group, and learned about embeddings and convolutional neural networks!
  • Read the GPT-2 paper, and skimmed the two papers it’s based on. Biggest takeaway: the researchers probably also don’t really understand why and how the resulting models work. You just wire together a network in a way that makes sense to you, train it, and hope for the best! :D
  • Spontaneously paired with @Winston Smith (S1’19) over dinner on drawing plane-filling fish and a tool to do so, and on snakes^Wcaterpillars moved by Perlin noise.
  • Chilled with @Maren Beam (SP2’19) to some sick techno/house beats in Church. We gotta do that again! :green_heart:

Thursday

  • Paired with @Vidhi S Shah (SP1’19) on training a GAN on the photos in the RC directory. Interesting to see how such a setup can be coded from scratch – we mostly sticked to this PyTorch tutorial. While the results are not realistic per se, I’m (again) super amazed by that training a this from scratch for a few hours gives so good results! screenshot-2019-06-10_130441.png
  • Gave a demo on This Recurser does not exist, which was super fun!

Friday

  • Made another animation with @Winston Smith (S1’19)! This one is based on an optical illusion called “contrast asynchrony”. Brains are weird! contrast-asynchrony.gif

Today

  • Another juggling meetup aka Recurse Circus :P
  • Put together tomorrow’s talk about tools for self-organization. Fun fact: I wanted to give a similar talk at another event last year, but… didn’t find the time to prepare it. Oh, the irony!
  • Faculty invited me to give a talk at this month’s Localhost! :open_mouth: Gonna think about a good topic today. Which technical talk I gave at RC did y’all enjoy the most?

2019-06-13

Hey all! :sunflower:

Monday

  • Recurse Circus! Thanks for joining, everyone! Good to see so many of you being happy with their progress! We ran out of juggling material on Monday, and had to improvise with paper cups and these little rubber animals for making tea! :D
  • Spicy thai food at Ugly Baby! :chili_pepper: Sweet/salty food at Milk Bar!
  • Submitted a talk proposal to the Chaos Communication Camp in August (about the why and how of game jams!)

Tuesday

  • Continued working with @Kate-Laurel Agnew (SP2’19) on the Infinite Garden ambient art project – we got some CC-licensed pixel art plants, and and planted them randomly in a grid! :seedling:
  • Great evening of non-technical talks about marathon running, technical diving, and lucid dreaming! Followed by an exursion to ssh torus@ascii.town! We collaborated on making a screen dedicated to RC (southeast of the Red Outpost, if you wanna visit)! screenshot-2019-06-13_143416.png

Wednesday

  • Paired with @Valerie Woolard (S1’19) on some NLP fun in Python: The Antonymizer replaces words in a text with their antonym, the Glossifier replaces words with a longer definition, and the Emojifier replaces words with their emoji equivalents. Running the first paragraphs of Alice in Wonderland through those filters was fun! :P
  • Paired with @Winston Smith (S1’19) on an interactive animation using nannou, a multimedia framework written in native Rust (thanks for mentioning this, @Zach Krall (S1’19))! The animation is based on the perpetual diamond illusion, which is pretty mindblowing! We might share a more finished thing later.

2019-06-18

Yo, what’s up? :cat:

Thursday

  • Most people I’ve ever seen in an in-batch feelings check-in! :O Thanks for your vulnerability, everyone, it means a lot to me! I shared the realization that I really like it if people use a neutral pronoun like they/them for me, so feel free to try that sometime, if you want! :blush: (But other pronouns are okay, as well!)
  • Gave a presentation about the Museum of Accidental Art (please don’t share the link publicly yet). I probably want to change the name, not to clash with the @accidental__aRt project – I’m attaching a poll, if you want to help me find a good one! Please submit your pretty bugs! screenshot-2019-06-17_185707.png
  • Really enjoyed exploring group theory using @Alex Berke (SP1’17)’s coloring book, thanks for making that event happen, Alex! I wish my algebra professor had framed cyclic groups that way! :D

Friday

  • Did a weekend trip to Washington, DC! (Uh, I always thought that was short for “District of California”, even though I found that strange… also, I always wondered which state Washington was in, heh. Was good to learn about the history of that place!) One of the things I liked most in DC was the excellent scooter sharing infrastructure, whee! :kick_scooter: And I touched a moon rock!!

Today

  • Gave a dry run of my Localhost talk about legit! Thanks for attending, @Jenny Xing (S1’19) @Jaryn Colbert (S1’19) @Aaron Sikes (S1’19) @Winston Smith (S1’19), your feedback was super valuable for me! :green_heart:
  • Continued working on the Emojifier with @Valerie Woolard (S1’19)! We’re now using a better tokenizer and a part-of-speech estimator to only replace nouns, adjectives, and verbs. We tried to be clever about finding grammatical forms which work best when looking them up in Emoji dictionaries (we’re using this one, which also has alternative names embedded in the source code). The results are pretty solid, and sometimes, confusing and funny! (Valerie, wanna share some examples? :D)

(Valerie added the following:)

Yes! So since we stopped pairing on emojifier I polished it up a little so it takes in a file as a command line argument. Some choice transformations:

And the young king was then married to his true wife, and they reigned over the kingdom in peace and happiness all their lives; and the good fairy came to see them, and restored the faithful Falada to life again. -> And the young 👑 was then married to his true wife, and they reigned over the kingdom in ✌ and 😌 all their lives; and the 👍 fairy came to 👀 them, and restored the 🐶 Falada to life again.

(I thought the faithful -> 🐶was particularly inspired)

I should like a drop of sweet red christening wine myself -> I should 👭 a drop of 🍭 👺 christening 🍇 myself.

suddenly a White Rabbit with pink eyes ran close by her -> suddenly a White 🐰 with 💗 👀 🏃 close by her

2019-06-20

Hey all! :green_heart:

Tuesday

  • Practiced and gave a Localhost talk about the legit programming language! When I published the language last month, I posed the challenge of writing a quine in it – the output of the program would consist of the Git commands required to create itself. The punchline of the talk was that someone on the Internet actually ended up doing that!!! :open_mouth: Here’s the program, which also contains some tools and documentation: https://github.com/remuladgryta/legit-quine I’m trying to find more about this person. Maybe it’s a soulmate? A soulmate with too much time. After the talk, people proposed new challenges: A transpiler from another language to legit! Or a self-hosting legit compiler! :’D screenshot-2019-06-20_170446.png

Wednesday

  • Went to @Valerie Woolard (she) (S1’19)’s Surrealist App Workshop, where we coded up Rails apps in 1,5 hours! Before I went there, I thought the concept was intimidating and scary. :scared: The slides which served as an inspiration explain that the event is about making a lot of mistakes, and asking for help. :wink: It was super fun, hectically scrambling for the docs, debugging strange errors, and always wondering if things like model names should be written in singular or plural. The concept was exquisite corpse-style coding: @Finn Boire (he) (S1’19) and me wrote the backend for a peace negotiation app involving camels, the frontend for a song/lyrics database of very distasteful songs, and gave a presentation about spawning rare insects that really like tacos, and why people should invest one million USD in that app. :P screenshot-2019-06-20_163423.png
  • Paired with @Winston Smith (he) (S1’19) on making a basic web interface for editing L-systems! Very satisfying to see it all fall into place, and being able to modify parameters with fine-grained sliders! Also, I learned that P5.js has functions to easily create interfaces like this (like createInput).
  • Got a 15-minute crash course on Haskell from @Tim Vieregge (he) (SP2’19)! What a fun, elegant language! :O I digged out a 2D graphics library called gloss, that feels very satisfying to use. I digged around in the demos, and especially liked the Tree one. @Winston Smith (he) (S1’19) and I modified it to be an ever-changing sequence of STOP sign trees. :D stop-tree-small.gif

Today

  • Super intense feelings check-in, oof. Thank you all for your vulnerability and love and kindness, it means a lot to me! :hugs:

2019-06-25

Hello! :heart_kiss:

Friday

  • Felt exhausted and quiet, so I spent most of the day on the couch in the library, reading Learn You a Haskell For Great Good (which apparently is available online under a Creative Commons license!) I found it mostly enjoyable and easy to read. Some of the examples involve sexism and fat shaming. :sad:
  • Point-free style functions blew my mind! That’s when you define a function without explicit arguments, because its definition involves functions which are missing arguments, as well! For example, instead of writing double x = 2*x, this works, too: double = (2*). Weird!
  • I had a vague idea of how to do IO in Haskell, but now I think I understand it a bit better. Also, I learned that IO can look very elegant. For example, here’s a program that reverses the lines of its input individually. The interact function is predefined, and runs a String -> String-type function on the input, which we construct using the function composition operator .:

main = interact $ unlines . map reverse . lines

  • @Tim Vieregge (he) (SP2’19) showed me how Zippers work in Haskell. I really, really like this way of looking at data structures!
  • Tried to print a Hive piece with @Nick Aversano (he) (SP2’19) on the M3D printer in Turing. Uh, we had to disable the warning in the OctoPrint interface running on the Raspberry Pi that this was an unsafe device, and could potentially catch on fire? :fear: The result was… not great, and resembled a warped hexagonal cracker. (Even though PLA is biodegradable, please don’t eat it!)
  • Went to the 16th MP3 Experiment in Prospect Park in the evening. It was silly and fun, thanks for joining, everyone!

Monday

  • Attended @Winston Smith (he) (S1’19)’s L-systems workshop! Find the online editor here! I never really understood how they worked, but after playing around with them in the editor, I think I’ve got it! I learned that doing things intentionally is hard (making a simple spiral, for example), while doing random things that look interesting is really easy (wildly orbiting loops? Unexplainably squiggly snakes?) screenshot-2019-06-25_124239.png
  • Paired with @Kate-Laurel Agnew (she) (SP2’19) on implementing movement mechanics for the Infinite Pixel Plant Garden. Right now, we add rows and columns to the 2D grid whenever we’re about to leave it, which I feel is very in line with the garden being potentially infinite! :blush:
  • Paired with @Finn Boire (he) (S1’19) on generating chord progressions! Finn has scraped all of ultimate-guitar.com over the last weeks, and we tried to use deep learning to process that. The results were not really overwhelming, but also not unpleasant, and mostly seemed to stay within the same key, and produced some pleasant patterns, including the very common I–V–vi–IV progression.
  • And then, we decided just to throw the complete songs, including the lyrics, into GPT-2. As always when I’m working with that model, I’m blown away by how well it worked. This is what we got, rather early in the training (note the “S” chord, and the rather touching last verse). Also, we let it run overnight on a larger input – I can’t wait to check out what happened!

     C# D#          Bm            G
I couldn't understand
   F F#          C#
How could you forget

         F#
I didn't know when they left but I guess

             C#
Fucking shit, I didn't know how long I'd been looking for
           G
Fucking shit, I wasn't able to understand
   F#  C# S F#
I never wanted you and I never want for anything
           Bm                  G
I couldn't understand
   F#   C  S    F A C#
I didn't know when they said goodbye
C  C#      F#  F##
I heard that little boy crying his guts out
  F# D#         F#
I heard that little boy crying his guts out
F#  C           C#
I heard that little boy crying his guts out

     F#
I didn't know when they left but I guess
F# C#         F#
I knew when they left and they came back
C# F#
I didn't know when they left but I guess
F# F#
I never wanted to hear them say goodbye

2019-06-27

Hello! So, here I am, writing my last in-batch check-in! :O It has been a pleasure, thanks for everyone who followed along!

Tuesday:

  • @Winston Smith (he) (S1’19) and I made another animation! \o/ In this one, we change the angle of several L-systems, and smoothly transition them into each other. Meet: Sierpinski Arrowhead, Hexagonal Gosper, the Hilbert Curve, and the Dragon Curve! fractals.gif
  • Gave a talk about the minimalist constructed language Toki Pona! Slides with resources: toki-pona-talk.pdf I also made a #tokipona stream, for maybe practicing it in the future with you! :) This was the last round of non-technical talks organized by @Jaryn Colbert (she) (S1’19) and me, glad to see that @Zach Krall (he) (S1’19) will take them over! :tada:
  • Went to the Plotter People meetup with @Winston Smith (he) (S1’19) and @Wesley Aptekar-Cassels (they) (m4’19), which was a very nice and inspiring event! Paul, the organizer, explicitly expressed that he would love to see more Recursers there in the future!

Wednesday:

  • Played against @Yoni Elhanani (he) (SP2’19)’s Ultimate Tic-Tac-Toe Solver with him, and won! \o/ Also Yoni, stepped me through the code – certainly the largest and most elegant Haskell program I’ve seen so far!
  • Checked out the results of the longer-trained song generation GPT-2 model with @Finn Boire (he) (S1’19) – it doesn’t seem overtrained yet after 5000 steps. The resulting songs are mostly coherent, and mostly have pleasant chord sequences, that kind of stay in key. We wanted to give an ad-hoc performance at tonight’s presentations, but it seems we missed the opportunity to sign up. :wink:

Today:

  • Give hugs to everyone who wants one! :hugs:

2019-06-30

I wanted to add a few closing thoughts to this topic. At this point, I’m back in my hometown Braunschweig, which is conveniently located in the center of Northern Germany. Miss y’all a lot! :green_heart: My time at RC has been one of the most intense, joyful phases of my life, and I feel immensely grateful and privileged that I got to share that with you!

Here’s an open invitation for my fellow batchmates, alumni, and future Recursers alike: come visit me anytime! I can offer comfy places to stay in both Braunschweig and Berlin, and added that info to the couch surfing page on the wiki. If you’re ever in or near Germany, I’d love to meet you, feel free to hit me up!

Also, message me anytime you just want to chat – most things are interesting to me, but I have a lot of experience with interactive and visual stuff, self-organization, and open relationships. My email address is sebastian@morr.cc, and my main phone number is REDACTED (message me via Signal, WhatsApp, or Hangouts!)

You can follow me on Twitter, Mastodon, and GitHub, and probably other places, I’m “blinry” everywhere. :P My homepage has an RSS feed, if that appeals to you. Alternatively, you can conveniently subscribe to my newsletter! I also have a small Patreon page, if you feel like want to support my open source logo design work, or the nonverbal IDEA-style assembly instructions (and occasionally want to get postcards! :3).

A few thoughts for the Summer 2 folks coming in next week (hi! :wave:): in my experience, there’s no “right” way to do RC! Listen to what you need each day, and don’t feel guilty about doing exactly that. At the same time, I’d encourage you to try the things that scare you most. Remember that comparing your own inside with other people’s outside is not a fair comparison. Go to feelings check-in! Practice vulnerability, and make lots of mistakes! <3

See you in #alumni-checkins, and at NGW next year! :)

]]>
The Recurse Center, month 2 rc-month-2 2019-06-02T23:53:00-04:00 Sebastian Morr sebastian@morr.cc Continuing my check-ins from the first month! Putting all of these together, I’m astonished on the variety of stuff I worked on. (Also, the Recurse Center is very neat, and you should all go!)

2019-05-03

Hey everyone! I really needed some time off :exhausted:, but I’m back, and I feel kind of re-energized at this point. Oof.

Tuesday:

  • Went to the event planning meeting and co-volunteered to organize the non-technical talks during the second half of my batch, together with @Jaryn Colbert (SP1’19)!

Wednesday:

  • Published a blog post about my first month at RC, which is basically just a collection of these check-in. Wrote some helper scripts to help me with tasks like collecting all images included in these posts.
  • Polished up the docs for legit, and made the final logo, preparing a public release.

Yesterday:

  • Published a blog post about legit, which includes the specification, and some examples. Happy to see it was well-received! One question that came up a lot is how to pronounce the name – and people agreed that it’s probably pronounced like “GIF” :P Also, I learned that you can actually do this to meta-track the changes in a Git repo:

      cd .git
      git init
      git add .
      git commit
    
  • Talked with @Jaryn Colbert (SP1’19), @Kiwako Sakamoto (SP1’19), and @Corin Faife (SP1’19) about organizing the non-technical talks. @Kiwako Sakamoto (SP1’19) made some very helpfull additions to the wiki page on how the event works! Sent my first message tagging Everyone at RC :bell:
  • Started working with @Jaryn Colbert (SP1’19) on making faces.recurse.com more forgiving: if a person has multiple first names, it should be sufficient to guess one of them. If a person has an alias (like me ^_^), it should be sufficient to guess that. Adding last names should be allowed.
  • Feelings check-in was really important and relieving for me. Thanks, y’all! :green_heart:
  • Gave a talk about writing generative grammars with Tracery. I should really make the HTTP status generator into a Twitter bot sometime. “311 No Choice” :P
  • Another round of Company Meet & Greets! I enjoy the format a lot.

Today:

  • Pair on game engines, Twitter bots, or map.recurse.com!
  • Teach juggling?
  • Also, visit MoMA later today (it’s free on Fridays!)

2019-05-06

Hello, lovely people! I spent this weekend reviewing talks for Enthusiasticon, walking through East Village, digital painting (I really want to do this more!), and making Biangbiang Noodles (fun fact: The Chinese character for that dish has 58 strokes!)

Friday:

  • Continued implementing more forgiving name guessing for faces.recurse.com with @Jaryn Colbert (SP1’19). We think we’re almost there!
  • Added a “drop a marker and share the link” feature for map.recurse.com with @Vidhi S Shah (SP1’19).
  • The “New Order” exhibition at MoMA was pretty neat, and not as full as I had expected. Also, I found this treasure on the top floor: IMG_20190503_193450.jpg

Today:

  • Even though it itches me to transition to new topics (Machine learning! Functional programming! Generative Art! ALL the frameworks!), I think I’ll keep looking at low-level stuff for a while: I’d like to learn how WebAssembly works (or what that even is), and write a tiny silly module for the Linux kernel! So maybe I’ll start with one of those topics today.

2019-05-07

Hey all, how are you today? :sunflower:

Yesterday:

  • Looked at what WebAssembly is and how it works. Especially Mozilla’s tutorial series seemed helpful. I think it’s hilarious that the tool converting the text-based representation to the byte format is called wat2wasm :D Wat! The language itself is interesting: Only four types (i32, i64, f32, f64), a very strict interface on how to use wasm code from JavaScript, a Lisp-like syntax based on s-expressions, and a stack-based computational model.
  • Wrote a “hello world” wasm module, here’s how it comes together with HTML and JS: screenshot-2019-05-07_132825.png
  • Looked at how to compile Rust code to WebAssembly, but that process seems so multi-layered and convoluted to me that it’s losing all elegance and the result is not very aesthetic to me. :/
  • Set up auto-formatting in Vim using Prettier (thanks for the recommendation, @Nick Aversano (SP2’19)!) and ALE. It’s so satisfying not having to do code formatting yourself! <3
  • Realized that WebAssembly is not interesting to me right now. :grinning_face_with_smiling_eyes: When exploring other technologies, like x86 assembly or the ELF format, I feel like I get new insight of stuff I already know works. WebAssembly adds another layer, and seems targeted at people who want to build high-performance applications (like game engines) for the browser. It does not add new functionality, it adds efficiency to critical pieces of your software. It’s good to know more about it, but I’m not going to explore that more, I think.
  • Instead, I wanted to look a bit at the Linux kernel! I wrote my first simple kernel module, xkcdrandom, that creates a device called /dev/xkcdrandom – when you read from it, you always get the number 4 (“chosen by fair dice roll, guaranteed to be random”). Writing kernel modules is a surprisingly pleasant experience! screenshot-2019-05-07_134531.png

Today:

  • Explorables/Observables workshop with @Toph Tucker (SP2’19)! :eye:
  • Finishing that Faces feature with @Jaryn Colbert (SP1’19)! :camera:
  • Learning how to play Dwarf Fortress with @Kate-Laurel Agnew (SP2’19)! :pick:
  • Looking for more ideas for fun kernel modules! I drew much inspiration from @Kamal Marhubi (m2’18)’s “rickroll” module, which hijacks the open syscall and always opens a “Never Gonna Give You Up” whenever userspace tries to open an MP3!

2019-05-09

Tuesday:

  • Made an account on Observable and learned a bit about how to make notebooks there. I think it’s a brilliant tool for making interactive explanations! Thanks to @Toph Tucker (SP2’19) for hosting the workshop! :green_heart:
  • @Jaryn Colbert (SP1’19) and me wrapped up our feature for more forgiving name guessing in faces.recurse.com!
  • Non-technical talks were so good! Check out @Max Chiswick (SP2’19)’s photos of his 12000 km bicycle tour through Africa, for example! :O
  • Built a neat little dwarven fortress with a very patient @Kate-Laurel Agnew (SP2’19). Then, we saved the game, and tried to have some fun by attacking a giant moose (apparently, a dangerous enemy when you don’t have any armor or weapons? In the end, nobody died, but I think the dwarves puked a lot out of fear?) and digging a tunnel to a nearby river to flood the common rooms (surprisingly, the dwarves didn’t care and kept socializing. Pool party? In the end, we built some escape stairs on which they – reluctantly – climbed to the outside).

Yesterday:

  • Pairing with pears was great, thanks to @Maren Beam (SP2’19) and @Nick Aversano (SP2’19) for hosting that! Let’s do this again! I started building an Observable noteook about teaching OpenGL fragment shaders and ray marching with @Toph Tucker (SP2’19), and we got on all kinds of tangents :D We ended up with this magnificent shader: screenshot-2019-05-09_131921.png
  • Photography meetup! I learned about darktable, an open-source photo postprocessing software
  • Overcooked is a very neat game!

Today:

  • Think about how to make the Map of RC as useful as possible for NGW. Does anyone want to meet up with @Alicia Thilani Singham Goodwin (F1’17) and me to think about that?
  • Today the SP1 batch is never-graduating! :cry: The six weeks went by so quickly! :O

2019-05-13

Hello~ everyone! :octopus:

Thursday:

  • Discussed some design questions regarding the Map of RC with @Alicia Thilani Singham Goodwin (F1’17).
  • Brainstormed ideas for silly Linux kernel modules with @Jeanine Peters (SP2’19)! Shrinking your video output by one pixel every minute? Making your mouse pointer move in reverse? Swapping two random keys on your keyboard? We tried actually implementing the last idea – diving into Linux’ code base was surprisingly fun! We learned how to enumerate input devices, and how to find out which drivers are attached to them – so that’s how we found drivers/input/keyboard/atkbd.c, which defines the driver for my Thinkpad’s internal keyboard. We still don’t reallly understand how scancodes relate to keycodes, but we managed to swap the x and z keys! We just copied the driver, made modifications to the scancode table, recompiled, unloaded the original driver, and loaded ours. What could possibly go wrong. I’d love to do more of this! :D

Friday:

  • Worked a lot on the Map of RC, and released v0.2, featuring the positions of the first aid kits, and the fire extinguisher. Also, we’d previously left out the electrical closets, because they were not in the architects’ floor plan. Oops!
  • Split out the project into three repositories: map-of-rc contains the base SVG, map.recurse.com contains the framework for the online version, and map-of-rc-tiles has the map tiles in different resolutions, which are used by the online version, and can be regenerated at will.
  • Paired with @Tim Vieregge (SP2’19) on making a “self-guided tour” flyer, which we hoped would be useful for the people exploring the new space for the first time during Never Graduate Week!

Weekend:

  • Visited the School for Poetic Computation for their student showcase. One of my favorite installations: https://twitter.com/blinry/status/1127356795457085442
  • Attended !!Con. Oh wow. I’m so glad the talks were recorded, so I can share some of them with y’all! Will try to take some time this week to do a little write-up.

Today:

  • Try not to be overwhelmed by all the amazing stuff going on at RC during NGW! :grinning: I’d like to take a loot at the CTF, and @David E Lu (W1’16)’s AV systems talk sounds amazing!

2019-05-15

Hey there, lovely people! I’m getting more input than I can process currently, which is an interesting feeling, and I think I’m fine with that! :grinning_face_with_smiling_eyes:

Monday:

  • Talked about game dev and obscure digital art forms at the artist meetup organized by @Andrew Yoon (F2’16)!
  • Went to the CTF intro, and formed a group called Octopus on Toast (because we found an artificial slice of toast and a plush octopus in Sammet when we first met there)!
  • @Jacob Kozak (W1’17) gave us a whirlwind intro on the disassembly/debugging suite radare2. Super amazing to see what you can do with it! I had looked at the GUI a few times before, but the terminal version (which includes a visual mode) is so much better! We got really close to solving the IoT pet feeder challenge on Monday!

Tuesday:

  • Fixed the remaining off-by-one errors for the IoT pet feeder challenge! I think it’s easy to get addicted to the rush of adrenaline you experience when you’ve solved a problem like this!
  • Attended the APL workshop by @phoebe beatrice jenkins (m4’18). We started with basic features, and ended up with a Game of Life implementation (consisting of a single line of scary-looking symbols)! Hilarious!
  • Had a lonnng walk over Brooklyn Bridge with @Adelle Housker (W2’19), talking about family, life after RC, and coding bootcamps.
  • We solved all challenges except for cakebox! :tada: This is so fun. I’d love to do more CTFs in the second half of my batch! People have told me good things about picoCTF?
  • Localhost talks were amazing! :green_heart: Felt a bit like a continuation of !!Con. Good job everyone!

2019-05-20

Hey everyone! :wave:

Very exciting to see so many new friendly faces in the space! Looking forward to get to know you in the next week(s)! I have some catching up to do! Last week was “Never Graduate Week”, and participated in my second “Capture The Flag” event, so a lot of this check-in is about that:

Wednesday:

  • Joined @Alicia Thilani Singham Goodwin (F1’17)’s outreach drive and messaged three wonderful people I think would be a perfect fit for the RC community! Also, put recommendations for them in RCs internal application system.
  • Pondered some more about the cakebox challenge with @Yoni Elhanani (SP2’19) and @Alex Segura (SP1’19) and @Shanti Chellaram (SP2’19) (the goal was to build a ZIP file containing a single file with the same MD5 hash as itself)… but to me, it felt like we would need to spend many more hours to get it done, so I gave up at this point.
  • Went to the place that must not be named, before I knew it was off limits. :surprise:
  • Had lovely conversations with @Gabrielle Singh Cadieux (F2’17) and @Adrien Lamarque (S1’16)!

Thursday:

  • Joined a discussion on community software and how to maintain it, organized by @Jason Owen (SP2’19) and facilitated by @John Hergenroeder (SP2’15). :green_heart: We identified the problem that an overview of community-built projects are really hard to find (there’s a list in the wiki). We’ll also do some knowledge transfer this or next week for the S1 batch.
  • By Thursday, my social batteries were pretty drained, so I spent the rest of the day listening to talks. For example, @Andrew Yoon (F2’16) showed off spectrophone, and @Rachel Hwang (m7’18) and @Adrien Lamarque (S1’16) demonstrated their reaction-diffusion system implemented in GLSL!

Friday:

  • CTF wrapup! I was curious to learn how @Cameron Finucane (SP1’18) had set up the Observation is… key! challenge. This is what he answered: “I read the manual” :no_mouth:
  • Started doing challenges on picoCTF 2018, a beginner-level CTF that is open the whole year. Exactly what I need right now! If you’re interested in security stuff, definitely hit me up, I’d love to pair on solving some of these challenges!
  • Learned what a shellcode is! It’s basically a series of bytes that encode position-independent machine instructions, which, when executed, do something interesting! If you can somehow take control of the instruction pointer, you can jump there! For example, here’s some instructions spawning a shell. The spare slash gets added to make the length of the string divisible by 4: screenshot-2019-05-20_200549.png
  • When putting together shellcodes, it’s important to avoid zero bytes (because many functions expect zero-terminated strings, and will ignore everything you put after that). Sometimes, you need to use tricks to avoid zero bytes, like only writing to al (the lowest byte of the eax register), which shortens the operand in the machine instruction. Or, if you want to include a call instruction, to avoid zero bytes in the relative offset that goes after the opcode, a trick is to do a near-jump to a position in the end of your shellcode, and then do the call with a negative operand (which will be filled with 0xff bytes). This stuff is so fascinating! :grinning_face_with_smiling_eyes:
  • Learned about format string exploits, and how a thoughtless printf(string_from_user) can be abused! I might give a presentation about that this week.

2019-05-21

Good morning! :sunny:

Yesterday:

  • Gave guided tours through the physical RC space in the morning.
  • Meeting new folks from the S1 batch was exciting! I love what y’all are interested in, the new energy you bring to the space, and I see lots of potential for collaboration!
  • @Tim Vieregge (SP2’19) and I wanted to put together some fun Linux kernel modules! Inspired by a conversation with @Jeanine Peters (SP2’19), we had ideas like “move the mouse cursor in unexpected ways”, “shrink the screen by one pixel each minute”, or “filter all network traffic and make images appear upside down”. After some poking around in the source tree, we found that the kernel didn’t feel like the correct place for those tasks, and decided to focus on a higher layer in user space. We discovered that modern X.org versions actually support multiple simultaneous mouse cursors, which is absolutely hilarious on its own! We wrote a program using Xlib and Xinput2 that makes two mouse cursors attract/orbit around each other. :stuck_out_tongue_wink:

Today:

  • Continue working through picoCTF.
  • Put together simple examples of basic binary exploits.
  • More Fun with Mouse Cursors?

2019-05-22

Hey, y’all! Not feeling great today. I’m having a bad headache since Tuesday morning, that makes it hard to focus. That sucks, but I expect it to go away in a day or so.

Yesterday:

  • Put together two simple examples of a buffer overflow exploit and a uncontrolled format string exploit. Turns out that’s surprisingly hard to do, because modern compilers have all kinds of security mechanisms built in, like stack canaries, that abort execution of a program if someone tries to overwrite the return address of a function. You need to turn that off explicitly. Also, there’s a kernel feature called ASLR, which randomizes the position of the different parts of a program in virtual memory when it’s loaded and executed, so that functions are not at fixed addresses, for example. You can also turn that off. Third, modern C standard libraries don’t have the gets() function anymore, you need to switch to an older standard to use it. And fourth, modern compilers will scream at you angrily that you really should not use gets()! :grinning:
  • @Evy Kassirer (m4’19) and I tried to connect her macbook to the pen plotter. We didn’t succeed, but we discovered that you can write stuff to other terminals if you find out which device in /dev they are connected to!
  • Plotter meetup! I like to think about how to use devices in unintended ways, so I suggested controlling the pen in real time, using a mouse! I’m super glad that @Wesley Aptekar-Cassels (m4’19) actually made that happen! The result feels a bit like an etch-a-sketch.
  • Continued working on the multiplayer mouse cursor thing with @Tim Vieregge (SP2’19). What we currently have is rather hacky, but fun! We’re planning to give a presentation on it at the end of this week.
  • Talked to @Christopher Ray Ertel (S1’19) and @Shae Matijs Erisson (S1’19), who might be interested in forming a team for a CTF in the next weeks!? :tada:

Today:

I’m going to take it easy today. Ideas include:

  • Learn more about APL, after being introduced to it by @phoebe beatrice jenkins (m4’18)’s during NGW! It’s a fascinating, concise language with many weird symbols, like the worried face operator: ⍨
  • Document how map.recurse.com works, and how future batches can make changes to it!

2019-05-23

I’m better today, my headache is almost gone! :fireworks:

Yesterday:

  • Talked with @Glen Chiacchieri (m4’19) for almost two hours. We touched on a lot of topics, and I had some of my assumptions challenged (about psychoactive substances, about the goal of meditation, about the role I could play in other people’s lifes). I took away a lot from that conversation. Thanks, Glen!
  • Worked through the APL tutorials on tryapl.org – I still think the language is hilarious! Some of my favorite operators are the domino ⌹ (which inverts a matrix), the fire hydrant ⍎ (which executes a string as APL commands), and the worried face operator ⍨ is actually called commute and modifies the function before it to swap its operands. “But blinry”, I hear you ask, “how do you type all these weird symbols?” Well, some people use APL keyboards (Dyalog is selling a modern one, but on tryapl.org and similar environments you can also prefix ASCII characters with a backtick to generate APL symbols – the domino is ``+`, for example. screenshot-2019-05-23_124056.png
  • Here’s my first attempt on a FizzBuzz implementation in APL. It generates the numbers from 1 to 100, maps them to pairs of the number and the replacement string, and displays either that one, or the number, if the string is empty:

      {(0=⍴⊃⍵[2]):⍵[1]⋄⊃⍵[2]}¨{⍵,,/(0=3 5|⍵)/'Fizz' 'Buzz'}¨⍳100
    
  • Dealing with pairs like that felt really clumsy. Here’s my second attempt – for each number, it creates an index into an array consisting of the replacement strings and the number itself, and select the correct one:

      {'FizzBuzz' 'Buzz' 'Fizz' ⍵[(0=15 5 3|⍵)⍳1]}¨⍳100
    

Today:

  • Create some minimal documentation for the Map of RC.
  • Community software intro & feelings check-in!
  • Give a talk about nonverbal algorithm assembly instructions.
  • Visit the student showcase at NYU’s Game Center in the evening.
  • I’ve brought Icehouse Pyramids for game night, anyone up for some Zendo? @Yoni Elhanani (SP2’19)

2019-05-28

Hey folks! :rainy: :rainbow:

Thursday:

  • Gave a talk about IDEA, and had @Ian Ross (SP2’19) and @Christopher Ray Ertel (S1’19) betatest the BLÖCKCHÄIN one. In particular, we don’t have a good analogy of hashing yet – currently, it’s something like a meat grinder producing Rubik’s cubes! :laughing: Better ideas would be super welcome (please don’t share publicly yet):

    (Censored)

  • The showcase at the NYU Game Center was fantastic, see this topic! I want to go to one of their usual Thursday events soon!

Friday:

  • Implemented automatic pointer detection and better orbital mechanics for MouseToy. One of the important thing remaining is automatic restructuring of the device tree when you have, for example, three external mice attached. Currently, you need to configure them yourself to be independend from each other.
  • Met @Alicia Thilani Singham Goodwin (F1’17) in her office hours. I wasn’t sure what to work on next, and felt a bit lost. There are so many interesting things to learn, and I found it hard to prioritize. Preparing for this meeting already helped a lot – I made a list of things I want to do, and divided them into several categories:
    • Things that seem mysterious/scary, but maybe not fun:
      • Low level stuff:
        • How does Linux start up? What’s an init ramdisk?
        • How is the Linux kernel structured? What exactly does it do?
        • Still a bit more about dynamic linking and the tools around that.
      • Machine learning! Tensorflow! GANs, transformers, style transfer networks?! GPT-2! BERT?!
      • Network stuff: How to configure interfaces? How does IPv6 work? How to properly use Wireshark?
    • Things that seem interesting to me right now:
      • RISC assembly
      • More security stuff/CTFs
      • Haskell/LISP
      • other languages, like Elm, Typescript
    • Things I could benefit from in the future:
      • Devops: How to deploy an application? How to back up its database?
      • Learning frameworks! Flask, React, Vue, …
      • Building pretty web interfaces
      • WebRTC
    • Things I would enjoy, but already feel kind of comfortable with:
      • Making generative art, learn more about algorithms involved and frameworks like Processing
      • Making games, learning Unity/Godot?
      • Learning live coding environments
    • Things others would benefit from:
      • Make interactive articles about stuff I know well
      • Improve the map
      • Make a hub of community projects
      • Make the wiki more accessible/clean it up

    Alicia encouraged me to go for the scary/mysterious things, which is also the rule of thumb I had in mind. So I think I’ll spend the next week or two getting my hands dirty with deep learning. Another tip she had was to use the resources of RC while I’m here – be it the wonderful people with their diverse interests, or the HEAP cluster. I’d love to keep doing visual and interactive stuff after RC, and I’d love to find more people to collaborate with on those, so maybe I’ll also incorporate a bit of that into the second half of my batch.

  • Brainstormed about a Toki Pona text adventure with @Brandon Hopkins (SP2’19) and @Nick Aversano (SP2’19)… not sure how to approach it best. Visuals would be super helpful, but a lot of work. We could try to translate an existing point & click adventure? Are there games like this under free licenses? Toki Pona is a constructed language with a very minimalist grammar and about 130 words. Maybe I’ll bring it to the next language exchange. :smiley:

Today:

  • I’d like to play with GPT-2! Exciting to see that the medium-sized model has been released by now! I think there are methods for fine-tuning the model with additional training data. While walking to RC this morning, I thought about which kind of text to throw at it – maybe RC directory profiles? “This Recurser does not exist”? :wink: Or my own tweets? I already have a personal Twitter bot that imitates me, @yrnilb, which produces surprisingly interesting results, given that it only uses Markov chains!
  • Give a talk about my stem cell donation.

2019-05-30

Moin! (That’s a generic, casual greeting in northern Germany. An appropriate response would be: Moin!)

Tuesday:

  • Tried and failed setting up Tensorflow on the HEAP cluster. Seemed to have some incompabilities between the local CUDA version and the Tensorflow version. Consulted with @Vidhi S Shah (SP1’19), thanks!
  • Did the first round of non-technical talks with @Jaryn Colbert (S1’19) (and without @Kiwako Sakamoto (SP1’19) and @Corin Faife (SP1’19) :sob:)!
  • Gave a talk about the time I donated stem cells four years ago. If you can, please order your own registration kit here! You might be able to save someone’s life!

Wednesday:

  • Worked on adding more details to the Map of RC with @Winston Smith (S1’19)! The subdomain currently doesn’t seem to work (investigating!), but here’s how it currently looks like: screenshot-2019-05-30_134151.png
  • Collaborative Indie Game night was fun, we played an obscure… experience? … called KIDS, Lovers in a Dangerous Spacetime, and The Messenger (the soundtrack is so good)!
  • Finished setting up Tensorflow on the HEAP machine mercer. Took me about five attempts to get it right, but what worked for me was installing Conda locally, and then running these commands (which also sets up gpt-2-simple):

      conda create -n tf tensorflow-gpu cudatoolkit=9.0
      conda activate tf
      ~/anaconda3/envs/tf/bin/pip install gpt-2-simple
    
  • As a quick test of the finetuning step, I fed the complete text of The Name of the Wind to OpenAI’s pretrained 345M model. I was absolutely surprised by how fast that produced good results! During training, a sample is printed each 100 steps, so I could watch as model learned. After the first 100 steps, it wrote a dark story about death and dying:

My father was not dead. He had stopped breathing. There was a look of pain on his face, but he did not know what was wrong.

I took the dagger and set it against his chest. He lay there, and I let him die. I took the dagger and put it in the water.

Two men came at my father. I went to them and they came to me. I had them all tied to the tree. I had them all tied up. I had them all killed.

After 200 steps, it had already learned about the names of characters and places in the book. After 1000 steps, I didn’t really see improvement anymore. Generated text range from realistic conversations, to mythical background stories, to action-laden fights.

Here’s two characters from the book discussing the composition of a song about in-world places and objects, smoothly transitioning between dialog and poetry. This blew my mind:

“Nahlrout,” I mused. “How is it similar to that?”

She looked at me. “How really? Surprised the hell out of me.” She laughed. “How do you propose we compose the chorus?”

“I could compile a crescendo,” I snapped. “I know an excellent rhyme or meter that would make the most sense.”

She rolled her eyes. “I could, perhaps.”

“In any case, it will serve you right. The second movement of the chorus is:

“On the road to Tinuë

Through Tinuë

I stopped at an inn to get refreshment

And decided to walk to the Eolian

To see if my nahlrout had worn off.”

Today:

  • Polish MouseToy with @Tim Vieregge (SP2’19) and give a presentation about it tonight!
  • Visit NYC Resistor in the evening!

2019-05-31

Hey lovely people! :green_heart:

Yesterday:

  • Converted my fake HTTP status code generator into a Twitter bot: @httpcodesbot screenshot-2019-05-30_034936.png
  • Also, @Nathan Jonathan Goldbaum (S1’19) introduced me to httpstatusdogs.com and http.cat and httpstatusgoats.net, which are all super cute. :dog: :cat: :goat:
  • Polished MouseToy some more with @Tim Vieregge (SP2’19). Tim found out how to change the appearance of cursors, so we could implement a game of tag! Was super fun giving a presentation/demo about it in the evening! If you’re interested in trying it yourself, the source code is here: https://github.com/blinry/mousetoy

Today:

  • Check whether the Recursor API gives you access to people’s profile descriptions. Finetune a GPT-2 model to them and see what happens!
  • Make some animations in p5 with @Winston Smith (S1’19)!
]]>
waspsandnades waspsandnades 2019-06-01T12:31:00-04:00 Sebastian Morr sebastian@morr.cc

An animation Winston and I made at the Recurse Center. Out of appreciation of the fabulous @beesandbombs, we internally called this project wasps and (gre)nades. :P

I learned a lot about easing functions and about how to plan and structure this kind of multi-step animation! Also, publishing this as a GIF on Twitter was a pain in the ass, we got the best result when exporting all frames individually, opening them as layers in GIMP, and then exporting them as a GIF. Even though, in the resulting tweet, every looks a bit blurry.

As for actually making the animation happen: we don’t store any state, but have formulas in place that give us the transformations we want. You can peek at the p5.js source code here, if you want.

Fun fact: we actually had another movement pattern in mind, but a bug produced this, so we decided to keep it!

]]>
legit legit 2019-05-01T17:07:00-04:00 Sebastian Morr sebastian@morr.cc Ever since I gave that talk about esoteric programming languages, I wanted to create my own one. Well, some years later, at the Recurse Center, I wanted to learn how to build compilers with LLVM, so that seemed like a good opportunity to try that! Presenting:

Programs written in legit are defined entirely by the graph of commits in a Git repository. The content of the repository is ignored.

legit is designed so that all relevant information is visible when running git log --graph --oneline. For example, here is “hello world”:

Thanks to rohieb for the original idea! Influences for the design of this language include Folders, Befunge, Brainfuck, and Elymas.

A fun consequence of programs defined by a Git history is that you can’t properly track versions, because they already are Git repositories. All you can do is force-push a new version to GitHub.

You can find implementations of legit, as well as some example programs, on GitHub: https://github.com/blinry/legit. The entry in the Esolang wiki is at https://esolangs.org/wiki/Legit.

Here’s how the language works:

Memory

In each legit program, two data structures are available: A stack, and a brainfuck-like endless tape, with a head moving on it. Both hold signed integers.

Control flow

Execution starts at the commit pointed to by the master branch. Commit messages can contain a series of instructions, seperated with spaces, which are executed one by one. Only the first line is considered, so lines after that can be used for comments.

  • If a commit has only one parent, execution will continue there after executing all instructions in the current commit.
  • If a commit has multiple parents (numbered 0, 1, 2, …), the top stack element will be popped. If that element is n, to go n-th parent, or to the last one, if n is outside of the available range.

Instructions

For all instructions, popping from the empty stack will return a value of 0.

Control flow:

  • [<tag>]: jump to the specified Git tag. For example, [loop] will jump to the tag loop.
  • quit: stop the program.

I/O:

  • get: read a char from standard input and place its ASCII value on the stack. On EOF, push a 0.
  • put: pop top stack value and write it to standard output as a char. The value is always truncated to an unsigned byte.
  • <Number>: push the specified integer on the stack. For example, 42 will push the value 42.
  • "<Letters>": unescape string, then push the individual ASCII characters on the stack. For example, "Hi\n" will push the numbers 72, 105, and 10.

Stack operations:

  • dup: duplicate top stack value
  • pop: pop top stack value and discard it
  • add: pop two topmost stack values, add them, push result on the stack
  • sub: pop two topmost stack values, subtract top one from bottom one, push result on the stack
  • cmp: pop two topmost stack values, pushes 1 if bottommost one is larger, 0 otherwise

Tape operations:

  • read: place value of current tape cell on the stack
  • write: pop top stack value and write it to the current tape cell
  • left: pop top stack value, move tape head left for that many places
  • right: pop top stack value, move tape head right for that many places

Examples

I’ll be honest with you: I got tired of writing Git commands by hand to create legit programs. One consequence of the execution going top-down is that you have to write your programs backwards, and each time I’d make a typo, I’d have to start all over, because the commits above that would be invalidated. So… I started to write shell scripts, which would then generate my legit programs. You can generate the examples like this:

make -C examples

Alternatively, you can also clone them directly from GitHub:

hello, a simple hello world program:

rot13, a ROT13 implementation:

brainfuck, a fully-functioning Brainfuck interpreter, conveniently proving that legit is Turing complete!

Implementations

The repository provides both an interpreter (better suited for development and debugging purposes) and a compiler (which produces highly efficient binaries).

For both, you’ll need Ruby, and the “rugged” Gem:

gem install rugged

Running the interpreter

To execute a program, run

ruby interpreter.rb examples/hello/

Running the compiler

The compiler compiles a legit program to LLVM IR. You can then use LLVM tools to build binaries for all plaforms where you have a C standard library available (legit will be linked with exit, getchar and putchar).

First, run the compiler to create a .ll file:

ruby compiler.rb examples/hello/

And then, run a tool like clang to optimize it and produce a binary:

clang -O3 hello.ll -o hello

As an alternative to the second step, you can use the provided Makefile and simply run make hello.

The final challenge

So, after I had written that Brainfuck interpreter, I thought would be the final milestone for my language. But then, Kate-Laurel sat down next to me and asked: “Could you write a quine?”

So this is the challenge I now give to you, dear reader: Write a legit program that prints the Git commands required to create itself! Good luck.

]]>
The Recurse Center, month 1 rc-month-1 2019-05-01T00:09:00-04:00 Sebastian Morr sebastian@morr.cc I’m currently in New York City for three months, to attend the Recurse Center, a self-directed, community-driven educational retreat for programmers.

It’s one of the best experiences of my life! <3 One of the many helpful traditions and techniques is to do check-ins, where you talk about what you did, and what you plan to do. I’ve found doing daily check-ins in RC’s internal chat system immensely helpful.

So, to share a bit of what what I’m doing at RC, I thought I would just dump all of it here. It’s kind of raw, I didn’t replace the Slack-style emoji syntax with actual emoji, for example – partly because not all of them are offical emojis. :P Enjoy!

2019-04-02

Hey all! I thought I’d try doing these check-ins everyone is raving about!

Yesterday:

  • First day at RC! The space seems amazing and full of possibilities! I enjoyed the meet-and-greet a lot, and would love to do that again sometime. Signed up for #Coffee Chats :)
  • Was quite overwhelmed by everything going on. Need to remember to take it slowly, intense days like drain my internal batteries quickly. Still jet-lagged. :sleeping:
  • I’d like to understand how programs compile down to bytes in an executable! To help with that, I built a tiny command line tool based on the nasm assembler, which interactively translates Intel-style assembly instructions to bytes: screenshot-2019-04-02_103003.png
  • Skimmed Intel’s x86-64 manual to learn how that translation works. Volume 2, chapter 2 is a good starting point. Started writing a miniature assembler, minias, which can compile a tiny subset of x86 operations to bytes – for now, syscall and some very specific immediate-value mov instructions: screenshot-2019-04-02_104733.png

Today:

  • Looking forward to the pair programming workshop!
  • Wrap the generated byte instructions in an ELF file, to be able to actually execute them. :sparkles:
  • Add more operations to minias, maybe cmp and jumps?

2019-04-03

Moin! (In northern Germany, people use that as a casual greeting. A fitting reply would be: “Moin.” :D)

Yesterday:

  • Paired with @Stephen Kell (m3’19) on a Game of Life implementation in Ruby, which I enjoyed a lot! I have a tiny amount of pair programming experience from when I participated in game jams, and I’d love to do that more here! Seems to take a bit of courage to initiate pairing, though. :O
  • Put together a 64-bit ELF binary header, and add a segment table entry which just loads the complete file into memory, and start execution at the beginning of the instructions. After a bit of fiddling, minias can now create little programs which… quit and return an exit code! :octopus: screenshot-2019-04-03_105009.png
  • Added more instructions to minias: cmp and ret were straightforward, but adding labels and jump instructions required me to extend the stucture of the code quite a bit. After that, I basically got call for free!

Today:

  • I have basic control flow, so the next thing I need is a way to work with data. ELF files have .data and .bbs sections to allocate space for static and dynamic data, I think. I’d like to find out how they work and extend minias to put them in the ELF binary. At that point, I should be able to compile a simple “hello world” program.
  • Learn about opsec with @Michael Zaneri (SP1’19)!

2019-04-04

Good morning! How are y’all feeling today?

Yesterday:

  • Implemented a simple db instruction, which you can use to put raw bytes into the binary.
  • Learned how the section header table is structured, and taught minias to understand section properly, so I can now split my programs into sections like “.text” (for code) and “.rodata” (for read-only data).
  • An ELF file also needs a “.shrtrtab” section which contains the names of all the sections. Implemented that. And for some reason, the first entry of the section table needs to be a NULL entry. I still have no idea why.
  • I can assemble a simple “hello world” now! \o/ Even though I’m still cheating a bit, and put the address of the text data directly into the instruction: screenshot-2019-04-04_104849.png

Today:

  • Fix a mistake in the Wikipedia article about the ELF format I stumbled over while implementing sections yesterday! :book:
  • To avoid the above “cheat”, the next step is to understand symbol relocation: The position of the “hello world” string in the binary is not known when assembling, that’s the job of the linker. So I’d like to learn how that works today.

2019-04-05

Have a wonderful Friday, y’all!

Yesterday:

  • Fixed the Wikipedia article, see above.
  • Debugging session on @Stephen Kell (m3’19)’s C++ code instrumentation tool cccppp.
  • Feelings check-in, presentations and game night. Had some wonderful conversations with people and maybe fell in love a little bit with this community. :green_heart:

Today:

  • I’ll take today off from working on minias. Going to explore the space a bit, see what other people are doing, maybe make some contributions to community tools like @Jason Owen (SP2’19)’s https://faces.recurse.com
  • Pair with @Nick Aversano (SP2’19) on his WebGL game engine.
  • Give a presentation on hand-writing an ELF binary. :writing:
  • Looking forward to the mob programming session tonight!

2019-04-08

Hey :) Hope you had a relaxing weekend, and could recover from last week somewhat. I certainly did, took a long walk over Brooklyn Bridge and through the Financial District, and whew, this city sure is pretty!

Friday:

  • Paired with @Nick Aversano (SP2’19) to implement sprite rotation in his game engine using the WebGL helper library TWGL (rhymes with “wiggle” :laughing:). Learned the JavaScript syntax for object destructuring and spread properties!
  • Prepared and gave a 5-minute presentation on how a very minimalist ELF “hello world” executable is structured. Got some positive feedback after that, which is super encouraging! :green_heart: Thinking of doing a longer session, where I can explain every single of the 167 bytes that make up the resulting binary.

Today:

  • I think I have a sliiight grasp by now of how symbol relocation is supposed to work. I’ll try to implement it for some really simple cases today. I’ve got a string table and a symbol table, and I still need a relocation table. The result will be one of those mysterious “relocatable object files” (.o) I’ve seen before, but never was quite sure what they were. I should then be able to use the standard GNU linker ld to do the actual relocation and generate a binary!

2019-04-09

Hey all!

Yesterday:

  • Implemented simple symbol relocation in minias! It only knows how to do a very specific relocation (when using mov with a label), but I can now assemble a “Hello world” without using cheats, which will create an object file which I then can link using GNU’s ld! This feels like a huge #victory! :fireworks: screenshot-2019-04-09_121844.png
  • Helped a charming group of people levelling up their Git skills! For practising GitHub’s pull request workflow, we started a simple recipe collection :P
  • Was convinced by @Tenor Tenor (m3’19) to use Vim’s buffers directly instead of tabs, like I’ve done for the last 14 years :P Installed the “vim-buftabline” plugin to make the transition less painful.
  • Paired with @Tim Vieregge (SP2’19) on writing a boot sector in assembly!!! Turns out if the first 512 bytes on a disk end with 0x55aa, the BIOS will just load them into memory and start executing the instructions?! This is so interesting! Here’s us booting into a “Hello world” from @Patrick McCarver (SP1’19)’s USB stick! (It was supposed to say “Hello RC” :P) IMG_20190408_180101.jpg We also wrote a bootsector which dumps its own contents to the screen! screenshot-2019-04-09_123454.png

Today:

  • Pair with @Colin Rothfels (SP1’19) on minias improvements in Rust!
  • Continue working through the OS implementation series (I’m using this one: https://github.com/cfenollosa/os-tutorial)
  • Maybe prepare a non-technical talk for tonight?

2019-04-10

Hey, how’s your day going? :bunny:

Yesterday:

  • Implemented proper bytestring handling in minias with @Colin Rothfels (SP1’19), so it can now output Unicode characters and emoji! :D
  • Started implementing a “_start” symbol, for the linker to know where the entry point should be. Encountered a weird bug where ld would not be able to see this symbol. Did a debugging session on this with @Jeanine Peters (SP2’19), and it turned out that the reason was the one place in my code that had a “FIXME” comment… ELF sections have this “info” field, which does different things for different section types, but for symbol tables, it is supposed to be “the index of the last local symbol, plus one”. I didn’t set this properly, and as “_start” has to be global, ld probably didn’t look at it at the correct position.
  • Read through the nasm documentation and through the x86 Wikibook, to get a feeling of what instructions I haven’t seen so far. I think most of them are very obscure and I will never need them. :D
  • Fixed a typo in Zulip!

Today:

  • At this point, I feel like I’ll get diminished returns from continuing implementing an assembler by from scratch. Before coming to RC, I thought it might be fun to also implement my own linker at this point, but I feel like I probably have a vague feeling of what it would do. Might be more fruitful to use existing tools to learn how dynamic linking works! When working with C, this has been the greatest mystery of all for me. :wizard_hat:
  • Find out how UEFI systems deal with boot sectors. @Tim Vieregge (SP2’19)’s notebook had a dedicated “legacy mode” for booting from those, but my T460s didn’t seem to have that.

2019-04-11

Greetings!

Yesterday:

  • Learned about the System V AMD64 ABI, a convention of how functions work on a low level – it defines how to pass arguments to functions via registers and the stack, for example. Used that knowledge to call a C function from assembly, and to call an assembly fom C, and link those pieces together.
  • Static linking seems straightforward, dynamic linking on the other hand seems like a huge jump in complexity. I looked at how to call a function from assembly and dynamically linking that (the magic line was ld printf.o -o printf -lc --dynamic-linker /usr/lib/ld-linux-x86-64.so.2), but it still feels very mysterious and I don’t know how it’s implemented.
  • Regarding boot procedure on UEFI systems, that seems to be reallllly complicated and I realllllly don’t want to try to do that by hand. :shock: On the upside, I found out that my notebook has a “legacy boot mode”, too! :D
  • Had an extended coffee chat with @Joe Mou (SP1’19) about organizing notes. I’m using a very simple Vim plugin called vimboy, which I built about 8 years ago, and which allows you to keep a personal wiki in plaintext. It’s one of those tools I use daily and couldn’t do without.

Today:

  • Salad! Coffee chat! Feelings! Talks! No fixed plans besides that for today, let’s see what comes up!
  • I don’t have a good idea yet of how I could understand dynamic linking better. Implementing tools has been helpful for understanding ELF files, maybe I should continue that, after all, and generate a simple dynamically linked binary from scratch.

2019-04-12

Hey everyone, I hope your Friday will be really neat!

Yesterday:

  • We used the Abstract Salad Factory pattern to successfully implement some delicious concrete salads! Let’s do this again!
  • Learned how to use gdb! I have to admit that I solely relied on print-debugging before, beause when I encountered bugs, it always seemed easier to just do that, instead of learning how to use a proper debugger. So it seems like a valuable time investment to learn that before you need it. And it’s pretty neat! Some things I learned:
    • Press Ctrl-X Ctrl-A (or use the -tui command line flag) to switch to a neat graphical mode where you can always see the source code, and have markers for the current line and for your breakpoints! If you remember one thing, make it this one.
    • Additionally, Ctrl-X 2 will show the disassembly of the current program, and pressing that again will show the CPU’s registers!!
    • condition 3 i == 10 will add a condition to breakpoint #3, and only halt execution when the condition is true.
    • You can use print for assigning to variables while the program is running! Example: print i = 10
    • gdb can also debug Rust programs! :sparkles: Use the wrapper rust-gdb (which comes with Rust) to have proper object printing. Use break rust_panic to halt execution when you run into a panic, to be able to backtrace.
    • (YouTuber voice) What are your favorite gdb tricks? Let me know in the comments below!
  • Gave a presentation about a project really close to my heart: Timelens!
  • Built a little React app with @Isaac Pearl (SP1’19) , which uses the Web Audio API to play back audio files you drag & drop on it – but backwards! Seemed to us like you could give wicked music performances with that tool!

Today:

  • On Fridays, I try not to have appointments, obligations, or any fixed plans, really. Let’s experiment!
  • I started thinking about what a really good interactive environment for learning and teaching x86 assembly might look like. Might think about that some more.

2019-04-15

Hey everyone, hope you had a relaxing weekend. I did a lot of touristy things in Manhattan, like walking along the High Line, visiting Times Square and the New York Public Library’s Schwarzman building. I also wrote a short, interactive horror story! :D

Friday:

  • @Tim Vieregge (SP2’19) and I looked at each other’s .vimrc! blush Some takeaways:
    • The vim-surround plugin is super useful for dealing with pairs of parens, brackets, and so on.
    • Also, why have I never used vim-commentary? It’s great!
    • Mapping ; to fzf’s :Buffers seems like a neat idea.
  • Tried these plugins and tidied up my Vim config files a bit.
  • Polished the Timelens userscript for YouTube. It visualizes a video’s color deveopment, making navigation more efficient, precise, and active. I’d love some feedback on this! https://timelens.io/youtube/ youtube-screenshot.png

Today:

  • Now that I know my way around assembly language a bit, it might be fun to look at LLVM, and how it abstracts away from that. Maybe write some programs in LLVM’s intermediate representation?
  • Debugging, continued: look at how to debug JavaScript in the browser! That also seems like a super useful skill.

2019-04-16

Hej! :)

Yesterday:

  • Worked with @Zoe Larissa Statman-Weil (SP1’19) on refactoring and fixing bugs in her Mapbox-powered JavaScript application.
  • @Jeanine Peters (SP2’19) and I finished the leetcode problem on Sudoku puzzles we had been working on!
  • Skimmed the complete documentation on the LLVM IR, which is actually not that long! I feel like the parts which you actually need for building a frontend for simple languages could fit on a few pages.
  • Wrote a hello world and a ROT13 implementation in LLVM IR! This is how that looks like. The language is strongly typed, and definitely not meant to be written by humans! :D You have to include references to your types everywhere! Even though, it feels a bit more convenient than raw x86-64 assembly language, because you can actually type out your functions, and properly call them.
  • And then I thought, huh, let’s do a benchmark of the ROT13 binary which is created when you put this IR through all the built-in optimization passes on the one hand, and my raw implementation in x86-64 on the other. Well, turns out that the LLVM version is 60 times faster?!? When looking at what the binaries are doing with straceI found out that apparently, LLVM knows how to bundle my getchar and putchar calls together to blocksizes of 4096 bytes each, and operates on that! Mind blown, I didn’t expect that level of optimization! screenshot-2019-04-16_115518.png

Today:

  • As LLVM IR is not meant to be written by humans, what would be good ways to generate it? I think it comes with a code generation library in C++, but I’d rather use another language, to be honest! ^_^
  • Attend the event planning open meeting and the Localhost talks!

2019-04-17

Good morning RC!

Yesterday:

  • Looked at code generation bindings for LLVM. Rust has a crate which gives direct, unsafe access to LLVM’s official C API, and several unmaintained ones, which provide more idiomatic bindings. Both options do not really spark joy. There seem to be okayish bindings for Python and Haskell, even though I think they use older LLVM versions.
  • It would be nice to have a very tiny language to implement a compiler for. So why not make my own? I love esoteric programming languages anyway, and I always wanted to make one. The Esolang Wiki is a brilliant source of information around that topic, and there is a nice zine in RC’s library called “New Languages”, which I absolutely recommend to read!
  • Brainstormed some ideas for esoteric languages. It turned out that some of these already have been realized:
    • A language consisting entirely of emoji.
    • Write short English snippets describing what you want to do, the compiler will post the description on StackOverflow, and then insert the answer receiving the most upvotes.
    • A language based on knot theory, which can be realized on a piece of yarn.
    • In Russia, “Hello world” prints YOU!
    • A language which only uses expressions from Daft Punk’s song “Technologic”.
    • A language where programs are represented by positions on a Go board.
    • Horror Vacui as a programming language: The number of seconds which pass before you type the first character determines what the program does.
  • And then an RC-external friend hat a brilliant idea: A language where the program is described by the graph formed by commits in a Git repository. Have been thinking about that ever since. Writing programs in that language could be a good exercise in using history-rewriting Git commands. The graph could describe the control flow? Branching points are if/else or switch statements? Tags could serve as jump labels? But how to do jumps? And do merge commits have a special meaning? Still have to think about how to do computation. If you wanna talk about this, hit me up! :)

Today:

  • Try to write example programs in GitLang (working title), see how that feels like.
  • Lots of events going on today: a talk about RSA, a discussion on learning structures, a math workshop about Project Euler, a hackathon planning meeting!
  • Go home early! :wink:

2019-04-18

Hey everyone! :cherry_blossom:

Yesterday:

  • Lots of events! @Anna Walsh (SP1’19) and @Nicole Baram (SP2’19)’s refresher about RSA felt really helpful, and @Yoni Elhanani (SP2’19) kind of makes me want to do Project Euler problems! :)
  • Brainstormed a bit on the Git language. @Jeanine Peters (SP2’19) suggested to call it legit, and I really like that! I think the language could be stack based, like Befunge or FORTH, and have operations like “get” and “put”, “add” and “sub”, “swap” and “dup”, “quit” and “jump”. Need to be careful to make it Turing-complete, however – I might need two stacks, or a way to provide random access to the single stack.
  • Started writing a legit ROT13 implementation (on paper). Feels like a language which is easy to learn, but hard to master.
  • Went home early! :grinning_face_with_smiling_eyes:

Today:

  • Realize the ROT13 implementation in an actual Git repo.
  • Think about the minimal feature set to make it Turing complete.
  • Maybe start writing a quick-and-dirty interpreter for that language, to find problems in the design?
  • Give a demo about the Wikidata Card Game Generator!

2019-04-19

Hey, what’s up? :)

Yesterday:

  • Wrote a quick first draft of a language specification for legit.
  • Started writing a ROT13 implementation. This is how it looks like: screenshot-2019-04-19_153306.png
  • Note that the program has a typo: “Z” instead of “z” in 6deaa0c. I have no idea of how to reword that without creating all merge commits which come after that manually again. Creating a program in legit is… um, a challenge? Let’s just say, TIL about git commit --allow-emtpy, git write-tree and git commit-tree.
  • Debugged some cronjobs with @Alan Chu (SP2’19), and learned about TypeScript and the inner workings of @chat-bot!
  • Feelings check-in made me cry a bit. Thanks for your vulnerability! :cry:
  • Demoed the Wikidata Card Game Generator I made with my friend Bine a few months ago.

Today:

  • No plans, as usual on Fridays! :) Might be fun to look at how to use c3nav for indoor mapping.

2019-04-22

Hey, y’all! Hope you’ll have a great week! I went to the Brooklyn Botanical Garden yesterday – highly recommended, the cherry blossom is at its peak currently, and the conservatory showcases many bonsai trees, some of which are over 500 years old! :O

Friday:

  • Looked at c3nav, the software used for mapping large CCC events like the Chaos Communication Congress. I thought it might be fun to have an electronic map of RC! But. There’s no documentation at all on how to set it up or how to use it, and the maintainer seems unwilling to provide documentation or help. I contacted her, and it seems she doesn’t want to allocate time to that. Maybe drawing a static map would be an alternative.
  • Implemented an interpreter for legit in Ruby! That’s a language I’m deeply in love with since many years, and it’s my go-to language if I quickly need to type out something. It was an amazing feeling when my example ROT13 program successfully ran for the first time! Exept for some DSLs, legit is the first language I ever created! :fireworks:
  • Started working on a compiler, which will translate legit programs to LLVM IR.
  • Wrote a “hello world” program, and introduced a new type of instruction: a string literal will push all contained characters on the stack. As the characters are pushed on the stack in reversed order, the program will first write them all on the tape, then print them in the correct order: screenshot-2019-04-22_122207.png

Today:

  • Discuss the design of the language with a few people. Check whether anything is very counter-intuitive.
  • Add the remaining missing legit instructions to the compiler. Refactor the code a bit.
  • Design a logo for legit, improve documentation, prepare public release.
  • The “holy grail” would of course be a brainfuck interpreter! :D (Which would also proof that legit is Turing complete.) Maybe write out how that might work on paper.

2019-04-23

Hi everyone! :sunny:

Yesterday:

  • Had a legit discussion with @Joe Mou (SP1’19) and @Nick Aversano (SP2’19). We discussed different approaches to do jumps and calls, and I think it helped the language design a lot!
  • Worked on the proposal for a GLASS OF WATER emoji, soon to be submitted to the Unicode Consortium, with @Kate-Laurel Agnew (SP2’19), @Ratan (Rai) Sur (SP1’19) and @Tim Vieregge (SP2’19). The process is much easier than I imagined! Emojination has all the links and resources on how to do that yourself!
  • Got fed up creating legit programs manually, so I wrote some bash scripts which do it for me.
  • Implemented the tape mechanics for the legit compiler, as well as new jump instructions, and adapted the examples.
  • Made some quick logo designs for legit. Which one do you prefer? The second already feels very obscure, but maybe that’s appropriate. screenshot-2019-04-23_122005.png

Today:

  • Continue to think about how to implement a legit Brainfuck interpreter! This is not gonna be trivial. :grinning:
  • Give a presentation about Ludum Dare this evening!

2019-04-24

こんにちは、みんなさん!

Yesterday:

  • Wrote some Git tools from scratch in @Joe Mou (SP1’19)’s workshop! Super interesting and demystifying! I’m looking forward to continue with that!
  • Started writing the legit Brainfuck interpreter. Doing the loop instructions is tricky, the six other ones work by now! Thanks for helping me debug, @Nick Aversano (SP2’19)! Nick pointed out that I’m using a bash script to generate a legit program, which is then compiled by a Ruby script to LLVM IR, to be converted into a binary, which can then interpret Brainfuck, and that’s more layers than I expected. :sweat_smile:
  • Gave a talk about how the game jam Ludum Dare works! :joystick: Slides and links here: https://morr.cc/dare-to-ludum-dare/
  • @Jason Owen (SP2’19) showed me the current status of his RC project directory. I have a number of features in mind which I think would be great, and we filled the issue tracker with those! :D

Today:

  • Try to finish the Brainfuck interpreter!
  • Lots of interesting events: a Git mob learning session, the personal website jam, an improv session, and Latin puzzles! :blush:

2019-04-25

Good… morning! :D

Yesterday:

  • Fixed all the bugs in my Brainfuck interpreter written in legit – especially the loop instructions took a lot of debugging.
  • Fixed one or two bugs in the legit compiler. It can run the same programs as the legit interpreter (both written in Ruby) now, but harnessing the LLVM toolchain makes it faster by at least two magnitudes (2 seconds vs “0 seconds”): screenshot-2019-04-25_114350.png
  • Went to the personal website jam for the first time, and implemented little icons for external links and my favorite projects on my homepage: screenshot-2019-04-25_114632.png
  • @Agustin Ramos Anzorena (SP1’19) and @Travis Horton (SP1’19) hosted some improv games, which was something I always wanted to try. Warmup was super fun, but I think I need more practice to feel comfortable participating in scenes. Would love to try that again!

Today:

  • I’ve been thinking about how to share what I’m doing at RC publicly. I’m considering creating a blog post for each week, which consists basically of these check-ins?
  • Pair with @Jaryn Colbert (SP1’19) to make improvements to https://faces.recurse.com! :camera:
  • Give a talk about legit! Polish the README, prepare a public release. Maybe create a page on the Esolangs wiki?

2019-04-26

Hey everyone!

Yesterday:

  • @Jaryn Colbert (SP1’19) onboarded me to faces.recurse.com, and we implemented a new feature: Only show people who have photos!
  • Gave a talk about legit, forgot to mention the name. :shruggies: @Kate-Laurel Agnew (SP2’19) brought up the challenge to write a quine! :scared:
  • Enjoyed the Company Meet & Greet! It was super informal, and many of the people were Recursers themselves. Interesting to see the variety of companies RC works with.

Today:

  • RC Hackathon! :sparkles:

2019-04-30

Hi :3

Friday:

  • For the Stupid and Useful Things Hackathon, @Jared Pereira (SP2’19) and me made a map of the floors and rooms of RC. It’s meant to be printed and laminated, so that people can add details. Here’s a quick-and-dirty zoomable version using Leaflet: https://blinry.github.io/map-of-rc/ (Soon to be at https://map.recurse.com, if the stars align right? EDIT: The stars aligned!)

Weekend and Monday:

  • Participated in the 44th iteration of the game jam Ludum Dare, where you make a game around a given theme in three days! The theme was “Your life is currency”, and @Tim Vieregge (SP2’19), @Byung Joo Shin (W2’19), @Alan Chu (SP2’19) and me made Capitalist Piggies, where you play as a piggybank that wants to escape from evil banker piggies! @Agustin Ramos Anzorena (SP1’19) joined us on Monday to create some pretty visual assets! We used the LÖVE game engine, and it was super fun, and super exhausting! :D

Today:

  • I’m gonna take at least a day off. :sunny: Four days of focused hacking are a lot for me, and I need to recharge my internal batteries a bit. See y’all soon!
]]>
Capitalist Piggies capitalist-piggies 2019-04-29T00:00:00+00:00 Sebastian Morr sebastian@morr.cc A game for Ludum Dare 44, made with byshiny, pleekman, thechutrain, and Tim at the Recurse Center.

It’s a game about fast reactions, planning, and cute piggies! You play as a piggy bank that wants to escape a real bank, guarded by cute, but rather dangerous banker piggies.

You can download the game from the Ludum Dare website.

Title screen

In-game screens

Development

The theme for this game jam was “your life is currency”, and we quickly settled on the idea of linking the life of little piggy banks to their coins. Instead of a fast-paced action game where you can shoot enemies with your coins, we decided to go for a more puzzly game mechanic, where you need to lure your enemies into traps.

Coverage

Joshua McLean did a quick (very distracted) playthrough:

For this game, we didn’t take the time to rate other people’s games, so we didn’t get enough ratings ourselves to get a placement.

]]>
Running Out Of Space running-out-of-space 2019-04-14T18:44:00-04:00 Sebastian Morr sebastian@morr.cc I got the idea for this story when brainstorming for Ludum Dare 42, but my teammates didn’t like it. We made Writespace instead, and I’m happy that we did. But in April 2019, I took the time to make an actual piece of interactive fiction around my original idea. Made with Twine.

Play it in your browser!

]]>
Snack Overflow snack-overflow 2019-03-25T00:00:00+00:00 Sebastian Morr sebastian@morr.cc A quick project at the Malkränzchen, our weekly creative meeting in my home hackerspace, Stratum 0:

Feel free to deploy it on your favorite cupboard! For convenience, here’s a high-resolution PNG image!

While working on this, I also made a bunch of other variants, maybe you’ll like them better than I do? :)

]]>
Wikidata Card Game Generator wikidata-cardgame 2019-02-24T00:00:00+00:00 Sebastian Morr sebastian@morr.cc At this year’s iteration of the Wikidata workshops in Ulm, bleeptrack and I built a Wikidata Card Game Generator! It uses Wikidata, the free and open knowledge base, to generate fact cards on arbitrary topics, like metro systems, planets, or hackerspaces!

People seem to enjoy it! Check it out here: https://cardgame.morr.cc

Our secret plan is that people will complain that a lot of information is missing on the cards, and will then add it to Wikidata to fix that! :D

Like Wikidata, the project is available under the terms of CC0. The source code is available on GitHub. If you wanna help improve it, have a look at the the issues! And let us know if you find interesting decks!

]]>
Patreon avatars patreon-avatars 2017-11-07T00:00:00+00:00 Sebastian Morr sebastian@morr.cc Sometimes, people have so much unconditional trust in me that they throw money at me at a regular basis. That’s awesome, and I’m always very humbled and thankful when that happens. I have this thing where, if you seriously want to give me $10 or more per month, I’ll set up a Twitter bot that talks like you, and I’ll draw you a custom profile image for your social media accounts. Here are the ones I’ve done so far:

@marudor

Marudor asked for a panda in a vector graphics style. There are also two alternate versions: For his protected account, and for the bot, @markovdor.

@jochris451

Christina liked my pixel art poster of the CCH, so I made her a simple pixel art avatar from a photo reference. Theres also a robotic version for @botchris451.

@fucx@chaos.social

Thomas described the honey badger as his “spirit animal” – judging from a few popular YouTube videos, it seems to be super fearless! For this one, I aimed for a cartoon look. I always make sure that my avatars look good when they are placed inside circles, like Twitter does these days:

You?

You can bribe me! :D

]]>
Nuts and Bolts nuts-and-bolts 2019-02-02T00:00:00+00:00 Sebastian Morr sebastian@morr.cc A game for One Hour Game Jam #197, with the theme “misleading title”. Done while I was in Brussels for FOSDEM.

My first real game done on the “fantasy console” PICO-8. I was impressed by how quickly you can prototype on that platform! I’m especially proud how juicy this game is, including lots of particle effects and screen shake!

You can play the game in your browser!

]]>
The Floor is Lava the-floor-is-lava 2019-01-26T00:00:00+00:00 Sebastian Morr sebastian@morr.cc http://metakiki.net/the-floor-is-lava/ ]]> Operation Mindfuck Vol. 2 operation-mindfuck-2 2018-12-29T23:00:00+01:00 Sebastian Morr sebastian@morr.cc At the 35th Chaos Communication Congress, Bine and me did another “Operation Mindfuck” talk about art, computers and curiosities. You can find last year’s edition here.

Here are the slides we used: (Open them in fullscreen)

]]>
Arden's Artisan Artefacts artisan-artefacts 2018-12-04T00:00:00+00:00 Sebastian Morr sebastian@morr.cc http://metakiki.net/ardens-artisan-artefacts/ ]]> Tiny Snek tiny-snek 2018-09-17T00:00:00+00:00 Sebastian Morr sebastian@morr.cc I made this in Blender after watching Andrew Price’s brilliant tutorial series (he’s working on an updated version for Blender 2.8). If you’re interested in the source file, here it is.

A tiny, green snake amidst a low-poly rock world

]]>
habitctl habitctl 2018-09-16T19:33:00+02:00 Sebastian Morr sebastian@morr.cc http://github.com/blinry/habitctl

habitctl is a minimalist command line tool you can use to track and examine your habits. It was born when I grew frustrated with tracking my habits in plain text files using hand-drawn ASCII tables. habitctl tries to get the job done and then get out of your way.

]]>
German Sign Language for Anki anki-dgs 2018-09-16T13:06:00+02:00 Sebastian Morr sebastian@morr.cc This is a set of flashcards for the popular open-source spaced repetition software Anki, which will teach you signs of the German Sign Language. It contains over 4000 signs and their meanings!

The basis for these flashcards is SignDict, an open dictionary for sign language, developed by Bodo Tasche. Its video content originates from different sources.

Here is an example card, as it looks like in Anki’s Android app:

Installation

You can download the current release from AnkiWeb. Then, in Anki, use File -> Import and select the .apkg file. On Android, you can simply open the file to import it.

Note: Using this Anki deck requires an Internet connection, as the videos are streamed on-demand. Also, the video player does not seem to work on every platform: It is known to work in Anki’s Android app, but not in the Linux desktop version.

Contributing

If you find a mistake, or have other ideas on how to improve the deck, please don’t hesitate to open a new issue!

This deck is built using the CrowdAnki add-on.

License

All videos are released under Creative Commons licenses. To see the license of a specific video, use the “Details” button!

]]>
Timelens und die Zukunft der Videonavigation timelens-talk 2018-09-08T16:00:00+02:00 Sebastian Morr sebastian@morr.cc At MRMCD 2018, I gave a (German) talk about Timelens, an Open Source project which creates visual timelines from video files, enabling more efficient, precise navigation.

There’s a recording of the talk on media.ccc.de:

(If you prefer, there’s also a copy of the recording on YouTube.)

And here are the slides:

Timelens und die Zukunft der Videonavigation

]]>
Writespace writespace 2018-08-14T00:00:00+00:00 Sebastian Morr sebastian@morr.cc Writespace is a puzzle game with simple mechanics, but interesting implications. It was made in 72 hours for Ludum Dare 42, together with Kiki and larkinia, and Lena and rohieb jumped in last-minute to help with the graphics!

As for the story: You’re exploring a haunted house and find a strange parchment scroll. When you touch it, something terrible happens: You’re turned into a typewriter! Use your surroundings and find the magic words to lift the curse! Oh, and you can’t type spaces, of course.

You can download the game from the Ludum Dare website.

Title screen

In-game screens

Development

Last time, our level format was SVG – now we just used text files. Personally, I had the most fun exploring the implications of our own rules. There were quite a few “aha moments”, and we tried to put those into the game for the players to experience, as well.

Coverage

This game got quite a bit of coverage. There were some short articles written about our game. Both contain recordings (without commentary):

Joshua did a rather long stream, with fun commentary:

Randomise User recorded a short playthrough:

Pixtxa recorded a full playthrough (with German commentary):

And EliteKessu also did a full playthrough with hilarious meta commentary through the game’s user interface:

Comments

This is an aesthetic bomb. I absolutely love the visuals you chose, and the theme is implemented beautifully. Extra points for the sound design, the gentle typewriter clicks and dings did it for me! –Shess

Brilliant game. I spent the last 40 minutes playing this game and enjoying myself with puzzles and the beautiful aesthetics. Love the seemly simple mechanics can actually generate4 so many interesting puzzle especially the later ones involving finding out clever ways of getting around tight spaces and dead ends. –jackyjjc

Wow, this game blew my mind, supernice, this is incredible 5/5 –oskarOlausson

]]>
SpaceAPI logo spaceapi-logo 2018-07-23T21:53:00+02:00 Sebastian Morr sebastian@morr.cc The SpaceAPI provides information about hackerspaces, like addresses, contact information, or door opening status. One team member maintaining this project approached me and asked if I could design a logo for them. Well, sure! :)

Regular version

This is the normal version, which can be used in website headers, on stickers, and other merchandise:

SpaceAPI logo

There’s also a SVG of this, which can be scaled up for large print sizes, as well as a clean, plain SVG, which does not include the fancy texture, suitable for 3D printing, milling, plotting, and so on. There are also variants for dark backgrounds of the default and the plain version.

Avatar version

This is a reduced version, which looks pretty in a square and a circle, and can be used as all kinds of avatars.

SpaceAPI avatar

This also has a SVG version as well as a plain SVG version. And also for this avatar, there are variants for dark backgrounds of the default and the plain version.

Favicon

And finally, there’s a multi-resolution favicon.

]]>
Master's Thesis: Split Packing split-packing 2016-06-01T00:00:00+00:00 Sebastian Morr sebastian@morr.cc This page links to a number of scientific texts, which all were a result of my 2016 Master’s Thesis: The thesis itself (which is the most complete version), a paper presented at SODA ‘17, a paper presented at WADS 2017, and a journal article which appeared in the Discrete & Computational Geometry journal.

Master’s Thesis

The full name of my master’s thesis is Split Packing: An Algorithm for Packing Circles with up to Critical Density. It covers a topic from the field of Computational Geometry: Packing circles into various containers, like squares and triangles.

In the thesis, I invented an algorithm which can pack circles and other objects into these containers, if their combined area does not exceed certain bounds. The special property of the algorithm is that these bounds are tight: For any larger area bound, there are circle instances which can not be packed.

The thesis contains a large number of figures, I’d like to invite you to take a look! :-)

Thesis Presentation

For the presentation I created a nonverbal description of the central algorithm in the style of IKEA assembly instructions. (Later, in 2017, I started a whole series of these, the IDEA project.)

SPLIT-PÄCK

Also, while working on this thesis, I wrote an interactive visualization tool called Circus, which I used as a personal thinking and explaining tool. You can try it out by clicking on the image below, usage instructions are located in the lower left. The tool is written in CoffeeScript and uses the HTML5 canvas for drawing, the source code is on GitHub.

Screenshot of the Circus visualization tool

SODA paper

A solo-authored paper version of the thesis, condensed to 10 pages, and lovingly typeset. I presented this paper at the 28th Annual ACM-SIAM Symposium on Discrete Algorithms (SODA 2017) in Barcelona. It only covers packing circles into square containers.

http://dl.acm.org/citation.cfm?id=3039686.3039693

WADS paper

This paper covers packing circles into triangular containers. I presented it at the 15th Algorithms and Data Structures Symposium (WADS 2017) in St. John’s, Canada.

https://doi.org/10.1007/978-3-319-62127-2_32

DCG article

This article combines the two paper versions. You can read the preprint at arXiv.org, or a view-only version of the published article.

]]>
Watschelhaus watschelhaus 2018-07-14T22:34:00+02:00 Sebastian Morr sebastian@morr.cc A walking Verschwörhaus

The Verschwörhaus in Ulm had a big and secret 2-year birthday party this weekend! The original logo actually depicts the front of the building the Verschwörhaus is situated in, but for me, it always had legs! <3

Here’s the original Aseprite animation.

Liam included this animation his projection mapping:

]]>
Nerd Metal Shirt nerd-metal-shirt 2018-06-22T15:08:00+02:00 Sebastian Morr sebastian@morr.cc Want one?

You can get this shirt at GetDigital. It’s a collaboration with my good friend Bleeptrack, who designed the front side!

You can also get it as a hoodie and in a cut which emphasizes the waist.

History

In September 2017, Bleeptrack and me had the idea for a festival shirt with nerdy band names on it. We brainstormed a bit, and asked around on Twitter for ideas:

When we got a lot of feedback, we wanted to set up a website where people could vote for their favorite band names, and could contribute new ones. We discovered the open source project All Our Ideas, which seemed perfect! We set up a poll, which received over 10000 votes and over 260 total ideas in a few days. Whew! The results were really helpful for us to select band names for the shirt, and to put them in a good order.

When designing the band logos, I made sure to only use fonts with free licenses. Bine drew a front side, and we iterated both sides a bit - thanks to our beta testers!

Initially, we wanted to set up our own on-demand printing shop at Spreadshirt, but we discovered that they would not allow parodies at all. So we contacted the nerdy online shop GetDigital, who were immediately enthusiastic about our idea. It took a while before the shirt actually went into print, though, because of internal personnel problems, Christmas time, and our complicated, big designs, which meant they had to look for a new contractor to do the actual printing.

But since June 2018, it is finally possible to buy the shirt! We can’t wait to make more like this. Actually, Bleeptrack has created a ton of other awesome shirt designs, check them out!

]]>
Timelens timelens 2018-06-05T15:00:00+00:00 Sebastian Morr sebastian@morr.cc https://timelens.io ]]> Packing list packing-list 2018-05-25T20:14:00+02:00 Sebastian Morr sebastian@morr.cc I’m keeping two packing lists, one for short-term and one for long-term traveling. Both are well-tested and time-proven, and have grown over many years. The first list tries to be complete, the second one tries to be minimalist.

I’m very glad to have them. It gives me a lot of confidence, being able to leave my apartment, knowing that I haven’t forgotten anything important.

Short-term packing list

For travels of up to one or two weeks. Most of the time, this list assumes I won’t be doing laundry, and will be mostly stationary. It does not include the things I usually wear on my body (wallet, jeans, hair ties, …).

Preparations

  • cut fingernails
  • cut beard

Assorted things

  • small backpack
  • money for all countries I’m passing through (incl. airports)
  • passport
  • chewing gum
  • books
  • guidebooks
  • water bottle
  • tickets
  • (digital) map
  • pencil
  • fountain pen + ink cartridges
  • empty paper
  • notebook
  • games

Electronics

  • power adapters for all countries I’m passing through (incl. airports)
  • power strip
  • Kindle
  • Mini USB cable
  • external hard drive
  • hard drive’s USB cable
  • HDMI cable
  • HDMI-to-VGA adapter

Body

  • towel
  • shampoo
  • Kleenex
  • condoms
  • painkillers
  • nail clipper
  • sunscreen
  • insect repellent
  • antihistamine
  • earplugs
  • plaster

Clothing

  • long underpants
  • underpants
  • socks
  • T-shirts
  • pullover
  • headgear
  • rain jacket
  • swimming trunks
  • slippers

Events

  • Ethernet cable
  • sticker box
  • DECT handset & base
  • juggling balls
  • caffeine pills/powder
  • soldering equipment
  • throwie ingredients
  • googly eyes

In the morning

  • laptop
  • laptop’s charging cable
  • smartphone
  • USB-C cable
  • USB charger
  • headphones
  • toothbrush
  • toothpaste
  • hair brush
  • deodorant
  • food

Long-term packing list

For indefinite traveling/backpacking. This list tries to be as minimalist and lightweight as possible. Weight measurements are in grams.

Backpack

Weight Object
1440 Osprey Farpoint 40
1346 laptop
760 ml of water
628 4 T-shirts (157 g each)
388 small backpack
360 notebook
326 outdoor trousers
291 laptop’s charging cable
205 Kindle
189 electric razor
185 toiletries bag
150 deodorant
150 paper
149 water bottle
136 100 ml sunscreen
131 100 ml shampoo
127 packing cubes
106 toothpaste
100 travel towel
92 swimming trunks
67 1 pair of Merino underpants
68 USB charger
61 painkillers
56 headgear
55 razor charging cable
50 2 packs of Kleenex
48 passport
47 fluffy gloves
44 nail clipper
40 1 pair of Merino socks
31 laundry bag
30 USB cable (type C)
26 USB cable (micro)
26 hair brush
21 fountain pen + 2 ink cartridges
20 toothbrush
20 power adapter
16 pencil
13 headphones
7 1 ziplock bag (1 L)
0 ear plugs
0 plaster
0 interdental brush
0 hair tie
0 small USB stick
8025 total

On the body:

Weight Object
671 rain jacket
600 jeans
303 fleece jacket
218 wallet, incl. keys
162 smartphone
157 1 T-shirt
120 belt
67 1 pair of Merino underpants
40 1 pair of Merino socks
2338 total
]]>
Gebaerdenbot gebaerdenbot 2018-05-11T00:00:00+00:00 Sebastian Morr sebastian@morr.cc @gebaerdenbot is a Twitter bot which tweets a few signs of the German Sign Language per day. It is powered by SignDict.

]]>
Twitter Bot Workshop twitter-bot-workshop 2018-05-11T01:07:00+02:00 Sebastian Morr sebastian@morr.cc A workshop for the Gulaschprogrammiernacht 2018 about building Twitter bots with generative grammars via Tracery.

Here are the interactive slides – you probably want to open them in fullscreen.

]]>
Splendid Adventures on a Sunday Afternoon splendid-adventures 2018-04-24T00:00:00+00:00 Sebastian Morr sebastian@morr.cc The theme of Ludum Dare 41 was “Combine two incompatible genres”. I absolutely loved this theme, and we had a lot of fun brainstorming! Together with larkinia, Mai, rohieb, and Winnie, we set out to make a crossover between a platformer, a text adventure, and a children’s book. Graphics, music, and code was created by us in 72 hours.

You play the web version on the Ludum Dare website.

Title screen

In-game screens

Development

We used SVG as a level format. This was an awesome idea, because it gives you a lot of expressiveness, and a convenient editing environment with layers, locking, unlimited data attributes. The browser also does the rendering for us, and everything scales nicely.

It was also a horrible idea, because elements can be arbitrarily nested, with transformations stacked on top of each other, and path objects don’t have a coordinate at all. We ended up using getBoundingClientRect() to fetch object positions from the browser. Then, we remember the original object positions, wrap each of them in an SVG group with a specific translation, and update that translation from the physics engine. Took us a day to get it right, but I’m happy how it turned out! :)

Recordings

Jupi covered the game in her ongoing mission to play ALL THE indie games:

Joshua did a long playthrough with fun commentary!

Randomise User also tried the game, after the ratings were out! “You decide… to DIE!”

And Coconut Mouse played it without commentary:

Comments

What a way to do the theme! I would have never thought on doing this! Kudos to you guys! Beautiful pictures, the atmosphere and the multiple routes really make it feel like a complete game. I now really want to see more of these types of games in the future! –SaberOfSong

So for the entire game, I played with a childlike smile on my face. –legavroche

Really nice, very soothing. I was hooked and tried all the pathes. I had a very good time, thank you :). –Kevar

Results

To our astonishment, we made the 2nd place in the Overall category, and 3rd place in Fun and Mood! I still can’t believe it. 2nd place is damn close to 1st place! :O

]]>
Rickroll sticker rickroll-sticker 2018-04-17T00:21:00+02:00 Sebastian Morr sebastian@morr.cc The first bars of "Never Gonna Give You Up"

This sticker depicts the first bars of “Never Gonna Give You Up”. It’s super fun to rickroll musical people this way! :3

Here’s the LilyPond source file, and here’s a PDF ready for printing.

]]>
Passierschein A38 passierschein-a38 2018-03-19T22:52:00+01:00 Sebastian Morr sebastian@morr.cc Auf dieser Seite stellen wir Ihnen das Antragsformular für den Passierschein A38 (nach Rundschreiben B64) als PDF zur Verfügung.

Passierschein A38

Sollten Sie für andere Zwecke einmal Veränderungen an dem Formular vornehmen wollen, steht die Quelldatei im SVG-Format bereit.

]]>
Freies Labor logo freies-labor-logo 2018-03-11T19:25:00+01:00 Sebastian Morr sebastian@morr.cc A hackerspace in a neighboring city, the Freies Labor in Hildesheim, contacted me and asked if I could design them a new logo.

Well, absolutely! :) After brainstorming with some of the hackerspace’s members, we ended up with an idea involving Lissajous curves, a family of curves created by sending two sine waves on the x- and y-axis of an oscilloscope. The concrete logo depicts a Lissajous curve with a frequency ratio of 2:3.

Here’s the basic form of the logo, for use on dark and light backgrounds:

Freies Labor logo: dark version

Freies Labor logo: light version

License

The creator, blinry, allows free use of the logo for everything and everyone, as long as the usage is related to the hackerspace Freies Labor in Hildesheim.

Typeface

The font is Gidolinya, a modern DIN by Andreas Larsen, dual licensed under the MIT License and the SIL Open Font License 1.1. I added some weight to the individual glyphs.

The logo would also go well with Gidole by the same author.

Variants

There is an extra-fancy version for special occasions:

Freies Labor logo: glowing version

A header for the blog:

Freies Labor logo: header version

A square avatar for use in social networks, which snuggly fits inside a circle, and a square version for the wiki:

And finally, there’s a multi-resolution favicon.

]]>
Intro to 3D shader programming with GLSL and ray marching ray-marching 2018-02-18T03:05:00+01:00 Sebastian Morr sebastian@morr.cc I gave this talk (in German) at my home hackerspace Stratum 0. It’s a gentle introduction to creating 3D graphics using fragment shaders written in the OpenGL Shading Language, which allow an unusual approach to creating graphics: Geometry is modelled as a distance function, which describes the distance to the nearest surface, and we can use a technique called ray marching to render the scene.

You can find the GLSL source code of the demonstrated shaders on GitHub.

To run them, you can use glslviewer (on your command line) or this online editor (in your browser).

Shadertoy contains a plethora of cool examples, and The Book of Shaders is a brilliant interactive step-by-step guide to fragment shaders.

]]>
IDEA idea 2018-02-15T15:00:00+00:00 Sebastian Morr sebastian@morr.cc https://idea-instructions.com/ ]]> Small Recipes small-recipes 2018-01-22T00:00:00+00:00 Sebastian Morr sebastian@morr.cc Beschreibung

Usually, I create Markov chain-based bots like Potterbot, or my alter ego yrnilb. But learning about Tracery, I wanted to do one based on a formal grammar.

The first result is @small_recipes, a random recipe generator! :)

Results are suitable for beginners …

… and advanced cooks alike:

]]>
Space bar space-bar 2018-01-08T23:57:00+01:00 Sebastian Morr sebastian@morr.cc Any bets on which tiny star I’ll lose first? :P

Space bar on a keyboard, with some tiny stars and planets glued on it

If you have access to a plotter and want to create your own, you can use my SVG file as a basis. The measurements of the space key were taken on a T460s.

]]>
Operation Mindfuck operation-mindfuck 2017-12-29T19:43:00+01:00 Sebastian Morr sebastian@morr.cc A talk by Bine and me, presented at the 34th Chaos Communication Congress, featuring a wide array of nerd sniping topics, about art, computers and curiosities:

And here are the slides we used: (Open them in fullscreen)

]]>
Pixel Art Workshop pixel-art-workshop 2016-10-08T00:00:00+00:00 Sebastian Morr sebastian@morr.cc This is a workshop I’m regularly giving at Chaos events. The first iteration took place at Hackover 2016.

Here’s a recording of the “theoretical part” from the 34th Chaos Communication Congress:

Slides

The 8x8 pixel characters are by Johan Vinet.

You can also download the source .ase file for the presentation, which abuses Aseprite’s animation feature to do slides.

]]>
Spring Clean – DO NOT CROSS spring-clean 2017-12-05T00:00:00+00:00 Sebastian Morr sebastian@morr.cc A game for Ludum Dare 40 I made with Kiki. Original score by Winnie, character graphics by Mai! The theme was “The more you have, the worse it is”.

Spring cleaning time! But be careful to protect your increasing number of cats from your roomba by drawing lots and lots of barrier tapes!

You can download the game (or play the web version) at the Ludum Dare website.

Title screen

In-game screens

We also had a sister project, Kittychaos, created under the same roof, and partially sharing assets!

Development

This was a rather small-scope project. We managed to implement it in two days, and had the complete third day for testing and bugfixing. Very relaxing!

Comments

I love the idea. And its a nice riff on those games where you divide the floor and I think I like this better than those. It feels more strategic. –tsuk13

Overall cute-level is 10/10. Audio complements the visuals and pushes the cute-meter to 11/10. –Simon Rahnasto

Cool basic mechanics! At first simple, then cat synchronization and corralling. :P Well done! –Joror

I love the way the vacuum cleaner moves, it’s so stupid and inefficient and I love it. –pogo

Recordings

Jupi did a playthrough, and decided she would rather vacuum the floor herself:

Results

Results were pretty solid. We got a good Theme rating, and except for Graphics, our scores were all better than 200th place!

]]>
Ich, Ersatzteillager stammzell-spende 2017-11-16T22:39:00+01:00 Sebastian Morr sebastian@morr.cc Ein Vortrag über meine Erfahrungen bei meiner Stammzellspende vor drei Jahren.

Folien:

Ich, Ersatzteillager

]]>
$HOME, sweet $HOME home-sweet-home 2017-11-13T15:02:00+01:00 Sebastian Morr sebastian@morr.cc I’d like to describe how I organize my home directory, because I have tried a few different things in the past, and found an approach which works for me exceptionally well. It has a relatively flat hierarchy, doesn’t require much categorization, and makes it unambiguously clear where files go.

Motivation

For many years, I’ve kept my files in the following way: On the top level, I had directories which specified the file type of its contents, like videos, text, code, svg or templates. This is the default structure suggested by operating systems like Windows and macOS, which even create folders like Documents, Music or Pictures when creating new user accounts.

I was unhappy with this structure for a number of reasons. For starters, I couldn’t tell the status of my files. I had no overview of what I was working on, and which projects were finished. And I couldn’t tell which projects were decades old, and which were really recent. Also, there was no separation between random files I found on the Internet, and my own work.

Relatively fast, I settled on “project directories”, that is, I kept each project in its own directory. This was partly because I like to use Git to version control software and text, but also because it seemed to give better modularity and isolation - it made it unambigiously clear which files belonged together, and which project they belonged to. Project directories are always moved as a whole. Even small “projects”, like a letter or a single drawing, are put into their own project directories.

High-level structure

I have five base directories, which have different purposes, and I’ll go over each of them in detail in the following sections. To give you an overview, here is how files can be moved between them:

And here’s the structure of their contents:

  • work (projects I am working on right now)
    • project1
    • project2
  • permanent (projects that are always active)
    • wiki
    • homepage
    • mail
  • archive (completed and inactive projects get moved here)
    • 2017
      • code
        • project1
        • project2
      • art
      • texts
      • uni
      • photos
    • 2016 (same structure as above)
  • library
    • music
    • books
    • papers
  • tmp (temporary files)

tmp

This is where most files start their life. Downloads go here, and if it’s worth keeping them, they get moved to library later. Sometimes, I also start experimental projects here, before they get moved to work. The idea is that this folder can be wiped regularly, without losing anything of value.

If this seems to simplistic to you, Leah has a much more advanced setup for managing her “mess”.

work

Each currently active project is a subdirectory of work.

I used to call this directory projects, but changed the name later so that it doesn’t start with the same letter as permanent, to make tab completion faster. :D

When I’m bored, I simply look around in work, choose one of the projects inside, and start working on that. When I see a project that I haven’t worked on for a few days of weeks, or when a project is finished, I move it into archive.

permanent

This directory contains projects that are always active. Currently, these are the following:

archive

Completed or inactive projects get moved here. This is the most structured directory in the system; its hierarchy has two layers:

On the top level, everything is ordered by year of last modification. This makes it easy to tell what’s really old and what’s recent. This also allows me to move older years to external drives, but until now, this hasn’t been necessary.

And inside each of these year directories, I sort the projects by type, like code, art, texts or photos.

library

This directory has a strict rule: It must not contain anything I created. It’s a loose collection of files I like to have around for entertainment or information purposes. This directory is structured like default home directories: It has subfolders, classifying files by their type. Examples: books, music, papers, wallpapers, pics, sounds.

Summary

Here’s a one-table overview of my system:

name structure created by status
tmp (chaotic) everyone temporary
work project-name/ me active
permanent project-name/ me permanent
archive year/type/project-name/ me done or inactive
library type/(subtype/) others reference

To find old projects, I have a script called archive, which lists project directories with matching names:

find ~/archive -maxdepth 4 -type d -iname "*$1*"

Future

I’m pretty happy with this system, and I’ve been using it for about 5 years now. One thing I’ve considered changing is to remove the year-type classification inside the archive directory. Having a flat structure would make it even easier to retrieve old projects. The downside is that photo projects can no longer clearly be differentiated, and that there could be name collisions – what is now archive/2016/photos/japan would need to become archive/japan-photos-2016 or something. For all other projects, it would probably work better.

]]>
Watching Movies Backwards watching-movies-backwards 2017-10-30T15:47:00+01:00 Sebastian Morr sebastian@morr.cc Ever wondered what a movie would look like when played backwards?

  • Titanic: A boat comes out of the ocean to save a bunch of drowning people.
  • Lord of the Rings: Two hobbits steal a ring from Mordor and emigrate to The Shire, while some of their friends travel around reviving orcs.
  • Star Wars: A moon-sized spaceship suddenly appears in space, and Luke extracts a bomb from it, enabling it to constructs new planets.
  • Saw: An old man kindly gives people new organs and replaces their missing body parts.

I wanted to try this. Well, actually playing movies backwards would mangle the audio and look ridiculous, but there’s another way: Watching movies Memento-style!

The idea

The movie Memento revolves around a man who can’t make new long-term memories, so he only remembers what happened in the last five minutes. He’s constantly taking notes and pictures, and even gets himself tattooed, to remind himself of what’s important.

The filmmakers use a clever narrative technique to transfer his experience to the viewer: The individual scenes of the story aren’t shown chronologically, but in reverse order: The viewer gets to see the last five minutes of the story first, then the five before that, and so on. This means that, at any point in the movie, the viewer also has no idea what happened before, making it easy to put themselves in the protagonist’s position.

These backwards-running scenes are additionally interleaved with shorter, forward-running ones taking place at the story’s very beginning. They introduce some of the characters in a spread-out fashion, and can easily be differentiated, because they are shown in black-and-white.

Here’s a timeline of the whole movie, displaying the “screen time axis” horizontally and the “plot time axis” vertically:

Timeline of Memento

I’m quite fond of Memento, and one day, I wondered what would happen if you applied this narrative technique to other movies. I tried it. Here’s what happened.

Experiences

The first movie I watched “Memento-style” was Transcendence. I knew that it didn’t have very good ratings, and I thought it could be more interesting to watch it backwards. Also, I was on an eight-hour bus drive through Canada, and had nothing else to do. I just did it manually, skipping back by ten minutes whenever I encountered something I had already seen: Five minutes for block I had just seen, five minutes to go to the beginning of the block before that.

Watching Transcendence backwards turned out to be a pretty fun experience, because of its climactic story arc: It ends with an AI taking over the world, and the rest of the movie explains how it became more and more technologically advanced, and before that, how and why the original person uploaded his mind into a machine. For most of the movie, the relations to some of the characters weren’t really clear to me, and became apparent only when they were introduced at the beginning. But overall I had a great time, and learned that watching movies in this fashion makes an engaging, fun experience.

And recently, I could convince some friends to watch a movie backwards together. We chose Cypher – two of us already knew the plot, two of us didn’t. The movie ends with a pretty big twist, so for the rest of the film, we already knew what would happen, and could laugh at the ignorance of the characters. But still, we had quite a few “Ah, that’s where he got that item!” and “Oh, so that’s why he did all that!” moments. I’m not sure whether it was more fun for those who already knew the movie, or for us who had to figure it out. ;-)

How to watch movies Memento-style

My initial idea was using FFmpeg to actually cut a movie file into pieces and reassemble them, but that approach turned out to be slow, tiresome, and inflexible. So, at the moment, there are two things you can do:

First, as explained, you can just open the movie in your favorite video player, skip the the beginning of the closing credits, and then jump back five minutes. Each time you reach a part of the movie you’ve already seen, jump back ten minutes. Repeat until you’ve seen all of the movie. (In VLC, for example, you can make this easier by using the keyboard shortcut Ctrl + Alt + Left, which jumps 5 minutes backwards!)

And second, you can apply some automation. My favorite movie player is mpv, which is easily scriptable with Lua, so I wrote this script which does all the work for you. You just put it in ~/.mpv/scripts/ (on Unixoids) or in %APPDATA%\mpv\scripts\ (on Windows), open your movie, and press M to turn on “Memento mode”. Playback will skip to the beginning of the last 5-minute block automatically, and it will then play all of these blocks, in backward order. I found that it’s worthwhile to have an overlap of about 10 seconds between the blocks, so you can better recognize where the transitions are. You can change the length of the blocks and their overlap by changing the value of the step and overlap variables.

Closing thoughts

Watching movies backwards seems like a good way to make boring or bad movies more interesting, to challenge yourself, and to have a fun time.

It might be interesting to try playing a movie really backwards, after all. This way, people would also actually act backwards, which might add some humoristic value. To understand what characters are saying, one could either simply add subtitles, or actually cut out the respective parts of the audio track and play them forwards. One could use the timing of the subtitles to find these pieces containing speech. In any case, doing this would require re-encoding the movie file, because video formats are specifically designed to be played forwards.

One could experiment with different block lengths. Five minutes seemed to work pretty well – it’s long enough so that you don’t get too many jumps, and it’s short enough so that the story is still perceived as “backwards”. The average scene lengths in modern movies seems to be around 2-3 minutes, so one could also try that.

Finally, as I explained above, Memento’s structure is somewhat more complicated because of the additional forwards-running black-and-white scenes. It seems worthwhile to add these in, so that you get to see the introduction of the world, of the characters and their relations at an earlier point of the movie.

Here are some more movies which could be interesting when watched mementoized. If you’d like to try it, it would probably be best to pick one you know absolutely nothing about: Mrs. Doubtfire, Duplicity, The Fountain, Duel, Alien. Enjoy!

]]>
Fairy Dust fairy-dust 2017-01-02T01:10:00+02:00 Sebastian Morr sebastian@morr.cc Fairy Dust

Hackerspaces: the final frontier. These are the voyages of the rocket Fairy Dust. Its one-year mission: to explore strange new technology, to seek out new life forms and new convention centers, to boldly go where no congress has gone before.

The visual style of this animation is a reference to Nyan Cat, but the subject is one of the Chaos Computer Club’s logos, the rocket Fairy Dust.

In case you’d like to create your own Nyan Cat-style animation, you can use my Aseprite file as a basis.

I posted this animation on twitter, and when I suggested that someone could create a soundtrack for the animation, an amazing piece of Internet collaboration happened: My friend Winnie extracted samples from Peter Marquardt’s video Electromagnetic Sounds of a Chaos Communication Congress and put together a music loop. He called the result Fairy Dub:

He also made a improved version 2.0, Fairy Dubst:

Sticker

In late 2017, I made a sticker version, with slightly modified colors and a different aspect ratio. It is designed to be printed at size 3.5 x 10.5 cm, and already includes 1 mm bleed on all sides. If you want to modify it, here’s the Aseprite source file.

Sticker version

]]>
gitlab-patcher Logo gitlab-patcher-logo 2017-10-11T00:00:00+00:00 Sebastian Morr sebastian@morr.cc A logo for gitlab-patcher, a command line tool for managing complex sets of software patches. It’s a Tanuki! With band-aids! <3 It’s based heavily on the original GitLab logo created by Ty Wilkins.

A Tanuki with band-aids

It was selected by the GitLab Infrastructure team from my three suggestions:

Three Tanuki logo variants

]]>
Dare to Ludum Dare dare-to-ludum-dare 2017-10-08T12:00:00+02:00 Sebastian Morr sebastian@morr.cc At Hackover 2017, I gave a talk about my experiences with Game Jams, especially with Ludum Dare:

Dare to Ludum Dare

Here’s a (German) recording of the talk, given at my home hackerspace, Stratum 0:

Games:

]]>
CSS Art Workshop css-art-workshop 2017-10-07T13:00:00+02:00 Sebastian Morr sebastian@morr.cc A workshop I gave at Hackover 2017 about making minimalistic CSS Art. Participants learned how to make complex pictures from a single, empty <div>.

Here are the interactive slides – you probably want to open them in fullscreen. Note that the “solutions” to the various topics are subslides, which you can reach with the down key. Press Escape to see an overview.

And here are two codepens I provided as a starting framework:

]]>
McEscher mc-escher 2017-10-02T22:39:00+02:00 Sebastian Morr sebastian@morr.cc An impossible burger

Would you like some Möbius bacon on that?

]]>
Fix My Avatar fix-my-avatar 2017-09-28T00:00:00+00:00 Sebastian Morr sebastian@morr.cc In June 2017, Twitter decided to change the format of its users’ avatars from a square to a circle. This led to many avatars which contained text or rectangular logos being cut-off.

Because I’m annoyed by such things, I wrote a Twitter bot which can fix these problems: @fixmyavatar. It analyzes the avatar’s background color, and then scales down the motive until it fits into a circle, plus some small padding.

To use it, just write something nice to the account, like this:

@fixmyaccount Hi, please fix my avatar!

It will reply with a fixed avatar, which you can then save and re-upload to your profile.

To help fixing other accounts, send their names to the bot, like this:

@fixmyaccount Please fix the avatar of @account_name_here

As the Twitter API limits the number of tweets per hour to 100, you might need a little patience! :)

]]>
Shenzhen Portal Logo shenzhen-portal-logo 2017-09-07T00:00:00+00:00 Sebastian Morr sebastian@morr.cc A logo for Stratum 0’s storage system for electronic components, the Shenzhen Portal.

A chinese postman, delivering a giant LED, running through a dimensional Portal

]]>
Elymas Logo elymas-logo 2017-09-07T00:00:00+00:00 Sebastian Morr sebastian@morr.cc A logo for Drahflow’s stack-based programming language Elymas, which is unholy and full of magic.

A dark wizard hand hovering over a globe filled with brackets

]]>
MRMCD17 CTF: "Sanity Check" sanity-check 2017-09-03T20:03:00+02:00 Sebastian Morr sebastian@morr.cc At MRMCD17, Bine, Maxi and I participated in our first Capture The Flag event ever. I wanted to do a quick writeup of how we solved the Sanity Check challenge from the “Misc” category.

The description of this challenge read as follows:

Participants were supposed to enter a flag in the text box at the bottom to solve the challenge. Note that it has a 5-star difficulty rating, but we were determined to solve it!

Thus began our descent into madness.

Thanks to the hint text, we now knew the general format of a flag, but how were we supposed to get the specific one required for this challenge? We were really surprised that, unlike other challenges, this one didn’t link to any file or webpage. There was no obvious attack vector, or any other apparent source of helpful information.

First thing we did was to look at the source code of the page, but didn’t find anything hidden in there. We attemted to take the description text literally and entered mrmcd{text}, but to no avail. Maybe there was some kind of hidden message in the hint text itself? The first letters of all words? Tihafllsialltotitbtc. The characters in the first column? TmsMb. Every fifth letter? Tiallomaoiihsbecbe. Nothing seemed to make any sense, we tried these as keys nevertheless. Nope. Scytale cipher? Caesar box code? ROT13? Nopenopenope.

The strings inside the example flags caught our attention, and we spent a day or so to do anything useful with them. To us, they looked like abbreviated hashes, so we rented some computation time from Amazon’s AWS, and set up a hash cracker using rainbow tables. To our disappointment, after letting it run overnight it didn’t come up with anything useful. We interpreted the strings as x86 assembly instructions, as ASCII, as IPv6 addresses, and as bit strings forming a QR code when arranged correctly. Nothing.

Maybe the title Sanity Check was supposed to be a hint? Were we actually required to prove our mental health to the CTF organizers? Google Maps listed at least different six psychotherapists nearby – but which one should we go to? Was this actually supposed to be an on-site challenge? We tried calling them, but none of them understood what we were asking about. Two of the psychotherapists pointed out that the Central Tegmental Field (short: “CTF”) is a specific area of the human brainstem, but all our attempts to build a flag out of that information was in vain. When we called the last number, insisting that one of them had to an accomplice of the organizers, and were actually offered an appointment for the next afternoon, we knew we were on the wrong track.

We sneaked in the CTF operation room and attempted some social engineering. We started by thanking the team for putting together all those fun challenges (we had solved about a dozen others of them at this point). Next, we causally mentioned that we had noticed some other teams having problems with the Sanity Check challenge, and offered to discuss how to improve this type of challenge next time. Instead of answering, they all laughed at us, and we didn’t have a choice but to laugh as well. We tried again, pointing out they had made a typo in the string inside the flag. Yeah, the second word was spelled wrong, what was it again…? But they seemed very determined not to let anything slip. We left, trying very hard to conceal our disappointment.

So… to be honest, I started this writeup under a false pretense. I promised to describe how we solved this challenge, but to this day, we haven’t found a way to do it. If someone else (like one of the top three teams, entropia, alech, or cypp) would like to do a proper writeup of how they found the flag, we would be extremely interested to read it! But, judging from how difficult it must be to derive the flag text, we assume none of them will have the time and energy to describe all the required tools, and the elaborate process required to crack all stages of this devilish challenge. Congrats to all teams who beat it. This one was definitely above our heads.

]]>
Richterfenster richterfenster 2017-08-20T00:00:00+00:00 Sebastian Morr sebastian@morr.cc Entry in the pixel art compo of Evoke 2017. While the original window in the Cologne Cathedral has 72 colors, this one was only allowed to use a given 8-color palette.

]]>
Ten Little Letters ten-little-letters 2017-07-29T00:00:00+00:00 Sebastian Morr sebastian@morr.cc This game was a very small-scope entry for Ludum Dare 39, created during a sick day in Montreál. In contrast to my past participations, this was a solo entry, so I chose the “hard” ruleset, where you have to create the whole game from scratch, including sounds and music.

In the comments, the game was praised for its “original concept”, and the “clean, simple execution”. Many found it quite hard (including myself), but see for yourself! :)

You can download the game from the Ludum Dare website!

Title screen

In-game screens

Development

The theme for Ludum Dare 39 was “Running out of Power”. I spent a few hours drafting a game in the style of Japanese number games, where you would need to connect potato batteries to lamps on a grid, but I didn’t find a combination of gameplay elements which would make this really challenging. Another concept had the title You are the Blackout, where you would kill lights in a skyscraper, making the people inside panic and flee to certain locations. This led me to the idea of a platformer which would play completely in the dark, and you would have to orient yourself only via sound effects. I knew I had to reduce the scope to be able to finish this in a day, so the final game is a very reduced version of this: You click around in the dark, trying to guess which letter is there.

To be honest, this is kind of a recycled idea which I already thought of in preparation to managore’s bit jam. The challenge there was to create a game in 1-bit color, on a 1px x 1px display, without any other form of feedback. I didn’t realize it back then, and I think this version with audio and graphical output is probably much more satisfying to play.

Recordings

Jupi covered the game and discovered that letters are hard:

Results

I’m rather proud of the innovation rating. All other categories are in the upper third, except for “Theme”:

]]>
What happened when we offered Free Hugs to people free-hugs 2017-07-16T19:02:00+02:00 Sebastian Morr sebastian@morr.cc How do people react when you hold up a sign labelled “Free Hugs” in public?

A friend and I wanted to find out. We had both heard of Juan Mann, who started his Free Hugs Campaign in 2004. Also, we had already encountered other people doing this, and we discovered that we both had wanted to try it ourselves ever since.

Two cardboard signs

So we wrote two cardboard signs, one in English (“Free hugs”), one in German (“Gratis Umarmungen”). As we walked toward the city center of Brunswick, I started looking at the people passing by and tried to guess whether or not they would accept a hug. To be honest, I was pretty nervous, because the whole thing was so unpredictable. Doing this this was definitely part of my ongoing efforts to leave my comfort zone every now and then.

We selected a busy crossroad in a pedestrian zone, stood at one corner of it, and raised our signs.

Nervously, we waited. Would anyone actually come up to us, or would we simply be ignored?

Our initial anxiety disappeared quickly. It turned out to be quite fun to watch people’s reactions: Some kept a straight face, some looked surprised or narrowed their eyebrows, but the overwhelming majority smiled and talked about us when they realized what we were doing.

Then, after about five minutes, the first two people came running into our arms, tourists from an English-speaking country. In retrospect, these were some of the most heartfelt hugs of the day. “How long can I hug you?” one of them asked. My friend chuckled. “As long as you want!” They hugged each of us, then hugged each other.

After this, we couldn’t stop smiling.

Most of the time, we wouldn’t offer our hugs very aggressively, and let the people come to us instead. We watched many groups hesitating whether or not to approach us. Often, one member would try to convince the others to come with them. Soon, when we spotted this behaviour, we tried to invite them in by opening our arms and waving and nodding. Some groups literally changed direction four or five times (toward us, away from us, toward us), before finally deciding on whether they would do it.

Some woman pointed at her companion. “He wants a hug, he’s just too shy!” He smirked. “Yeah, you know, my social phobia…” “Oh, we’re totally introverts, too!” we replied. “Well, obviously you don’t have to do this. But maybe you’ll come back here again later today?” He didn’t.

A teenage girl walked by, gaping at us, looking so offended that I couldn’t help but burst into laughter. Sorry!

Some older women gave us very tender and long hugs. “This feels good,” nodded one of them.

After hugging, a man with an Italian accent walked away, then quickly turned around again: “Oh, you don’t want any money, right?”

Some dude, walking up to me: “Okay, I’ll hug you. But only ‘cause it’s you!” He came back a few minutes later for a selfie.

Many people asked for our motives. “Why are you doing this?” “Did you lose a bet?” “So, who made you stand here?” My default answer was “We just think the world could use more hugs!” I don’t think everyone understood.

A woman with a group of small kids: “Sooo… explain what are you doing?” “We can hug you if you want!” “And then?!” “That’s all there’s to it!” She came back a few minutes later and all apparently had instructed all four kids to hug us. Cute!

My friend told me beforehand she was a little afraid of creeps. Fortunately, the whole thing was a mostly creep- and asshole-free experience. Even though, there was one rather awkward guy who came to hug (just) her, without any facial expression, and then left, all without speaking a word.

A middle-aged couple came for hugs. “We saw people doing this some time ago in another city! We didn’t use the chance back then, but now we had to!”

A rugged-looking man with bad teeth watched from a small distance. “Do you want a hug?” I asked. “Nah, I’m fine, I get 10 per day! I’m just glad there are still good people out there!”

Guessing which people would come for a hug turned out to be rather difficult. We noticed that most couples wouldn’t, and most kids and elderly people wouldn’t, either.

The waitress of the café across the street came over: “I’ve been watching you the whole time, and I wanted a hug myself!”

A boy of about 7 years sneaked up on us. “Do you want a hug?” He beamed with joy. “Yeah!!” I wondered where his parents were, but then he also walked back to the café, his parents smiling at us from there.

A 12-people bachelor party group came roaming about, and we wiggled our signs, hoping to score a group hug. But they were focused on selling stuff to raise money for the wedding. None of them wanted a hug, one of them even asked for money. I pointed at the word free: “Sorry, this is not how this works.”

One of the most surprising reactions came from a young man: “Can I hold the sign for a few minutes?” A group of his friend watched him from a distance. He seemed a little nervous and withdrawn, and I tried to brief him with some best practises: “Offer the sign up to people coming from that direction, so they have time to decide whether they want to do this. Try to look at them, and smile!” He did none of these things, it didn’t really work out, and he left after a few minutes. I encouraged him to try it again sometime, and I thanked him for the idea of bringing some spares signs in case people wanted to join in.

We mostly stayed stationary, except when the infamous Preacher of Brunswick turned up (“Let! Jesus! Into your heart!”). We really didn’t want to be associated with him, so we temporarily changed our location. Walking around with our signs (very slowly) also worked great, and I would like to try more of that in the future.

When the shops closed, and the amount of people passing by decreased, we decided to break camp. About two hours had passed in a flash. Some people had asked for our experiences – how long we’d been here, how much response we were getting. Truth be told, we got a lot more reaction than I had expected. I’d estimate we hugged about 50-60 people. Hugs definitely came in clusters, I guess because it’s easier for people to come up to us after they’ve already seen others to do the same. Overall, the feedback has been incredibly positive!

Some minutes after we put away our signs, my brain was still in hugging mode, and I was surprised that nobody came up to us. So, yeah, I would love to do this again. Soon.

Lessons learned

Should you ever want to offer Free Hugs yourself (and I think you definitely should try!), here are some hints and pointers to improve your experience:

  • A mixed-gender two-person group seemed to work pretty well. It’s not as creepy as a single guy, not as intimidating as a larger crowd, and people can chose whom to hug. (Although most people hugged both of us!)

  • It’s a good idea to write multi-lingual signs, where applicable. We noticed people who couldn’t read our English one (“Könnten Sie mir die Bedeutung des Wortes Hugs verraten?”), and there were also people who didn’t speak German and laughed about the ridiculous length of the word “Umarmungen”.
  • Bring more signs than you need, in case people want to join in.
  • Our signs were made from thick white cardboard, a little larger than A4. This worked well, but I’d probably make larger ones next time. Write on both sides of the signs, so people behind you can read it when you hold it up.

But really, there’s not much you can do wrong. Go! The world does need more hugs, now more than ever.

]]>
No Way Out no-way-out 2017-06-27T00:00:00+00:00 Sebastian Morr sebastian@morr.cc This is a song of beginnings. Most importantly, it’s the first full real song I’ve ever created. It’s also the first chiptune I made, and the first track I produced using SunVox! I surely learned a lot while making it!

But it sounds rather dark, so I gave it a depressing name! :P

You can listen to it on SoundCloud or download it as MP3 or FLAC. The SunVox project file is available here.

Thanks to Bobo_PK for reviewing the track, and giving helpful feedback! Cover art by Bleeptrack.

]]>
Low poly snail low-poly-snail 2017-06-27T00:00:00+00:00 Sebastian Morr sebastian@morr.cc A low poly snail in low poly grass

Inspired by @nori_wrap’s low poly art.

]]>
Potterbot potterbot 2017-06-18T00:00:00+00:00 Sebastian Morr sebastian@morr.cc @potterbot is a Twitter bot using so-called Markov chains to generate random new lines. I fed it the complete text corpus of all seven Harry Potter books. When I set it up, I was mostly thinking of generating funny lines, but a surprising thing has happened:

A friend of mine has started replying to the prompts generated by Potterbot, to continue the scenes. You can find a good example here. I find it hilarious, and it’s a good example of creativity produced by human-computer interaction!

]]>
Font quiz for Anki anki-fonts 2017-06-06T15:14:00+02:00 Sebastian Morr sebastian@morr.cc This is a set of flashcards for the popular open-source spaced repetition software Anki, which will teach you to identify the most popular typefaces. It showcases over 45 fonts, each with a short history and a list of defining characteristics.

Here is an example card:

The basis for these flashcards is the now-defunct FontSpotting deck developed by Dustin de Souza and Jessica Witt. Their content is used with their kind permission.

Installation

To get started, simply download the current release from the AnkiWeb page. Then, in Anki, use File -> Import and select the .apkg file. This works in the desktop client as well as on smartphones.

Contributing

This deck is maintained on GitHub, using the CrowdAnki add-on. If you find a mistake, or have other ideas on how to improve the deck, please don’t hesitate to open a new issue!

]]>
Esoteric Programming Languages esolangs 2015-02-01T00:00:00+00:00 Sebastian Morr sebastian@morr.cc This was a fun overview paper written in my university seminar “Programming languages through the ages”. I was very lucky to receive the awesome topic Esoteric Programming Languages! :-) In the paper and the accompanying talk, I give an overview of the languages Brainfuck, INTERCAL, Befunge, Malbolge, and Shakespeare.

Paper Talk

You can also have a look at the LaTeX source of the paper.

In 2017, I gave an extended version of the talk at the 17. Gulaschprogrammiernacht (in German):

(If you prefer, there’s also a copy of the recording on YouTube.)

]]>
Ampersand jam ampersand-jam 2017-05-06T22:33:00+02:00 Sebastian Morr sebastian@morr.cc Development path of the three designs

TQ & Pecca made me aware of the Saint J&an event hosted by the open source foundry Velvetyne. It was both a workshop held in Paris, as well as a location-independent design event, where participants could create & submit their “contemporary ampersand” designs.

You can click on the images below to download a clean SVG of each design.

Clef

Inspired by the treble clef used in modern music notation. This one definitely took the longest & I found it rather hard to get all the curves right. A huge help was Inkscape’s “pattern along path” effect, which allowed me to vary the thickness the stroke, while being able to modify its positioning at the same time. Oh, & Spiro splines, of course. I couldn’t have done any of this without Spiro splines.

Clef

Clef voting Clef voting 2

Buddha

The idea here was to create an extremely bottom-heavy shape. Already early on, I had to think of the Body Positive Movement & some variations literally depicted a huge belly. The final design stayed rather abstract, but the name still transports the idea! :)

Buddha

Buddha voting Buddha voting 2

Ribbon

Inspired by the awareness ribbons. This was a fast one, because two thirds of the design were already given. Few design choices had to be made.

Ribbon

Ribbon voting

]]>
A Bloody Small World bloody 2017-04-25T00:00:00+00:00 Sebastian Morr sebastian@morr.cc This is our contribution Ludum Dare 38. This time, I was part of a four-person team together with Pecca, Winnie, and Moritz. We built a little, hectic racing game!

Only an event like Ludum Dare gets me into a flow-like state which allows me to work on something without interruptions for 16 hours straight…

You can download the game from the Ludum Dare website!

Title of "A Bloody Small World"

Screenshots of "A Bloody Small World"

Recordings

The Button Masher Bros did a hillarious playthrough, you should definitely watch it:

Also, Jupi covered it in her ongoing mission to play ALL THE indie games:

Comments

Such a great game! The design is very well done, from the blood flow encouraging you in the right direction to the visuals, everything is well thought out. The music was nice and fitted well with the rest of the game. The intestines were quite livery, but I’m guessing it’s the LD time constraints showing there :P –bobsleigh

Hot damn, that’s very cool! The sounds is cute, the art is good, and the whole idea behind it makes for a great educational game. –Ellian

Wow this game is really great and i enjoyed it a lot! The game feels very polished with the cute art style, sound effects and music complimenting each other really nicely. The game mechanics are pretty fun, I enjoyed the ‘flow’ mechanic and thought it was an interesting game element that sometimes worked against you and other times worked with you. The humor and dialogue was well done and a nice touch. I also thought the challenge progression was well done, as you get used to the mechanics and the map it would up to challenge. Really great job! –Colm Eccles

Results

The ratings were generally rather good. But especially the “Fun” category could have been better… we learned our lesson.

]]>
#woollyweek woolly-week 2017-04-20T17:06:00+02:00 Sebastian Morr sebastian@morr.cc TL;DR: We invite you to join us for a Mastodon-exclusive week! Starting this Monday, 2017-04-24 at 0:00 UTC, log out of all your Twitter clients, and don’t log back in for a week.

A Mastodon letting a Twitter bird fly away

You might have heard of the Mastodon social network, it’s an open-source, decentralized, community-built alternative to Twitter. You have 500 characters per post, no ads, and many instances explicitly ban discrimination and harassment. Its mascot is a woolly, mammoth-like animal, and instead of tweets you write toots! We think that’s cute. And by now, the network consists of more than 1000 independent active instances with over 400,000 registered accounts!

In our experience, a hard cut works best for trying out new platforms like this. Some of us have made exceptionally good experiences with such a Mastodon-exclusive week. On the one hand, you will get to know Mastodon inside-out during this week, and on the other, it might convince your Twitter friends to come with you! Maybe some of them even already have Mastodon accounts? You can find them using the Mastodon Bridge.

Here’s how you can prepare (right now!)

  1. Choose a Mastodon instance. Don’t worry, almost all of them are connected to each other, so you’ll be able to talk to all Mastodon users! But here are some recommendations:

    • octodon.social is a nice general-purpose instance with reasonable rules.
    • witches.town is a nice place for LGBT+ activists, feminists, anarchists and stuff as well as their sympathizers. Registration opens every day from 18:00 UTC to 19:00 UTC.
    • awoo.space was created to be a safe space with very strict rules and moderation. They work with a whitelist to control which instances they connect to.
    • chaos.social is an instance for and by people close to the Chaos Computer Club.
    • If you’re feeling courageous, you can also take a look at the complete list of instances. Read the respective “About this instance” pages until you find an instance you like!
  2. Register an account there, and try out all the functions! Remember to add an avatar and a short bio to your profile. Here’s a good introductory article to get you started.
  3. We recommend to make an announcement on Twitter before the week starts. Link to your new Mastodon account (and maybe this page?), and use the hashtag #woollyweek (note the double-L! ^_^). Pin that tweet, and change your username to “(see pinned tweet)” or something like that, so your followers can find out what’s going on.
  4. Before Monday, 2017-04-24 at 0:00 UTC, say good-bye to your Twitter followers, log out of all your clients, and pledge not to log back in for a week.

Fun things to try in your first Mastodon week:

  • Post an #introduction! Include many hashtags so people with similar interests can find you!
  • Then, click on your own hashtags to find people with shared interests and follow them!
  • Many of us enjoy having more than one account. For example, tenforward.social is a Star Trek-themed instance, suitable for roleplaying. oulipo.social is a lipogrammatic instance where you are not allowed to use the letter “e”. On dolphin.town, on the other hand, you’re only allowed to use the letter “e”.
  • If you have any questions, you’re very welcome to contact @blinry or @TQ, who will be glad to help you with any problems you might encounter.

This is a list of Mastodon members who will participate in the #woollyweek. Want to join us? Ping @blinry to be added to the list! We’re looking forward to have you with us!

]]>
Let it go... let-it-go 2017-04-11T23:00:00+02:00 Sebastian Morr sebastian@morr.cc A Mastodon mammoth letting a Twitter bird fly away

Drawn when I migrated from Twitter to the open-source alternative Mastodon for a week. See this thread on why I did that:

]]>
Fünf Tage mit dem Teufel teufel 2017-04-09T12:59:00+02:00 Sebastian Morr sebastian@morr.cc Dies ist eine Übersetzung von Joe Edelmans Essay Five Days with the Devil. Wenn ihr könnt, lest das Original!


Was dich erwartet: Ein Gedankenexperiment. Wie menschliche Werte verlorengehen. Und: Eine neue Perspektive auf den momentanen politischen Aufruhr (Trump, Brexit, Terrorismus, und so weiter).

Montag

Am Montag bietet der Teufel dir Produktivität an. Er gibt dir eine magische To-Do-Liste: Sobald du dir etwas wünscht, erscheinen Aufgaben darauf, sofern diese überhaupt erfüllbar sind. Und sobald sie dort erscheinen – BÄM! – werden sie bereits erledigt sein. Du kannst nach wie vor das Gefühl der Errungenschaft und die Früchte des Erfolgs genießen, aber du hast nichts von dem Prozess. Sobald du dir beispielsweise wünscht, ein Buch zu schreiben, wird es bereits geschrieben sein. Sobald du dir ein schickes Abendessen wünscht, wirst du es gerade gegessen haben. Sobald du dir wünscht, mit einer Person, die du liebst, einen entspannten Tag zu verbringen, wird dieser Tag gerade geschehen sein. Er wird vorbei sein.

Ist dies der Himmel oder die Hölle? Gibt es irgendwelche Wünsche, für die eine solche To-Do-Liste hilfreich wäre? Wenn du denkst, dass dies ein schlechtes Angebot ist, was sagt das darüber aus, was du im Leben erreichen willst? Über den Antrieb, produktiv oder effizient zu sein?

Dienstag

Am Dienstag gibt dir der Teufel eine Möglichkeit, deine Beziehungen und deine Zusammenarbeit zu verbessern. Er wird – für immer – das Problem lösen, herauszufinden, welche Handels- und Vertragsbeziehungen in deinem privaten und deinem Arbeitsleben funktionieren werden. Du wirst sofort wissen, wer dich einstellen könnte, wie viel sie bezahlen würden, und was dort von dir erwartet wird. Genau so ist es in deinem Privatleben: Du wirst sofort wissen, wenn es ein gegenseitiges Verlangen gibt – danach, sich zu küssen, miteinander zu schlafen, auszugehen, oder sich über Literatur zu unterhalten. Der Teufel wird den Schmerz und die Verwirrung darüber entfernen, zu verhandeln, zu suchen, zu flirten, und so weiter. Aber er verlangt eine Sache: Deine Beziehungen mit diesen Menschen müssen auf das, was der Vertrag aussagt, beschränkt bleiben. Es wird kein offenes, gegenseitiges Entdecken geben, nur eine Abfolge von zuvor bekannten Tauschgeschäften.

Wie lange wäre ein solches Leben auszuhalten? Wie würde es sich anfühlen, auf der Erde zu leben, wenn alle Menschen das Angebot des Teufels annehmen würden? Hast du Freunde, die dieses Tauschgeschäft eingehen würden, und welche, die das nicht tun würden? Wo liegt der Unterschied?

Mittwoch

Am Mittwoch bietet der Teufel dir an, deine Wahrnehmung und deine Fähigkeit zur Schlussfolgerung zu verbessern. Wie Sherlock Holmes wirst du besser darin sein, Dinge zu bemerken: Die Zusammensetzung deiner Umwelt, Hinweise auf den emotionalen Zustand von anderen, die Wahrheit über deine politische und wirtschaftliche Situation, und so weiter. Der einzige Preis, den der Teufel einfordert, ist eine entsprechende Verringerung deiner Fähigkeit zur Wertschätzung. Du wirst mehr darüber wissen, was geschieht, aber weniger darüber, warum das für dich wichtig ist. Du wirst Schwierigkeiten darin haben, zu erkennen, warum du dich um Dinge scheren solltest. Was auch immer dir momentan wichtig ist – sei es wegen seiner Schönheit, seinem Nutzen oder seiner Passion – es wird dir weniger wert sein.

Würdest du das Angebot des Teufels annehmen? Welche Form der Wertschätzung würdest du am meisten vermissen? Wie würde sich dein Leben ändern? Stell dir vor, du müsstest wählen, nicht nur für dich selbst, sondern für die gesamte Menschheit: Würdest du dich entscheiden, alle scharfsinniger, aber weniger wertschätzend zu machen? Inwiefern wäre eine solche Gesellschaft anders? Ist Wahrnehmung ohne Wertschätzung überhaupt möglich?

Donnerstag

Am Donnerstag bietet der Teufel allumfassende Empathie und Einsicht an. Was auch immer du fühlst, Leute werden es sehen, und sie werden sofort alle wichtigen Details dessen, was dir passiert ist, verstehen, und sich um dich kümmern. Du wirst nicht mehr deine Geschichte erzählen müssen, um Sympathie und Verständnis zu bekommen, weil du sie sofort bekommen wirst. Diesmal ist der Preis, dass die Leute nur über deine Gefühle, deine Geschichte und deine Erfahrungen Bescheid wissen werden. Alles andere wird ihnen verborgen bleiben: Deine Pläne und Träume, womit du dich identifizierst, inwiefern du wachsen oder anders leben willst. Du wirst jedermanns Empathie haben, aber keine Zusammenarbeit, keine Mentorschaft, keine Gemeinsamkeit im Wachsen und Lernen.

Würdest du das Angebot annehmen? Falls ja, würden dir Leute auf lange Sicht mehr oder weniger geben? Welche Art des gemeinsamen Wachsens oder der Zusammenarbeit würdest du am meisten vermissen? Was tun Menschen wirklich füreinander?

Freitag

Am Freitag macht sich der Teufel daran, deinen Erfolg zu erhöhen. Er wird dich doppelt so erfolgreich darin machen, so zu leben, wie du willst. Wenn du Sport machen willst, wirst du das tun. Wenn du die Situation von unglücklicheren Leuten verbessern möchtest, wirst du darin doppelt so effektiv sein wie sonst. Wovon auch immer du träumst, oder was du dir in den Kopf setzt, es ist wahrscheinlicher, dass das umgesetzt wird. Allerdings muss ein Preis gezahlt werden. Für den Rest deines Lebens werden alle von deinem Erfolg wissen, aber niemand von deinen Motivationen. Deine Motive – alle Motive – müssen für immer geheim bleiben.

Was verlierst du bei diesem Tauschgeschäft? Warum ist es wichtig, die Motive der anderen zu verstehen? Was gewinnen wir bei diesem Prozess? Ist ein Leben weniger lebenswert, wenn niemand unsere wahren Motive kennt? Ist es wahrscheinlicher oder unwahrscheinlicher, dass wir die richtigen Dinge tun, wenn wir nicht über unsere wahren Motive reden dürfen?


In jeder der voranstehenden Geschichten hat der Teufel einen wichtigen Teil davon, wie Menschen mit ihren Werten interagieren, untergraben:

  • Am Montag hat er durch das Anbieten der To-Do-Liste alle Werte auf logistische Ziele reduziert.
  • Am Dienstag hat er Flirten und Entdeckung durch eine verbesserte Koordination ersetzt, und dadurch Zusammenarbeit als eine Aushandlung von Zielen umdefiniert, anstelle einer gegenseitigen Erkundung von Werten.
  • Am Mittwoch hat er mit dem Angebot einer besseren Wahrnehmung unsere Fähigkeit dazu gestohlen, in unserer Umwelt Werte zu entdecken. Er hat uns überzeugt, dass nur Fakten real sind.
  • Am Donnerstag hat er mit dem Angebot von Empathie und Verständnis unsere Kompetenz entfernt, einander zu beschützen, was auf dem Erkennen von Werten basiert.
  • Am Freitag hat er uns durch das Verbot, Motive mitzuteilen, von gewissen sozialen Prozessen abgeschnitten: Von der Beratung über Werte, von der gemeinsamen Entdeckung von Werten. Es sind genau diese sozialen Prozesse, die unsere Entscheidungen bedeutungsvoll machen.

Diese Tauschgeschäfte sind nicht spekulativ. Sie sind keine Märchen.

Dies sind die Tauschgeschäfte, die unsere Gesellschaft gemacht hat. Sie sind tatsächlich passiert.


Menschen sind Kreaturen, die einander ständig fragen, was wichtig ist – bei einem Ehepartner, bei einem Wein, bei einer Programmiersprache.

Unsere Werte haben ein soziales Leben. Genauso wie wir auf die Gefühle anderer reagieren, arbeiten wir auch zusammen: Wir erkunden, erweitern und beschützen unsere Werte. Es gibt eine verborgene Struktur dahinter, wie wir das, was uns wichtig ist, weiterentwickeln, aktualisieren und verfolgen. Wir wachsen sozial über Werte zusammen, und wir arbeiten zusammen, um sie in Entscheidungen und in Projekten umzusetzen.


Politik

Leute fühlen sich so, als lebten sie in einer Gesellschaft, die ihre Werte nicht reflektiert. Auf der linken Seite beinhalten diese Werte Gerechtigkeit, Gleichheit und das Leben mit der Natur. Auf der rechten Seite beinhalten sie würdevolle Arbeit, stabile Familien und religiöse Gemeinschaft.

Wir haben eine einfache Erklärung, warum die Gesellschaft unsere Werte nicht respektiert: Die andere Seite gewinnt!

Aber vielleicht sind es nicht linke Werte oder rechte Werte, die gewinnen. Vielleicht sind es nicht liberale Werte oder muslimische Werte oder amerikanische Werte. Vielleicht ist das, was passiert, dass alle Werte verlieren.

Was, wenn das Sozialleben der Werte versagt? Was, wenn unsere Werte nicht dazu führen, dass wir zusammenwachsen, und sie nicht so ausgedrückt werden wie früher? Was könnten wir tun, um das zu reparieren?

]]>
Avoiding Slippery Slopes slippery-slopes 2017-04-06T11:36:00+02:00 Sebastian Morr sebastian@morr.cc Avoiding Slippery Slopes as an O'Reilly book

A “Get Well Soon” card for Rohieb in the style of a fake O’Reilly book. It’s all a giant in-joke, I can’t even begin to explain.

]]>
Pacifion pacifion 2017-03-28T22:00:00+02:00 Sebastian Morr sebastian@morr.cc Scorpion with a pacifier instead of a stinger

]]>
Der Weg zur Weisheit weisheit 2017-03-15T23:32:00+01:00 Sebastian Morr sebastian@morr.cc Dies ist eine Übersetzung von Joe Edelmans Essay When Wisdom Comes, das mich sehr berührt und geprägt hat. Wenn ihr könnt, lest das Original!

Herzlichen Dank an rixx, Pecca und Wolfgang für’s Korrekturlesen! <3


Gefühle werden oft missverstanden. Sogar von Psychologen, Philosophen und Neurowissenschaftlern und sicherlich von Designern und Aktivisten.

Ich werde zunächst beschreiben, wie Gefühle in uns wirken. Daraus ergeben sich Definitionen von Integrität und Weisheit. Ich werde die Frage stellen, ob sich die Weisheit im Niedergang befindet, und Antworten finden, die mit Organisationen und Bürokratien zu tun haben. Und schließlich werde ich betrachten, wie man anderen im Blick auf ihre Gefühle und Werte helfen kann.

Wie Gefühle in uns wirken

Dies ist die Grundidee:

Jedes Gefühl ruft uns etwas in Erinnerung, das uns wichtig ist.

Zum Beispiel:

  • Wut verrät uns, dass etwas, das uns wichtig ist, blockiert ist
  • Angst, dass etwas, das uns wichtig ist, bedroht ist
  • Scham, dass wir etwas, das uns wichtig ist, nicht gerecht geworden sind
  • Verwirrung, dass uns die Vorstellung von etwas fehlt, das uns wichtig ist
  • und so weiter

Wir lernen durch unsere Gefühle, was uns wichtig ist. Sie verraten uns unsere Werte.

Gefühle helfen uns außerdem, unseren Umgang mit unseren Werten zu überprüfen. Positive Gefühle erinnern uns daran, zu begrüßen oder wahrzunehmen, was uns wichtig ist. Negative Gefühle hingegen tun mehr: Ein negatives Gefühl signalisiert einen Konflikt zwischen unseren Werten, über den wir nachdenken sollten:

  • Vielleicht haben wir nach Wert B gestrebt, dabei aber Wert A vergessen. Ich habe früher zum Beispiel versucht, effektiv zu sein, dabei aber vergessen, dass es mir auch wichtig war, freundlich zu sein. Das könnte zu Betretenheit führen.
  • Oder wir vernachlässigen vielleicht Wert B, weil wir es für unmöglich halten, beide zu verfolgen. Ich könnte es zum Beispiel für unmöglich halten, gleichzeitig meinem Interesse nach kreativer Arbeit nachzugehen, während ich meine Familie finanziell unterstütze, aber beides ist mir wichtig. Das führt vielleicht zu Frustration oder Sehnsucht.

Es gibt viele weitere Arten von Konflikten. Zum Glück haben wir aber Gefühle, die uns mitteilen, dass wir uns mit diesen Konflikten auseinandersetzen müssen, anstatt sie einfach zu übergehen. Die Gefühle erinnern uns daran, uns selbst Fragen zu stellen wie:

  • Kann ich freundlich und effektiv sein?
  • Halte ich wirklich viel davon, effektiv zu sein, oder ist es vielleicht immer wichtiger für mich, freundlich zu sein?
  • Ist es wirklich unmöglich, kreativer Arbeit nachzugehen und gleichzeitig meine Familie finanziell zu unterstützen?
  • Was würde tatsächlich passieren, wenn ich aufhören würde, meine Familie finanziell zu unterstützen?

Oft wollen wir uns diese Art von Fragen nicht stellen. Aber die Gefühle kommen weiter in uns auf, bis wir es tun. Bis wir uns die Zeit nehmen, all diese Konflikte so gut es geht zu lösen, gibt es eine Diskrepanz zwischen dem, was wir leben, und dem, was uns wichtig ist. Diese Diskrepanz führt dazu, dass wir nicht stolz darauf sein können, wer wir sind. Um uns selbst und unsere Entscheidungen akzeptieren zu können, müssen wir uns mit den Konflikten auseinandersetzen.

Besitzt du Integrität?

Oft scheitern wir daran, die Botschaften unserer Gefühle zu empfangen. Dafür kann es drei Gründe geben:

  • Verdrängung. Wenn eine Person sich ihrer Gefühle nicht bewusst ist oder es sich nicht erlaubt, sie zu spüren, werden die Gefühle verdrängt. Verdrängte Gefühle können völlig verschwinden. Man wird abgestumpft, depressiv oder ängstlich.
  • Dampf ablassen. Andere Leute spüren ihre Gefühle, nehmen sie aber nicht ernst als Botschafter dessen, was wichtig ist. Die Gefühle kommen immer wieder zurück und die Person wird melodramatisch.
  • Vermeidung. Eine dritte Gruppe schafft den ganzen Weg bis hin zur Erkenntnis, was ihnen wichtig ist, setzt sich aber nicht mit den aufgedeckten Konflikten auseinander und löst sie auch nicht. Diese Leute werden dauerhaft hilflos, konfliktbehaftet, verwirrt und realitätsfern sein.

Du kannst diese Probleme vermeiden, indem du die Situationen in deinem Leben ganz zu Ende fühlst, angefangen bei den Emotionen, und endend mit einer Vereinbarung von Werten:

FühlenWertschätzenSich auseinandersetzenVereinbaren

Eine Person, die alle ihre Situationen zu Ende gefühlt hat, besitzt Integrität. Sie ist geerdet. Integrität bedeutet, dass sie weiß, was ihr wichtig ist, und dass sie sich mit allen Konflikten auseinandergesetzt hat.

Zu Integrität zu kommen ist am einfachsten, wenn sich deine Situation langsam ändert: Dann hast du viel Zeit, um deine Gefühle wahrzunehmen, um herauszufinden, was dir wichtig ist, und um dich mit möglichen Konflikten auseinanderzusetzen.

Und wie ist es mit Weisheit?

Je dynamischer dein Leben ist – je größer die Vielfalt an Leuten und herausfordernden Situationen ist, mit denen du jeden Tag umgehst – desto schneller musst du im zu Ende fühlen sein. Die wichtigste Fähigkeit für Führungspersonen ist es, schnell darin zu sein, Dinge zu Ende zu fühlen. Eine solche Person ist lebenserfahren oder weise.

Es ist leicht zu erkennen, ob eine Person weise ist: Sie spricht klar und deutlich über ihre Gefühle und Werte und darüber, wie sie sich in verschiedenen Situationen mit ihren Werten auseinandergesetzt und diese miteinander vereinbart hat.

Sie ist außerdem kreativ. Eine weise Person lenkt ihr Leben und ihre soziale Aktivität in ungewöhnliche, kreative Richtungen. Sie hat Werte, die nur durch die Auseinandersetzung mit Konflikten entdeckt werden können.

Hier ist ein Beispiel:

Ein Diagramm von Gefühlen und Werten

  • Früher habe ich versucht, von Leuten gemocht zu werden. Aber irgendwann erkannte ich, dass dies mit meinem Wert, mich wohlzufühlen, im Konflikt stand. Ich merkte, dass ich angespannt und unecht war, um gemocht zu werden. Ich fühlte mich bestürzt und verlegen und das half mir, mich dafür zu entscheiden, nicht darauf aus zu sein, gemocht zu werden, sondern stattdessen zu versuchen, authentisch und mitfühlend zu sein.
  • Später kam mein neuer Wert, authentisch und mitfühlend zu sein, in Konflikt damit, effektiv zu sein. Ich merkte, dass ich lieblos war, wenn ich Gruppen dazu drängte, effektiv zu sein. Mich frustriert und verwirrt zu fühlen, ermutigte mich dazu, das aufzulösen. Ich entwickelte eine neue Sicht auf Effektivität, die darauf abzielt, Kompetenz in mir und anderen zu fördern.

In beiden Fällen behob der Übergang von alten zu neuen Werten einen Denkfehler:

  • Als ich es aufgab, gemocht zu werden, erweiterte sich meine Vorstellung von guten Beziehungen.
  • Als ich es aufgab, effektiv zu sein, korrigierte ich ähnliche falsche Vorstellungen von guten Teams.

Ich konnte die alten Werte deshalb aufgeben, weil ich geklärt hatte, was sie wirklich für mich bedeuteten. Die Bedeutsamkeit der alten Werte ging völlig in dem neuen, umfassenderen Wert auf.

Diese mächtigen neuen Werte und Perspektiven resultieren aus negativen Gefühlen. Ohne unsere Gefühle würden wir auf primitiven Werten wie gemocht werden und effektiv sein hängenbleiben.

Ist Weisheit im Niedergang?

Ich glaube, dass all dies – Gefühle, Werte, deren Vereinbarung – Teil der menschlichen Natur ist, genau wie Sprache oder Gebärden. Aber viele von uns haben das aus dem Blick verloren. Wenn Gefühle natürlich sind, warum ist das Wesen von Gefühlen dann so undurchschaubar?

  • Auf das Individuum bezogen, warum verwirren uns Gefühle und Werte?
  • Auf die Gesellschaft bezogen, warum ist diese Verwirrung so verbreitet?

Wie Individuen sich verwirren lassen

Unsere Fähigkeit, Dinge zu Ende zu fühlen, ist Angriffen ausgesetzt. Zum Einen arbeiten verbreitete kulturelle Mythen daran, uns hinsichtlich der Funktionsweise von Gefühlen und Integrität zu verwirren. Und zum Anderen lassen falsche Annahmen unsere Werte unvereinbar erscheinen.

Kulturelle Mythen. Es gibt verbreitete kulturelle Missverständisse zum Thema Gefühle:

  • Einer dieser Mythen ist die stoische Person – üblicherweise ein Mann – die irgendwie weiß, was ihr wichtig ist, und die ihre Werte vereinbart, ohne dabei jemals ihre Gefühle zu spüren. Der Mythos ist, dass sie einfach auf magische Art und Weise eine höchst effektive Person ist.

  • Ein anderer Mythos ist die hysterische Person – üblicherweise eine Frau – deren Gefühle nichts darüber aussagen, was ihr wichtig ist. Der Mythos ist, dass sie einfach ihren Mann stehen, unnachgiebig bleiben oder Gleichmut entwickeln muss.

Die dominierenden Ansätze der klinischen Psychologie unterstützen und fördern diese Mythen: Die stoische Sichtweise wird von kognitiver Verhaltenstherapie und Lebensberatung unterstützt, während die hysterische Sichtweise von verschiedenen Karthasis-Therapien bzw. künstlerischen Therapien, von Achtsamkeitstraining, von manchen Formen der Familientherapie und von Co-Counseling gefördert wird.

Falsche Annahmen. Kulturelle Mythen unterbrechen den Prozess, zu fühlen oder zu erkennen, was wichtig ist. Unsere Kultur ist außerdem voller falscher Annahmen, die Werte unvereinbar erscheinen lassen. Annahmen wie:

  • Wenn ich sage, was ich wirklich will, werde ich sozial ausgestoßen.
  • Ich bin ein schlechtes Elternteil, wenn ich irgendetwas für mich selbst will.
  • Es ist nicht möglich, als Künstler seinen Lebensunterhalt zu verdienen.
  • Solange ich ehrlich bin, muss ich nicht freundlich sein.
  • Ich kann nicht verführerisch sein, ohne manipulativ oder übergriffig zu werden.

Wenn du einer solchen falschen Annahme unterliegst, ist es dir nicht möglich, dich mit einem Wertkonflikt auseinanderzusetzen und ihn aufzulösen. Die falsche Annahme sagt dir, dass eine Auflösung unmöglich ist. Welches Gefühl auch immer den Prozess ausgelöst hat (zum Beispiel Scham darüber, nicht freundlich zu sein, Aufregung darüber, verführerisch zu sein, oder ein Verlangen nach kreativem Ausdruck), es verwandelt sich in Verzweiflung, bevor du die Chance hast, dich mit dem Konflikt auseinanderzusetzen.

Wenn du die falsche Annahme findest und sie hinterfragst, kannst du den Konflikt auflösen.

Warum die Gesellschaft auf Verwirrung ausgelegt ist

Wenn also diese kulturellen Mythen und falschen Annahmen auf individueller Ebene so schlecht für uns sind, warum sind sie so verbreitet? Hier ist meine Vermutung: Sie haben Menschen berechenbarer gemacht und sie in bessere Rädchen im sozialen Getriebe verwandelt.

Im Laufe der letzten 300 Jahre sind Organisationen, Bürokratien und Institutionen immer komplexer geworden. Um stabil zu bleiben, brauchten sie vorhersagbare Entscheidungen der Menschen in ihnen.

Eine Person ist einfacher zu kontrollieren, wenn sie nicht gut im zu Ende fühlen ist und wenn sie glaubt, dass ihre Werte unvereinbar sind. Sie wird ein besserer Konsument und (zumindest in einer Bürokratie) ein besserer Produzent.

Die erfolgreichsten Subkulturen wären also diejenigen mit kulturellen Mythen und falschen Annahmen. Und wenn Leute darauf getrimmt werden, effektiv zu sein, werden diese kulturellen Mythen und falschen Annahmen verstärkt.

Das würde ein Muster erzeugen, das wir heutzutage sehen: Je erfolgreicher eine Gruppe ist, desto verwirrter ist sie im Blick auf Gefühle und Weisheit.

Anderen helfen

Erwarte fürs erste also, von Leuten umgeben zu sein, die schlecht im zu Ende fühlen sind, die nicht lebenserfahren oder weise sind, und die tief in kulturellen Mythen und falschen Annahmen verstrickt sind. Das wird so bleiben, bis Organisationen und Institutionen anders funktionieren.

Aber du kannst den Menschen, die dir nahe stehen, helfen:

  • Wenn sie Probleme damit haben, ihre Gefühle wahrzunehmen, setz dich zu ihnen. Bitte sie, in sich hineinzufühlen, ihre Gefühle auszudrücken, und behandle diese als wertvoll.
  • Wenn jemand Gefühle ausdrückt, frage, worum es dabei geht. Finde heraus, was der Person wichtig ist. Lass sie wissen, dass du dies ernst nimmst. Du möchtest ihr dabei helfen, zu erkennen, was ihr wichtig ist.
  • Wenn sie denken, dass ihre Werte nicht vereinbar sind, versuche, sie nach ihren im Konflikt stehenden Werten zu fragen. Zeig ihnen, wie diese vereinbart werden könnten. Zeig dich zuversichtlich, dass ihre Gefühle zu Weisheit führen werden.

Viel Glück.


Gibt es eine Person, von deren Gefühlen und Werten du gern mehr hören würdest? Schick ihr diesen Text!

]]>
Wikimedia Sustainability Initiative logo wikimedia-si 2017-03-14T15:39:00+01:00 Sebastian Morr sebastian@morr.cc A logo to support the efforts of moving the Wikimedia servers to green energy, based on an idea by Gnom.

Variant with “Wikimedia”:

Full, centered version on transparent background:

Square version on white background, use when the full version would leave too much whitespace in a square:

Sticker version with hairline for the cut:

Variant without “Wikimedia”:

Full, centered version on transparent background:

Square version on white background, use when the full version would leave too much whitespace in a square:

Sticker version with hairline for the cut:

Background

You can find the evolution of this logo in the replies to this tweet:

]]>
Screw this. screw-this 2017-03-13T23:30:00+01:00 Sebastian Morr sebastian@morr.cc

]]>
Disconnect disconnect 2017-03-07T22:00:00+01:00 Sebastian Morr sebastian@morr.cc Fetus with an ethernet cable instead of an umbilical cord

This was in parts inspired by Gravity’s marvellous womb scene.

]]>
Voctocat logo voctocat 2017-03-01T16:43:00+01:00 Sebastian Morr sebastian@morr.cc voctocat

A logo for media.ccc.de, the video/audio archive of the Chaos Computer Club and for the CCC Video Operation Center (C3VOC).

It depicts a lucky cat, which has been the mascot of the C3VOC for quite a while: They place lucky cats in the scenes to be recorded for testing pur(r)poses, to make sure the video stream did not accidentally freeze.

The visual style is inspired by GitHub’s Octocat mark, and the name Voctocat is a word play on that and on the abbreviation “VOC”. Thanks to Pecca for suggesting a tail shape! :)

Here’s an optimized version, suitable for immediate reuse and repursposing:

voctocat

If you’re interested in the logo’s development process, you can find some relevant information in the replies to this tweet:

]]>
The Hitchhiker's Guide to the Mandelbrot Set mandelbrot 2017-02-21T16:45:00+01:00 Sebastian Morr sebastian@morr.cc This is a work-in-progress interactive explanation. I'd love feedback! You can reach me at @blinry or sebastian@morr.cc.

Maybe you've seen an image of the Mandelbrot Set before. It's trippy, it's wonderous, it's beautiful. Here it is, have a look:

Click to zoom.

The Mandelbrot Set is a so-called fractal, which means it's self-similar. Zooming in, you can always find smaller copies of itself. Maybe you encountered some yourself when exploring the above image?

But what does this image mean? How is it constructed? It all begins with a sleeping bunny.

Part 1: What is the Mandelbrot Set?

The Mandelbrot Set is the result of repeated application of a very simple rule.

I'll attempt to explain to you how this works in a purely visual way, without any math. If, on the other hand, the math interests you, you can read up on this in the gray columns, but this is purely optional!

In our little world, there is a bunny, and a flag. You can place the flag everywhere you want. The bunny has its own free will. Psssst, it's still asleep! ... z z Z Z Z

The flag represents something which mathematicians call a complex number. It's just like a normal number, but is has a funny little extra number attached to it, which tells you how far it is above or below the number line. Mathematicians call it the imaginary component, and mark it with an i. For example, in the demo below, f = ?. Try placing the flag on -1.0+0.5i!

Drag the flag around. No surprises here.

The bunny always sleeps in the center of the lawn. But look, it woke up! It will now start to walk and hop around. The first thing it always does is to walk to the position of the flag. We call this movement Step 1.

The bunny's position is another complex number, which is initially b0 = 0. The walk movement is equivalent to adding f, so the next position will be b1 = f.

Pull the slider to Step 1, then drag the flag around.

Step 2 consists of two movements: First, the bunny will hop! It has a very particular way of hopping: It hops so that its angle to the right-direction doubles, and the distance to its sleeping position squares. Intuitively, if its distance to its sleeping position is less than 1, it will hop a little bit closer, and if the distance is larger than 1, it will hop a little bit farther away.

The hop movement is equivalent to squaring the current position. The square of a complex number can be calculated using the binomial formula and the fact that i2 = -1: (x + yi)2 = x2 + 2xyi + (yi)2 = x2 - y2 + 2xyi. The behaviour described on the left can be explained using the polar form of complex numbers.

Pull the slider to Step 1.5, then drag the flag around.

The second movement of Step 2 is another walk. The bunny will walk in the same direction and distance as it initially walked towards the flag:

After squaring b1, we add f again. This gives us b2 = b12+f.

And after that, the bunny just repeats these two movements: A hop, a walk, another hop, another walk. Let's look at how this looks for up to Step 4:

Let's get rid of the half-steps! From now on, we will treat the hopp-and-walk as a single movement.

Here's the same demo as before, but the the bunny directly goes full steps. The flag positions of this and the last demo are in sync, so you can compare the resulting path.

If we want to calculate the new position bi+1, and we know the old position bi, we can calculate bi+1 = bi2+f. This is the only formula needed to calculate the Mandelbrot Set!

And NOW it gets exciting! What if we let our bunny do many, many, steps? Like, 100 of them? Look:

Pull the slider to Step 100, then drag the flag around.
Can you find another spiral? A star? A triangle?

Whaaaat. Crazy patterns everywhere!

You can see that for some flag positions, the bunny escapes the dashed circle (into FREEEEDOM!), while for others, it stays inside. Let's do an experiment: In the next demo, if the bunny's path leads it to freedom, we will color the current flag position white. If the bunny stays inside the circle, we will color it black (because it's so sad!)

This is the definition of the Mandelbrot Set: It consists of all flag positions for which the bunny does not escape, if it does an infinite number of steps. Here, we can only approximate: If the bunny hasn't escaped after 100 steps, it's probably close to the Mandelbrot Set, and we will color the flag's position black.

Drag the flag around to scribble.

Why, helllll~o! You drew yourself a teeny tiny Mandelbrot set!

Let's add more color. So far, we only used white (for when the bunny escapes) and black (for when it doesn't). In the next demo, let's count how many steps it took the bunny to escape from the circle. If it took one step, we color the flag's position red. If it took two, we color it orange, and so on. You can see the colors we use below the step slider.

Drag the flag around to scribble.

And that's really all there is to it! Repeated application of a very simple rule, leading to incredibly complex detail.

Here's the last demo for now, which does all the drawing for you, and where you can zoom in. This one has a lot to explore.

Some things you can try:

  • What happens to the path at the centers of the outer "bulbs"?
  • Can you find out which period numbers are connected to each bulb? Do you see a relation to the "antennas" extending outward from that bulb?
  • Zoom in on one of the bulbs. What happens to the path at the centers of its sub-bulbs?
  • What is the period of the bulbs going "outward"? What happens if you follow a number of them?

Click to zoom. Middle-click to zoom out.

Planned content

More fractals, for example:

The Tricorn: bi+1 = (bi*)2+f

The Burning Ship: bi+1 = (|Re(bi)| + |Im(bi)|)2+f

What happens for other exponents than 2?

The Multibrot: bi+1 = bi6+f

And what the hell are Julia Sets? Follow me on Twitter to get updated when the full thing comes out: @blinry

Thanks for reading!

]]>
Emergency Card Template emergency-card 2017-02-16T12:04:00+01:00 Sebastian Morr sebastian@morr.cc I originally created this emergency and organ donation card in 2012. Recently, I gave it an update to translate it to English and make it as international as possible otherwise. I figured it might be useful for other people, so I’m providing a template here. Click on the image to open the SVG, you can edit it using a vector graphics program like Inkscape.

Emergency Card Template

Note that this template uses the Arial font, to be instantly usable as widely as possible. Personally, I use TeX Gyre Heros, a Helvetica clone.

The gray bar on the back side is for your signature. Let me know if you have any other suggestions!

]]>
Nifflers don't only love shiny things! niffler 2017-02-13T21:00:00+01:00 Sebastian Morr sebastian@morr.cc A niffler with a baby niffler in its pocket

]]>
Earth Balloon earth-balloon 2017-01-24T23:09:00+01:00 Sebastian Morr sebastian@morr.cc Earth Balloon

]]>
Holy Coffee holy-coffee 2017-01-11T10:23:00+01:00 Sebastian Morr sebastian@morr.cc Holy Coffee

Just dabbling around a bit with Krita

]]>
nordlichtbot nordlichtbot 2017-01-08T21:18:00+01:00 Sebastian Morr sebastian@morr.cc @nordlichtbot is a Twitter bot which picks a random YouTube video every few hours, runs the nordlicht tool on it and tweets the result. It’s currently used as an experimentation platform for new features, as a lazy CI framework and as a gallery of computer generated art.

Here’s an example tweet:

]]>
nordlicht nordlicht 2013-07-14T00:00:00+00:00 Sebastian Morr sebastian@morr.cc http://nordlicht.github.io ]]> A QA engineer walks into a bar... qa-engineer 2017-01-04T00:30:00+02:00 Sebastian Morr sebastian@morr.cc QA engineer comic

This is my first attempt to draw an analogue comic since a long time. The text is based on a tweet by Bill Sempf, and published here with his permission. For non-software people: QA means quality assurance.

The tweet sparked many more ideas on what the engineer could order, you can find an overview on Bill’s homepage.

]]>
Goodbye, CCH pixel-cch 2016-12-31T20:32:00+01:00 Sebastian Morr sebastian@morr.cc Pixel Art of the CCH

For five years, the Congress Centrum in Hamburg, Germany has been the venue for the annual Chaos Communication Congress, a four-day conference for hackers, artists, and open-minded folk. The building was opened in 1973, and while it is a little antiquated by now, its charm was loved by many. In 2017, the building will be closed for renovation for a few years, the older parts as well as the depicted front entrance will be removed. This image is dedicated to the old CCH, to say thanks for everything and goodbye!

To the left is one of the CCC’s logos, the rocket Fairy Dust.

Like everything on this site, the image is released under a Creative Commons license. Here’s a “high-res” version (23800x11200 pixels, 200 dpi at 3 meters width), in case you want to print a poster of it or something.

]]>
Was ist das für 1 Room? 1room 2016-12-12T00:00:00+00:00 Sebastian Morr sebastian@morr.cc This was my contribution to the game jam Ludum Dare 37, and my third participation in a row. The theme was “One Room”, and we worked in a three-person team. We also had to do this half-remotely, as I was still in Japan at the time, but that worked out pretty well! This turned out to be the most popular Ludum Dare game I ever did by far!

This time, we created a puzzle game about placing furniture in rooms. One beta tester described it as “Sokoban meets IKEA”! Many reviewers told us the puzzles are rather hard, and it seems consistently to take about an hour to complete. We invite you to give it a go! :)

Again, we used the LÖVE engine. You can download the game from the Ludum Dare website!

Title of "Was ist das für 1 Room?"

Screenshot of "Was ist das für 1 Room?"

Screenshot of "Was ist das für 1 Room?"

Development

Working remotely was challenging for the team – we talked via Skype a lot, but struggled to sync our sleeping cycles because of the different time zones. Even though, we had a lot of fun!

Recordings

rnlf recorded a nice playthrough. He got stuck on one of the more tricky levels, but told us he came back to it later and completed the game. :)

Comments

Wow, I löved everything about this game. I like (and make) optimization puzzles in general, but this one I liked a lot. Finally beat it after about an hour. The puzzles were challenging but not frustrating, and it was very satisfying every time I solved a level. –BoltKey

Arrrrrgh! Who the hell puts four book shelves and a Queen Size Bed in a single room with windows all around?! –Moritz

Results

This game definitely got the best ratings of every Ludum Dare game I’ve done so far. We’re especially proud of the “Fun” rating, where we reached the 8th place!

]]>
Mem Advent Calendar advent 2011-12-01T00:00:00+00:00 Sebastian Morr sebastian@morr.cc http://advent.morr.cc ]]> 20,000 Pixels Into the Sea 20000-pixels 2016-08-29T00:00:00+00:00 Sebastian Morr sebastian@morr.cc My second participation in a game jam, Ludum Dare 36. This time, I was part of a two-person team, which was crazily fun! The theme was “Ancient Technology”, and we made a sailing game, which semi-realistic wind mechanics! You sail around, rescue people, and discover some secrets! If you ever wanted to learn how to sail against the wind, we invite you to give it a go!

We used the (awesome) 2D game engine LÖVE, which uses the Lua programming language. You can download the game from the Ludum Dare website!

Title of "20,000 Pixels Into The Sea"

Screenshot of "20,000 Pixels Into The Sea"

Development

Fun fact: When we were implementing the sailing mechanics, we put hours into reading Wikipedia and other articles, because we were puzzled: Which forces led the boat to turn when you put the sail in the wind in a certain way? Then, we realized that boats have a rudder…

Recording

Alice kindly recorded a fun playthrough:

Comments

Wow! What a stellar entry! The sailing mechanics are interesting and very well made - I had so much fun navigating, and was constantly playing with how I tacked into the wind. Wonderful! –johnbjuice

This was a lot of fun to play! :) I like how you explained just enough about the mechanics for players to figure out the rest themselves. Getting the hang of how the sailing works just by experimenting a bit was really satisfying! –Waterman7

Results

Ludum Dare 36 was special because it was community-organized (instead of Mike doing all the work), and there were no ratings. This led to very constructive and in-depth feedback, which I liked!

]]>
Sand Child sand-child 2015-11-09T20:21:00+02:00 Sebastian Morr sebastian@morr.cc In late 2015, Twitter introduced the functionality to create polls. Jokingly, I wrote a “Choose Your Own Adventure”-style tweet and gave the readers two options on how the story should continue. When the series got more popular than I had imagined, I kept it running for over a month. Below, you can read all tweets which compose the story so far.

The motivation for this overview is that I’m starting a second season!

The story also inspired a piece of fan art by @lichtfeind:

Cover image by @lichtfeind

]]>
EU-Haiku eu-haiku 2016-04-29T18:25:00+02:00 Sebastian Morr sebastian@morr.cc A Pan-European haiku, containing one word in an official language from all EU countries:

Viens du trei four cúig.
Un dva tre vier pet seis hét.
Üks tnejn τρεις dört pięć.

I didn’t manage to get in Luxembourgish, but they also use French and German. Finnish has no one-syllable numbers :-D, but they also use Swedish.

Here is the breakdown:

1 – viens (Latvian)
2 – du (Lithuanian)
3 – trei (Romanian)
4 – four (English)
5 – cúig (Irish)

1 – un (French)
2 – dva (Czech/Slovak)
3 – tre (Italian/Danish/Swedish/Norwegian)
4 – vier (German/Dutch)
5 – pet (Bulgarian/Croatian/Slovenian)
6 – seis (Portuguese/Spanish)
7 – hét (Hungarian)

1 – üks (Estonian)
2 – tnejn (Maltese)
3 – τρεις (Greek)
4 – dört (Turkish)
5 – pięć (Polish)

If you want to try for yourself, there’s this handy list.

]]>
You're a Floor Lamp Now floor-lamp 2016-04-17T00:00:00+00:00 Sebastian Morr sebastian@morr.cc This is my contribution to Ludum Dare 35, the world’s largest game jam. You get a theme, and have 48 hours to create a game around this topic, from scratch, including artwork and sound effects. This was my first time ever I participated in such an event, and I don’t think it will be the last! :-)

This contest’s theme was “Shapeshift”. You’re a Floor Lamp Now is a strategic skill game with surprising mechanics. You can play it on the Ludum Dare website.

Title of "You're a Floor Lamp Now"

Screenshot of "You're a Floor Lamp Now"

Development

I wanted to do a web-based game, so I chose the JavaScript game engine CreateJS. It worked quite well, and I certainly learned a lot!

I had a lot of fun recording sounds for this game – everything you hear was created by recording sounds in the apartment, or by making funny noises with my mouth.

Comments

I’m happy with my first day as a floor lamp. It’s good to be of service to mousekind. – Hectigo

One of the most memorable and unique games I’ve seen in Compo so far, good job overall. Hilarious concept with great theme interpretation. Graphics are eye-candy, audio is simple but funny and fits the game well and the mood is just awesome. I enjoyed it a lot and appreciated the amount of polish you put in it. – Pietro Ferrantelli

Results

Reviewers praised the game as very original, and many enjoyed the sound effects ;) I was really proud of the “Humor” rating!

]]>
almightree almightree 2012-08-18T00:00:00+00:00 Sebastian Morr sebastian@morr.cc clear

  • almightree
    • What is it?
      • A Javascript plugin for jQuery >= 1.8.0
      • It makes large nested lists (like this one) easier to navigate
        • Yep, it powers this page!
      • Free Software (GPLv2+)
    • Features
      • Folding/Unfolding
        • Click on a node to fold or unfold it, if it has children
        • By default, only the first two layers are visible, the rest is folded
      • Real-time search
        • Type in the search bar at the top to filter the tree
        • The search term and the URL’s hash are kept in sync. Observe: #features
          • Consequence: A sane URL will bring up relevant material for a long time
            • Even when new content is added or the structure changes
        • Search is always case-insensitive
        • Special characters
          • /: separates terms, which are searched for one after the other
            • For example, if you want all occurences of “node” in this “Features” section, use #features/node
          • -: any non-alphanumeric stuff
        • Also supports regular expressions!
          • For example, you can search for crossword patterns: #c…s…d
          • Or, words with at least 12 characters? #[a-z]{12,}
      • Intelligent choice of the headline
        • The lowest node with more than one visible child will be displayed as the headline
        • It’s parents will be displayed as a breadcrumb navigation (example)
      • Zooming
        • Click the bullet point in front of a node to search for it’s content
          • In most cases, that means “focusing” on its content (a feature called “hoisting” in many outliners)
      • Undo/Redo
        • Searches performed by clicking (zooms, crumb navigation) are undoable by clicking your brower’s “back” button
    • Setup
      • Complete minimal example
      • Step 1: Take a nested HTML list, and tag it with a unique id, for example #almightree
        • Of course, you can (and should ;-) generate the lists using Markdown
      • Step 2: Download almightree and extract it somewhere
      • Step 3: Insert the following lines into your HTML:
        • <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
          • … if you haven’t included jQuery already
        • <script src="path/to/jquery.almightree.js"></script>
          • … to include the almightree plugin
        • <script>$(function(){ $("#almightree").almightree({search: "#almightree-search"}); });</script>
          • … to activate the plugin on the <ul> with the id #almightree
          • The search option makes the <input> with the specified id interactive
        • <link rel="stylesheet" href="path/to/almightree.css">
          • This is a default set of style rules
          • If you want to make changes, do it in an additional CSS file to keep the default CSS upgradable
      • Step 4: Report bugs and make feature requests! <3
    • History
]]>
LilyPond vs earworms lilypond-vs-earworms 2015-05-19T00:00:00+00:00 Sebastian Morr sebastian@morr.cc If an earworm gets too bad, I sometimes try to get rid of it by typesetting the melody in LilyPond, a high-quality music engraving program. Can you find out what all of these are? Solutions below.

These are the themes from “Path of The Wind” (from My Neighbor Totoro), the Sax Guy loop, and the Star Trek: The Next Generation intro.

]]>
sike mama sike-mama 2015-10-26T15:30:00+01:00 Sebastian Morr sebastian@morr.cc This is a translation of Andy Weir’s beautiful short story The Egg to a constructed language called Toki Pona, which has a vocabulary of only 120 words and a very simple grammar. Miv was so kind to patiently go over a preliminary version of this text and to fix all of my silly mistakes. Thanks!

Andy kindly allowed me to display the Toki Pona version side-by-side to the English original. For convenience, I also included a Toki Pona-only version below.

The Egg sike mama
   
You were on your way home tenpo pi tawa tomo sina la
when you died. sina moli.
   
It was a car accident. tan moli li pakala pi tomo tawa.
Nothing particularly remarkable, ona li suli ala.
but fatal nonetheless. taso sina moli.
You left behind a wife and two children. sina jo e meli e jan lili tu.
It was a painless death. sina pilin ala e pakala.
The EMTs tried their best to save you, jan sona sijelo li pali mute.
but to no avail. taso ona li weka ala e moli.
Your body was so utterly shattered moli ni li pona tawa sina tan ni:
you were better off, trust me. sijelo sina li pakala mute mute.
   
And that’s when you met me. tenpo ni la sina kama tawa mi.
   
“What… what happened?” You asked. “Where am I?” sina toki pi wile sona e ni: “seme… seme li kama? mi lon seme?”
   
“You died,” I said, matter-of-factly. mi toki lon e ni: “sina moli.”
No point in mincing words. mi wile toki e ijo lon.
   
“There was a… a truck “mi lukin e… e tomo tawa suli.
and it was skidding…” ona li tawa nasa…”
   
“Yup,” I said. mi toki e ni: “lon.”
   
“I… I died?” “mi… mi moli anu seme?”
   
“Yup. But don’t feel bad about it. mi toki e ni: “moli. taso o pilin ike ala tawa ni.
Everyone dies,” I said. jan ali li moli.”
   
You looked around. sina lukin sike.
There was nothingness. ma ala li lon ni.
Just you and me. sina taso en mi taso li lon.
“What is this place?” You asked. sina toki pi wile sona e ni: “ma ni li seme?
“Is this the afterlife?” ona li ma pi jan moli anu seme?”
   
“More or less,” I said. mi toki e ni: “ni li sama lon.”
   
“Are you god?” You asked. sina toki pi wile sona e ni: “sina jan sewi anu seme?”
   
“Yup,” I replied. “I’m God.” mi toki e ni: “lon. mi jan sewi.”
   
“My kids… my wife,” you said. sina toki e ni: “jan lili mi… meli mi…”
   
“What about them?” “seme pi ona mute li suli?”
   
“Will they be all right?” “ona mute li pilin pona anu seme?”
   
“That’s what I like to see,” I said. mi toki e ni: “ni li pona tawa mi.
“You just died tenpo pini lili la sina moli.
and your main concern is for your family. taso sina pilin pi kulupu mama sina.
That’s good stuff right there.” sina jan pona.”
   
You looked at me with fascination. sina lukin pi pilin wawa e mi.
To you, I didn’t look like God. mi lukin ala sama jan sewi tawa sina.
I just looked like some man. mi lukin sama jan ijo.
Or possibly a woman.  
Some vague authority figure, maybe. ken la mi lukin sama jan lawa.
More of a grammar school teacher mi lukin sama jan pi pana sona.
than the almighty. mi lukin ala sama jan pi wawa ali.
   
“Don’t worry,” I said. mi toki e ni: “o pilin ike ala.
“They’ll be fine. tenpo kama la ona mute li pilin pona.
Your kids will remember you jan lili sina li pilin e ni:
as perfect in every way. sina pona mute.
They didn’t have time ona li jo ala e tenpo tawa ni:
to grow contempt for you. ona li pilin ike tawa sina.
Your wife will cry on the outside, meli sina li pana e telo oko.
but will be secretly relieved. insa taso la ona li pilin pona.
To be fair, mi pilin e ni:
your marriage was falling apart. wan pi sina en ona li kama tu.
If it’s any consolation, ken la sina pilin pona tawa ni:
she’ll feel very guilty ona li pilin ike tawa ni:
for feeling relieved.” ona li pilin pona tawa weka sina.”
   
“Oh,” you said. sina toki e ni: “a.
“So what happens now? tenpo ni la seme li kama?
Do I go to heaven or hell or something?” mi tawa ma moli pona anu ma moli ike anu seme?”
   
“Neither,” I said. mi toki e ni: “ala.
“You’ll be reincarnated.” tenpo kama la mi sin e lon sina.”
   
“Ah,” you said. sina toki e ni: “a.
“So the Hindus were right,” jan pi nasin sewi Intu li sona pona.”
   
“All religions are right in their own way,” I said. mi toki e ni: “nasin sewi ali li sona pona.
“Walk with me.” o tawa poka mi.”
   
You followed along sina tawa poka mi.
as we strode through the void. mi tu li tawa lon ma ala.
“Where are we going?” “mi tu li tawa ma seme?”
   
“Nowhere in particular,” I said. mi toki e ni: “mi tu li tawa ma ijo.
“It’s just nice to walk while we talk.” taso mi tu li toki la tawa li pona tawa mi.”
   
“So what’s the point, then?” You asked. sina toki pi wile sona e ni: “sina pali e ni tan seme?
“When I get reborn, sina sin e lon mi la
I’ll just be a blank slate, right? mi kama jan pi sona ala anu seme?
A baby. mi jan lili.
So all my experiences and everything I did in this life ali pi lon mi en pali ali mi
won’t matter.” li suli ala.”
   
“Not so!” I said. mi toki e ni: “ona li suli!
“You have within you all the knowledge and experiences sina jo e sona
of all your past lives. pi lon ali sina lon insa sina.
You just don’t remember them right now.” taso tenpo ni la sina sona ala e ona.”
   
I stopped walking and took you by the shoulders. mi pini e tawa mi li pilin e sewi pi monsi sina.
“Your soul is more magnificent, beautiful, “sina ken ala sona e ali ni:
and gigantic than you can possibly imagine. kon sina li pona mute, li suli mute.
A human mind can only contain a tiny fraction sona jan li ken jo e ijo lili lili wan taso
of what you are. pi kon suli sina.
It’s like sticking your finger in a glass of water ni li sama ni: sina pana e palisa luka sina tawa poki tan ni:
to see if it’s hot or cold. sina wile sona e ni: telo li lete anu seli?
You put a tiny part of yourself into the vessel, sina pana e ijo lili lili wan sina tawa poki.
and when you bring it back out, sina weka e ona tan poki la
you’ve gained all the experiences it had. ona li pana e sona ali pi poki ni tawa sina.
   
“You’ve been in a human for the last 48 years, tenpo suli la sina lon sijelo jan.
so you haven’t stretched out yet and felt sina pilin ala e ni:
the rest of your immense consciousness. kon sina li suli mute.
If we hung out here for long enough, mi tu li awen lon ni la
you’d start remembering everything. sina kama sona sin e ali.
But there’s no point taso ni li pona ala:
to doing that between each life.” tenpo ali la mi tu li awen.”
   
“How many times have I been reincarnated, then?” “tenpo pi mute seme la sina sin e lon mi?”
   
“Oh lots. Lots and lots. mi toki e ni: “a. tenpo mute. tenpo mute mute.
An in to lots of different lives.” I said. mi pana sijelo pi jan ante mute.
“This time around, tenpo ni pi kama lon la
you’ll be a Chinese peasant girl sina meli lili Sonko li pali e kili e soweli
in 540 AD.” li lon tenpo pini pini.”
   
“Wait, what?” You stammered. sina toki pilin e ni: “a, seme?
“You’re sending me back in time?” sina pana e mi tawa tenpo pini anu seme?”
   
“Well, I guess technically. “a, ni li sama lon.
Time, as you know it, sina sona e tenpo.
only exists in your universe. taso tenpo li lon ma suli sina taso.
Things are different where I come from.” ma mi la ijo li ante.”
   
“Where you come from?” You said. sina toki e ni: “ma sina?”
   
“Oh sure,” I explained mi toki pona: “a, lon.
“I come from somewhere. mi kama tan ma ijo.
Somewhere else. mi kama tan ma ante.
And there are others like me. jan sewi ante li lon ma ni.
I know you’ll want to know mi sona e ni: sina wile sona e ni:
what it’s like there, ma ni li seme lukin?
but honestly you wouldn’t understand.” taso mi toki e ni tawa sina la sina ken ala sona e ni.”
   
“Oh,” you said, a little let down. sina toki pi ike lili e ni: “a.
“But wait. taso o kute e mi.
If I get reincarnated to other places in time, mi tawa tenpo ante la
I could have interacted with myself at some point.” ni li ken: tenpo ijo la mi toki tawa mi.”
   
“Sure. Happens all the time. “lon. tenpo mute la ni li kama.
And with both lives only aware of their own lifespan sina tu li sona e lon sina wan taso la
you don’t even know it’s happening.” sina sona ala e ni: sina toki tawa sina.”
   
“So what’s the point of it all?” “seme li tan ali?”
   
“Seriously?” I asked. “Seriously? mi toki e ni: “a, sina toki pi wile sona e ni?
You’re asking me for the meaning of life? sina wile sona e ni: seme li tan ali?
Isn’t that a little stereotypical?” jan ali li wile sona e ni!”
   
“Well it’s a reasonable question,” you persisted. sina toki pi awen pona e ni: “mi wile sona e tan!”
   
I looked you in the eye. mi lukin e oko sina.
“The meaning of life, “tan ali,
the reason I made this whole universe, en tan pi ma suli ni,
is for you to mature.” li ni: sina kama sona.
   
“You mean mankind? “sina toki e ijo pi jan ali anu seme?
You want us to mature?” sina wile ala wile e ni: mi mute li kama sona?”
   
“No, just you. “wile ala. mi wile e ni: sina taso kama sona.
I made this whole universe for you. mi pali e ma suli ni tawa sina taso.
With each new life you grow and mature sina lon sin la sina kama suli
and become a larger and greater intellect.” li kama sona.”
   
“Just me? What about everyone else?” “mi taso? sina pali ala pali e ma suli tawa jan ante?”
   
“There is no one else,” I said. mi toki e ni: “jan ante li lon ala.
“In this universe, there’s just you and me.” sina taso en mi taso li lon ma suli ni”
   
You stared blankly at me. sina lukin pi wawa ala e mi.
“But all the people on earth…” “taso jan ali pi lon ma sike…”
   
“All you. Different incarnations of you.” “jan ali li sina. jan ali li sina ante.”
   
“Wait. I’m everyone!?” “o awen! mi jan ali!?”
   
“Now you’re getting it,” mi toki e ni: “lon. tenpo ni la sina sona.”
I said, with a congratulatory slap on the back. mi pilin e sewi pi monsi sina tan ni: mi pilin pona.
   
“I’m every human being who ever lived?” “tenpo pini la mi jan ali ala jan ali?”
   
“Or who will ever live, yes.” “jan ali. tenpo kama kin la sina jan ali.”
   
“I’m Abraham Lincoln?” “mi jan Epapan Linkon tan seme?”
   
“And you’re John Wilkes Booth, too,” I added. mi toki e ni: “sina jan Jon Wike Pu kin.”
   
“I’m Hitler?” You said, appalled. sina toki ike e ni: “mi jan Itala tan seme?”
   
“And you’re the millions he killed.” “jan Itala li moli e jan mute mute mute. sina jan mute ni kin.”
   
“I’m Jesus?” “mi jan Jesu tan seme?”
   
“And you’re everyone who followed him.” “jan mute li tawa poka ona. sina jan mute ni kin.”
   
You fell silent. sina pini e toki sina.
   
“Every time you victimized someone,” I said, mi toki e ni: “sina pakala e jan la
“you were victimizing yourself. sina pakala e sina.
Every act of kindness you’ve done, sina pali e pona tawa jan la
you’ve done to yourself. sina pali e pona tawa sina.
Every happy and sad moment ever experienced by any human jan ali li pilin pona anu pilin ike la
was, or will be, experienced by you.” sina pilin sama.”
   
You thought for a long time. tenpo suli la sina pilin e ni.
   
“Why?” You asked me. “Why do all this?” sina toki pi wile sona e ni: “sina pali e ni tan seme?”
   
“Because someday, you will become like me. “tan li ni: tenpo ijo la sina kama sama mi.
Because that’s what you are. sina ni:
You’re one of my kind. sina sama mi.
You’re my child.” sina jan lili mi.”
   
“Whoa,” you said, incredulous. sina toki pilin e ni: “a!
“You mean I’m a god?” mi jan sewi anu seme?”
   
“No. Not yet. “tenpo ni la sina jan sewi ala.
You’re a fetus. sina jan sewi pi open ala.
You’re still growing. sina suli kin e sina.
Once you’ve lived every human life throughout all time, tenpo ali la sina jo lon pi jan ali.
you will have grown enough to be born.” ni li kama la sina suli li open e lon sina.”
   
“So the whole universe,” you said, “it’s just…” sina toki e ni: “ma suli ali li …”
   
“An egg.” I answered. mi toki kin e ni: “sike mama taso.
“Now it’s time for you to move on to your next life.” tenpo ni la mi wile e ni: mi sin e lon sina.”
   
And I sent you on your way. mi pana e sina tawa nasin sina.

Toki Pona-only version

sike mama

tenpo pi tawa tomo sina la sina moli.

tan moli li pakala pi tomo tawa. ona li suli ala. taso sina moli. sina jo e meli e jan lili tu. sina pilin ala e pakala. jan sona sijelo li pali mute. taso ona li weka ala e moli. moli ni li pona tawa sina tan ni: sijelo sina li pakala mute mute.

tenpo ni la sina kama tawa mi.

sina toki pi wile sona e ni: “seme… seme li kama? mi lon seme?”

mi toki lon e ni: “sina moli.” mi wile toki e ijo lon.

“mi lukin e… e tomo tawa suli. ona li tawa nasa…”

mi toki e ni: “lon.”

“mi… mi moli anu seme?”

mi toki e ni: “moli. taso o pilin ike ala tawa ni. jan ali li moli.”

sina lukin sike. ma ala li lon ni. sina taso en mi taso li lon. sina toki pi wile sona e ni: “ma ni li seme? ona li ma pi jan moli anu seme?”

mi toki e ni: “ni li sama lon.”

sina toki pi wile sona e ni: “sina jan sewi anu seme?”

mi toki e ni: “lon. mi jan sewi.”

sina toki e ni: “jan lili mi… meli mi…”

“seme pi ona mute li suli?”

“ona mute li pilin pona anu seme?”

mi toki e ni: “ni li pona tawa mi. tenpo pini lili la sina moli. taso sina pilin pi kulupu mama sina. sina jan pona.”

sina lukin pi pilin wawa e mi. mi lukin ala sama jan sewi tawa sina. mi lukin sama jan ijo. ken la mi lukin sama jan lawa. mi lukin sama jan pi pana sona. mi lukin ala sama jan pi wawa ali.

mi toki e ni: “o pilin ike ala. tenpo kama la ona mute li pilin pona. jan lili sina li pilin e ni: sina pona mute. ona li jo ala e tenpo tawa ni: ona li pilin ike tawa sina. meli sina li pana e telo oko. insa taso la ona li pilin pona. mi pilin e ni: wan pi sina en ona li kama tu. ken la sina pilin pona tawa ni: ona li pilin ike tawa ni: ona li pilin pona tawa weka sina.”

sina toki e ni: “a. tenpo ni la seme li kama? mi tawa ma moli pona anu ma moli ike anu seme?”

mi toki e ni: “ala. tenpo kama la mi sin e lon sina.”

sina toki e ni: “a. jan pi nasin sewi Intu li sona pona.”

mi toki e ni: “nasin sewi ali li sona pona. o tawa poka mi.”

sina tawa poka mi. mi tu li tawa lon ma ala. “mi tu li tawa ma seme?”

mi toki e ni: “mi tu li tawa ma ijo. taso mi tu li toki la tawa li pona tawa mi.”

sina toki pi wile sona e ni: “sina pali e ni tan seme? sina sin e lon mi la mi kama jan pi sona ala anu seme? mi jan lili. ali pi lon mi en pali ali mi li suli ala.”

mi toki e ni: “ona li suli! sina jo e sona pi lon ali sina lon insa sina. taso tenpo ni la sina sona ala e ona.”

mi pini e tawa mi li pilin e sewi pi monsi sina. “sina ken ala sona e ali ni: kon sina li pona mute, li suli mute. sona jan li ken jo e ijo lili lili wan taso pi kon suli sina. ni li sama ni: sina pana e palisa luka sina tawa poki tan ni: sina wile sona e ni: telo li lete anu seli? sina pana e ijo lili lili wan sina tawa poki. sina weka e ona tan poki la ona li pana e sona ali pi poki ni tawa sina.

tenpo suli la sina lon sijelo jan. sina pilin ala e ni: kon sina li suli mute. mi tu li awen lon ni la sina kama sona sin e ali. taso ni li pona ala: tenpo ali la mi tu li awen.”

“tenpo pi mute seme la sina sin e lon mi?”

mi toki e ni: “a. tenpo mute. tenpo mute mute. mi pana sijelo pi jan ante mute. tenpo ni pi kama lon la sina meli lili Sonko li pali e kili e soweli li lon tenpo pini pini.”

sina toki pilin e ni: “a, seme? sina pana e mi tawa tenpo pini anu seme?”

“a, ni li sama lon. sina sona e tenpo. taso tenpo li lon ma suli sina taso. ma mi la ijo li ante.”

sina toki e ni: “ma sina?”

mi toki pona: “a, lon. mi kama tan ma ijo. mi kama tan ma ante. jan sewi ante li lon ma ni. mi sona e ni: sina wile sona e ni: ma ni li seme lukin? taso mi toki e ni tawa sina la sina ken ala sona e ni.”

sina toki pi ike lili e ni: “a. taso o kute e mi. mi tawa tenpo ante la ni li ken: tenpo ijo la mi toki tawa mi.”

“lon. tenpo mute la ni li kama. sina tu li sona e lon sina wan taso la sina sona ala e ni: sina toki tawa sina.”

“seme li tan ali?”

mi toki e ni: “a, sina toki pi wile sona e ni? sina wile sona e ni: seme li tan ali? jan ali li wile sona e ni!”

sina toki pi awen pona e ni: “mi wile sona e tan!”

mi lukin e oko sina. “tan ali, en tan pi ma suli ni, li ni: sina kama sona.

“sina toki e ijo pi jan ali anu seme? sina wile ala wile e ni: mi mute li kama sona?”

“wile ala. mi wile e ni: sina taso kama sona. mi pali e ma suli ni tawa sina taso. sina lon sin la sina kama suli li kama sona.”

“mi taso? sina pali ala pali e ma suli tawa jan ante?”

mi toki e ni: “jan ante li lon ala. sina taso en mi taso li lon ma suli ni”

sina lukin pi wawa ala e mi. “taso jan ali pi lon ma sike…”

“jan ali li sina. jan ali li sina ante.”

“o awen! mi jan ali!?”

mi toki e ni: “lon. tenpo ni la sina sona.” mi pilin e sewi pi monsi sina tan ni: mi pilin pona.

“tenpo pini la mi jan ali ala jan ali?”

“jan ali. tenpo kama kin la sina jan ali.”

“mi jan Epapan Linkon tan seme?”

mi toki e ni: “sina jan Jon Wike Pu kin.”

sina toki ike e ni: “mi jan Itala tan seme?”

“jan Itala li moli e jan mute mute mute. sina jan mute ni kin.”

“mi jan Jesu tan seme?”

“jan mute li tawa poka ona. sina jan mute ni kin.”

sina pini e toki sina.

mi toki e ni: “sina pakala e jan la sina pakala e sina. sina pali e pona tawa jan la sina pali e pona tawa sina. jan ali li pilin pona anu pilin ike la sina pilin sama.”

tenpo suli la sina pilin e ni.

sina toki pi wile sona e ni: “sina pali e ni tan seme?”

“tan li ni: tenpo ijo la sina kama sama mi. sina ni: sina sama mi. sina jan lili mi.”

sina toki pilin e ni: “a! mi jan sewi anu seme?”

“tenpo ni la sina jan sewi ala. sina jan sewi pi open ala. sina suli kin e sina. tenpo ali la sina jo lon pi jan ali. ni li kama la sina suli li open e lon sina.”

sina toki e ni: “ma suli ali li …”

mi toki kin e ni: “sike mama taso. tenpo ni la mi wile e ni: mi sin e lon sina.”

mi pana e sina tawa nasin sina.

]]>
Stilles Wasser im Blindtest wassertest 2015-10-12T20:03:00+02:00 Sebastian Morr sebastian@morr.cc Blindtests sind toll! Ich habe in der Vergangenheit schon Blindtests von Vollmilchschokoladen, Colasorten und Koffeinbrausen gemacht. Vor einigen Wochen stieß ich dann auf diesen Tweet von dome, in dem es um die Verkostung von stillem Wasser ging. Ich beschloss, einen ähnlichen Test durchzuführen, denn ich hatte in Restaurants schon öfter unangenehm salziges Wasser serviert bekommen, und war dementsprechend neugierig darauf, wie groß die geschmacklichen Unterschiede sein würden.

Nach der Durchführung wurden Rufe nach Open Data laut, diese Dokumentation ist die direkte Folge.

Noch ein Hinweis: Klar, stilles Wasser in Flaschen ist teuer, produziert Plastikabfall und unterliegt in Deutschland weniger strengen Kontrollen als Leitungswasser. Wenn nichts dagegenspricht, bleibt bei Leitungswasser! Und nun viel Spaß beim Lesen!

Fast alle Flaschen Wasser, die am Test teilnahmen

Fragestellung

Welches stille Wasser ist das leckerste?

tl;dr

Der Preis von Wasser scheint grundsätzlich invers mit der Geschmacksneutralität zu korrelieren. Anders formuliert: Wenn man Wasser mag, das nach nichts schmeckt, kann man mit den Hausmarken der großen Supermärkte (welche momentan 13 Cent pro Liter kosten) nichts falsch machen.

Methode

  1. Die lokalen Supermärkte nach sämtlichen Marken stillen Wassers abgrasen, die sich finden lassen. In diesem Fall umfasste die Auswahl (tatsächlich, und unbeabsichtigterweise) 42 Sorten, plus das örtliche Trinkwasser.

    Einkaufswagen mit etlichen Flaschen Wasser

  2. Jede Wassersorte in einen eigenen Plastikbecher einschenken, auf dessen Unterseite der Name der Sorte steht.

    Abfüllen des Wassers in Plastikbecher

  3. Becher mischen, dann zu Buchführungszwecken seitlich auf jeden Becher eine fortlaufende Indexnummer schreiben.
  4. Prost! Für jede Wassersorte soviele sensorische Eindrücke wie gewünscht notieren (gustatorische, olfaktorische, …). Dabei auch die Indexnummer festhalten, und eine Gesamtnote vergeben. Hinweis: Bei 43 Bechern á 200 ml ergibt sich eine Gesamtmenge von 8,6 Litern Wasser, die, sollte man sie auf einmal zu sich nehmen, definitiv lebensbedrohlich sein kann. Teamwork wird daher empfohlen. In diesem Fall oblag die Durchführung des Tests zwei Personen, Person A und Person B. Person A verwendete ein Schulnotensystem von 0 bis 15 Punkten, während Person B auf einer Skala von -3 (doppelplusschlecht) bis 3 (doppelplusgut) bewertete.

    43 Plastikbecher mit Laptop

  5. Optional: Das obere Quartil der Sorten nochmals durchgehen und auf einer höher angesetzten Skala zu differezieren versuchen.
  6. Die Auflösung. In der Bewertungstabelle die Indexnummern den Wassersorten zuordnen. Folgenreiche Schlüsse ziehen und die bisherigen Lebensentscheidungen kritisch hinterfragen.

Resultate

Folgende Liste ist nach einer gemittelten Gesamtbewertung sortiert, die sich als Durchschnitt aus den Bewertungen von Person A und Person B berechnet. Zur Erinnerung: Person A verwendete eine Skala von 0 bis 15, Person B eine Skala von -3 bis 3, die Gesamtbewertung ist in Prozent zwischen 0 und 100 angegeben. In sämtlichen Skalen sind höhere Werte besser.

Sämtliche Ergebnisse sind außerdem auch im CSV-Format verfügbar.

  • Christinen Carat (von Real, 0.54 EUR/L): 97%

    • A: Ganz leicht trocken, sonst nix. (14)
    • B: Nix! (3)
  • Surf (von Norma, 0.13 EUR/L): 95%

    • A: Sehr schön neutral, nicht trocken, richtig gut! (13.5)
    • B: Schmeckt nach nix, frisch (3)
  • Nestle Pure Life (von Real, 0.33 EUR/L): 93%

    • A: Sehr schön neutral (13)
    • B: Bisschen kratzig, ansonsten lecker und neutral (3)
  • Elitess Marinius-Quelle (von Penny, 0.13 EUR/L): 87%

    • A: Alte Pizza, erfrischend-neutral, nicht ganz geschmacklos, mysteriös (11)
    • B: Süß, weich, rund, gut (3)
  • Quellbrunn Claudius-Quelle (von Aldi, 0.13 EUR/L): 85%

    • A: Gar nichts, ganz bisschen trocken (13)
    • B: Frisch und weich, ganz bisschen süß (2)
  • Fiji (von Edeka, 3.38 EUR/L): 83%

    (Hinweis: Dieses Getränk hat einen so starken Geschmack, dass es eigentlich nicht als “stilles Wasser” bezeichnet werden kann. Die Bewertungen sind eher außerhalb der Reihe zu verstehen.)

    • A: Wie Alkohol, aber ohne scharf im Hals zu sein. Igitt. Richtig süß. Nicht für jeden Tag. Lustig. (15)
    • B: Plastik? Gummi? Starker Eigengeschmack, eingeweichtes Gummibärchen (1)
  • babylove (von dm, 1.67 EUR/L): 83%

    • A: Bisschen Geschmack. Eigentlich ganz lecker (10)
    • B: Rein und neutral und weich (3)
  • ja! (von Sky, 0.13 EUR/L): 83%

    • A: Bisschen metallisch (10)
    • B: Wirklich NIX! Erfrischend und weich! Wie ein Quellfluss durch eine grüße Wiese! (3)
  • Apollinaris Vio (von Penny, 0.33 EUR/L): 83%

    • A: Schön neutral, “aber jo weiß ich auch nicht” (10)
    • B: Nix. Nix ist gut. (3)
  • Vitalbrunnen Naturalis (von Netto, 0.13 EUR/L): 82%

    • A: Gar nix (12)
    • B: Ganz leicht metallisch, sonst sehr neutral (2)
  • Gut und Günstig (von Edeka, 0.13 EUR/L): 80%

    • A: Erfrischend. Neutral. Nix. (9)
    • B: Etwas säuerlich, aber sonst nix (3)
  • Vilsa (von Real, 0.46 EUR/L): 78%

    • A: Sauer, trocken, insgesamt neutral und frisch (11)
    • B: Etwas sauer, sonst gut (2)
  • Saskia (von Lidl, 0.13 EUR/L): 75%

    • A: Neutral, bisschen süßlich, gut! (10)
    • B: Bisschen süßlich, nicht besonders erfrischend (2)
  • Unser Norden (von Sky, 0.39 EUR/L): 75%

    • A: Nix. (10)
    • B: Ganz leicht sauer, sonst lecker und weich (2)
  • Urstromtaler Naturell (von Netto, 0.33 EUR/L): 75%

    • A: Charakterlos (10)
    • B: Ziemlich langweilig, neutral (2)
  • Black Forest (von Real, 0.59 EUR/L): 73%

    • A: Erfrischend, neutral (12)
    • B: Sehr süß! Weich (1)
  • Vittel (von Penny, 0.39 EUR/L): 73%

    • A: Sehr sauer (7)
    • B: Ziemlich ziemlich neutral, ganz leicht angenehm säuerlich (3)
  • Sawell (von Netto, 0.25 EUR/L): 73%

    • A: Bisschen süß, bisschen trocken (7)
    • B: Erfrischend, lecker? Gaaanz bisschen süß? (3)
  • Tip (von Real, 0.13 EUR/L): 72%

    • A: Erfrischend, bisschen sauer (9)
    • B: Frisch, leicht metallig aber gar nicht schlecht. Weich. (2)
  • Bismarck (von Real, 0.65 EUR/L): 70%

    • A: Vielleicht süßlicher Geschmack, nicht so erfrischend (11)
    • B: Vorgeschmack süß, Nachgeschmack etwas sauer, interessant? (1)
  • Volvic (von Real, 0.59 EUR/L): 65%

    • A: Pieksig auf der Zunge, unangenehm, schon neutral (7)
    • B: Süß und abgekocht, nichts auf Dauer, aber so ganz erträglich (2)
  • Adelholzener (von Real, 0.65 EUR/L): 62%

    • A: Schwach metallisch, nicht erfrischend (6)
    • B: Süß und recht neutral. Leiiicht oszillierend in alle Richtungen. Spannend. (2)
  • Harzer Bergbrunnen extra still (von Real Getränkemarkt, 0.26 EUR/L): 57%

    • A: Geschmacksneutral, säuerlich (7)
    • B: Etwas scharf, erfrischend, etwas sauer, sonst ohne Eigenschaften (1)
  • Magnus (von Edeka, 0.56 EUR/L): 57%

    • A: Hart, Kalk. Wie das Schwimmbad bei Oma. (7)
    • B: Etwas staubig, kratzt im Hals, sauer Nachgeschmack, sonst angenehm neutral (1)
  • Frische Brise Reinbecker Klosterquelle (von Sky, 0.25 EUR/L): 48%

    • A: Bisschen metallisch (7)
    • B: Leicht abgestanden, metallisch (0)
  • Leitungswasser (aus Schleswig-Holstein, 0.00165 EUR/L): 42%

    • A: Erst neutral, Nachgeschmack RICHTIG EKELIG (0)
    • B: Ein Hauch süß, Baby-Wasser (2)
  • Contrex (von Penny, 0.49 EUR/L): 37%

    • A: Sauer und Stumpf. Könnte nicht viel von trinken. (6)
    • B: Sauer, staubig, schlecht. (-1)
  • Aqua Nordic (von Edeka, 0.33 EUR/L): 37%

    • A: Salzig, metallisch (6)
    • B: Langweilig, neutral, “hart”, Nachgeschmack ist metallisch (-1)
  • evian (von Real, 0.59 EUR/L): 33%

    • A: Bisschen metallisch und trocken, sonst kein Charakter (5)
    • B: Leicht metallisch, kratzig (-1)
  • Bleib Gesund (von Rossmann, 0.69 EUR/L): 33%

    • A: Bisschen trocken, nicht erfrischend, bisschen süßlich. Nicht gut als Wasser. (5)
    • B: Nicht erfrischend, etwas salzig, staubig (-1)
  • Vitrex (von Edeka, 0.33 EUR/L): 32%

    • A: Ih! Sauer, scharf, schmeckt mir nicht (2)
    • B: Staubig, etwas sauer, etwas metallisch (0)
  • Real Quality (von Real, 0.23 EUR/L): 28%

    • A: Sauer, trocken, abgestanden, nicht gut (6)
    • B: Bisschen sauer-metallisch, abgestanden (-2)
  • Aqua Mia (von REWE, 0.33 EUR/L): 28%

    • A: Richtig staubig (1)
    • B: Abgestanden, etwas süß. (0)
  • Quellbrunn Werretaler-Quelle (von Aldi, 0.22 EUR/L): 27%

    • A: Irgendwie süß, schwebt auf der Zunge. Nicht erfrischend genug. (8)
    • B: Ekelig metallisch, bah. Bisschen süß. (-3)
  • Harzer Bergbrunnen still (von Real Getränkemarkt, 0.48 EUR/L): 27%

    • A: Sauer halt (3)
    • B: Stark sauer! Aber nicht uninteressant! (-1)
  • Carolinen natur-elle (von Real, 0.46 EUR/L): 22%

    • A: Total salzig (4)
    • B: Rostnagel, Nachgeschmack ekelig (-2)
  • Extaler Mineralquell (von Real, 0.34 EUR/L): 22%

    • A: Sehr neutral, ganz bisschen säuerlich, bisschen trocken, pritzelt (4)
    • B: Leicht sauer, stark metallisch (-2)
  • Hella (von Real, 0.51 EUR/L): 22%

    • A: Staubig muffig, aber nicht doll (4)
    • B: Stark metallisch, langweilig? (-2)
  • Vöslauer (von dm, 0.65 EUR/L): 18%

    • A: Nicht viel von, metallisch (3)
    • B: Unangenehm metallisch (-2)
  • Christinen Naturelle (von dm, 1.10 EUR/L): 15%

    • A: Saures abgestandenes Mineralwasser. Kohlensäure-Geschmack. (2)
    • B: Sauer mineralwasserig. Bäh. (-2)
  • Gerolsteiner (von Edeka, 0.59 EUR/L): 12%

    • A: Richtig sauer (1)
    • B: Etwas metallisch, etwas sauer (-2)
  • Carolinen (von Real, 0.60 EUR/L): 3%

    • A: Oh! Süüüüß!! Ne, das mag ich nicht in großer Menge. Trocken. (1)
    • B: Ganz starker Eigengeschmack, salzig und metallisch (-3)
  • Staatl. Fachingen (von Real Getränkemarkt, 0.96 EUR/L): (unbewertet)

    (Hinweis: Dieses Getränk war beim Probieren eindeutig kohlensäurehaltig und wurde deshalb nicht bewertet. Obwohl das Etikett es als “still” auszeichnet, enthält es laut Homepage 1.5 g Kohlensäure pro Liter.)

Auswertung

Offenbar war das Geschmacksideal beider Testpersonen möglichst geschmacksneutrales Wasser. Saure und metallische Geschmacksnoten wurden deutlich abgelehnt, aber auch Sorten mit süßen Unternoten landeten eher im oberen Mittelfeld.

Auffällig ist, dass sämtliche Hausmarken der großen Supermärkte, die momentan für 13 Cent/L gehandelt werden (Gut und Günstig von Edeka, Elitess von Penny, Quellbrunn von Aldi, ja! von REWE, Saskia von Lidl, Tip von Real, Surf von Norma, Vitalbrunnen von Netto) alle mit Gesamtnoten von mindestens 72% abschlossen.

Auch im Allgemeinen ist im Verhältnis von Preis und Gesamtnote ein Abwärtstrend zu erkennen, wenn man eine Trendlinie über die Daten legt (die preislichen Ausreißer Fiji und babylove werden in diesem Diagramm nicht berücksichtigt):

Preis vs Gesamtnote

Es gab außerdem wenige Sorten, die von den Testpersonen grundsätzlich anders bewertet wurden. Ausnahmen umfassen das Leitungswasser, das von Person A mit 0 und von Person B mit 2 Punkten bewertet wurde, sowie das Quellbrunn Werretaler-Quelle, das von Person A mit 8 und von Person B mit -3 Punkten bewertet wurde:

Note A vs Note B

Methodenkritik

Zuletzt noch einige Anmerkungen, welche die Testdurchführung betreffen, und die bei der Nachahmung dieses Versuches hilfreich sein sollen.

Plastikbecher sind dünnwandig [citation needed]. Bei dieser Durchführung wurde nicht bedacht, dass man potentiell in der Lage sein würde, die auf dem Boden stehende Sortenbezeichnung beim Trinken (spiegelbildlich) zu lesen. Es wird eine weitere Indirektionsstufe in Schritt 2 empfohlen: Eine Tabelle der Sorten aufstellen, diese zufällig sortieren, ihnen jeweils eine Nummer zuordnen, und diese dann vor dem Befüllen auf den Boden schreiben. Bei dieser Durchführung wurde dieser Defekt durch die Technik “nicht Hingucken” ausgeglichen.

Die Geschmacksbeurteilung wurde bei dieser Durchführung unstrukturiert in einem Freitextfeld durchgeführt, da uns zu Beginn des Tests keine Kriterienliste vorlag, mithilfe derer die Bewertung strukturiert hätte werden können. Nach Abschluss des Tests empfehlen wir, folgende geschmackliche Aspekte getrennt festzuhalten, um eine differenziertere Beurteilung zu erlauben:

  • Säure
  • Süße
  • Salzgehalt
  • Metallgehalt
  • Härte
  • Sonstige Geschmacksnoten

Ganz sicher fand bei dieser Durchführung durch die gemeinsame, gleichzeitige Verkostung eine gegenseitige Beeinflussung der Testpersonen statt. Dies wurde hier bewusst in Kauf genommen. Wem exakte, unabhängige Ergebnisse wichtiger sind als die Gestaltung des Tests als soziales Event, dem sei statt einer parallelen Verkostung eine serielle empfohlen.

Schlussworte

Wir wären sehr daran interessiert, wie reproduzierbar unsere Ergebnisse sind. Insofern ergeht der Aufruf an alle Leser, diesen Blindtest – gegebenenfalls in kleinerem Stil, mit bekannten oder leicht zugänglichen Wassersorten – zu wiederholen!

Bei der bisherigen Auswertung haben wir uns auf die rein subjektiven Geschmacksbewertungen beschränkt. Eine weitergehende Inbezugsetzung der Geschmacksurteile und der Mineralstoffkonzentrationen in den Wassersorten wäre interessant und ist in Planung.

Schließlich an dieser Stelle nochmals herzlichen Dank an die nicht namentlich gennante Testperson für tatkräftigen und moralischen Beistand und die professionelle wissenschaftliche Betreuung.

]]>
Exact Minkowski Sums of Polygons With Holes exact-ms-of-pwhs 2015-02-22T00:00:00+00:00 Sebastian Morr sebastian@morr.cc This is the first “real” scientific paper which I coauthored. It’s about the design and implementation of an algorithm which computes the so called Minkowski sum of two polygons.

I like to explain the topic like this: Imagine you have two stamps of arbitrary shape. First, you stamp one of them on paper, and then, you mark a point on the second one and stamp all over the other one, so that the point is inside of the first stamp. We’re interested in the shape of the result, and in this paper, we’re investigating an algorithm which computes this exactly and fast. It’s the first exact implementation that is able to compute the Minkowski sum of polygons with holes. We also show that, if the polygons contain holes, you can always “fill up” all holes in one of them without chaning the result, and use that property to speed up the algorithm even more in some cases.

You can find a preprint of the paper on arXiv.org (linked below). I also presented the paper at EuroCG 2015 and ESA 2015:

Preprint at arXiv.org Talk at ESA 2015

The resulting implementation has become part of the open source Computational Geometry Algorithms Library, starting from version 4.7.

]]>
Quote collection quotes 2015-09-11T19:33:00+02:00 Sebastian Morr sebastian@morr.cc Some quotes, collected over the course of many years. You can find some german ones here.

Time flies like a river.
Fruit flies like a banana.
unknown

Time is a great teacher, but unfortunately it kills all its pupils…
Louis Hector Berlioz

If the bee disappears from the surface of the earth, man would have no more than four years to live. No more bees, no more pollination, no more plants, no more man.
attributed to Albert Einstein

A clever person solves a problem. A wise person avoids it.
Albert Einstein

Give a man a fish, and you feed him for a day. Teach a man to fish, and you feed him for a lifetime.
unknown

Build a man a fire, and he’ll be warm for a day. Set a man on fire, and he’ll be warm for the rest of his life.
Terry Pratchett

The AI does not hate you, nor does it love you, but you are made out of atoms which it can use for something else.
Eliezer Yudkowski

Friends come and go, but enemies accumulate.
Thomas Jones

It seems that perfection is attained not when there is nothing more to add, but when there is nothing left to remove.
Antoine de Saint Exupéry

Choose a job you love, and you will never have to work a day in your life.
Confucius

With sufficient thrust, pigs fly just fine.
RFC 1925

I will not apologize for art!
Caaaaaaarl from “Lamas with hats”

I am a creationist. I believe man created God.
via soup.io

Give me six hours to chop down a tree and I will spend the first four sharpening the axe.
Abraham Lincoln

Give a man a gun and he can rob a bank. Give a man a bank and he can rob the world.
Graffiti

If you torture the data long enough, it will confess
Ronald Coase

Forget the money, because if you say that getting the money is the most important thing, you will spend your life completely wasting your time. You’ll be doing things you don’t like doing in order to go on living there just to do things you don’t like doing. Which is stupid. Better to have a short life that is full of what you like doing than a long life spent in a miserable way.
Alan Watts

Remember, if you succeed in everything you try in life, you’re living below your full potential and you should take up more difficult or daring things.
Eliezer Yudkowsky

Every time you spend money, you’re casting a vote for the kind of world you want.
Anna Lappe

As long as I feel that I can stand up and leave here, anytime I please… I can stay.
Mimi from “Real Humans”

If you love a flower, don’t pick it up. Because if you pick it up, it dies and it ceases to be what you love. So if you love a flower, let it be. Love is not about possession. Love is about appreciation.
Osho

If you wish to make an apple pie from scratch, you must first invent the universe.
Carl Sagan

Believing this statement will make you happier.
Ryan Lortie

Every word in this sentence is a gross misspelling of the word “tomato.”
Douglas Hofstadter

Every picture of you is when you were younger.
Mitch Hedburg

A clean house is a sign of a wasted life
unknown

For years, I was one of the extremely shy women. I don’t think I ever asked a questions after a talk during my PhD. Not asking a question for fear of looking stupid means giving my own ego a very high priority. A higher priority than a potential learning experience for myself, the audience and the speaker.
zinemin

It really is true that you become an average of the people you spend the most time with.
Sam Altman

Everyone in life has a purpose, even if it’s to serve as a bad example.
Carroll Bryant

Life isn’t about waiting for the rain to pass, it’s about learning how to dance in the rain.
Vivian Greene

Design is removal of the irrelevant.
@pyrtsa

]]>
Zitat-Sammlung zitate 2015-09-11T19:33:00+02:00 Sebastian Morr sebastian@morr.cc Ein paar über viele Jahre gesammelte Zitate. Die englischen findest du hier.

Für den, der hinschaut
Sehen die Berge
Jeden Tag anders aus
Zufalls-Gedichts-Generator

Nicht durch Zorn, sondern durch Lachen tötet man.
Nietzsche

Der Mensch sollte sich immer als ein Experiment der Natur betrachten.
Friedrich Hebbel

Wenn du etwas liebst, lass es frei. Kommt es zurück, gehört es dir - für immer.
Unbekannt

Ich habe keine Lösung, aber ich bewundere das Problem.
Unbekannt

Wer wissen will, wie das Wetter ist, sollte aus dem Fenster sehen. Wer wissen will, wie morgen das Wetter ist, sollte morgen aus dem Fenster sehen.
Max Goldt

Wer fragt, ist ein Narr für fünf Minuten. Wer nicht fragt, bleibt ein Narr für immer.
aus China

Planung ersetzt Zufall durch Irrtum
Einstein zugeschrieben

Man kann einen Menschen mit guten Saucen ebenso unter die Erde bringen wie mit Strychnin, nur dauert es länger.
Christiaan Barnard

Ein Bauch sieht von oben am dicksten aus.
Sebastian Morr

Ein reicher Mann ist oft nur ein armer Mann mit sehr viel Geld.
Aristoteles Onassis

Mit der Zeit wird aus Gras Milch.
aus China

Jeder ist nützlich, und sei es nur als schlechtes Beispiel.
unbekannt

]]>
Dozentensprüche dozenten-sprueche 2011-07-17T00:00:00+00:00 Sebastian Morr sebastian@morr.cc Gesammelte Dozentensprüche aus 5 Jahren Informatikstudium an der TU Braunschweig.

Marten

  • “Nech?”
  • “Das ist natürlich klar.”
  • “Vektoren in der Schule als Kohärenzklassen von Pfeilen darzustellen, sollte man unter Strafe stellen!”
  • “Ihre Nasenspitzen sind in R³!”
  • “Das Lambda sieht aus wie ne Giraffe”
  • “Wenn Sie in die Nähe der Sonne kommen, gilt die Euklidische Geometrie nicht mehr. Da müssen Sie aufpassen. Abgesehen davon, dass es sehr heiß wird.”
  • “Wir sind ein freies Land! Sie können auch durch die Klausur fallen, ohne, dass Sie eingesperrt werden.”
  • (Warnt vor überflüssigen Zeilenvertauschungen) “Das ist wie beim Fussball: Man rechnet und rechnet und kriegt nichts raus!”
  • (Zwei Studenten verlassen den Hörsaal) “Dies ist ein sittenfreies Land.”
  • (Ergänzt etwas im Skript) “Das fiel mir heute in der Badewanne ein. Ich wär fast abgesoffen.”
  • (Steht vor sechs vollgeschriebenen Tafeln) “Im Grunde habe ich bisher gar nichts gemacht.”
  • “In der Bronzezeit, als ich zur Schule gegangen bin…”
  • “Auch im großen Zoo von Hannover gibt es keine sqrt(2) zu betrachten.”
  • (Weist darauf hin, dass er die Definition der natürlichen Zahlen eigentlich nicht “Def 1.9” nennen dürfte, da die 9 noch nicht eingeführt ist.)
  • “Bei aller Diskussion, ob der Islam zu Deutschland gehört, wollen wir die römischen Zahlen wieder einführen?”
  • (Empfiehlt Fachliteratur) “Wenn Sie die anfassen, sollten Sie lieber Handschuhe anziehen, damit Sie sich nicht anstecken.”
  • “Newton war ein Arschloch. Aber ein Arschloch, dass wir nach wie vor lieben und verehren.” (Später) “Er hat an der Börse viel Geld verloren, als Mathematiker, darüber kann man eher lachen.”

Fingscheidt

  • (Thema: Widerstände) “Dicke” (zeigt auf sich) “geben Wärme schneller ab”
  • “Das kann ich umformeln”
  • “Die Theoremtabelle ist nicht die Rücktransformationstabelle. Die Theoremtabelle ist die Theoremtabelle!”
  • “Die Aufgabe ist beendet, jetzt gibts noch ein bisschen was zu lernen.”

Opolka

  • (Schaut auf seinen Zettel) “Ich glaube, ‘(gamma, b)’ soll das heißen…”
  • “Wir sollen ja multimedial arbeiten, ich mach das jetzt mal” (holt rote Kreide)
  • “Wenn man verstanden hat, dass der Weihnachtsmann der Äquivalenzklasse aller Männer mit rotem Mantel und weißem Bart entspricht, kann man wieder gut an ihn glauben”
  • “An die Abstraktion gewöhnt man sich ziemlich schnell.” (Hebt den Zeigefinger) “Man kann sogar süchtig werden!”
  • (Beispiel fürs Public-Key-Verfahren) “Wir nehmen als erstes zwei große Primzahlen, nämlich 3 und 5…”
  • “Der Informationsverlust bei Stille Post entspricht der Entropie in der Wärmelehre.”
  • “Irgendwelche Leute sammeln ja online Aussagen von Dozenten, und ich sage demnach immer…” (dann der Spruch mit dem Weihnachtsmann)
  • “Nehmen Sie eine Menge aus zwei Äpfeln und eine aus zwei Birnen. Die Mengen sind disjunkt. Hm, die Menge der Äpfel ist endlich. Gibt es mehr Äpfel als Birnen? Schlechtes Beispiel, nehmen Sie halt irgendwas, was geht.”
  • “Wir nehmen… Also… Ach, ich schreibs mal auf.”

Koslowski

  • “Turingmaschinen können soviel wie Ihr Handy. Naja, Telefonieren nicht.”
  • “Das klappt natürlich nur, weil wir vollständig und deterministisch sind!”
  • “Reguläre Ausdrücke sind plattgehauene Bäume.”
  • “Es gibt für Variablen zwei Möglichkeiten, überflüssig zu sein”
  • “Sobald ein Durchschnitt ins Spiel kommt, bin ich im kontextfreien Fall verloren.”
  • “Hier dürfen Sie mal das Wort ‘trivial’ benutzen. Das ist Ihnen ja sonst bis zum Master verboten.”
  • “Hier brauchen wir eine trusted authority – ein Oxymoron ersten Grades…”
  • “Wo kriegen wir denn unsere Primzahlen her? Das ‘große Buch der Primzahlen’ gibt’s leider nicht.”
  • “Was ist das hier? Der Satz ist mir zu lang.”
  • “Der Angreifer heißt U, für ‘Uschi’ – die Folien sind noch aus seeligen Zensursula-Zeiten.”
  • “Ich hab jetzt Bob wieder rechts hingeschrieben, wie sich das gehört.”
  • (Terminfindung) “Also, 8-Uhr-Sachen mach ich nicht” (Streicht Zeile in Terminplan durch)
  • “Einen Moment Geduld. Das kann nur endlich lange dauern.”
  • “Wenn ich einen Körper habe, kann ich darüber Polynome bilden.”

Fekete

  • “Bitte tragen Sie sich in den Email-Verteiler ein. Wenn Sie keine Emailadresse haben, kommen Sie bitte zu mir nach vorne, dann erkläre ich Ihnen, wie Sie das Studienfach wechseln.”
  • “c_1g und c_2g nehmen f in die Zange und führen es in die Unendlichkeit ab!”
  • (Nennt Objekte x_1, … , x_n. Sagt stolz:) “Das x soll andeuten, dass da noch was unbekannt ist!”
  • (Technische Probleme) “Wenn Kreide abstürzt, dann hebt man sie einfach auf!”
  • (Lösung von NP-vollständigen Problemen) “Alternativ können Sie auch auf Ihr Glück vertrauen. Sind Wirtschaftsinformatiker anwesend?”
  • (Thema: Wiedersprüchliche Ziele beim Algorithmenentwurf) “Das ist so wie mit den ehrlichen, hart arbeitenden Investmentbankern. Davon können auch nur zwei Dinge gleichzeitig erfüllt sein.”

Bode

  • “Sozusagen.”
  • (Hört falsche Lösungsidee) “Nee, da hätte ich Kopfschmerzen”
  • (Hausaufgabenrückgabe, auf dem Tisch liegen die Mappen mit den Hausaufgaben:) “Ich hab ALLES dabei, was ich habe!”

Biegel

  • (Thema: Powerpoint-Präsentationen) “Bis man das vorbereitet hat, bin ich schon wieder gestorben.”
  • (Um halb Acht) “Steht die Uhr?” (Zustimmendes Murmeln) “Ja, es war doch eben schon halb acht! Na, zehn Minuten haben wir noch.”

Adamek

  • “Genug Mathematik, kommen wir zurück zur Logik.”
  • “Die natürliche Deduktion kann ein Programm leicht nachvollziehen. Aber wenn Sie schreiben ‘de-Morgansche Regel’ kratzt sich der Computer am Kopf.”

Reineke

  • Student: “Was heißt das da an der Tafel?” - Reineke: “Eins hoch Dreck!”
  • (Erklärt Lösung umgangssprachlich, so dass sie jeder verstanden hat) “Und das schreibe ich jetzt möglichst kompliziert hin.”
  • (Schreibt:) “Es ist leicht einzusehen…” (grinst selbst)
  • “Für wen Briefmarkensammeln zu aufregend ist, kann es sich ja zum Hobby machen, übers Wochenende Komplexitätsklassen zu besuchen.”

Goltze

  • “Betriebssysteme sollten nach Möglichkeit nicht terminieren.”

Lieske

  • “Wenn Sie in der Klausur auf das Ergebnis kommen, dass die Wasseraustrittsgeschwindigkeit am Schlauch 100 m/s beträgt, sollten Sie nochmal nachrechnen. Denn sonst sind da keine Blumen mehr.”

Sonar

  • “Die Römer waren die Amerikaner des Altertums!”
  • “Menschen können 40 Tage ohne Nahrung auskommen - also, ich nicht, aber theoretisch.”
  • “…Bulldoggen! Äh, Bulldozer!”
  • “Klim-plus-Bim-Quadrat ist Klim-Quadrat plus zwei Klimbim plus Bim-Quadrat!”
  • “Alle diese Bildnisse zeigen einen idealtypischen Griechen. Der sieht ungefähr so aus wie ich: Bart… muskulöser Körper… ernster, in die Zukunft gerichteter Blick…”
  • “Manche Politiker sagen: ‘Wir haben einen Quantensprung geschafft!’ - der Quantensprung ist die kleinste Entfernung, über die man Energie überhaupt übertragen kann!”
  • “Pythagoras gründete eine Sekte mit komischen Regeln, z.B. durfte man keine Bohnen essen. Naja, das versteh ich ja noch.”
  • “Gegeben ist ein kubischer Steinaltar. Konstruieren Sie, nur mit Zirkel und Lineal, einen Altar mit doppeltem Volumen.”
  • “Wenn Sie früher nen Roman schreiben wollten, mussten Sie 500 Ziegen wegmetzeln.”
  • (Stratigraphie) “Christliches Erbauungsmaterial? Was soll der Kack, darunter ist Mathematik! Machen wir das mal weg.”
  • “Die Unendlichkeit zu erwähnen war bei den Griechen wie FKK machen mitten in der Stadt”
  • “Wir machen jetzt mal ein Beispiel … in (tiefe Stimme) 3D!!! (normale Stimme) In 2D ist das ja für Sissies.”
  • “Existieren Sie wirklich? Oder sind Sie nur ein Flackern in meiner Großhirnrinde und ich liege in Wirklichkeit in einem Tank, wie in ‘Matrix’ und der Präsident der TU schreibt ein Programm, das suggeriert, dass ich hier rede?”
  • “Wenn ich eine Strecke habe: Besteht die aus Punkten oder besteht sie nicht aus Punkten? Jetzt werden Sie sagen: ‘Das ist mir scheißegal.’”
  • (Beweis von Volumengleichheit per kontinuierlichem Verfahren) “Da kotzt Ihnen Aristoteles sofort die Currywurst mit Pommes aus!”
  • (Platons Göttervorstellung) “Sie sitzen mit Ihrer Geliebten am Fluss, und damit der so sprudelt, löst Gott dauernd im Kopf partielle Differentialgleichungen.”
  • (Mathematiker) “Ich würde sagen: Lustig. Witzig. Sie würden sagen: Schwere psychische Störung.”
  • “Dürrenmatt hat sein Stück ja nicht ‘Die Mathematiker’ genannt… und er hat gewusst, warum.”
  • “Meine Tochter ist Indie. Hört gerne Indie. Ihre Freunde sind auch alle Indie.”
  • “Zack! Beweis durch Hinmalen!”
  • “Interessiert Sie das überhaupt?”
  • “Phi-lo-po-nos. Ich hoffe, der schreibt sich richtig.”
  • (Insekt im Projektorlicht) “Schön warm da.” (Woche später) “Bring ich die immer mit?” (Woche später) “Da biste wieder!” (Klatsch)
  • (Folien sind durcheinander. Ganz ruhig und langsam:) “Ich… bin… eine… Schlampe…”
  • (Bildinterpretation) “Ich verrate Ihnen was: Das hier ist die Melancolia… und das hier ist ein kleiner, dicker Engel!”
  • “Ziehen Sie sich DAS mal LANGSAM durch die NASE rein! 1522! Da fangen die Leute wieder an, sich mit Kegelschnitten zu beschäftigen!”
  • “Jetzt passiert was, was mich immer wieder fröhlich stimmt:” (Folie: “1588: Vernichtung der Spanischen Armada”)
  • “Denken Sie sich eine Zeit, in der der typische englische Bauer ein Bäuerchen war.”
  • “Jetzt habe ich mich schon wieder festgesabbelt …”
  • “Die Engländer haben dann angefangen, mit dem Jakobsstab die Position der Sonne zu bestimmen. Wie oft können Sie das machen? – Zwei mal. Einmal mit dem rechten, einmal mit dem linken Auge.”
  • “Kommentar einer Braunschweigerischen Mathematiklehrerin: ‘Logarithmen sind überbewertet.’ – Manchmal hab ich so Träume, ich hätte ’ne Kettensäge …”
  • “Sinüsse”
  • (Mathematik) “Sieht man ja an der Millenium Bridge, dass man so nen abstrakten Kack nicht braucht. Schwingt ja auch so ganz hübsch.”
  • “Adelard of Bath, auf Deutsch: Adelard aus Bath, war ein junger Engländer aus Bath …”
  • “Der war leider kein Mathematiker, sondern Geisteswissenschaftler. Muss es ja auch geben.”
  • (Es spricht: Der Mechaniker.) “Du hast wohl den Schuss nicht gehört. Guck mal aufs Jahr! Das ist Feinmechanik, das können wir noch nicht, das wird erst in einigen Jahren erfunden.”
  • (Leibnitz’ d-Notation) “Das geht ganz automatisch. Jeder Schimpanse kann ableiten.”
  • (Versucht, zwei Bücher zu unterscheiden. Nach fünf Minuten Beschreibung eines Buches:) “Das Buch meine ich nicht.”

Balke

  • “Lektion Nummer 1: Immer die Datenbank-Software verantwortlich machen!”
  • (Datenbanken-Interna) “Wenn man eine Sache schön verpacken möchte, dann nennt man es einfach Algebra.”
  • (Allquantor) “Die Ausssage ‘Alle Studenten hier werden den RDB1-Schein bekommen’ zum Beispiel ist offentsichtlich falsch.”
  • “Yeeeeaah! Freie Variablen!”
  • “Das fragt ihr euch jetzt alle?? Ja? Nee? Ach kommt, das fragt ihr euch ALLE!”
  • (Von uns zusammengebastelte Begriffe aus der Vorlesung) “Das Sex-Attribut von Pussy ist nackig!” (Bedeutet: Die Eigenschaft “Geschlecht” der Katzen-Entität ist mit NULL belegt!)
  • (SQL vs Turing-Vollständigkeit) “Mit nem Leatherman kann man schon so allerhand machen. Aber ‘n dicker Hammer macht schon mehr Spaß!”
  • “…da spart man ne Menge Disketten… äh, Speicherplatz.”
  • “Wofür das B in B-tree steht, weiß keiner mehr so genau…”
  • “Das ist von Vendor zu Vendor verschieden!”
  • (DELETE FROM heroes…) “Schade für Superman, aber toller Trigger!”
  • “Ich geh mal davon aus, dass Sie alle Studenten sind. Naja, draußen is’ kalt …”
  • [Reads a quote] “Now we know that [the author] can write very long sentences, but what does it mean?”
  • “With semantic search, we could formulate queries like ‘beautiful pictures of Angela Merkel’. Well, beauty is in the eye of the beholder. She’s married, right?”
  • (Folie: “A frog is not a sunset”)

RDB-Wichtel

  • (Erfindung von SQL) “Der kam aus der Wirtschaft, dementsprechend konnte er nicht viel mit Logik anfangen…”
  • “Diese Relation, die ich jetzt aus Versehen durchgestrichen habe …”
  • “Convey what you want to convey in a simple way.”

Struckmann

  • “Guten Morgen, meine…” (sieht sich um) “…Herren!”
  • (Ackermannfunktion. Schreibt: a(4,4) = 2^2^2^2^16) “Das ist eine irre große Zahl. Aber ich hab übertrieben…” (Ergänzt an der Tafel: -3)
  • “Wenn’s zu dunkel ist, sagen Sie Bescheid.” - Student: “Bescheid!” - “Bitte??”

Studenten

  • (AuD, Binärbäume. Student:) “Was is’n NIL?” - (Anderer:) “Ein Fluss!”
  • Bode: “Wie würden Sie das Verfahren zum Bestimmen der Nullstelle nennen?” - Student: “Raten!”
  • Koslowski: “Wir dürfen den Balkon ja nicht betreten… Wie ernst wollen wir das nehmen?” - Student: “Axiomatisch!”
  • (Einführung in Computergrafik. Magnor zeigt ein Bild voller bunter Pixel.) “Was stellt dieses Bild dar?” Student 1: “Drei!” Magnor: “Das ist die Zahl Pi, jede Ziffer ist in eine Farbe kodiert.” Student 2: “War doch nah dran!”
  • (ARM-Architektur) Student betrachtet seinen Arm.
  • Student 1: “Wie wird denn die Klausur aussehen?” - Student 2: “Weißer Hintergrund, schwarze Schrift?”
  • Student: “Ich hab schonmal Grafikeffekte programmiert!” - Magnor: “Womit?” - Student: “Notepad?” - Magnor: “….. Okay.”
  • (Hausaufgabenabgabe endet mit Beginn der Vorlesung, aber niemand kommt zu spät) Student: “Ich bin enttäuscht, ich bin extra mit dem Auto gekommen, um die Leute leiden zu sehen…”
  • “Woher kommt denn dieses Pfeil-Zeichen in meinem Quelltext?” - “Das ist dein Mauszeiger.”

Rüffer

  • “Durch die Spannungsquelle dürfen Sie nicht gehen! Das ist verboten!”
  • “Ich nehme jetzt eine Vereinfachung vor: Statt 500 Ohm nehmen wir hier 800 Ohm.”
  • (p-n-Übergang) “P steht, wie wir alle wissen, für… ‘Löcher’!”
  • (Schreibt: 0.8_10 = 0.1101_2) “Das Gleich enthält halt ne kleine Ungenauigkeit…”
  • (Student:) “Machen wir jetzt Aufgabe b oder a?” – “Wir machen noch gar nichts, wir gucken uns das Ganze erstmal einleitend an.”
  • “Sehen wir nachher jetzt sehen wir jetzt nachher gleich!”

Wissenschaftliche Mitarbeiter

  • “Na, wie geht’s?” - “Man könnte mir mit nem Baseballschläger den Kopf einschlagen und ich würds nicht merken.” - “Challenge accepted!”

Fritz?

  • “Sie empfinden eine Gänsehaut zum Beispiel, wenn Sie einen Horrorfilm gucken. Oder Volksmusiksendungen.”

Magnor

  • (Konstruiert einen Winkel an der Tafel) “Grafischer Beweis: Der Winkel ist größer als 90°!”

Berger

  • “Die Lösung erhalten wir durch elementares Googlen.”

Kapitza

  • “…sei es Java, sei es irgendeine Programmiersprache, …”
  • “Diese Standardwerke sollten Sie sich zumindest mal aus der Ferne ansehen.”
  • “Verzeigern”, “Weggeschedulet”
  • “Schlossalgorithmen sind wie Umkleiden: Man kann reingehen, hinter sich zuschließen, und dann tun, was man möchte.”
  • (Licht geht plötzlich aus) “Energiesparen, ja?”
  • (Verliert den Faden. Lässt den Oberkörper hängen:) “Meeep!” (Setzt wieder neu an.)
  • “Sozusagen”
  • “Dann frohe Weihnachten, oder so.”

Schaefer

  • “In manchen Firmen kriegen Sie am Anfang so’n dickes Buch mit Coding-Standards, an die Sie sich zu halten haben. Und manchmal wird das auch getan.”

Ernst

  • “Wenn Sie mal ein Smartphone aufschlagen …”
  • (Reißt was Interessantes an) “… aber darauf werde ich nicht eingehen.”
  • “Wenn man so ein iPad aufknackt …”
  • “Ganz ohne jedes Miracle!”
  • (Schaltsymbole) “Für die, die das noch nicht gesehen haben: Das ist ein UND, diese umgekippte, ausgelaufene Badewanne. Jetzt weiß ich, wo der Fleck herkommt…”

Eisemann

  • “Use the library, Luke!”
  • “Mathematisch macht das leider doch Sinn…”
  • “Wir benutzen dafür die leicht schweizerisch klingende Funktion glTexParameteri…”
  • “Wofür wir das jetzt brauchen, sei dahingestellt. Wichtig ist, dass wir es können!”
  • “Use GeForce, Luke!”

Hasemann

  • (Ersti-Vorlesung, es geht um fortgeschrittene Programmierkonzepte) “Sie kennen das ja aus Boost…”
  • (Gute Studenten werden mit Kaffee belohnt) “Bitte keine klugen Antworten mehr, wir haben nur drei Tassen.”

Schicke-Uffmann

  • “Man konnte halt, wenn man das Richtige getan hat - oder das Falsche, je nachdem, wie man es sehen will - schlimme Dinge damit tun.”
  • “Dass ein C++-Programm Ihre Festplatte löscht, sollte nicht passieren, ist aber standardkonform.”

Neumann-Brosig

  • “Don’t listen to what I say, listen to what I mean”
  • “Das war ein Physiker-Argument, aber es stimmt trotzdem.”
  • (Begeistert) “Also ist das gleich…” (Geknickt) “Die Tafel ist zu Ende.”
  • “Mein Lieblingssatz: ‘Das passt noch irgendwo hin’”

Neumann

  • “Prüfung ist leicht, wenn man’s kann.”
  • (Buchvorstellung) “Da haben sich zwei Leute mal drangesetzt… Drei Leute. Vier Leute? Einige Leute haben sich mal drangesetzt…”
  • “Die topologischen Transformationen habe ich Ihnen hier mal anhand der deutschen Grenze dargestellt - damit’s ein bisschen witziger wird.”
  • “Ich hatte ja nur endlich viel Zeit zum Programmieren des Algorithmus’. Und auch nur endlich viel Lust.”
  • “Wir haben dann folgendes getan… Also, wenn ich ‘wir’ sage, meine ich, dass ich Herrn X motiviert habe, es zu tun, und er hat dann die Arbeit gemacht.”
]]>
nom nom 2014-07-30T00:00:00+00:00 Sebastian Morr sebastian@morr.cc http://github.com/blinry/nom

Helps you lose weight by tracking your energy intake and creating a negative feedback loop.

]]>
Vimboy vimboy 2012-07-22T00:00:00+00:00 Sebastian Morr sebastian@morr.cc http://github.com/blinry/vimboy ]]> Managing paper with manila folders managing-paper-with-manila-folders 2015-04-25T12:05:00+02:00 Sebastian Morr sebastian@morr.cc I’ve previously written about how I manage digital notes. This article is about my approach to organizing and storing physical paper documents.

Granted, this sound like an incredibly boring, bureaucratic topic, but this is a personal story of disentanglement and simplification. Wait and see :-)

Labeled tabs of manila folders

Approximately two years ago, I got really into minimalism. The principle of only owning things which are useful, beautiful or important resonates with me strongly. After all, one of my favorite quotes is the following by Antoine de Saint Exupéry:

It seems that perfection is attained not when there is nothing more to add, but when there is nothing left to remove.

My occupation with minimalism (last but not least via the lovely minimalism subreddit) led to simplifications in various parts of my daily life. At one point, I decided it was time to evaluate different approaches to storing paper documents. So, what’s there?

Ring binders

In Germany, it’s very common to store documents in ring binders (“Aktenordner”). You punch some holes in your documents (or put them in punched pockets), tug them away in the binders, and fixate all pages with a clip.

For many years, I did exactly that. I adopted this system from my parents, and put my documents into four different binders, categorized by labeled separator sheets with tabs.

A shelf of ring binders

I always hated this system. Here’s the workflow to file a new document:

  1. Find the correct binder, heave it out of the shelf, put it on a free surface.
  2. Open the binder, remove the clip which holds the pages at the bottom of the binder, open the correct section.
  3. Flip a lever to open the rings.
  4. Punch holes into your document (or fumble it into a pocket) and put it on those rings.
  5. Do steps 3.-1. in reverse.

This process sucks: It takes a lot of time, is boring and repetitive, and often led to me not filing documents at all (which then accumulated in the most durable structure in the known universe: stacks). So, let’s look for better alternatives.

Suspension files

Yeah, suspension files are the way to go, right? Turn your ring binders by 90 degrees, split the documents into separate vertical folders, and hook them onto a pair of rails! You can them access the individual folders directly from the top and insert new ones as needed.

Suspension file

This system was often suggested to me in various self-management books I read in my childhood, I even tried such a system for a few weeks. I didn’t like them for two reasons: Their whole construction seems unnecessarily complex; and their plastic tabs take away a lot of space, even when there’s just one document inside. Your mileage may vary, but they are not for me.

Manila folders

In The Power of Less (a book whose content, in my opinion, is so trivial that I gave it away immediately after reading it - quite ironic ;-), Leo Babauta recommended “manila folders” for filing documents. They also seem to appear a lot in the context of the Getting Things Done method. I had never heard that term before, but for everyone who has used a graphical computer file managers, manila folders look very familiar:

Manila folders

They are open at the sides and at the top, and are designed to hold a collection of loose papers. You can label the tabs, and then put many of them in a box (the German term is “Einstellmappen”).

I present to you: The manila folder workflow for filing a new document:

  1. Find the correct folder and hold it open.
  2. Drop your document into it. (I usually insert new documents at the front, so they are mainly chronologic, but I don’t care that much.)

That’s it! Not much room for improvement, and it could hardly get any simpler - mission accomplished!

My concrete implementation

In Germany, there are two commercial distributors for similar folders: MAPPEI and Classei. Their systems cost a fortune, but might suit you. I knew I wanted cheaper, simpler folders with fixed tabs like those depicted above.

After searching for manila folders in virtually all office stores in my home city to no avail, I finally turned to Amazon Germany, and found the Leitz 2434-00-11 folders, which seemed pretty, durable, and currently cost about 31 ct per piece. They have five slots for fixed tabs, and come in batches of 100 pieces, 20 of each tab position.

Ready for some technical details? The folders are 304 mm wide and 200 mm high (210 mm with tabs). The paper weighs 205 g/m² (the description on the Amazon page is contradictory there), which seems like a good compromise between robustness and thickness. One folder is about 0.8 mm thick.

As I couldn’t find a matching box to put the folders into right away (this one turned out to be too small :-S), I temporarily settled on a shipping box, cut to a width of 31 cm, a height of 16 cm and a depth of 17 cm. This works perfectly for me. I’m ashamed to admit that this temporary box is still in place after more than a year ;-)

Box with manila folders

I sort the folders alphabetically, following the schema below. The alphabet starts at the back, so that the beginning of a label is never covered by a neighboring tab. A disadvantage of this ordering is that the frontmost folder covers all other tabs starting with the same letter. But it has the (bigger) advantage that you get a good overview of the full alphabet, in contrast to a “chaotic tab position”, where, with some luck, you can see each label, but lose a sense of linear alphabetical ordering.

A-Z labels

Long-term experiences

One year later, I’m still very happy with this system. I don’t own ring binders anymore, and never looked back. Over the months, I’ve added some folders, and removed others. It’s quick, easy, and simple and works exceptionally well for me.

I currently use 32 folders. The system contains all important documents; after throwing away many documents I knew I’d never need again, the folders in use are now about 10 cm thick in total. The thickest folder contains about 3 cm of documents, which the system can integrate okayishly, I assume that it gets hard to handle with thicker folders.

These are the things I store in the folders: certificates, stamps (which is handy!), small gifts, bills, coupons, uni stuff, contracts, menus of delivery services, stickers, recipes, health-related documents, tax/insurance stuff, maps, address lists, photos, …

Two things to look out for are rain and sunlight. The open system is vulnerable to both, so I’d suggest putting it some distance away from windows. (Maybe you can see the small smudges on the labels ;-)

When I have to take documents with me, I use folders like this.

]]>
Git Cheat Sheet git-cheat-sheet 2012-04-17T00:00:00+00:00 Sebastian Morr sebastian@morr.cc Git Cheat Sheet

I originally made this to introduce some fellow students to Git for a group project, and updated it in 2014 for a Git introduction I gave to freshman students.

Want the SVG to modify it for your own purposes? I’ve got you covered! The fonts are Bevan and Courier New.

]]>
Novena logo novena-logo 2014-05-12T00:00:00+00:00 Sebastian Morr sebastian@morr.cc Novena logo on three different backgrounds

A logo design for the open-hardware computer Novena. It was one of 124 logo submissions. The “claw” is a reference to the Open Source Hardware logo.

Here are some older designs:

]]>
Freifunk, executive summary freifunk-executive-summary 2014-01-29T12:22:00+01:00 Sebastian Morr sebastian@morr.cc Ich habe mir vor zwei Wochen Freifunk genauer angeguckt, und möchte euch hier mal zusammenfassen, was ich gelernt habe. Die Grundidee ist, in einer Stadt viele WLAN-Router aufzustellen, die sich untereinander vermeshen und so ein dezentrales (unzensier- und -drosselbares) Kommunikationsmedium bilden.

Lokale Communities

Für mich, der neu dazukommt, ist die Organisation der Community zunächst befremdlich: Jede Stadt pflegt ein eigenes Wiki, Mailinglisten und Standortkarten, was zu großer Informationsfragmentierung führt. Oft bauen die Städte sogar ihre eigene Firmware. Ist wohl gelebte Dezentralisierung, wirkt auf mich aber ineffizient. Die Community-Karte listet derzeit 57 Communities in Deutschland und Österreich auf.

Funktionsweise

Üblicherweise machen die Freifunk-Router zwei WLAN-Netze auf: Eines im Access Point-Modus, damit sich Endgeräte drauf verbinden können, eines im Ad-Hoc-Modus, zur Vernetzung mit anderen Routern.

Früher benutzte Freifunk das OLSR-Routingprotokoll, welches permanent die gesamte Netzwerktopologie auf alle Knoten verteilt. Das skalierte wohl nicht so gut, weshalb einige Freifunker eine einfachere Alternative entwickelten: B.A.T.M.A.N (“Better Approach To Mobile Adhoc Networking”). Ein Knoten ruft regelmäßig ins Netz, dass er da ist und merkt sich für jeden anderen Knoten, aus welcher Richtung er die meisten dieser Broadcast-Nachrichten empfangen hat. In diese Richtung werden dann Pakete geschickt, die für diesen Knoten bestimmt sind. Fertig.

Es gibt übrigens einen regelmäßigen Wettbewerb, in dem Mesh-Routing-Protokolle gegeneinander antreten, Battle Mesh ;-)

Hardware

In allen Stadt-Communities sind zur Zeit die Router der chinesischen Firma TP-LINK beliebt, und zwar in der Schnittmenge folgende Geräte:

  • TL-WR741ND: 4 MB Flash, 32 MB RAM, eine Antenne, ca. 23 Euro. Der Flash scheint recht knapp zu sein, reicht aber für normale Knoten aus. Das “D” im Namen bedeutet jeweils, dass man die Antennen austauschen kann, gibt die meisten auch mit fest verbauten Antennen.
  • TL-WR841ND: Hardware wie oben, aber zwei Antennen (doppelte Datenrate per MIMO, ca. 22 Euro. Es gibt von Hardwareversion 8 wohl eine “chinesische Version”, die crappy ist (halber Flash und RAM). Hier bekommt man aber meistens die unabgespeckte internationale Version.
  • TL-WR842ND: Zusätzlicher USB 2.0-Port, ca. 42 Euro.
  • TL-WR1043ND: Schnellere CPU, 8 MB Flash, 64 MB RAM, drei Antennen, USB 2.0, mit Gigabit-Ports, ca. 45 Euro. Laut Kiel “für größere Aufgaben geeignet”.
  • TL-WDR3500: 8 MB Flash, 128 MB RAM, drei Antennen, ca. 36 Euro. Unterstützt als einziger dieser Liste 5GHz-Frequenzen (wovon manche aber wegen geringerer Reichweite durch stärkere Streuung für diesen Zweck auch eher abraten). Momentane Empfehlung von Berlin.

Ich habe mir mal testweise einen TL-WR841ND gekauft und die Hamburger Firmware draufgespielt, dauert vielleicht 10 Minuten, dann ist der Router online.

Braunschweig?

Braunschweig befindet sich auf der Community-Karte in einem ziemlichen Freifunk-Loch. Große “Nachbarn” sind Halle, Bielefeld und Hamburg. Hannover reaktiviert sich angeblich gerade wieder, im Forum ist allerdings bisher wenig Aktivität.

Im Freifunk-Wiki gibt es eine Seite über Braunschweig, die von vereinzelten Anläufen berichtet (letzte Änderung: 2009), die Mailaddressen sind nicht mehr erreichbar. Auf der Hamburger Karte findet man zur Zeit vier Knoten, die mit der Hamburger Firmware ausgestattet sind (die ermöglicht von Haus aus Internetzugriff über ein VPN in die Niederlande, wo es keine Störerhaftung gibt.

Weitere Ressourcen

Wenn ihr noch Fragen habt, gerne her damit!

]]>
Bachelorarbeit, Woche 21: LaTeX-Tipps und Abgabe! bachelorarbeit-woche-21 2013-11-30T07:32:00+01:00 Sebastian Morr sebastian@morr.cc Am Donnerstag habe ich die Bachelorstudiengangsabschlussbescheinigung abgegeben, yay! Die letzten Wochen war noch recht viel zu tun, weshalb ich das Gefühl hatte, mir keine Zeit für einen ausführlichen Blogpost nehmen zu können. Heute berichte ich von der Arbeit selbst, in einem kommenden Post dann noch vom Abschlussvortrag.

Hier kommt zunächst die Arbeit als PDF mit anklickbaren Querverweisen. Im Original sind die Seitenabstände anders, um zweiseitig schöner auszusehen. Der LaTeX-Sourcecode ist auf GitHub. Wer dieses Blog verfolgt hat, ist mit dem Inhalts bereit größtenteils vertraut. Neu sind Beschreibung und Auswertung der Evaluation.

Ich war überrascht und etwas enttäuscht, dass sich am Institut niemand die Zeit nahm, die Arbeit nochmal inhaltlich durchzugehen und zu kritisieren. Während ich mitbekommen habe, dass an anderen Instituten die Abschlussarbeiten oft zu einem guten Teil das Werk des Betreuers sind, war ich hier fast vollständig auf mich allein gestellt. Es war einerseits ganz schön, so autonom arbeiten zu können, andererseits bin ich sicher, dass die Arbeit bei einer intensiveren inhaltlichen Betreuung noch deutlich besser, formaler und tiefgehender hätte werden können.

LaTeX

Auch für lange Dokumente betreut Enrico LaTeX-Klassen im Corporate Design der TU. Während die einwandfrei aussehen, gefallen mir die Schriftarten nicht besonders, daher verwende ich ein blankes scrreprt.

Ich möchte euch folgende LaTeX-Pakete empfehlen, auf die ich beim Schreiben gestoßen bin:

  • microtype ist ein Schritt hin zur typografische Perfektion: Es optimiert Buchstabenabstände, macht die Seitenränder optisch gerade und minimiert Worttrennungen. Ein Blick in das (interaktive!) Handbuch sei höchst empfohlen!
  • cleveref erlaubt textuelle Verweise auf Referenzen per \cref{<name>}, wobei der Typ des verlinkten Dinges angefügt wird (der Verweis lautet dann zum Beispiel “figure 3.14”). Es gibt auch Befehle für “on page 42” etc.
  • menukeys habe ich zum Erstellen von hübschen Darstellungen von Tastenkombinationen benutzt (\keys{\ctrl + C}), es eignet sich auch zum Formatieren von Menüfolgen (\menu{Extras > Settings > General}).
  • listings ist recht gut bekannt für das Erstellen von Codelistings, ich möchte hier nur nochmal unterstreichen, dass das Paket sehr hübsch konfigurierbar ist: Man kann sehr einfach eigene Umgebungen für verschiedene Sprachen anlegen und eigenes Syntaxhighlighting definieren - für meine nutsh-Codeschnipsel oder für EBNF-Grammatiken war das sehr praktisch.
  • pgfplots benutze ich zum Zeichnen von Balken- und Boxplot-Diagrammen. Es basiert auf dem Zeichenpaket PGF/TikZ (was ebenfalls höchst extremst empfehlenswert ist!), ist ziemlich mächtig und gut konfigurierbar. Ich bin nicht restlos begeistert vom Interface, habe mich aber auch nicht lange damit beschäftigt und es tut was es soll.

Nitpicker

Das Nitpicker tool beschreibt sich als “overly picky language style checker”. Es überprüft formale englische Texte automatisch auf häufige grammatikalische, semantische und Rechtschreibfehler (verdammte passive voice ;-). Ich habe das Tool in einem Lightning Talk auf einem der letzten Kongresse kennengelernt und finde es inzwischen unersetzlich, um die gröbsten Schnitzer aus Texten rauszubügeln, bevor man es Menschen zu Lesen gibt. Benutzt es!

Fun fact: Das Nitpicker tool wird durch Katzenbilder angetrieben: 1, 2.

Motivation

Symbolbild: Research paper vs Internet

Beim eigentlichen Schreiben fiel es mir teilweise sehr schwer, konzentriert zu bleiben und nicht herumzuprokrastinieren. Irgendwann kramte ich einen Motivationstrick heraus, den ich auch schon beim Lernen für Klausuren erfolgreich angewendet habe: Die Pomodoro technique. Die funktioniert so:

  1. Man stellt einen Küchenwecker auf eine halbe Stunde.
  2. Solange der Wecker tickt, arbeitet man möglichst konzentriert, ohne sich ablenken zu lassen.
  3. Wenn der Wecker klingelt, malt man ein Kreuz irgendwohin und macht fünf Minuten Pause (Lüften, Nahrungs- und Flüssigkeitszufuhr, Äkta manniskor gucken).
  4. Nach jeweils vier Kreuzen macht man eine längere Pause von etwa einer halben Stunde. Dann GOTO 1.

Und das funktioniert ganz hervorragend für mich. Ich freue mich immer sehr auf die kommende Pause und schaffe es, mich während der halben Stunde nicht ablenken zu lassen. Mithilfe dieser Technik habe ich in den drei letzen Wochen vor der Abgabe etwa 6 bis 7 Stunden pro Tag konzentriert gearbeitet.

Pomodoro ist übrigens das italienische Wort für “Tomate” - der Typ, der sich das ausgedacht hat, hat einen Küchenwecker in Tomatenform benutzt.

]]>
The Nut Shell nutsh 2013-11-26T00:00:00+00:00 Sebastian Morr sebastian@morr.cc http://github.com/blinry/nutsh

A framework for creating interactive command line tutorials, inspired by text adventures.

]]>
Bachelor Thesis: The Nut Shell the-nut-shell 2013-11-03T00:00:00+00:00 Sebastian Morr sebastian@morr.cc In my bachelor thesis, I designed and implemented a framework for creating interactive command line tutorials, called The Nut Shell. Here you can find the final thesis and the presentation:

Thesis (Director's Cut) Final talk

I posted the LaTeX source code of the thesis online – you are welcome to steal stuff from it!

While writing the thesis, I also blogged about my experiences (in German).

The resulting software framework can easily be adapted and reused to various command line environments, you can read more about it here.

]]>
Bachelorarbeit, Woche 13: Gliederung bachelorarbeit-woche-13 2013-10-05T10:33:00+02:00 Sebastian Morr sebastian@morr.cc Blick zurück

So, der Vorkurs lief gut, die Teilnehmer schienen mir recht glücklich mit der Nut Shell, ich habe viel positives Feedback bekommen. Ich habe eine kleine Umfrage durchgeführt, um Spaß und Lernfortschritt quantifizieren zu können, die Ergebnisse werde ich in den kommenden Wochen hier veröffentlichen.

Blick nach vorn

Nun habe ich noch einen Monat zum tatsächlichen Schreiben der Arbeit. Hierzu habe ich eine grobe Gliederung entworfen, unten dargestellt als Outline. Die eingeklammerten Zeilen sind keine eigenen Abschnitte, sondern Zusammenfassungen der vorgesehenen Inhalte.

Ich habe versucht, den Hauptteil “von unten nach oben” zu strukturieren, also tatsächlich in der Reihenfolge, in der die Komponenten aufeinander aufbauen:

Abstract
    (Purpose)
    (Design + evaluation methods)
    (Major results)
    (Summary of conclusions)
Introduction
    (Topic: Command line tutorials)
    (Motivation: Traditional, static tutorials have problems)
        (Attention shift)
        (No goal affirmation)
        (No reaction to mistakes)
    (Core idea: Interlace tutorial text and CLI)
    (Role model: Text adventures)
    (Research question: Is this approach "better"?)
    (Prior approaches)
        (Try Ruby/Git/Haskell)
        (What's missing in them)
    (Conventions in this thesis)
Overview
    (Goals and principles)
        (Basic event loop: prompt -> editing -> execution/output)
        (Adaptability to arbitrary "targets")
        (Annotation + environment changing, otherwise raw CLI interaction)
    (Steps of this thesis)
    (Diagram: Layers)
Design
    Command line parser
        Purpose
            (Recognizing parts of command line output)
        Background
            (How a terminal works)
            (Escape characters)
            (Readline key combinations)
        Architecture
            (Component diagram)
            (Parser EBNF)
        Problems and workarounds
            (Command line editing)
            (...)
    Internal DSL
        (Purpose: High-level layer around CLI parser)
        (Description of necessary DSL calls)
    The nutsh language
        Purpose
            (Describes a self-contained teaching unit, a "lesson")
        Design goals
            (Easy to read and write)
                (Use syntax the user already knows: Regex + Go syntax)
                (Introduce new syntax for often-used semantics)
            (Minimize redundance)
                (DRY, allow reuse of code snippets)
        Properties
            (String-based)
            (Functional)
        Lexical elements
            (Token types)
            (Diagram: State machine)
        Syntax
            (EBNF of language constructs)
        Parsing
            (How YACC works)
        Semantics
            (Specification of language constructs)
        Interpreter
            (State)
            (Function stack)
        Automated testing
            (Motivation)
            (Testing algorithm)
        Examples
Implementation
    Used technologies
        (Go)
        (kr/pty for terminal emulation)
    High-level design
        (Diagram: Package diagram)
    Command line tool
        Usage
        Builtin functions
Application and evaluation
    Methods
        Setting
            (Description of setting: Preparatory course for CS students)
            (Previous teaching method)
            (Groups)
        Tutorial
            (Content, examples)
            (Best practises in lesson writing)
        Survey
            (Questions)
    Results
        (Pretty graphs)
        (Statistical evaluation)
Conclusions
    (Discussion of survey results)
Limitations and future directions
    (Future directions:)
        (Automated typo detection)
        (Simplified prompt syntax)
        (Lesson dependency tree)
    (Outlook, future of the Nut Shell)
Acknowledgements
    (...)
References
    (...)
Appendix A: Example lesson
    (nutsh source code)
    (Execution output)
Appendix B: Table of terminal escape codes
    (...)
Affidavit
    ("Erklärung an Eides statt")

Mit dem langen Kapitel zur Sprache (Spezifikation inklusive Erläuterungen zum Parsen, Interpretieren, etc.) bin ich noch nicht so zufrieden, vielleicht ist es lohnend, einige Abschnitte in den “Implementation”-Teil zu verschieben. Das bricht aber die schöne bottom-up-Struktur. Hm.

]]>
Bachelorarbeit, Woche 11: Vorkurs beginnt! bachelorarbeit-woche-11 2013-09-16T11:37:00+02:00 Sebastian Morr sebastian@morr.cc Nur ganz kurz: Heute beginnt der Vorkurs! Ich bin so gespannt, ob alles klappt! Die letzen Wochen habe ich wirklich viel geschuftet, damit heute alles schön ist.

Wer mitmachen möchte, kann sich die kurze Installationsanleitung geben. Ihr braucht einen Go-Compiler und Git. Und Linux, natürlich. Getestet ist das aber eigentlich nur im Raum, in dem der Vorkurs stattfindet und auf meinem Notebook, keine Garantien ;-)

Warnung: Das Setup ist für absolute Neulinge, deshalb hängt es eine Zeile an eure .bashrc, die das nutsh-Skript in den PATH tut. Dieses Skript sorgt für automatische Aktualisierungen (es kommen jeden Tag neue Lektionen dazu).

Viel Spaß!

]]>
Bachelorarbeit, Woche 9: DSL-Syntax bachelorarbeit-woche-9 2013-09-04T10:31:00+02:00 Sebastian Morr sebastian@morr.cc Der letze Eintrag ist nun schon eine ganze Weile her, höchste Zeit für ein Statusupdate!

Sprache

Die Sprache, in der man Tutorials verfassen kann, nenne ich nutsh, in Analogie zur Nut Shell. Sie ist viele Iterationen durchlaufen, bis ich etwas fand, was mir mächtig genug erscheint, möglichst einfach zu lesen und zu schreiben und simpel umzusetzen ist. Die Irrwege schildere ich vielleicht ein anderes Mal ;-)

Grundlagen

Die Sprache basiert stark auf Strings ("blabla"). Stringausdrücke kann man verknüpfen ("bla"+"bla"), sowie auf Gleichheit überprüfen ("bla" == "bla"). Außerdem kann man überprüfen ob ein String einem Regulären Ausdruck entspricht ("bla" =~ "b.."). Jeder String kann als Wahrheitswert interpretiert werden, der bei einem leeren String falsch ist, ansonsten wahr. Die Vergleichsoperatoren geben bei Erfolg den (beliebig gewählten) String "true" zurück. Die üblichen logischen Operationen (! für nicht, && für und sowie || für oder) sind entsprechend definiert.

Es gibt noch die Kontrollfluss-Strukturen if-else sowie prompt, und man kann Funktionen definieren und aufrufen, und das reicht dann auch schon. Variablen sind nicht notwendig, weil man die auch in der Zielsprache definieren kann.

Naja, und typische C-Kommentare gibt es auch (// für Zeilenkommentare, /* ... */ für Blockkommentare).

Grundbefehle

Ganz zentral ist die Ausgabe von erklärendem Text. Dieser wird eingerückt und farbig hervorgehoben.

say("Dies ist erklärender Text")

Weil der Befehl so oft verwendet wird, kann man auch einfach schreiben:

"Dies ist die Kurzform"

Um einen Befehl im Kommandozeilen-Prozess auszuführen, benutzt man run. Rückgabewert ist die Ausgabe des Befehls.

run("echo testinhalt > /tmp/testdatei")

Ich überlege noch, ob auch hier eine Abkürzungsmöglichkeit sinnvoll wäre, etwa

!"echo testinhalt > /tmp/testdatei"

Kontrollfluss

Ganz wichtig ist die Prompt-Schleife:

prompt {
    // Befehle
}

Sie Semantik ist die einer Endlosschleife, zu deren Beginn jeweils ein Befehl vom Benutzer eingelesen wird. Sie kann durch ein break verlassen werden.

Es gibt zwei eingebaute Funktionen command und output, die jeweils das zuletzt eingegebene Kommando und dessen Ausgabe zurückgeben.

Weiterhin gibt es if-else Ausdrücke, deren Syntax stark von Go beeinflusst ist (keine Klammern um die Bedingung):

if command =~ "^rm " {
    "OMG!"
} else {
    "Brav!"
}

Funktions-Definition

Mehrfach verwendete Codeschnipsel kann man in Funktionen auslagern:

def exit_status {
    return(run("echo $?"))
}

def say_twice(text) {
    say(text)
    say(text)
}

prompt {
    say_twice("Der Rückgabewert war '"+exit_status+"'")
}

Funktionen ohne Argumente können auch ganz ohne Klammern aufgerufen werden.

Umgebende Zustände

Möchte man für eine Gruppe von Prompt-Schleifen die gleichen Bedinungen überprüfen, kann man diese Syntax benutzen:

def help {
    if command =~ "help" {
        "Don't panic!"
    }
}

help {
    prompt {
        if command =~ "panic" {
            break
        }
    }

    "Zweite Chance..."
    prompt {
        if command =~ "panic" {
            break
        }
    }
}

Das bedeutet: “Zu Beginn jedes Prompt-Durchlaufs, führe die Funktion help einmal aus. Das geht auch mit mehreren Funktionen:

def stay_in(dir) {
    if ! run("pwd") =~ "^"+dir {
        say("Bitte komm wieder zurück nach `"+dir+"`!")
        prompt {
            if run("pwd") =~ "^"+dir {
                break
            }
        }
        "Okay, weiter im Text."
    }
}

def help {
    if command =~ "help" {
        "Don't panic!"
    }
}

run("cd /tmp")

stay_in("/tmp"), help {
    "Wie spät ist es?"
    prompt {
        if command == "date" {
            break
        }
    }

    "Und wer bist du?"
    prompt {
        if command == "whoami" {
            break
        }
    }
}

Die Syntax einer solchen “Zustands-Schachtelung” hat mich am längsten aufgehalten, mit dem Ergebnis bin ich aber sehr zufrieden.

Was noch fehlt

Ein Tutorial braucht Metainformationen (Zielsprache, Name, nutsh-Version), man braucht eingebaute Funktionen zum Springen zwischen Lektionen und vielleicht auch ein goto, das wird sich zeigen.

Was ich außerdem möchte, ist ein eingebauter Befehl expect, mit dem man automatisiert überprüfen kann, ob man durch Eingabe dieses Befehls in den entsprechenden Zustand gelangt.

Umsetzung

Das Lexen, also das Zerlegen des Sourcecodes in seine Bestandteile (Strings, Keywords, Identifier, Operatoren, Klammern) ist hier so einfach, dass ich das in einer kurzen Funktion selbst mache.

Zum Parsen, also zum Erkennen der Struktur, benutze ich die yacc-Version, die zusammen mit Go ausgeliefert wird, und mache damit ganz gute Erfahrungen.

Den resultierenden Parse-Baum kann man dann sehr einfach interpretieren, auch dazu später vielleicht einmal mehr.

Wie geht es weiter?

Ich habe noch anderthalb Wochen bis zum Beginn des Vorkurses, in denen ich Inhalte erstellen und die aufgeführten noch fehlenden Sprachelemente umsetzen werde. Ich werde eine Onlineevaluation vorbereiten, um die Eindrücke der Vorkurs-Teilnehmer etwas quantifizieren zu können. Insbesondere wird es eine zweite “Kontrollgruppe” geben, die noch mit den alten Aufgabenblättern arbeitet, um eine Vergleichsmöglichkeit zu haben.

Ich bin gespannt!

Zum Abschluss noch die kurze Lektion aus dem letzen Blogpost in nutsh:

def common_mistakes {
    if command == "1s" {
        "Das ist ein kleines L, keine Eins! Probier's nochmal!"
    }
    if command == ".." {
        "`..` ist der Name des Verzeichnisses, du musst noch dazusagen,
        was du damit machen möchtest. Um \"hinzugehen\", schreib `cd`
        davor."
    }
    if command == "cd.." {
        "Da fehlt noch ein Leerzeichen zwischen `cd` und `..`!"
    }
}

def stayinroot {
    if !(run("pwd") =~ run("echo $ROOT")) {
        run("cd $ROOT")
        "Bleib bitte erstmal hier."
    }
}

run("ROOT=/tmp/nutsh")

run("rm -rf $ROOT")
run("mkdir $ROOT")
run("cd $ROOT")

run("mkdir schuhkarton")
run("mkdir schrank")
run("touch schrank/jacke")
run("touch schrank/hut")
run("touch linker_schuh")

"Hallo! Willkommen in der Nut-Shell! Ich möchte dir zeigen, wie du
mithilfe der Kommandozeile schnell und einfach mit Dateien und
Verzeichnissen umgehen kannst."

"Legen wir gleich los: Tipp mal `ls` ein und drück Enter."

common_mistakes, stayinroot {
    prompt {
        if command == "ls" {
            "Genau. `ls` steht kurz für \"list\" und zeigt dir die
            Dateien und Verzeichnisse an, die sich in deinem
            \"aktuellen\" Verzeichnis befinden. Die Verzeichnisse
            werden dabei blau dargestellt."

            "Du bist gerade in einem Ordner namens `/tmp/nutsh` - das
            steht auch in dem blauen Text, den wir \"Prompt\" nennen.
            Der Prompt endet mit einem Dollarzeichen, das heißt soviel
            wie: \"Du kannst jetzt ein Kommando eingeben!\""

            break
        }
    }

    "Du hast vielleicht gesehen, dass sich hier ein Verzeichnis namens
    `schrank` befindet. Um dieses zu deinem aktuellen Verzeichnis zu
    machen, tippst du `cd`, dann ein Leerzeichen und dann den Namen des
    Verzeichnisses, in das du möchtest. Begib dich doch mal in den
    Schrank und sieh dich darin um!"

    prompt {
        if run("pwd") == run("echo $ROOT/schrank") {
            if command == "ls" {
                "Genau. Hast du bemerkt, wie sich der Prompt geändert
                hat?"

                break
            }
        }
    }

    "Und wenn du wieder aus dem Schrank herausmöchtest? Die Abkürzung
    für das Verzeichnis oberhalb des aktuellen ist `..`!"

    prompt {
        if run("pwd") == run("echo $ROOT") {
            break
        }
    }

    "Gut. So, nun brauchen wir ein wenig Magie... *pling*"

    "[Der Schrank rumpelt und ächzt]"

    run("mkdir -p $ROOT/schrank/magische_tür/tür{1..3}")
    run("touch $ROOT/schrank/magische_tür/tür2/rechter_schuh")

    "Im Schrank hat sich nun etwas verändert. Geh hinein und such den
    rechten Schuh."

    prompt {
        if run("pwd") == run("echo $ROOT/schrank/magische_tür/tür2") {
            if command =~ "ls" {
                "Du hast ihn gefunden! Nun komm wieder aus dem Schrank
                heraus!"

                break
            }
        }
    }

    prompt {
        if run("pwd") == run("echo $ROOT") {
            break
        }
    }

    "Gut! So, das war eine Einführung in `ls` und `cd`. Hier ist das
    Tutorial erstmal zu Ende! Danke!"
}
]]>
Bachelorarbeit, Woche 3: Erstes Skripting bachelorarbeit-woche-3 2013-07-30T22:52:00+02:00 Sebastian Morr sebastian@morr.cc Literatur

Literatur

Ich war letzte Woche in der Unibibliothek. Wissen ist Macht!

Coole Entdeckung waren insbesondere die Tagungsbände der International Conference on Interactive Digital Storytelling, von der ich noch nie etwas gehört hatte. Außerdem das klassische “Drachenbuch” über Compilerbau sowie Grundlagen über Mensch-Computer-Interaktion und Computer-Didaktik. Wird mich bestimmt alles auf die ein oder andere gute Idee bringen.

Erste Skripting-Versuche

Ich habe um die cli-API von letzter Woche eine dünne Schicht von Methoden gelegt, die es mir ermöglichen, einfache Tutorials zu verfassen. Dabei entstand eine primitive interne domänen-spezifische Sprache, das heißt, sie ist Untermenge einer “normalen” Mehrzwecksprache. In meinem Fall heißt das, ich kann ein Programm in der Programmiersprache Go schreiben, wobei ich nur ganz bestimmte Methoden und bestimmte Sprachelemente benutze, und mich dabei meiner Vision der nutsh-Sprache, in der die Tutorials verfasst werden sollen, langsam annähere.

Hier ist ein Beispiel:

func main() {
    Spawn("bash")

    gotoJail()

    bash.Execute("mkdir schuhkarton")
    bash.Execute("mkdir schrank")
    bash.Execute("touch schrank/jacke")
    bash.Execute("touch schrank/hut")
    bash.Execute("touch linker_schuh")

    Say("Hallo! Willkommen in der Nut-Shell! Ich möchte dir zeigen,
    wie du mithilfe der Kommandozeile schnell und einfach mit
    Dateien und Verzeichnissen umgehen kannst.")

    Say("Legen wir gleich los: Tipp mal `ls` ein und drück Enter.")
    for Prompt() {
        Output()
        if Command("^1s\n$") {
            Say("Das ist ein kleines L, keine Eins! Probier's
            nochmal!")
        }
        if Command("^ls\n$") {
            Say("Genau. `ls` steht kurz für \"list\" und zeigt dir
            die Dateien und Verzeichnisse an, die sich in deinem
            \"aktuellen\" Verzeichnis befinden. Die Verzeichnisse
            werden dabei blau dargestellt.")

            Say("Du bist gerade in einem Verzeichnis namens
            `/tmp/nutsh` - das steht auch in dem blauen Text, den
            wir \"Prompt\" nennen.  Der Prompt endet mit einem
            Dollarzeichen, das heißt soviel wie: \"Du kannst jetzt
            ein Kommando eingeben!\"")

            break
        }
    }

    Say("Du hast vielleicht gesehen, dass sich hier ein Verzeichnis
    namens `schrank` befindet. Um dieses zu deinem aktuellen
    Verzeichnis zu machen, tippst du `cd`, dann ein Leerzeichen und
    dann den Namen des Verzeichnisses, in das du möchtest. Begib
    dich doch mal \"in den Schrank\" und sieh dich darin um!")

    for Prompt() {
        Output()
        if bash.Test("$(pwd) = \"$ROOT/schrank\"") {
            if Command("^ls\n$") {
                Say("Genau. Hast du bemerkt, wie sich der Prompt
                geändert hat?")

                break
            }
        }
    }

    Say("Und wenn du wieder aus dem Schrank herausmöchtest? Die
    Abkürzung für das Verzeichnis oberhalb des aktuellen ist
    \"`..`\"!")

    for Prompt() {
        Output()
        if Command("^\\.\\.\n$") {
            Say("`..` ist der Name des Verzeichnisses, du musst noch
            dazusagen, was du damit machen möchtest. Um
            \"hinzugehen\", schreib `cd` davor.")
        }
        if Command("^cd\\.\\.\n$") {
            Say("Da fehlt noch ein Leerzeichen zwischen `cd` und
            `..`!")
        }
        if bash.Test("$(pwd) = \"$ROOT\"") {
            break
        }
    }

    Say("Gut. So, nun brauchen wir ein wenig Magie... *pling*")
    Say("[Der Schrank rumpelt und ächzt]")
    bash.Execute("mkdir -p $ROOT/schrank/magische_tür/tür{1..3}")
    bash.Execute("touch $ROOT/schrank/magische_tür/tür2/rechter_schuh")

    Say("Im Schrank hat sich nun etwas verändert. Geh hinein und
    such den rechten Schuh.")

    for Prompt() {
        Output()
        if bash.Test("$(pwd) = \"$ROOT/schrank/magische_tür/tür2\"") {
            if Command("^ls\n$") {
                Say("Du hast ihn gefunden! Nun komm wieder zurück!")
                break
            }
        }
    }

    for Prompt() {
        Output()
        if bash.Test("$(pwd) = \"$ROOT\"") {
            break
        }
    }

    Say("Gut! So, das war eine Einführung in `ls` und `cd`. Hier ist
    das Tutorial erstmal zu Ende! Danke!")
}

func gotoJail() {
    bash.Execute("ROOT=/tmp/nutsh")
    bash.Execute("rm -rf $ROOT")
    bash.Execute("mkdir $ROOT")
    bash.Execute("cd $ROOT")
}

Prompt() zeigt den Prompt an und liest Kommando und Ausgabe in spezielle globale Variablen. Output() gibt die Ausgabe aus, falls noch nicht geschehen. Say() gibt Text aus, Command() prüft, ob ein bestimmter String im letzten Befehl enthalten ist.

Es gibt noch zwei Bash-spezifische Funktionen: bash.Execute() führt eine Zeile Code aus und stellt sicher, dass er erfolgreich ausgeführt wird (der Rückgabewert ist dann Null). bash.Test() überprüft eine Bedingung mithilfe des test-Befehls.

Ähnliche Experimente habe ich mit Ruby als unterliegende Sprache gemacht und werde damit auch noch ein wenig weiter herumspielen, um herauszufinden, wie man das dahinterliegende semantische Modell später am besten organisiert. Was zum Beispiel noch gar nicht geht, sind “globale” Trigger, die sich über mehrere Zustände erstrecken (und hier zum Beispiel verhindern könnten, dass der Benutzer die Lektion über den nutsh-Ordner verlässt.

Zur Illustration folgt jetzt noch eine Nutsh-Sitzung, die aus oben stehendem Code resultiert. Die Farben gingen hierbei leider verloren, und mir fällt keine einfache Möglichkeit ein, sie hier in den Blog zu übertragen…

    Hallo! Willkommen in der Nut-Shell! Ich möchte dir zeigen, wie
    du mithilfe der Kommandozeile schnell und einfach mit Dateien
    und Verzeichnissen umgehen kannst.

    Legen wir gleich los: Tipp mal ls ein und drück Enter.

/tmp/nutsh $ ls
linker_schuh  schrank  schuhkarton

    Genau. ls steht kurz für "list" und zeigt dir die Dateien und
    Verzeichnisse an, die sich in deinem "aktuellen" Verzeichnis
    befinden. Die Verzeichnisse werden dabei blau dargestellt.

    Du bist gerade in einem Ordner namens /tmp/nutsh - das steht
    auch in dem blauen Text, den wir "Prompt" nennen. Der Prompt
    endet mit einem Dollarzeichen, das heißt soviel wie: "Du kannst
    jetzt ein Kommando eingeben!"

    Du hast vielleicht gesehen, dass sich hier ein Verzeichnis
    namens schrank befindet. Um dieses zu deinem aktuellen
    Verzeichnis zu machen, tippst du cd, dann ein Leerzeichen und
    dann den Namen des Verzeichnisses, in das du möchtest. Begib
    dich doch mal "in den Schrank" und sieh dich darin um!

/tmp/nutsh $ cd schrank
/tmp/nutsh/schrank $ ls
hut  jacke

    Genau. Hast du bemerkt, wie sich der Prompt geändert hat?

    Und wenn du wieder aus dem Schrank herausmöchtest? Die Abkürzung
    für das Verzeichnis oberhalb des aktuellen ist ".."!

/tmp/nutsh/schrank $ ..
bash: ..: command not found

    .. ist der Name des Verzeichnisses, du musst noch dazusagen, was
    du damit machen möchtest. Um "hinzugehen", schreib cd davor.

/tmp/nutsh/schrank $ cd ..

    Gut. So, nun brauchen wir ein wenig Magie... *pling*

    [Der Schrank rumpelt und ächzt]

    Im Schrank hat sich nun etwas verändert. Geh hinein und such den
    rechten Schuh.

/tmp/nutsh $ cd schrank
/tmp/nutsh/schrank $ ls
hut  jacke  magische_tür
/tmp/nutsh/schrank $ cd magische_tür
/tmp/nutsh/schrank/magische_tür $ ls
tür1  tür2  tür3
/tmp/nutsh/schrank/magische_tür $ cd tür1
/tmp/nutsh/schrank/magische_tür/tür1 $ ls
/tmp/nutsh/schrank/magische_tür/tür1 $ cd ..
/tmp/nutsh/schrank/magische_tür $ cd tür2
/tmp/nutsh/schrank/magische_tür/tür2 $ ls
rechter_schuh

    Du hast ihn gefunden! Nun komm wieder zurück!

/tmp/nutsh/schrank/magische_tür/tür2 $ cd ..
/tmp/nutsh/schrank/magische_tür $ cd ..
/tmp/nutsh/schrank $ cd ..

    Gut! So, das war eine Einführung in ls und cd. Hier ist das
    Tutorial erstmal zu Ende! Danke!

Bis nächste Woche! ;-)

]]>
Bachelorarbeit, Woche 2: Maschinenraum bachelorarbeit-woche-2 2013-07-22T11:33:00+02:00 Sebastian Morr sebastian@morr.cc Heute mit Kommandozeilen-Tokenizern, Test Driven Development und Bytes auf Papier.

Ich habe mich während der letzen zwei Wochen weiter intensiv mit Strategien beschäftigt, bei normaler, möglichst unverfälschter Kommandozeileninteraktion die Bestandteile “Befehl” und “Ausgabe” herauszulesen und bin jetzt an einem Punkt angekommen, an dem das ganz ordentlich funktioniert.

Da diese Komponente die allerunterste, schmutzigste Schicht sein wird, war es mir wichtig, damit anzufangen, denn sie ist Voraussetzung für alles Folgende.

Ziel der Command-Line-Interface-Komponente ist Bereitstellung einer solchen Schnittstelle:

// Start a new command line process and initialize it
c := cli.Spawn("bash")

// Repeat the following forever
for {
    // Display the prompt and wait until the user enters a command
    cmd := c.ReadCommand()

    // Post-command, pre-execution logic

    // Wait for the command to terminate, return the output and
    // whether it was interactive
    output, wasInteractive := c.ReadOutput()

    if (! wasInteractive) {
        // Post-execution pre-output logic

        // If it wasn't, the user hasn't seen any output, print it
        fmt.Print(output)
    } else {
        // Otherwise, the output was already printed to the user
    }

    // Post-output logic
}

Interaktiver Modus

Bei der “Interaktivität” geht es um Programme, die im Vordergrund laufen, also auf Eingaben des Benutzers warten und darauf reagieren. Beispiele sind Texteditoren oder Pager, Programme, die einen langen Text anzeigen, in dem man dann hoch- und runterscrollen kann. Bei dieser Art von Programmen kann man nicht auf die Ausgabe warten, sondern muss sie dem Benutzer schon anzeigen bevor der nächste Prompt kommt.

Bisher löse ich das über Timer: Wenn ein Befehl länger als x Millisekunden läuft, schalte ich in den “interaktiven Modus”, der die Ausgabe direkt ausgibt. Man verliert dadurch die Möglichkeit, zwischen Terminierung des Befehls und Ausgabe des Befehls etwas zu tun, beispielsweise Bedinungen zu überprüfen oder Text auszugeben.

Aufbau des CLI-Moduls

Der Prototyp ist ja in Go geschrieben, was Nebenläufigkeit sehr einfach macht. In der folgenden Abbildung ist jedes Oval ein Thread (genauer: eine Go-Routine), die Kommunikation läuft über Channels, die man sich so ähnlich vorstellen kann wie UNIX-Pipes.

Aufbau des CLI-Moduls

startProcess ganz unten kommuniziert mit dem Kommandozeilen-Prozess. Über zwei Channels gehen Runen (Unicode-Zeichen) rein und raus. Die Ausgabe wird von tokenize gelesen, wo sie in Tokens zerlegt wird (Zeichenketten mit Typ, die Token-Typen sind “command”, “output” und “prompt”). Über den “runes”-Channel gehen die interaktiv geschriebenen Zeichen hoch. Die CLI macht damit dann High-Level-Kram. inputStdin pumpt vom Benutzer geschriebene Zeichen nach filterInput, auch von der CLI kommen Strings (z.B. Befehle, die Bedingungen überprüfen). filterInput macht schließlich die beschriebene Enter-Ersetzung und gibt das Resultat an den Prozess weiter. Es gibt eine zentrale “state”-Ressource (States sind “cmdinput”, “cmdecho”, “output” und “prompt”).

Erkennen des eingegebenen Befehls

Dazu habe ich letztes Mal schon etwas geschrieben: Ich fange ab, wenn der Benutzer Return drückt, und sende stattdessen “Ctrl-E Space Ctrl-U ☃ Backspace Ctrl-Y ☃ Backspace Backspace Return”. Das setzt den Cursor ans Ende der Zeile, fügt ein Leerzeichen ein (damit es, falls die Zeile vorher leer war, etwas zu löschen gibt), löscht die Zeile und kopiert sie in die Zwischenablage, schreibt ein spezielles Unicode-Zeichen als Marker, löscht den Marker wieder, fügt die Zwischenablage ein, sendet den zweiten Marker, und löscht diesen Marker und das Leerzeichen und sendet den Befehl. Auf diese Weise steht das eingegebene Kommando sauber zwischen den beiden Markern.

Das mit den Schneemännern ist natürlich nur eine vorläufige Lösung.

Erkennen des Prompts

Auch um den Prompt zu erkennen, benutze ich momentan Unicode-Marker am Beginn und am Ende des Prompts. Das führt zu Problemen, wenn der Benutzer den Prompt ändert oder ihn ausgeben will, ich weiß noch nicht, wie ich das lösen könnte. Aber diesen Ansatz behalte ich halt erst mal bei, bis mir etwas besseres einfällt.

Umgang mit mehrzeiligen Eingaben

Es gibt einige CLIs, die erkennen, dass ein Befehl beim Drücken von Enter “unvollständig” ist, und diesen dann noch nicht senden, sondern dem Benutzer die Möglichkeit geben, ihn fertig zu schreiben. Dabei wird ihm üblicherweise ein zweiter Prompt angezeigt, der sich vom normalen unterscheidet. Momentan schreibe ich andere Marker in diesen zweiten Prompt, machte nach dem oben beschriebenen Enter-Verfahren einen Lookahead, gucke mir also das nächste Ausgegebene Zeichen an. Ist es ein zweit-Prompt-Marker, wiederhole ich den Eingabeprozess und hänge am Schluss sämtliche so eingegebenen Zeilen zusammen.

Das funktioniert soweit gut, setzt aber natürlich Konfigurierbareit der Prompts voraus.

Versteckte Befehle

In den Tutorials werde ich später ausführlich Gebrauch von Befehlen “im Hintergrund” machen, die Bedinungen überprüfen, oder Trainingumgebungen einrichten. Dabei ergibt sich das Problem, dass diese in der Befehlsgeschichte auftauchen, wenn man sie an den Prozess sendet, mit dem der Benutzer auch arbeitet. Hier weiß ich noch nicht, wie ich die wieder daraus entferne/verberge. Befehle, die nicht auf den internen Zustand des CLI zugreifen, könnte man vielleicht in einer zweiten Instanz ausführen?

Test Driven Development

Ich mache stets gute Erfahrungen mit “Testgetriebener Entwicklung”. Dabei geht es darum, automatisierte Tests zu erstellen, die eine korrekte Funktionsweise des eigenen Codes sicherstellen. Der eigentliche Trick dabei ist, diese Tests vor dem Code zu schreiben, dadurch macht man sich selbst sehr gut klar, welche Anforderungen es gibt.

  1. Test schreiben. Der Test will Code benutzen, den es noch nicht gibt, er lässt sich deshalb nicht in ein Programm übersetzen.
  2. Gerade so viel Code schreiben, dass sich der Test übersetzen lässt. Der Test sollte nun fehlschlagen (dieser Schritt ist wichtig, um zu überprüfen, ob der Test korrekt geschrieben ist und tatsächlich fehlschlagen kann).
  3. Den einfachsten Code schreiben, der den Test erfolgreich sein lässt.
  4. GOTO 1.

Mich hat damals dieser Text zu TDD stark beeindruckt: An Extreme Programming Episode.

Planung

Diese Woche möchte ich hautpsächlich zwei Dinge tun: Zum einen Literaturrecherche nach Themen rund um Kommandozeilen, Sprachentwurf und Compilerbau, Didaktik. Zum anderen Schreiben einiger Beispiel-Tutorial, um genauere Anforderungsanalyse für die nutsh-Sprache machen zu können.

Und zum Schluss noch: Das passiert, wenn man zu sehr auf seinen Bytes herumkloppt und irgendwie einen “Drucken”-Befehl dabei erzeugt, der versucht, die Steuerzeichen einer Vim-Sitzung auszudrucken:

Bytes auf Papier!

]]>
Bachelorarbeit, Woche 0: Themenvorstellung und Prototyping bachelorarbeit-woche-0 2013-07-08T14:36:00+02:00 Sebastian Morr sebastian@morr.cc Heute mit: PDF-Präsentations-Software, ehrlichem Feedback, Zeitplanung, Anfängen des Shell-Wrappers und dem Führen eines Logbuchs.

Themenvorstellung

Letzten Montag habe ich den Themenvorstellungs-Vortrag vor meiner Erstprüferin und einigen Institutsmitarbeitern gehalten. Ich verlinke hier nochmal die endgültige Fassung der Präsentation mit mehr Zwischenschritten und leicht umsortierten Folien.

Zur Präsentation des PDFs habe ich pdfpc (“PDF presenter console”) benutzt, das einem die verbleibende Zeit, die nächste Folie, den Forschritt innerhalb der Präsentation sowie Notizen anzeigen kann, das eine Folienübersichts- und eine Schwarz-schalt-Funktion hat und das insbesondere mit den “Zwischenschritten” innerhalb von LaTeX-beamer-Präsentationen klarkommt. Sehr empfehlenswert!

Das Feedback war kritisch und ehrlich: Die Zuhörer stellten die Überlegenheit eines interaktiven Tutorials gegenüber einem herkömmlichen in Frage und äußerten insofern stärkeres Interesse an der Evaluation, als ich erwartet hatte. Ich glaube, mein “Adventure”-inspiriertes Beispiel war zu verwirrend und lenkte von der eigentlichen Idee ab. Wir diskutierten viel über die Generalisierbarkeit des Systems, die ich nach wie vor für machbar halte; über Edgecases (und “böse” Benutzer, die das System austricksen wollen) - ja, die wird es unvermeidlicherweise geben, man muss möglichst viele Fehlerfälle automatisiert abfangen; und darüber, dass eine Unterstützung bei Syntaxfehlern nur begrenzt möglich ist. Schöne Anregungen waren, in Shells den Rückgabewert von Programmen zu beachten, und ein Tutorial so dynamisch zu machen, dass bei “Vergessen” eines Befehls wieder zu dem jeweiligen Abschnitt zurückgesprungen werden kann.

Anmeldung

Am Mittwoch, dem 3. Juli, habe ich dann die Arbeit dann im Sekretariat des Instituts angemeldet. Ab jetzt tickt die Uhr, ich habe 4 Monate Zeit bis zur Abgabe, die also - so wurde mir von Seiten des Prüfungsamtes inzwischen bestätigt - spätestens am 3. November erfolgen muss.

Gleichzeitig habe ich zugesagt, beim kommenden Vorkurs Informatik mitzuwirken, in dem ich die Nut Shell an Studienanfängern aus informatiknahen Fächern ausprobieren möchte. Der Vorkurs beginnt am 16. September, ich habe also 10 Wochen, um eine vernünftige Implementierung zu bauen, und dann noch 7 Wochen, um die Arbeit aufzuschreiben und die Evaluation auszuwerten. Sounds reasonable.

Bei der Anmeldung wird auch der Titel festgelegt, die Professorin fand meinen Arbeitstitel zu lang, während es meinem Betreuer gefiel, den Namen des Frameworks in den Titel mitzunehmen, insofern lautet dieser nun

The Nut Shell – A Framework for Creating Interactive Command Line Tutorials.

Damit bin ich auch sehr zufrieden :-)

Prototyp

Mein derzeitiges Ziel ist prototyp-hafte Umsetzung eines Programms, das sich um einen Kommandozeilen-Prozess wickelt, Ein- und Ausgabe mitschneidet und erkennt, welche Befehle eingegeben werden, was die Ausgabe dieser Befehle ist und wie der Prompt lautet (die Zeichensequenz die dem Benutzer signalisiert “ich bin bereit, du kannst mir jetzt einen neuen Befehl geben”). Das ist weniger einfach, als es klingt, weil in Ein- und Ausgabe diverse Steuerzeichen auftauchen (in der Eingabe Tasten und Tastenkombinationen zur Bearbeitung der momentatnen Kommandozeile, in der Ausgabe diverse sogenannte Escapesequenzen, die von dem Programm in dem die Kommandozeile läuft (dem Terminalemulator) als Aufforderungen verstanden werden, den Cursor zu bewegen, Teile der Zeile zu löschen oder die Textfarbe zu ändern (eine Übersicht der Escape-Codes, mit denen mein Terminal-Emulator urxvt zurechtkommt, findet der Linuxbenutzer unter man 7 urxvt). Die Abgrenzung der drei genannten Bestandteile ist alles andere als klar.

Das Teilproblem, das eingegebene Kommando zu erkennen, denke ich inzwischen zufriedenstellend gelöst zu haben: Alle mir bekannten Kommandozeilen-Interpreter unterstützen die beiden Tastenkombinationen Ctrl-U und Ctrl-Y, welche die momentan eingegebenen Zeichen löschen und in einer internen Zwischenablage speichern bzw. die Zwischenablage wieder einfügen. Diese Kombinationen sind deshalb so verbreitet, weil sie Bestandteil einer Programm-Bibliothek namens Readline sind, die praktisch überall benutzt wird, wo es darum geht, Text vom Benutzer einzulesen. Was ich also momentan mache, ist den Benutzer die Kommandozeile wie gewohnt eingeben zu lassen, dabei kann er tab-completion, Pfeiltasten, etc. benutzen. Sobald er jedoch Enter drückt, sende ich die Sequenz “Ctrl-U Anfangs-Marker Ctrl-Y End-Marker Enter” an den unterliegenden Prozess, was dazu führt, dass in der Ausgabe der tatsächlich eingegebene Befehl sauber zwischen zwei Markern steht. Nach guten Markern muss ich noch suchen (unbenutzte Escape-Sequenzen?), momentan schreibe ich einfach einen bestimmten String und lösche ihn direkt wieder…

Andere lustige Ansätze waren übrigens:

  • Intern ein eigenes Readline mitlaufen lassen – funktioniert aber mit vielen Shell-spezifischen Features nicht.
  • Die bash hat die Option set -x, um Befehle vor der Ausführung nochmals ganz anzuzeigen, soetwas ist mir aus anderen CLIs aber nicht bekannt.
  • Pfeil hoch und Pfeil runter senden, was bei command line interfaces mit Befehlshistory ebenfalls dafür sorgt, dass die Befehle erneut geschrieben werden.
  • Auf Enter warten, und dann (in der bash) “Pos1 CMD=" End "; echo "$CMD"; eval "$CMD"” senden. Aua.
  • History-Datei auslesen. Manche Shells haben aber keine, und die wird oft nur verzögert geschrieben.

Probleme bereiten noch mehrzeilige Befehle. Wie ich allgemein den Beginn des Prompts erkennen könnte, weiß ich überhaupt noch nicht. Auf einen konfigurierbaren regulären Ausdruck plus Pause warten?

Logbuch

Ich mache hervorragende Erfahrungen damit, beim Arbeiten stets die Seite “Bachelorarbeit” meines privaten Wikis offenzuhaben und Ideen, Probleme, wichtige Codeschnipsel, Quellen und Resultate mit Timestamps reinzuschreiben. Das hilft hervorragend gegen „Wo war ich stehengeblieben…?“, und macht mir selbst viele Dinge klarer. Ich hoffe, dass es das spätere Zusammenschreiben wesentlich vereinfacht, weil einfach vieles schon in schriftlicher Form vorliegt.

Dieses “Führen eines Logbuches” erleichtert auch das Schreiben dieser Blogposts ungemein, weil ich einfach nur den ganzen Kladderadatsch seit dem letzten Post durchgucken und zusammenfassen muss ;-)

]]>
Bachelorarbeit, Woche -1: Zukunftspläne bachelorarbeit-woche-minus-1 2013-06-24T18:21:00+02:00 Sebastian Morr sebastian@morr.cc Nanu? Im letzten Blogpost schrieb ich doch noch, diese Woche würde die Arbeit angemeldet? Ja, aber wegen Terminüberschneidungen wurde das noch eine Woche nach hinten geschoben. Also, Woche -1. Was habe ich gemacht?

Präsentation zur Themenvorstellung

Am Institut, an dem ich die Arbeit schreibe, ist es üblich, dem Institutsleitenden die Themen von Abschlussarbeiten in einer kurzen mündlichen Präsentation vorzustellen. Hier ist die derzeitige Fassung. Die Inhalte sind weitgehend identisch zum Text des letzten Posts, neu hinzugekommen sind ein paar Bildchen und eine Animation des Beispiels.

Es gibt ein offizielles LaTeX-Paket namens tubslatex, mit dem man unter anderem auch Präsentationen im Corporate Design der TU erstellen kann. Die Beispieldokumente sehen sehr schick aus, und die Dokumentation taugt auch, es ist mir allerdings trotz einiger hartnäckiger Versuche nicht gelungen, das Paket unter Arch Linux zu installieren. Probleme machen die Schriftarten, man kann zwischen Arial und der „Hausschrift“ Nexus wählen. Bei ersterer fehlte eine benötigte Datei, Nachinstallieren führte zu anderen lustigen Fehlermeldungen, die ich bisher nicht verstanden habe. Bei zweiterer „funktionierte“ alles, die angezeigte Schrift hatte aber ein abscheuliches Kerning und war auch garantiert nicht Nexus. Naja. Ich benutze jetzt Dominiks Template mit einigen kleinen Farbanpassungen, das tut auch, was es soll.

Sprache

Als Training möchte ich die Arbeit auf Englisch schreiben. Letztes Semester habe ich Scientific Writing gehört und fühle mich dementsprechend gut darauf vorbereitet. Ich habe mit mehreren Personen gesprochen, die sehr gute Erfahrungen damit gemacht haben, englische Abschlussarbeiten zu schreiben.

Mein Betreuer wies mich darauf hin, dass die Lektionen für die bash-Shell, die wir im Vorkurs auf die Ersties loslassen wollen, auf Deutsch verfasst sein sollten. Berechtigter Einwand, insofern werde ich versuchen, die eigentliche Arbeit klar von den beispielhaften Anwendungen zu trennen, und Beispiele für den Fließtext notfalls zu übersetzen.

Hier schreibe ich über die Arbeit bisher auf Deutsch, um der Leser-Zielgruppe entgegenzukommen.

Titel

Der Arbeitstitel lautet bisher

Design and Implementation of a Framework for Creating Interactive Command Line Tutorials

und beschreibt die Sache aus meiner Sicht recht gut. Bis zur Anmeldung habe ich dennoch Zeit, daran herumzufeilen. Reizvoll fände ich beispielsweise, den Namen des Frameworks (The Nut Shell) noch als Vorsatz mit hineinzunehmen.

Prototyp

Und ich hatte auch ein wenig Spaß am Gerät: Ich habe einen winzigen Prototypen in der Sprache Go gebaut, der sich um einen Kommandozeilenprozess wickelt und dessen Standardein- und -ausgabe mit dem aufrufenden Terminal verknotet. Das geht ganz prima, man kann dadrin auch Vim starten :-)

Am Rande: Mit Go beschäftige ich mich erst seit einigen Wochen, möchte aber bereits sagen: C schmeckt hervorragend, wenn man es kurz vor dem Verzehr durch Go ersetzt. Ernsthaft, die Sprache ist so gut, wie alle sagen. Mehr dazu vielleicht mal später.

]]>
How to blog with nanoc how-to-blog-with-nanoc 2013-06-23T13:41:00+02:00 Sebastian Morr sebastian@morr.cc This is a follow-up to “History of morr.cc”. I’d like to show you how this blog is created using the fantastic static site generator “nanoc”.

Why would you want static sites?

To be short: Simplicity, security, speed.

OK, how does it work?

You can look at this blog’s source code on GitHub.

  • The content folder contains the blog posts, assets related to the layout (in assets), and some top-level pages and files. Texts are written in the Markdown format, a simple markup language that is even comfortable to read as plain text (for example, look at this post’s source). Each post has a header containing at least a title, the date of publication, and some tags in YAML format.

  • The layouts folder contains some HTML templates with eRuby tags.

  • The lib folder contains helper functions you can use in the eRuby tags and a custom filter that reformats HTML nicely using tidy-html5. More about that later.

This is all tied together by the Rules file, which contains several types of instructions. Files in the content directory are treated as items with an identifier that is the file’s path minus their filename extension. A file like content/how-to-blog-with-nanoc/index.md has the identifier /how-to-blog-with-nanoc/.

  • compile statements say “for an item with this identifier, apply these filters (which evaluate eRuby tags, convert Markdown to HTML, and tidy the result) and layouts (which stuff the result into one of the layout files). Nanoc comes with some basic filters, but its easy to write your own, too.

  • route statements say “for an item with this identifier, put the processed content here”.

  • layout statements say “for a layout with this identifier, apply these filters.

  • preprocess statements can be used to create new items, like pages for each tag, or to do some other preprocessing.

Now, when executing nanoc, all these rules are applied and the result is put in the output folder. nanoc deploy uploads this folder to my web server (the configuration for that is in nanoc.yaml. Very handy is nanoc aco, that starts a web server locally, lets you preview your site and autocompiles everything that is needed when refreshing a page.

And, that’s really everything.

Resources

nanoc.ws contains everything you need to know to build your own nanoc powered site. Have fun!

]]>
Why you might like DuckDuckGo why-you-might-like-duckduckgo 2013-06-18T00:25:00+02:00 Sebastian Morr sebastian@morr.cc DuckDuckGo is an alternative search engine. I’ve made it my default search recently. Let me tell you about the differences to Google, Bing and the like – and why you should care.

Privacy concerns

Search leakage

Normally, when you click on a link, the browser transmits the URL you came from to the visited site. This is called referer information, and it’s nice for a website owner to see where his visitors are coming from. But likewise, when you click on a link after a Google search, the site you visit will see your search query - because it was part of the URL. You might not want them to know that you stumbled across their site while searching for “cheap viagra”.

DDG prevents this so-called search leakage by default. The sites will know that you visited them, but they won’t know your search term.

See donttrack.us for more information about this problem.

Information not collected

DDG does not collect any information about you. It does not build up a search history, does not create profiles about you. You should care about this especially because of two reasons:

First, DDG cannot give information about you to law enforcement, because no information exists. You don’t have to fear “accidents” or malicious hackers, too.

Second, it helps to reduce the filter bubble effect. Because Google knows what you like, it will display results that comply with your beliefs on the top. You are trapped in a “bubble” and will never see other opinions. Do you want this?

For an illustrated explanation of this topic, see dontbubble.us.

Practical benefits

Goodies

DDG has some major time-savers built in. Try to search for

All querys add a helpful “instant result box” to the top of the search results. And there are so many of them. Oh, and you can create your own plugins, of course.

!Bangs

For searching on sites directly, you probably have some search plugins in your browser, maybe in some kind of dropdown menu? Yeah, well, DDG has those built-in. Simply prefix your search term with “!sitename “. Examples:

This is especially awesome when DDG is the default search engine for your address bar. Instant search everywhere, on every device! And there are OVER 3000 different bangs!

Other random stuff I like

You can navigate your search results with “j” and “k”, like in Vim, and follow a link with “l”. Of course, you can also use the arrow keys.

In the settings, you can set “Advertisements” to “Off”. In this case, they kindly ask you to support them on the microdonation platform Flattr. Awesome move.

When you want to go directly to the first hit, use “I’m feeling ducky” in the dropdown menu or simply prefix your search with “! “ or “\”.

And of course, there’s a Let me DDG that for you!

Conclusion

Give DuckDuckGo a try! Visit their about page for a nice video and basic setup instructions and go to the Support Center for many more details.

]]>
Bachelorarbeit, Woche -2: Grundidee bachelorarbeit-woche-minus-2 2013-06-11T19:50:00+02:00 Sebastian Morr sebastian@morr.cc In den kommenden Monaten möchte ich hier über den Entstehungsprozess meiner Bachelorarbeit berichten. Das soll mich zu einer strukturierten, kontinuierlichen Arbeitsweise motivieren – und vielleicht ist es auch ganz unterhaltsam zu lesen, in welche Fallen und Probleme ich so laufe. :-P

Das Thema geistert mir schon seit einiger Zeit im Kopf herum, und die Bachelorarbeit ist eine gute Gelegenheit, sich mal intensiv damit auseinanderzusetzen. Hier ist die erste Themenbeschreibung:

Es geht um Entwurf und Umsetzung eines Frameworks zum Erstellen interaktiver Kommandozeilen-Tutorials.

Zur Motivation: Momentan kranken Tutorials zum Erlernen von Shells oder Skriptsprachen meiner Meinung nach daran, dass der Benutzer seine Aufmerksamkeit zwischen dem Terminal und dem Textdokument, das das Tutorial enthält, hin- und herwandern lassen muss. Das Tutorial ist statisch und kann weder auf Fehler des Benutzers reagieren, noch die Erfüllung von Lernzielen überprüfen. Die Tutorials, die mit dem angestrebten Framework erstellt werden können, unterscheiden sich insofern davon, als dass der erklärende Text mit den Benutzereingaben und den Reaktionen der Kommandozeile verwoben sein soll.

Vorbilder sind dabei auf der einen Seite Text-Adventures bzw. Multi-User Dungeons, die ein ähnliches User Interface haben, als auch existierende Tutorials a la “Try $LANGUAGE in your Browser” (siehe z.B. Try Ruby, Try Git, Try Haskell), die allerdings noch bei weitem nicht so dynamisch sind, wie ich mir das wünschen würde.

Hier folgt eine beispielhafte Sitzung, die im Stil eines Text-Adventures ausgeschmückt ist. Diese Erzählweise ist natürlich optional, gefällt mir aber sehr. Der eingerückte Text ist die Handlung, die automatisch erscheint, der Rest ist normale Shell-Interaktion.

    "Eines der wichtigsten Dinge, die ich dir beibringen möchte, ist
    Hilfe zur Selbsthilfe. Hier, ich möchte dir ein Geschenk
    machen."

    Der Meister zieht ein dickes, in Leder gebundenes Buch hervor
    und reicht es dir. Es trägt die Aufschrift 'man'.

    "Dieses Buch enthält das gesammelte Wissen über unsere Welt. Um
    etwas darin nachzuschlagen, sag einfach 'man', gefolgt von dem
    Kommando, über das du etwas wissen möchtest. Möchtest du das
    einmal ausprobieren? Sag dann 'q' wie 'quit', um das Buch wieder
    zu schließen."

$ man mkdir

    Das Handbuch beginnt, vor dir in der Luft zu schweben und
    schlägt von selbst die Seite über 'mkdir' auf.

[Anzeige der manpage]

    Das Buch schließt sich wieder.

    "Gut. Ich möchte dir eine Aufgabe stellen, die dich im Umgang
    mit dem Handbuch schulen wird. Ich habe in dieser Höhle eine
    unsichtbare Glaskugel verborgen. Finde heraus, wie du das
    Kommando `ls` dazu bringst, verborgene Gegenstände anzuzeigen.
    Dann bring die Glaskugel in die Abstellkammer."

$ ls
abstellkammer/
schriftrolle
$ man ls

[Anzeige der manpage]

$ ls - A

    Die Luft um dich herum vibriert, und du spürst, wie das
    Universum dich anschreit:

ls: cannot access -: No such file or directory
ls: cannot access A: No such file or directory

    "Oh, da hast du dich versprochen: Zwischen das '-' und das 'A'
    gehört kein Leerzeichen!"

$ ls -A

    Für einen kurzen Moment erfüllt helles Licht die Höhle und du
    kannst sehen, was sich darin befindet:

abstellkammer/
schriftrolle
.glaskugel

    Kurz darauf wird es wieder dunkler.

$ rm .glaskugel

    Ein Blitz fährt aus deinem ausgestreckten Zeigefinger und trifft
    die Glaskugel, welche in tausend Stücke zerspringt.

    Der Meister seufzt, und setzt eine neue Glaskugel auf den Boden.

    "Diese Dinger sind teuer! Bitte bring diese in die
    Abstellkammer."

$ echo hilfe

    Deine Stimme hallt von den Wänden der Höhle wieder:

hilfe

    "Um Dinge zu bewegen, sag `mv`. Lies den ersten Abschnitt im
    Handbuch, um zu erfahren, wie man das Kommando benutzt."

$ man mv

[Anzeige der manpage]

$ mv .glaskugel abstellkammer

    "Ausgezeichnet! Du siehst, wie hilfreich das Handbuch ist. Es
    enthält übrigens auch einen Eintrag über sich selbst."

    "Pass gut auf dein Handbuch auf. Es wird dir ein treuer Freund
    werden."

Einen Codenamen habe ich auch schon: nutsh, von “in a nutshell” = “kurz und bündig”. Das Framework soll universell für beliebige Kommandozeileninterfaces einsetzbar sein und könnte beispielsweise zum Lehren folgender Systeme benutzt werden:

  • System-Shells (bash, zsh, …)
  • Read-Eval-Print-Loops diverser Programmiersprachen (Ruby, Python, Haskell, …)
  • Tools wie Git oder andere VCS’e, Makefiles, diverse Compiler-Toolchains
  • UNIX-Verzeichnisstruktur (das dann “erkundet” werden kann und in dem man ebenfalls Aufgaben erledigen soll)

Um das System zu realisieren, muss eine domainspezifische Sprache zur Beschreibung der Tutorials entworfen werden, mit deren Hilfe man bequem Ziele, Fehlerabfragen mit anschließenden Hilfestellungen, Vor- und Nachbedingungen sowie Constraints eingeben kann, die letztendlich eine große state machine modellieren. Der Entwurf einer solchen Sprache wäre vermutlich Hauptproblem der Arbeit. Diese Beschreibung muss dann geeignet geparst und interpretiert/ausgeführt werden (ich habe die Compiler-Vorlesungen gehört).

Technisch soll es so umgesetzt werden, dass nutsh gebuffert mit dem darunterliegenden interaktiven Prozess kommuniziert und – für den Anwender verborgen – Bedingungen überprüft und Veränderungen an der Umgebung vornimmt. Die Eingaben des Benutzers und die Ausgaben des Prozesses werden durchgereicht, aber wie oben mit Anmerkungen versehen (Hinweise auf Tippfehler oder falsche Syntax etc.). Herausforderungen werden hierbei Steuerungskommandos (Pos1, Pfeiltasten) und Shell-spezifische Funktionen wie Tab-Completion sein, die von nutsh verstanden werden müssen, damit das eingegebene Kommando vollständig ermittelt werden kann.

Ein nice-to-have feature wäre ein Webinterface, um nutsh nicht lokal installieren zu müssen.

Soweit die erste Beschreibung. Das Thema kam ganz gut an, ich werde sehen, dass ich möglichst große Teile des Systems verallgemeinere, um es wissenschaftlich wiederverwertbar zu machen.

Nächster Schritt ist dann eine mündliche Themenvorstellung in zwei Wochen, bevor die Arbeit angemeldet wird.

]]>
Keeping a personal wiki keeping-a-personal-wiki 2013-06-05T18:18:00+02:00 Sebastian Morr sebastian@morr.cc In this article, I’d like to show you which tools I use to keep a personal wiki and what I do with it.

Short history

I’ve been keeping text files about personal stuff since 2007. It started with a diary, but expanded to several text files soon (todo, ideas, quotes, …). They contained indented lists, I had Vim macros in place to fold and unfold them (a format I now call vimgirl).

Over the time, I discovered more uses for my directory of text files: GTD lists, brainstorming sessions, command line tricks, lent stuff, all kinds of collections - heck, I even kept my appointments in nested plain text files at some point, which worked surprisingly well.

Then, nothing happened. Then, I created Vimboy.

Vimboy

Vimboy is a Vim plugin that does almost nothing. You have a folder with text files, and when one file mentions the name of another file, it automatically links there. Plus, you get a mapping for quickly deleting the current file, and pressing return creates a new page named after your visual selection/the word you are on. That’s it.

Screenshot of Vimboy

Vimboy also has a “manual link mode”, where you have to use [square brackets] to create links, but since a very special incident where autolinking created an UBERAWESOME association, I recommend automatic links.

I’ve named my wiki BrainDump because I’ve come to see it as exactly this: A storage extension for my brain. Once information is dumped, it’s safe, doesn’t bother you anymore and you can look it up when you need it later. This frees up your mind for important stuff.

When switching to Vimboy, the file’s format changed to something like Markdown, although formatting is completely up to you.

I’m using BrainDump as: An address book, howtos for myself, my clothing sizes, travel packing list, time & goal tracking, geek codes et cetera, chores planning and speedruns, notetaking in classes, idea management, project overviews, online accounts list, quotes, lists of things I want to read/watch/eat/play, recipes, diary, decision making, ratings of cheese/chocolate/wine.

A shell script called wiki supports fast creation and access to wiki pages, I have tab completion in place, too. For full text search, I use ack.

RoboBoy

RoboBoy is a recent addition to the *boy family: An Android application you can use to sync your wiki among main computer and smartphone using Git. It’s quite hard to set up right now and has its quirks, but I like always taking my brain extension with me ™.

Screenshot of RoboBoy

webboy

Finally, webboy is a Markdown-formatted-Vimboy-wiki-to-HTML compiler. I don’t use it right now, but if you’d like to keep a public wiki, or dislike reading text in the terminal, this is for you.

Conclusion

If you never kept a personal wiki, I encourage you to try it! If you dare to use the *boy suite, feedback is very welcome. You can find detailed documentation for the tools mentioned on their GitHub pages.

]]>
History of morr.cc history-of-morr-cc 2013-05-28T00:00:00+00:00 Sebastian Morr sebastian@morr.cc 2005: Plain HTML

Sometime about 2005, I tought myself HTML (with the formerly great site SELFHTML) and created my first home page, with lots of <font> tags and primary colors… It had very premature content and I remember it displaying a “construction site” GIF the whole time it was online. I used the webspace we were given at my school.

2006-2007: CSS, XHTML and m4

From the second iteration onwards, I have backups. In 2006, I learned CSS and XHTML and created this site that borrowed heavily from the W3C’s “Chocolate” Core Style. The “0b5cur3 933k 53c7!0n” contained things like forkbombs, a Geek Code and UNIX russian roulette. It was created by hand.

I got annoyed copying stuff around, and started using Makefiles and m4 macros for including the header and footer automatically. The content mainly remained the same, the main page displayed a cool CSS unfolding effect when you hovered over the categories.

The end of 2007 saw a redesign:

2008-2010: Iwahn

In 2008, I wrote a Ruby script called Iwahn (“I want a homepage NOW!”) that compiled Markdown files to XHTML. It understood nested folder structures and created appropriate navigation menus.

Up to this point I didn’t care much about stable URLs as I disallowed any bots on my site.

2010-2011: Ruby blog

In 2010 came two big changes: I migrated to a new domain, morr.cc, and to a new structure, a blog! It was powered by a heavily nanoc-inspired Ruby script and featured a lot of new content! It had an RSS feed and did quite a lot of SEO.

2011-2012: attoc

I was quite happy with this setup, and I’m not sure why I moved away from it. But in 2011, I switched to a “nerdy wiki”, powered by Vimboy and the simplest compiler I could think of: A 40-line shell script called attoc (get it? It’s smaller than nanoc ;-)

This system saw a redesign to avoid ASCII art in Google snippets (which could have been done with CSS3, too, but meh), using Twitter’s Bootstrap and using git log as a blog on the frontpage, an idea I still like very much.

But in the end, it was too unflexible, so I build something different again.

2012-2013: Almightree

I wrote a piece of JavaScript that transformed a nested tree of <ul>s to a foldable, searchable and zoomable website, and called it Almightree. Neat thing about this was that the URL equaled the search term, and the page refolded itself to display the search results as good as possible.

Downside included slow loading on old mobile devices and the inability to be crawled by robots, as they don’t interpret JavaScript. Maybe could have been solved with caching.

2013: Nanoc

And finally, this is my second attempt to do proper, neat blogging. I decided to push it down into the blog subdomain, to hopefully keep it alive there when I’ll want a different kind of site in the future…

]]>
RoboBoy roboboy 2013-04-11T00:00:00+00:00 Sebastian Morr sebastian@morr.cc http://github.com/blinry/roboboy ]]> Seminar talk: Stitch Meshes stitch-meshes 2013-02-15T00:00:00+00:00 Sebastian Morr sebastian@morr.cc For a computer graphics seminar, I and presented Cam Yuksel et al.’s (awesome) paper Stitch Meshes for Modeling Knitted Clothing with Yarn-level Detail:

Talk

I also designed a website which contains a short summary of the paper.

]]>
informatiCup 2012: PacMap pacmap 2012-03-23T00:00:00+00:00 Sebastian Morr sebastian@morr.cc PacMap is a little Android game that combines elements of Geocaching with those of crossword puzzles.

It was written in the beginning of 2012 with Sandra Hesse and Felix Geilert. It’s our contribution to the informatiCup 2012 competition, where we reached the fourth place.

You can read the (german) documentation and take a look at our talk here:

Documentation Talk

You can also download and play the app, of course!

PacMap screenshot

]]>
git-hydra git-hydra 2012-02-12T00:00:00+00:00 Sebastian Morr sebastian@morr.cc http://github.com/blinry/git-hydra ]]> Stratum 0 logo stratum-0-logo 2011-06-16T10:29:00+01:00 Sebastian Morr sebastian@morr.cc This is by far my most popular and widely-used logo up to this point. When Stratum 0, a Hackerspace in Braunschweig was founded, we started a logo contest, which generated a large body of rather nice logos! But one of my suggestions won:

Stratum 0 logo

It has been described as “runic”, and works quite well in low resolutions. The signet incorporates both the S and the 0 of Stratum 0, and the hour glass connects it to the theme of time, because the name originates from the Network Time Protocol (there’s an atomic clock in Braunschweig). The font used in the text variant is Yanone Kaffeesatz.

I gave the logo a very permissive license, inspired by the license of Tux, the logo of the Linux kernel:

The copyright owner, blinry, allows free use for everything and everyone. The only condition is that you acknowledge him if someone asks.

And I’m very glad I did! These days, it’s used on clothing, in countless print products, on signs, stickers, and presentation slides, it appeared in a comic, has been 3D-printed, sawn out of wood, 3D-modelled, quadtree’d, ended up in another logo for the CTF team Stratum Auhuur… and is used by the band Downshifter (yes, they asked, and yes, the license was meant to be that permissive).

Here are some older variations:

Hour glass variations

Back then, I had a number of other ideas, as well. If you want to use those for your own hackerspace or whatever – they are still free, just get in touch! :)

It's hacking time!

Out of sync

Time transmission

Key and hour glass

Stratum hole

And finally, here are two logos from before the final name for the hackerspace was even chosen! :) I still like the “Layer 8” one very much!

Base 38 and Layer 8

]]>
28C3: Tag 4 28c3-tag-4 2011-12-30T20:37:00+01:00 Sebastian Morr sebastian@morr.cc Programm heute: bup, ein auf Git basierendes Backup-System. Im Rahmen der Lightning Talks gab es ein paar Vorträge über die r0ket, unter anderem nochmal ein leicht verbessertes Massively-Multiplayer-Pong, bei dem ich jetzt mitspielen konnte. Ein anderes Team hat ein Dating-Programm geschrieben, dass einem ein gutes Dutzend Fragen stellt (Lieblings-Texteditor, etc.) und dann gut passende Partner vermittelt. Anschließend ein Workshop über Festplattenverschlüsselung, leider war der Host nicht da. Wir haben aber schnell angefangen, uns untereinander über Verschlüsselungstechniken zu unterhalten. Ein Talk, der erklärte, wie sich Quanteninformation von herkömmlichen Informationen unterscheiden: Qubits (Quanten-Bits) haben zwei Eigenschaften, von denen man jeweils nur eine messen kann, und dabei auch noch den Zustand des Qubits verändert. Das wurde schön anschaulich mithilfe von Socken erklärt. :-)

Mit zwei Stratum-Nullern (\o/!) gabs schließlich noch die traditionellen “Security Nightmares”, ein Rückblick auf vergangene Daten-Diseaster und eine Vorhersage der Unfälle des nächsten Jahres.

In der Abschlussveranstaltung werden immer Statistiken bekannt gegeben. Dieses Jahr haben wir OVER 9000 Flaschen Mate und 3000 Flaschen Flora Power getrunken (I am the 0,1%!), was wohl die gesamte Dezemberproduktion darstellte. Irgendwas knapp um die 100 TB Datenverkehr!

Wenn man per Kabel am Congressnetz hängt, hat man übrigens eine Ping zu google.de von 1.37 ms!

Congress-Mem ist übrigens das Geräusch einer auf Holzboden umfallender Mateflasche, ein sehr markantes primm-bi-bi-bimm. Jemand regte an, aus diesem Geräusch mal Pausenmusik zu komponieren. Weiteres Mem dieses Jahr war die wiederholte Aufforderung des NOCs “Use more bandwidth!”, offenbar war ihnen das Netz nicht ausgelastet genug…

Danach begann dann auch relativ schnell der Abbau. Ich ging noch in die c-base rüber, einen wenige hundert Meter vom bcc entfernt gelegenen Hackerspace. Whoa, Atmosphäre! Der Space hat ein Thema, nämlich “abgestürzte Raumstation”, das auch konsequent und an allen Ecken umgesetzt wurde. Das wirkt ein bisschen so, wie auf einem professionellen Weltraum-Themen-Geburtstag, viel blaues und schwarzes Licht, Blechverkleidungen an vielen Stellen, mit denen zum Beispiel der Eingang zum Tunnel ausgebaut wurde, leuchtende Tische aus Milchglas, Spiegelwände und verwirrende Plakate mit dem “Aufbau” der Raumstation. Das gab alles ein schönes Flair, konnte aber natürlich trotzdem die Quaderförmigkeit der Räume nicht verbergen. Der Getränkeautomat verkauft Mate und andere Hackerbrausen an die “crew” und an “aliens” zu unterschiedlichen Preisen. Anschauen musste ich mir auch die “Häutungsstation” und die “Entsorgungsstation”: Garderobe und Toilette. An letzterer waren schöne Symbole: Einmal ein Kreis mit Fliege drunter, einmal Kreis mit Fliege drauf… An der Decke viele wuchernde, mit Geschwüren versehene hell leuchtende Rohre, sonst relativ dunkel, mit Spotlichtern angestrahlte Urinale. Zum (wohl wesentlich größeren) Mitgliederbereich hatte ich dann allerdings keinen Zugang mehr.

Tja, da isser zuende, mein erster Congress. Ich denke, man konnte meinen Ausführungen entnehmen, dass ich absolut begeistert war und viele schöne Erfahrungen gemacht habe? Wenn man die Streams von zu Hause schaut, hat man mehrere Vorteile: Man kann schneller den Saal wechseln, wenn einem der Vortrag nicht gefällt, man hat immer einen Sitzplatz und gute Sicht, man hat es oft bequemer und leichtere Ess-/Trink-Versorgungsmöglichkeiten. Das ist ein guter Ersatz, bietet aber natürlich nicht alle Möglichkeiten, die eine persönlicht Teilnahme bietet. Daher werde ich mich nächstes Jahr wieder um ein Ticket bemühen! Es gab Andeutungen, dass der Congress nächstes Jahr evt. in einem größeren Gebäude stattfindet. Den Rest des Jahres verbringe ich jetzt damit, auf den 29C3 zu warten ;-)

]]>
28C3: Tag 3 28c3-tag-3 2011-12-30T05:06:00+01:00 Sebastian Morr sebastian@morr.cc Der durchschnittliche Congressteilnehmer, den ich hier mal Christian nennen möchte, ist männlich (hier ist ein gefühlter Frauenanteil von 5 Prozent) und um die 30. Pferdeschwänze sieht man viele, sie bilden aber nicht die Mehrheit, Christian hat kurze braune Haare. Eine Brille hat er auch nicht. Christian ist eher schlacksig. Er bewegt sich schnell und bleibt gerne abrupt in den Fluren stehen. In seinem Rucksack führt er eine Club-Mate und ein mit Stickern verziertes Thinkpad-Notebook mit sich, auf dem Linux mit einem Tiling-Window-Manager läuft. Christian trägt einen schwarzen Pullover und eine Bluejeans. Er bleibt tendenziell eher in seiner vertrauten Gruppe, ist auf Ansprache aber sehr freundlich und hilfsbereit.
Klone Christian einige hundert Mal mit einigen Mutationen, und, tadaa! Du hast die Congressteilnehmer!

Okay, heute habe ich gehört: Den CCC-Jahresrückblick, eine Vorstellung der Plattform Frag den Staat, die versucht, Politik ein bisschen transparenter zu machen, Überlegungen über ein modernes Programm zum Musikerzeugen im Browser, ein Video über eine Show, die jährlich in Spanien stattfindet und Leute auf den Wert freiter Kultur aufmerksam macht, Beispiele der Darstellung von Hackern in Filmen (Schön war die Szene, in der der “Hacker” bei dramatischer Musikuntermalung einen “Virus” auf eine Diskette kopierte, die dann in Zeitlupe sehr stylisch über mehrere Hände gereicht wurde und schließlich im Zielrechner landete. Musik geht plötzlich aus. Hacker: Das war ja einfach). Dann wurden drei neue Schwachstellen in Browsern erläutert, und schließlich gab es noch einen weiteren sehr beliebten Jahresrückblick (mit Frank und Fefe, zwei weiteren CCC-Berühmtheiten). Ich find den eher so meh.

Nachmittags fand eine kleine, recht spontan wirkende Demonstration gegen die Vorratsdatenspeicherung statt (“Teuer, sinnlos, einfach dumm! Vorratsdatenspeicherung!”), ich habe die Anzahl der Teilnehmer auf etwa 150 geschätzt. Es ging einmal um den Fernsehturm, inklusive kleiner Kundgebung. Sozusagen ein Freiheit statt Ängst-chen. Viele Zaungäste, aber ich bezweifle, dass die mit Schildern wie “No VDS” (was nicht nur eine Abkürzung, sondern zwei SPRACHEN enthält!) viel anfangen konnten. Naja, sowas ist ja auch für die Teilnehmer, Gemeinschaftsgefühl stärken und so.

Durch reinen Zufall lief ich in eine Gruppe von CAcert-Assurern. Ähm, also. Es gibt ja verschlüsselte Webseiten. Und um sicherzustellen, dass die Seite von der richtigen Person verschlüsselt wurde (und nicht jemand mittendrin mithorcht), werden die Schlüssel mit Zertifikaten “vertrauenswürdiger Stellen” versehen. Wenn man der Zertifizierungsstelle vertraut, die wiederum dem Anbieter der Seite vertraut, kriegt man dieses tolle grüne Symbol neben der URL-Leiste, die aussagt: Alles jut. Normalerweise muss man sich ein solches Zertifikat kaufen. CAcert ist nun ein nichtkommerzielles Projekt, das die ganze Vertrauensgeschichte durch eine Community, ein Punktesystem und ein “Netz des Vertrauens” regelt. Ist jetzt alles zu viel ums zu erklären, auf jeden Fall will man sichergehen, dass eine Mailadresse tatsächlich einer Person gehört, die tatsächlich existiert. Und genau das prüfen die Assurer (“Zusicherer”?), die gucken sich nämlich offizielle Ausweisdokumente an und vergeben dann entsprechend “Vertrauenspunkte”. Wenn alles gut läuft, habe ich jetzt hundert davon und könnte selbst anfangen, als Assurer tätig zu werden. Nette, ruhige Leute waren das. Der erfahrenste bezeichnete sich selbst als Spießer, während er sämtliche Sicherheitsmerkmale meines Persos überprüfte. :-)

Noch ein kleiner Blumenstrauß der Sachen, die ich so weggetwittert habe:
Ich war heute im Bällebad! Total gemütlich und warm! Etwa 2 mal 2 Meter, bietet Platz für vielleicht fünf Leute.
Ihr kennt die langen Schlangen vor Frauentoiletten anderswo? Das dreht sich hier exakt um.
Und an einigen Urinalen hängt ein “Defekt”-Schild. 28C3 ist, wenn du nicht weißt, ob du denen glauben sollst.

]]>
28C3: Tag 2 28c3-tag-2 2011-12-29T04:12:00+01:00 Sebastian Morr sebastian@morr.cc Heute berichte ich sehr spät, Mitternacht ist schon vorbei. Irgendwie habe ich mir heute keine Zeit zwischendurch genommen. Ich sitze in Saal 1 und sehe den Jeopardy-Leuten beim Aufbauen zu.

Ich habe mich heute näher mit der r0ket beschäftigt. Es war noch eine Test-Firmware drauf, die ausschließlich die Grundfunktionen ausprobiert und dann anhält. Die Dokumentation im Wiki ist fürchterlich durcheinander, teilweise veraltet oder ungenau, aber man findet sich irgendwie zurecht. Zum Ausprobieren habe ich ein kleines Programm geschrieben, das die Werte des Helligkeitssensors in Form einer an- und abschwellenden Kurve darstellt. Man wedelt mit seiner Hand vor dem Sensor rum und kann so lustige Wellen auf dem Display zeichnen. Könnte man ein schönes Spiel draus machen.

Außerdem hab ich mir die Huge Hardware Hacking Area heute näher angesehen. Wer gerne blinkende Dinge baut, seine r0ket zur Laserpistole umfunktionieren möchte oder Löten lernen möchte, fühlt sich hier wohl. Es lief gerade ein Lötkurs für “absolute N00bs”, denen beigebracht wurde, auf Arduino-Basis eine TV-Be-Gone zu bauen, ein Gerät, das auf Knopfdruck ein “Fernseher ausschalten”-Infrarotsignal sendet. Auf der Straße gegenüber “könne man das gut ausprobieren”. Außerdem hat jemand eine Häkelmaschine so gehackt, dass diese Club-Mate-Mützen häkelt.

Es fand ein Workshop zum Selberbrauen von Mate statt, dessen Organisatoren allerdings zugaben, das vorher selbst noch nie ausprobiert zu haben. Eine Person davon war Mitautor des Hackerbrause-Buchs, in dem das Rezept auch abgedruckt ist. Tja, hätten sie vorher vielleicht mal ausprobieren sollen, das Gesöff wurde fürchterlich bitter, wo auch die Zugabe von Unmengen Honig nichts mehr half. Roch allerdings sehr ähnlich wie echte Mate. War ein bisschen trüber. Ne, ne, ne.

Ich war in Vorträgen über Foodhacking (Mohrrüben sind nicht unbedingt orange, es gibt sie auch in Rot, Gelb und Pink-Weiß gepunktet; Sushi aus fluoreszierenden Fischen und Meringen aus Smog-Luft herstellen; Talk war wenig anschaulich und irgendwie eher aus künstlerischer Sicht gehalten. Aber eine typographische Freude), über eine Methode, durch gezielt herbeigeführte Hashing-Kollisionen hohe Auslastungen bei Webservern zu erzeugen (ne, das erklär ich hier nicht. Again, google it), über Energieerzeugung zu Hause (Solarzellen! Surprise! “Das ins öffentliche Stromnetz einzuspeisen geht auch, irgendwie”), über Hörgeräte (total interessant, mit Hörbeispielen aus der Perspektive von Hörbehinderten; Wenn ganze Frequenzbänder unhörbar sind, verschiebt man die in andere Bereiche und komprimiert den Rest; Mit tollen Diagrammen!), über die (ganz frühe) Planung eines Satellitennetzes. Nick Farr, der in diesen Kreisen eine gewisse Bekanntheit hat, machte eine mitreißende Einleitung. Er nannte wichtige Eigenschaften, die das System haben sollte, und blendete die einzeln ein: “Offen”, “Sicher”, noch irgendwas, und beim letzten Punkt schaltete die Präsentation nicht mehr weiter. drück drück … “Zuverlässig”. Das war doch glatte Absicht. :-)

Und der letzte richtige Talk war dann nochmal der Hammer. Der Titel lautete “Quantified Self”, es ging also um die zahlenmäßige Erfassung von Körperdaten, vor allem um Hirnströme, und er wurde von drei TYPEN gehalten, die alle auf ihre eigene Art… draufwaren. Einer gab seinem Kollegen beim Vortragen Gesten, eine Folie weiter zu blättern, aber nicht durch ein kleines Winken, sondern indem er die nach unten zeigende Handfläche mit einer forschen Bewegung von oben nach unten führte. Woraufhin die Anregung kam, das nächstes Jahr mal mit Microsofts Motion-Tracking-System, der Kinect, umzusetzen. Der zweite saß währenddessen beinahe absolut regungslos da, um später beim Reden ruhelos auf der Bühne herumzulaufen. Er war in einen geschmackvollen Mantel mit gemustertem Kragen gekleidet und trug eine ebenfalls gemusterte Sonnenbrille und seinen Haarreif mit Messelektroden stets auf dem Kopf (Zitat aus der Präsentation: “Es wurde mal behauptet, dass Selbstmessung süchtig macht. Glauben wir nicht). Es war (oder spielte??? - Ich bin mir nicht sicher!) dann extrem überheblich, meinte ständig, dass es ja wohl möglich sein müsste, Fragen zu formulieren, und dass wir bei langweiligen Stellen jetzt bestimmt unsere Mails abrufen würden. Sein Computer ging zu Beginn irgendwie “kaputt”, woraufhin er sich auf der Bühne auf den Boden setzte, und versuchte, ihn wieder zu “reparieren”. Naja, und der folgende Inhalt ließ mich teilweise laut auflachen, teilweise mit fassungslos offenstehendem Mund dasitzen, so pseudowissenschaftlich, unbeweisbar, subjektiv, voodomäßig und esoterisch war das. Dummerweise waren aber auch viele kluge, neue Ideen drin. Methoden wie Biofeedback etwa klingen für mich absolut vernünftig. Damit kann man seine Gehirnfrequenzen in eine bestimmte Richtung lenken, weil man einerseits die Werte seiner eigenen EEG-Messung sieht, andererseits von einer Software für Veränderungen in die richtige Richtung durch zunehmend harmonischere Töne belohnt wird. Angeblich könne man so richtig Musik machen. So verließ ich diesen Talk sehr nachdenklich.
Ein dritter Mann redete auch noch, aber der drehte nu wirklich völlig frei, erzählte von einer visuellen Programmiersprache, die mit Gedanken geschrieben werden könne, und die aus “den vier Elementen” aufgebaut sei: Erde stünde für die Variabeln, und so weiter. Ich konnte auch ihn nicht komplett lächerlich finden, denn eine colle Idee ist Programmieren mit Gedanken ja schon. Aber dass die drei viele Personen überzeugen konnten, an ihrem tollen, großen Softwareprojekt, “in dem endlich mal keine Idee lächerlich sei” mitzuarbeiten, bezweifle ich. Ich halte die Hackergemeinde ja für sehr tolerant, aber die hier wurden einfach die ganze Zeit ausgelacht.

Jemand hat heute SMS-Spam im GSM-Netz betrieben: Zunächst kam ein ASCII-Fisch: >(((°>, eine halbe Stunde später eine Veranstaltungs-Einladung von der selben Nummer.

Auf der Toilette wird abends Rickroll, Nyan Cat und Trololo gespielt!

In der Lounge in Ebene B (Erdgeschoss) steht die PainStation des Computerspielemuseums.

An verschiedenen Stellen hing ein Schild: “Der DDoS fällt aus. Letztes Jahr waren sie zu gut vorbereitet.” Ha, ha, I guess? Ein “Distributed Denial of Service”-Angriff ist das Äquivalent zu hundert Leuten, die gleichzeitig mit dir reden wollen. (Ergänzung 2012-12-27: Es ging um den kollektiven Besuch des nahegelegenen Dukin’ Donuts.)

Und ein tolles T-Shirt mit dem tollen Logo hab ich jetzt auch, das übrigens eine Hexadezimal-Repräsentation von ASCII-Zeichen enthält, die Artikel 10 des Grundgesetzes, Paragraph 1 ergeben: “Das Briefgeheimnis sowie das Post- und Fernmeldegeheimnis sind unverletzlich.”


Das Prinzip der heutigen Spielshow, Hacker Jeopardy, sieht wie folgt aus: Die drei oder vier Kandidaten bekommen eine Lösung präsentiert und müssen eine passende Antwort dazu bilden. Die Fragen stammen aus verschiedenen Kategorien und haben verschiedene Punktzahlen. Bei Unklarheit über die Lösung wurde mit den r0kets abgestimmt. Später kam ein weiteres Entscheidung- und Unterhaltungswerkzeug dazu: Der bunte Laserpunktschwarm, der von Zuschauern mit Laserpointern gebildet wurde, und gelegentlich bestimmte, welcher Spieler sich eine Frage aussuchen durfte. Während der dritten Runde veranstalteten die Punkte eine sehr unterhaltsame Jagd über die Saalkuppel (DAS war nicht im Stream zu sehen :-P) Jeopardy gehört schon traditionell zum Congress, ist sehr beliebt und wird sogar simultan auf Englisch übersezt. Könnte ruhig mal n bisschen mehr frischer Wind rein.

Gerade noch so meinen Bus erwischt. Mein Schlafrythmus verschiebt sich weiter nach hinten… :-)

Cooler Tag. Bis morgen, wo ich eine Charakterstudie an den Congressteilnehmern vorhabe!

]]>
28C3: Tag 1 28c3-tag-1 2011-12-28T01:26:00+01:00 Sebastian Morr sebastian@morr.cc Nachmittag. Ich hab mir einen gemütlichen Platz im Basement gesucht, mit Strom- und Kabelnetzversorgung und kann ein bisschen dokumentieren. Heute morgen bin ich gegen Zehn im bcc aufgeschlagen. Vor dem Gebäude wehen Pesthörnchen-Flaggen (google it), eine einige Meter hohe “Fairy Dust”-Rakete wurde aufgebaut. Innerhalb einer Minute habe ich mein ausgedrucktes Ticket gegen ein Armbändchen eingetauscht und konnte mich daran machen, das Kongressgebäude zu erkunden. In den letzten Jahren hat man immer von langen Warteschlangen vor dem Eingang gehört, dieses Problem gehört wohl der Vergangenheit an.

Das bcc besteht grundsätzlich aus drei (zugänglichen) Ebenen. Im Erdgeschoss ist hinter der Kasse die Garderobe und der Infodesk, der einem bei allgemeinen Problemen hilft und CCC-Mitgliedsanträge entgegennimmt, wenn ich das richtig sehe. Man findet hier außerdem bereits einige Tische, an denen sich diverse Projekte vorstellen, etwa der FoeBuD, der sich für Datenschutz einsetzt, oder der AK Vorrat, der gegen Vorratsdatenspeicherung kämpft. Klamotten werden zum Kauf angeboten, schön waren ein Strampelanzug mit der Aufschrift “Ich wiederspreche der Verwendung meiner Fotos […]”, Mausefallen mit der Aufschrift “Google”. Außerdem gibt’s hier das Buch Hackerbrause kurz & geek von O’REILLY und viele, viele Aufkleber, von denen einige jetzt meinen Laptopdeckel zieren :-) Im Erdgeschoss findet man außerdem die Vortragungs-Sääle 2 und 3, die wesentlich schmaler und länger sind, als ich sie mir immer vorgestellt habe. Im Zentrum dieses Stockwerks befindet sich eine runde Chillout-Lounge mit viel buntem Licht, bequemen (und stets belegten) Sitzmöglichkeiten und dem Bällebad! Daneben werden Getränke und Speisen verkauft, ab 14 Uhr gibt’s da richtig echtes warmes Essen zu vernünftigen Preisen (so um die 4 Euro). Ein halber Liter Mate kostet hier 2 Euro.

Geht man eine der Treppen rauf, gelangt man - wenig überraschend - in den ersten Stock. Von hier aus hat man Zugang zu dem riesigen Saal 1, der ebenfalls einen runden Grundriss hat und von der Kuppel überdacht wird, die man auch von außen sieht. Außen um diesen Saal herum, ist viel Platz für Projekttische. Wichtig sind das Phone Operation Center (POC) und das Network Operation Center (NOC), die man bei Problemen aufsuchen kann. Gesehen habe ich außerdem Tische diverser Hackerspaces, einige Quadrokopter-Projekte, die kleine Flugobjekte mit vier Rotoren bauen, die BlinkenArea mit vielen bunten, blinkenden Lichtern und Leute von Gentoo und Debian, zwei großen Linux-Distributionen.

Vom Erdgeschoss kann man auch eine Treppe runter gehen, dann kommt man ins Hackcenter, den Lebensraum des gemeinen Kellerkindes. Viele Reihen Tische mit Steckdosen und dicken Switches. Auch diese Tische scheinen größtenteils diversen Gruppierungen zugeordnet zu sein. Abgehend vom Hackcenter gelangt man zu mehreren Workshopräumen, in einem davon, in dem momentan nichts stattfindet, sitze ich gerade. Schließlich kommt man von hier zum “Himmel”. Im Himmel halten sich die Engel auf, wenn sie nichts zu tun haben… “Engel” ist die Bezeichnung für die zahlreichen freiwilligen Helfer, die Access Control am Eingang und an den Sälen machen oder während der Talks die Zuschauer in Zaum halten. Die also können im Himmel kostenlos Ambrosia beziehen ;-)

Zwischenspiel: Zur Steuerung der Lichtanlage hängt ein Touchscreen mit Bedienungselementen an der Wand. Jemand kam da gerade versehentlich drauf, worauf das Licht komplett ausging. Kommentar: “Jah, so wachen die Zombies mal auf!” Das Licht ging später natürlich auch wieder an. Komplett. Und dann wieder komplett aus. Zuruf: “Das is dimmbar!” Na, und nach ein paarmal hin und her, Herunter- und Herauffahren der Rollos und der Projektionsfläche war auch bald der Normalzustand wiederhergestellt.

Soweit die Beschreibung des Gebäudes. Nachdem ich mich einigermaßen orientieren konnte, ging ich zur Matequelle. Hier wird nicht nur Club Mate, sondern auch “MATE flora POWER” verkauft. Während mich Mate geschmackich an Feige erinnert, schmeckt Flora angenehm nach grünem Tee, kann aber nicht mit dem Original mithalten. WLAN funktioniert, manchmal. Eher unzuverlässig, gerade in Stoßzeiten zwischen den Vorträgen kommt man oft nicht rein.

Naja, ich habe dann als allererstes mit einem anonymen Stratum 0-Mitglied die Keynote, den ersten, richtungsweisenden Vortrag, angehört. Folien und Vortrag waren nicht besonders ansprechend aufgemacht, und für mich manchmal nicht ganz verständlich. Es ging um den Einsatz von westlicher (Überwachungs-)Technologie in Diktaturen. Klar, findet statt. Klar, lässt sich nicht verhindern. Anschließend ein netter Vortrag über die Atari Spielekonsole, eine ganz frühe populäre Spieleplattform, die umfassend, mit vielen grafischen Beispielen beschrieben wurde. Danach die Vorstellung der neuen r0ket, die oben bereits erwähnt wurde. Am Ende des Vortrages wurden alle, die bereits eine neue r0ket besaßen, aufgefordert, sich drahtlos entweder mit dem Spiel “Left” oder dem Spiel “Right” zu verbinden, und dann wurde kollaborativ vorne auf der Leinwand Pong gespielt. Die r0kets haben kleine Joysticks, und die zwei Paddles vorne wurden durch die durchschnittliche Steuerung der teilnehmenden Personen gesteuert. Was erstaunlich gut funktionierte.


Übrigens, zum Thema eigene Datensicherheit: Heute im Atari-Talk waren meine Google-Ergebnisse bei der Bildersuche plötzlich Russisch! Sofortige Reaktion: WLAN-Hardwareschalter auf “aus”. Aber ich vermute, da haben sich die Leute, die sich ums Netzwerk kümmern, einen Scherz erlaubt. (Anmerkung 2012-12-27: Wr ein ganz trivialer Grund: Der IP-Bereich des Congressnetzes wurde von Google in Russland vermutet :3)

Der Kongress hat nicht nur ein Datennetz, sondern auch ein eigenes, lokales Telefonnetz, das dieses Jahr auch GSM-Geräte, sprich, Handys, umfasst. Für zwei Euro bekam man am POC eine SIM-Karte und konnte sich dann einen Account (mit Wunschnummer!) anlegen. Das hab ich mit meinem alten Nokia-Handy gemacht, während ich im Gebäude bin, bin ich jetzt also via 9-BLIN (bzw. 92546) erreichbar. Anrufe empfangen kann man sogar von draußen (0531-349439-92546), SMS allerdings nicht. In diesem Telefonnetz kann man coole Sachen machen, es gibt zum Beispiel einen Telefondienst namens Mate-o-Meter. Das ruft man an, pustet 3 Sekunden über die Mateflasche, und aus dem Klang berechnet der Dienst einem den Füllstand der Flasche. Das FUNKTIONIERT auch noch!! Meine Flasche WAR zu 21% gefüllt! Andere Nummern sagen die Zeit an, lesen das aktuelle Programm vor oder übertragen den Ton aus den verschiedenen Sälen. Und einen coolen Dienst gibt es noch, den irgendein Hackerspace aufgebaut hat: Man schickt eine SMS an eine bestimmte Nummer, und der Text wird dann von einer modifizierten Schreibmaschine auf einem Endlosband ausgegeben.

“Nachmittags” gabs den Vortrag Packets in Packets, in dem über eine bisher offenbar unterschätzte Angriffsmöglichkeit über die niedrigste Ebene des Internetstacks vorgestellt wurde, bei dem man Pakete in Pakete stopft und dann hofft, dass der erste Header bei der Übertragung kaputt geht und der zweite genommen wird. Danach hieß es: Anstellen für die r0ket. Das Interesse war so groß, dass ich ungefähr eine Stunde anstehen musste. Habe mich mit zwei jungen Mitgliedern des Hackerspaces in Siegen unterhalten (der bisher HaSi heißt…), sodass die Zeit tatsächlich relativ schnell verging. Verkauft wurden auch ansteckbare Module, die die Rakete um eine leuchtende Flamme erweitern, aber die schicken Logos waren alles schon weg. Braucht man ja auch eigentlich nicht. Irgendwann waren wir dran und nahmen sehr glücklich unsere Geräte entgegen. Sie waren schnell zusammengebaut, man musste nur einige Dinge zusammenstecken und -kleben. Beim Hochfahren bleibt meine allerdings bisher hängen.

Die Döner mit Knoblauchsoße hier schmecken nicht nur gut, sie werden auch von sehr orientalisch aussehenden Männern in mit goldenen Ranken geschmückten Gewändern zubereitet. In meinem war ein langes Haar, das kann aber gut Eigenverschulden gewesen sein.

Jetzt geht’s noch zu Dan Kaminsky über Netzwerksicherheit und zur ersten Gameshow des Kongresses. Aber davon berichte ich morgen, wenn’s was Berichtenswertes gibt.

]]>
28C3: Tag 0 28c3-tag-0 2011-12-27T16:03:00+01:00 Sebastian Morr sebastian@morr.cc Mit einem prall gestopften großen Rucksack und einem kleinem Rucksack, in dem ein süßer Stoffbär sitzt, mache ich mich auf den Weg zu meinem ersten Chaos Communication Congress, dem 28C3. Das Packen war am Ende doch noch hektisch geworden, ich führe mindestens 9 Kabel und 6 Geräte mit, zur fachlichen Lektüre eine alte Ausgabe der Unix Power Tools, ein legendäres Buch über die grundlegenden Werkzeuge, die auch auf der Linux-Kommandozeile zum Einsatz kommen. Die Fahrt zu meinem ersten Zwischenhalt habe ich genutzt, um ein grobes Programm für die kommenden Tage zusammenzustecken. Wow, coole Sachen dabei, viel Foodhacking (Hackerbrause selbst brauen!), und ich freue mich besonders auf den Vortrag über die r0ket, ein kleines Stück frei programmierbarer Hardware mit kleinem Display und Knöpfen (eines der Logos des CCC ist die Rakete Fairy Dust). Bekanntheiten wie Cory Doctrow und Dan Kaminsky muss man auch live sehen, ansonsten lautet mein Maßstab: Auf das konzentrieren, was man nicht ohnehin hinterher in den Stream-Aufzeichnungen sehen kann.

Jetzt sitze ich am Wolfsburger Hauptbahnhof und fühle mich unwohl. Bahnhöfe sind kalte, ungemütliche Orte voller seltsamer Leute. Wobei “seltsam” hier je nach Wunsch “aufgetakelt”, “aggressiv” oder “betrunken” bedeuten kann. Auf der Bank gegenüber konnte eine Frau gerade ihren Mann nur durch kräftiges Ziehen dazu bewegen, mit auf den Bahnsteig zu kommen, wo “IN VIER MINUTEN!!!” der Zug fahren sollte. Der antwortete stets: “Ich komm gleich…”.

Bei der Bestellung war mir gar nicht aufgefallen, dass die Anbindung hier nicht “20:50 Ankunft, 20:55 Weiterfahrt” lautete, sondern “21:55 Weiterfahrt”. Naja. Solange ich noch Saft im Akku habe, kann ich die Zeit ja gut nutzen.

Was verspreche ich mir davon, zum Congress zu fahren? Die letzten beiden Jahre habe ich mich ausgiebig den Streams gewidmet, 2009 von zu Hause aus, 2010 bei einem dezentralen Stream-guck-Treffen, die damals nach dem Motto des Congresses (“We come in peace”) Peacemissions genannt wurden. Dieses Jahr lautet das Motto “Behind enemy lines”, weshalb die Treffen unter “No nerd left behind” laufen, im Folgenden NNLB abgekürzt. Der in momentan in Braunschweig entstehende Hackerspace Stratum 0 wird, gemeinsam mit der Fachgruppe Informatik der TU Braunschweig, ein solches Treffen organisieren und ich werde mich bemühen, möglichst viel von meinen Eindrücken “nach Hause” zu senden.
Dieses Jahr bin ich also persönlich da, kann Workshops besuchen, Hacking Areas besuchen, r0kets kaufen, und viel von der Atmosphäre des Congresses selbst schnüffeln. Ich möchte herausfinden, ob sich eine persönliche Teilnahme auch nächstes Jahr lohnt. Weitere Ziele: Kunde von Stratum 0 verbreiten und Tipps für unser weiteres Vorgehen sammeln. Nette Leute mit ähnlichen Interessen kennen lernen. Einige Berliner Hackerspaces besuchen. Und ganz viel Inspiration mitnehmen, welche Gebiete noch hack-bar sind.

Von einem Kommilitonen habe ich eine Prepaid-SIM-Karte von blau.de ausgeliehen, sodass ich unterwegs und in der Berliner Wohnung meines Vaters Internetzugang habe - eine ganz neue Erfahrung für mich. Habe erstmal eine 100 MB-Flatrate draufgebucht (nach diesem Volumen wird auf 54 kb/s gedrosselt, yay, wie früher!). Das klingt nach lächerlich wenig, aber das ist schon eine Menge Holz, wenn man keinen Multimedia-Krempel aufruft. Man wird sehen, wie ich damit auskomme.
Klar, auf dem Congress gibt’s auch WLAN (ich bin mir sicher, davon wird noch zu hören sein) und dickes Kabelinternet, aber solche Dinge wie Mails abrufen möchte ich nicht unbedingt aus dem Congressnetz heraus, da ich mir der Sicherheit meines Mailservers nicht allzu sicher bin. Zitat Veranstaltungs-Wiki: “…wenn du dir dein Passwort nicht vom Schwarzen Brett abholen möchtest” :-)


So, Zug pünktlich und Steckdosenplatz, dann kann ja nichts mehr schief gehen. Die Autotürme blinken mir zum Abschied. Vielleicht noch einige ganz grundsätzliche Anmerkungen zu der Veranstaltung, zu der ich da fahre: Der Chaos Computer Club ist eine nach eigener Beschreibung “galaktische Organisation”, die in den letzten Jahrzehnten viel zur technischen Aufklärung in Deutschland beigetragen hat. Der Congress ist ihre jährliche Veranstaltung, in der das Zusammenspiel von Technologie und Gesellschaft mit starkem Fokus auf die Zukunft im Vordergrund steht. Sie bringt Ähnlichgesinnte zusammen, damit diese voneinander lernen können. Die Teilnehmer werden oft (auch von sich selbst) als “Hacker” bezeichnet, was für uns keine negative Konnotation hat, sondern einfach Leute bezeichnet, die ganz in ihrem Fachgebiet aufgehen, die Technologie auf ungewöhnlche Weise nutzen, die daran interessiert sind, wie Dinge funktionieren. Und die dann oft wild auf ihrer Tastatur “herumhacken”. Also, morgen geht’s auf den Hackerkongress. Whee!

]]>
Pong 1D pong-1d 2011-09-26T00:00:00+00:00 Sebastian Morr sebastian@morr.cc Inspired by the movie Flatland, I wrote this one-dimensional game. For those who don’t know this movie (go watch it, seriously!), let me briefly explain the concept: Pong, as you know it, is a two-dimensional game: Everything happens in a flat plane. Now imagine you were one of the paddles - you’d see your surroundings as a line, one-dimensional. The rest is just normal Pong.

You can move around with your arrow keys. First to get 11 points wins.

Computer 0:0 You

Your browser does not support Canvas.

Inner workings

The rendering is realized by a 2D raytracer: For every pixel of the viewport, a ray is being shot. The color and the angle of the object this ray first hits is used for calculation of the pixel’s color.

]]>
Aufsatz: Der Rechenschieber rechenschieber 2011-09-05T00:00:00+00:00 Sebastian Morr sebastian@morr.cc Im Rahmen der Vorlesung Geschichte technischer Hilfsmittel in der Mathematik schrieb ich diesen kurzen Aufsatz über Entwicklung, Funktionsweise und heutige Bedeutung des Rechenschiebers:

Aufsatz

]]>
Four Eyed Monster four-eyed-monster 2011-02-25T15:38:00+01:00 Sebastian Morr sebastian@morr.cc Four Eyed Monster

]]>
Java-Applet: Mandelbrot-Menge mandelbrot-applet 2011-01-23T00:00:00+00:00 Sebastian Morr sebastian@morr.cc Ich lese gerade den New Turing Omnibus, ein Buch, das grundlegende Themen der Informatik vorstellt. In einem Kapitel geht es um Fraktale, genauer: Die Mandelbrot-Menge. Ich konnte nicht anders, als den Algorithmus zu implementieren. Das Ergebnis ist atemberaubend.

Applet öffnen

Bei etwa 100-Trillionen-facher Vergrößerung ist Schluss: Hier hört stößt der Datentyp double an seine Grenzen.

Algorithmus

Für jeden Pixel mit der Koordinate (j,k) definiert man sich die komplexe Zahl c = j + ki sowie ein x = 0 + 0i und führt wiederholt (z.B: 100 mal) die Zuweisung x = x*x + c aus. Ist der Betrag von x dann noch kleiner als 2, wird wird der Pixel schwarz dargestellt, ansonsten kriegt er ne schöne Farbe. Das ist alles.

Die Mandelbrot-Menge ist übrigens verbunden, alle schwarzen Punkte hängen zusammen.

]]>
Programme abschießen mit xkill xkill 2010-09-29T10:59:00+02:00 Sebastian Morr sebastian@morr.cc xkill ist ein Linux-Programm, mit dem man bockige Fenster abschießen kann. Fühlt sich an wie ein Ego-Shooter!

Wenn der Browser sich mal wieder an einem Javascript aufgehängt hat, und alles Hämmern auf den Schließen-Knopf nicht hilft, kommt xkill to the rescue! Man führt es aus, klickt auf das böse Fenster und es schließt sich sofort.

Sehr befriedigend. Definitiv eins meiner Lieblingsprogramme.

]]>
SCHUFA-Selbstabfrage schufa-selbstabfrage 2010-09-29T09:52:00+02:00 Sebastian Morr sebastian@morr.cc Dadurch, dass es mir bei einer Online-Bestellung untersagt wurde, per Rechnung zu bezahlen, wurde ich auf die SCHUFA aufmerksam. Das ist ein Unternehmen, das auf den Personendaten von drei Vierteln der Deutschen sitzt und für jeden davon einschätzt, wie wahrscheinlich es ist, dass er seine Rechnung nicht bezahlt.

Im Sinne von § 34 Abs. 1 BDSG kann aber auch jeder Einzelne abfragen, was die so über einen wissen. Die SCHUFA bietet - vorbildlich! - sogar ein eigenes Formular dafür an. Das füllt man aus, schickt es ab, und wartet drei Wochen.

Vor ein paar Tagen kam die Antwort. Und, was wissen die nun über mich? Naja, Name, Geburtsdatum und -ort sowie Adresse. Eine “SCHUFA-Kundennummer” habe ich auch.

Auf der zweiten Seite wird es interessant: Da ist der Zeitpunkt der oben erwähnten Bonitätsprüfung aufgeführt. Außerdem hat meine Bank ihnen “mitgeteilt, dass ein Girokonto unter der Kontonummer X eröffnet wurde”. Stand wahrscheinlich in den AGB, dass die das dürfen.

Auf der dritten Seite sind die “Score-Werte” aufgeführt. Die anhand “moderner mathematisch-statistischer Verfahren” ermittelte Wahrscheinlichkeit, dass ich eine Rechnung bezahle, beträgt 95,51%. Klingt hoch, ist aber für manche Unternehmen vielleicht nicht akzeptabel. Der Wert ist noch weiter aufgeschlüsselt: Aus meinen “Bisherigen Zahlungsstörungen” ergibt sich ein “deutlich unterdurschnittliches Risiko”, meine “Allgemeinen Daten” stellen hingegen ein “deutlich überdurchschnittliches Risiko” dar. Hä?

Fazit: Wesentlich schlauer ist man hinterher auch nicht. Ich bin immerhin überrascht, dass so wenig über mich gespeichert ist. Die Berechnung des Score-Wertes ist aber nicht transparent genug.

Dieses Datenauskunfts-Experiment werde ich auf jeden Fall fortsetzen, und mal schauen, wie auskunftsfreudig die verschiedenen Unternehmen so sind (sie sind immerhin verpflichtet mir Auskunft zu erteilen!)

]]>
Frauen ernähren sich von Schuhen! frauen-ernaehren-sich-von-schuhen 2010-09-15T20:00:00+02:00 Sebastian Morr sebastian@morr.cc Eine Busgeschichte, die erklärt, warum viele Frauen den Hang zum Ansammeln von Schuhen haben: Sie ernähren sich davon!

Ich höre einen Gesprächsfetzen von hinten mit. Offenbar unterhalten sich zwei junge Männer über ihre Freundinnen. Man denke sich die türkische Betonung dazu.

“Sag mal, isst deine auch so viel?”

“Jaah, voll hart, ne?”

“Meine hat neulich nen ganzen Schuh weggesnackt. Da kam ich nach Hause und war erstmal voll wütend… Ich hab se dann erstmal die Treppe runtergetreten.”

Dem Gesprächspartner geht das wohl ein wenig zu weit, er druckst.

“Jaaa, tat mir hinterher auch voll Leid. Ich bin da irgendwie n bisschen ausgerastet…”

Auch ich finde eine solche Reaktion leicht überzogen. Wenig später klärt sich die Situation allerdings für mich, mit der Frage:

“Is deine n Männchen oder n Weibchen?”

Ein weiterer Beweis, dass der Kontext alles ist, man mit seinen Annahmen ziemlich daneben liegen kann - und man nicht so vielen Gesprächen lauschen sollte!

]]>
Schneller Service schneller-service 2010-09-12T10:47:00+02:00 Sebastian Morr sebastian@morr.cc Die Postbank stellt zum Testen ihres Onlinebanking-Angebotes einen Demo-Account unter dem Namen “Petra Pfiffig” zur Verfügung. Dort kann man alle Funktionen ausprobieren und sieht Beispiel-Transaktionen. In der Nachrichtenbox fand ich etwas, was nur oberflächlich nach gutem Service aussieht!

Nachrichtenbox

]]>
Der Mann mit dem Schlüsselbund mann-mit-schluesselbund 2010-09-04T11:30:00+02:00 Sebastian Morr sebastian@morr.cc Als ich heute vom Brötchenholen wiederkam, stand vor der Tür zum Gebäude ein Mann, den ich noch nie gesehen hatte. Auch er hatte eine Brötchentüte in der Hand und fummelte mit einem Schlüsselbund herum. Offenbar probierte er jeden Schlüssel aus und fand nicht den richtigen.

Er hörte meine Schritte, drehte sich um und grüßte fahrig. “Welcher ist denn der Schlüssel für die Haustür?” - “So ‘n abgerundeter”, half ich ihm aus und zeigte ihm meinen. Er fand einen ähnlichen an seinem Schlüsselbund, öffnete die Tür, grunzte verlegen und verschwand zielgerichtet in einer Wohnung im ersten Stock.

Auf dem weiteren Weg nach oben ging meine Fantasie mit mir durch.

Ein neuer Mieter hätte wohl gewusst, welche Schlüssel er da ausgehändigt bekommen hat - es sei denn, ihm wäre ein großer Haufen Schlüssel für die Haustür, die Wohnungstür, den Keller, den Zimmertresor, das Bad und die beiden Nachtschränke hingeworfen worden - und es wäre sein allererster Tag. Nee.

War der Mann vielleicht ein Einbrecher, der den Besitzer der Wohnung überfallen und ihm seinen Schlüsselbund abgenommen hatte, und dann natürlich nicht wusste, wofür die einzelnen Schlüssel waren? Und zur Tarnung eine Tüte Brötchen geholt hatte, um Leute wie mich zu täuschen? Naja, in meine Wohnung wäre er so immerhin nicht gekommen.

Oder war er zu Gast bei einem Freund oder - noch pikanter - bei einer Dame? Während sie noch schlief, hatte er sich die Schlüssel genommen und war rausgeschlichen, um ihr mit einer Tüte Croissants das Herz zu erweichen und den Magen zu füllen?

Ich bin sicher, die Antwort ist viel banaler und langweiliger. Und deshalb frage ich auch nicht nach.

]]>
Qu'est-ce que c'est? quest-ce-que-cest 2010-09-02T14:23:00+02:00 Sebastian Morr sebastian@morr.cc Wer’s weiß, kriegt nen Preis.

Fingerzeig

]]>
50 vs. 100 Hertz 50-vs-100-hz 2010-09-02T12:17:00+02:00 Sebastian Morr sebastian@morr.cc Bei mir steht seit letzter Woche ein neuer Fernseher. Bei meiner intensiven Beschäftigung mit Fernsehtechnik in der letzten Zeit hatte ich ein paar “Aha”-Erlebnisse, die ich mit dir teilen möchte. Als erstes erkläre ich, was der Unterschied zwischen Bildschirmen mit 50 und 100 Hertz ist, denn da gibt es eine kleine Überraschung.

50 Hertz? Warum nicht 42?

Videokameras haben früher 25 Bilder pro Sekunde aufgenommen. Wenn die Fernseher das mit derselben Frequenz wiedergegeben hätten, hätte das Bild ganz schön geflackert. Man dachte sich also einen Trick aus: Fernseher strahlen die Einzelbilder mit doppelter Geschwindigkeit aus, aber immer nur jede zweite Zeile: Erst die erste, dritte, fünfte Zeile, eine Fünfzigstel Sekunde später dann die zweite, vierte, sechste, und so weiter. Man spricht von Halbbildern. Wenn die Bilder so schnell vorbeirauschen, nimmt das unser Auge als flüssige Bewegung war.

Das ist also die Funktionsweise eines 50-Hz-Fernsehers. Er zeigt fünfzig Halbbilder pro Sekunde an.

Was machen 100-Hz-Modelle anders?

Klaro, sie zeigen 100 Bilder pro Sekunde an, aber wo kriegen sie die her? Normales Fernsehen setzt sich aus 50 Halbbildern pro Sekunde zusammen, ein Kinofilm sogar nur aus 48. Hier kommt also ein zweiter Trick ins Spiel: Ein 100-Hz-Fernseher schaut sich zwei aufeinander folgende Bilder an, und überlegt sich dann, was wohl dazwischen kommen könnte. Angenommen, ich winke in die Kamera, und meine Hand ist auf einem Bild links, auf dem nächsten allerdings schon rechts, generiert der Fernseher ein zusätzliches Bild, auf dem meine Hand in der Mitte zu sehen ist. Das ist das ganze Geheimnis: 100-Hz-Fernseher zaubern Bilder aus dem Nichts. Das funktioniert meistens ganz gut, bei ihren Schätzungen können sie aber auch danebenliegen, und meine Hand zum Beispiel zu weit oben hinmalen, sodass ich Gummiarme kriege.

So what?

Das menschliche Auge kann ohnehin nur etwa 65 Bilder pro Sekunde wahrnehmen. Beim Vergleichen im Laden habe ich schon einen sichtbaren Unterschied festgestellt, schnelle Bewegungen oder Kameraschwenks sehen auf einem 100-Hz-Modell durch die zwischengerechneten Bilder nicht so verwaschen aus. Es mag jeder für sich urteilen, ob das den Aufpreis wert ist, mir reichen 50 Hertz vollkommen.

]]>
Mich gibt's bei Amazon mich-gibts-bei-amazon 2010-08-25T18:49:00+02:00 Sebastian Morr sebastian@morr.cc In meinen Serverlogs tauchte als Referer eine Freenet-Suche nach mir auf. Und siehe da…

Sebastian Morr gibt es auch bei Amazon

Haha, und wenn man draufklickt: “Meinten Sie: sebastian mary?” - da wird einem dann unter anderem die CD “Schön entspannt 3” von “Brigitte Wellness” empfohlen. Ranking-Algorithmen sind schon ne Spezies für sich…

]]>
Finger print doorbell finger-print-doorbell 2010-08-25T00:00:00+02:00 Sebastian Morr sebastian@morr.cc Sweep your finger for identification

Another idea: “To enter the apartment, click HERE.”

]]>
36 Cube gelöst! 36cube-geloest 2010-08-21T00:00:00+02:00 Sebastian Morr sebastian@morr.cc Gestern Abend habe ich mit Jan den 36 Cube gelöst. Es geht darum, 36 Plastik-Türmchen in verschiedenen Farben und Größen so auf einem Brett anzuordnen, dass in jeder Reihe und Spalte jede Farbe genau einmal vorkommt - und die Türmchen auf der gleichen Höhe abschließen (es gibt eine Online-Version davon).

Wir begannen etwas planlos, merkten schnell, dass uns das nicht zum Ziel führen würde, und entwickelten ein stupides, mechanisches System, dass uns sicher zur richtigen Lösung führen müsste. Eine halbe Stunde später saßen wir vor dem Plastikdämon und weinten. Wir hatten keine Lösung gefunden, im Gegenteil, wir hatten (scheinbar) alle möglichen Lösungen ausgeschlossen - oder irgendwo einen Fehler gemacht.

Wir sahen uns an. “Let’s try math!” Naja, ich schrieb dann ein Programm, dass im Grunde genau das machte, wie wir vorher: “Darf dieser Turm in die erste Zeile? Nein. Darf dieser Turm in die zweite Zeile? Ja. Kann der nächste Turm noch irgendwo hin? Nein. Nimm den letzten Zug zurück. Darf der Turm in die dritte Zeile?” Es stellte sich heraus, dass es Lösungen gab, in denen alle Türme richtig saßen - bis auf zwei. Eine komplette Lösung fand auch das Programm nicht. Ich wurde misstrauisch.

Google. “has 36 cube a solution?” … Ja, der Cube könne gelöst werden, aber “Your assumptions are probably wrong”. Mehr möchte ich an dieser Stelle auch nicht verraten. Es gibt da… einen Trick.

Wenig später (ich untertreibe, wir waren beide schon ziemlich müde) stand er vor uns. So sieht Stolz in seiner reinsten Form aus:

Gelöster 36 Cube

Hab gerade mein Programm nochmal angepasst und durchlaufen lassen, es gibt sogar 96 verschiedene Lösungen!

]]>
Google-Rekursion google-rekursion 2010-08-19T00:00:00+02:00 Sebastian Morr sebastian@morr.cc Du kennst bestimmt die Korrekturfunktion von Google. Wenn du ein Wort falsch schreibst, schlägt die Suchmaschine eifrig vor: “Meinten Sie: …?” Da kannst du dann draufklicken und Google sucht nach dem korrigierten Wort. So weit so praktisch. Ich verwende die Funktion gerne, wenn ich mir nicht sicher bin, wie ein Wort geschrieben wird.

Aber eigentlich möchte ich dir einen kleinen Gag zeigen, den Google in diese Funktion eingebaut hat. Geh dazu auf http://google.com (der Trick funktioniert leider nur auf der englischen Seite) und such nach “recursion”. Falls dir der Begriff nichts sagt, Rekursion bedeutet soviel wie Selbstbezug, Rückbezug, Selbstaufruf. Eine Schleife. Hast du die Google-Schleife gefunden?

]]>
Engel-Karte engel-karte 2010-08-12T00:00:00+02:00 Sebastian Morr sebastian@morr.cc Meine Weihnachtskarte aus dem Jahr 2009. Klick auf das Bild, um die Karte aufzuklappen.

Engel-Karte

]]>
Kernel-Flüche kernel-flueche 2010-07-30T00:00:00+00:00 Sebastian Morr sebastian@morr.cc Wusstest du, dass sich im Linux-Kernel ganz schön viele Flüche befinden? Sehr unterhaltsam!

Du brauchst den Quellcode des Kernels (in Ubuntu/Debian gibt’s ein Paket namens linux-source, das den Kernel ins Verzeichnis /usr/src legt). Dann gibst du folgende Befehle ein:

cd /tmp
tar xvf /usr/src/linux-source*
cd linux-source*
egrep -ir " (fuck|shit|crap)" .

Viel Spaß!

]]>
Piratenpartei Braunschweig logo pp-bs-logo 2010-07-24T00:00:00+00:00 Sebastian Morr sebastian@morr.cc

]]>
Kiel Panorama kiel-panorama 2010-07-05T00:00:00+00:00 Sebastian Morr sebastian@morr.cc This panorama photo was taken in summer 2010 on a vacation in Kiel. I like how the natural, green beach slowly fades into the industrial, human made, gigantic ship dock.

Warning: This image is 21 MB large. It could take a while to load.

First activate your fullscreen mode (F11), then click on the link below. The picture is mirrored for dramaturgic reasons. Slowly scroll to the right using your arrow keys. Have fun!

Open

This was made from multiple photos that were stitched together using the awesome software Hugin.

]]>
Waldi in Gefahr waldi-in-gefahr 2010-04-23T00:00:00+01:00 Sebastian Morr sebastian@morr.cc Eine wahre Geschichte aus der Serie ‘Neulich im Bus’

Im hinteren Teil des Busses sitzt eine ältere Omma. Sie hat standestypische Stricksachen und einen breiten Schal an und ist beladen mit Einkaufstüten. Begleiter: Ein kleines braunes Hundchen. Seinen Namen kenne ich noch nicht, aber den werde ich bald erfahren.

Der Bus stoppt an einer Haltestelle. Einige Fahrgäste steigen aus, Hundchen springt begeistert hinterher.

Omma nimmt das genau solange nicht zur Kenntnis, bis die Türen ihr “Ich-mach-gleich-zu-weißte-Bescheid”-Tröten ertönen lassen. Jetzt jedoch springt sie auf: Ihr Hund steht draußen, sie hat ihn an der Leine und steht selbst drin, und die Türen drohen zu schließen! Horrorvorstellungen branden nicht nur vor meinen Augen auf, denn Omma fängt an zu ziehen, sie zieeeeht an der Leine, versucht, Waldi wieder ins Businnere zu holen und kreischt dabei: “Waldi! Nicht aussteigen!!”. Ich schwöre, die drei Sekunden bis zum Schließen der Türen dauerten länger als sonst.

Irgendwann entscheidet Waldi, dass es ihm nicht behagt, zu Tode geschleift zu werden, oder vielleicht war ihm auch einfach langweilig geworden, jedenfalls hüpft er wieder in den Bus und die Türen schließen sich hinter ihm.

Erschöpft lässt sich Omma wieder auf ihren Sitzplatz fallen. Während der Schock langsam einsetzt, murmelt sie: “Noch nicht aussteigen! Ist doch noch eine Haltestelle…”

]]>
Rätsel: Wie viele Beine? wie-viele-beine 2010-04-17T00:00:00+01:00 Sebastian Morr sebastian@morr.cc Eine Rätselaufgabe, die meine Tante mir vor einiger Zeit stellte. Und meine Antwort.

In einem Bus befinden sich 7 Kinder. Jedes Kind hat 7 Rucksäcke. In jedem Rucksack sind 7 große Katzen. Jede große Katze hat 7 kleine Katzen. Wie viele Beine sind im Bus?

Ich löse die Aufgabe unter der Voraussetzung, dass sich keine Insekten oder weitere unbekannte Tiere im Bus befinden - denn deren Beine würden das Endergebnis signifikant in die Höhe treiben (man denke an Tausendfüßler!).

In jedem Rucksack befinden sich 7 große Katzen und 7 × 7 kleine Katzen, was schonmal (7 + 7 × 7) × 4 Katzenbeine pro Rucksack ergibt. Derer gibt es ebenfalls 7 × 7 - eine Gesamtzahl von (7 + 7 × 7) × 4 × 7 × 7 Katzenbeinen.

Die 7 Kinder haben jeweils 2 Beine. Von den Nasenbeinen, Brustbeinen, Steißbeinen, Schlüsselbeinen ist im Sinne der Aufgabenstellung abzusehen - erstens versteht man “Bein” für gewöhnlich im Sinne “untere Extremität”, zweitens reichen meine Medizinkenntnisse nicht aus, um genau anzugeben, wie viele “Beine” ein Mensch denn nun hat. Also: 2. Macht 7 × 2 Kinderbeine.

Schließlich muss noch eine stochastische Analyse vorgenommen werden: In der überwältigenden Mehrheit der Fälle befindet sich zusätzlich zu den Kindern noch ein weiterer Mensch im Bus: Der Busfahrer. Ausnahmen davon sind:

  • Pinkelpausen des Busfahrers
  • Wechsel des Busfahrers sowie
  • die Existenz begabter, leider sträflich fehlgeleiteter Kinder, die sich morgens selbst im Bus zur Schule fahren.

Ersteres und zweiteres nimmt am Tag nur wenige Minuten in Anspruch, letzeres traue ich Kindern mit Katzen im Rucksack nicht zu. Zur Beinsumme addieren sich also noch 2 Busfahrerbeine.

Resümee: (7 + 7 × 7) × 4 × 7 × 7 Katzenbeine + 7 × 2 Kinderbeine + 2 Busfahrerbeine ergeben eine Gesamtmenge von unglaublichen 10992 Beinen im Bus!

Bei meinen Überlegungen stieß ich auf eine interessante Tatsache: Wenn wir annehmen, dass eine erwachsene Katze um die 5 kg, eine kleine Katze um die 2 kg, ein Schulkind um die 40 kg und ein Busfahrer um die 90 kg wiegt (ja, 90. Die Typen sitzen doch den ganzen Tag rum.), dann trägt der Bus ein Passagiergewicht von insgesamt 7 × 7 × 7 × 5 + 7 × 7 × 7 × 7 × 2 + 7 × 40 + 1 × 90 kg, was umgerechnet knapp 7 Tonnen entspricht, etwa so viel wie der Bus selbst wiegt.

Und das Fazit, das wir aus dieser Rätselaufgabe ziehen können? Busfahrer haben’s nicht leicht. Das Miauen von zweieinhalbtausend Katzen, der Platzbedarf von 49 Großraumrucksäcken, das ständige Genöle der Kinder - und das JEDEN TAG!?

Und nicht zuletzt ständig diese Leute mit ihren Taschenrechnern…

]]>
Bundeswettbewerb Informatik bwinf 2008-11-16T00:00:00+02:00 Sebastian Morr sebastian@morr.cc Ich habe an drei Runden des Bundeswettbewerbs Informatik teilgenommen (in den Jahren 2009 und 2010). Hier möchte ich meine Lösungen veröffentlichen, vielleicht können kommende Teilnehmer daraus lernen. 2010 war ich außerdem Teilnehmer der Endrunde.

1. Runde des 27. BWINF1. Runde des 28. BWINF2. Runde des 28. BWINF

]]>
Screamie screamie 2009-08-17T00:00:00+02:00 Sebastian Morr sebastian@morr.cc Screamie

]]>
Abi 09 logo abi09-logo 2009-05-02T00:00:00+00:00 Sebastian Morr sebastian@morr.cc

Translation: “To hell with Pisa, it’s not our tower.” Was created for a T-shirt when I finished high school.

]]>
Ubucon 2008 logos ubucon-logos 2008-08-10T00:00:00+00:00 Sebastian Morr sebastian@morr.cc

]]>
Facharbeit: Künstliche neuronale Netze knn 2008-04-04T00:00:00+00:00 Sebastian Morr sebastian@morr.cc Im 12. Jahrgang schrieb ich meine Facharbeit zum Thema Künstliche neuronale Netze. Diese Arbeit stellte ich außerdem in einem Referat vor:

Facharbeit Referat

]]>
Freie Software: Eine Analogie freie-software 2007-05-07T00:00:00+00:00 Sebastian Morr sebastian@morr.cc Mithilfe einer Analogie kann man sehr anschaulich erklären, was Freie Software ist. Es werden nur wenige alltägliche Elemente benötigt, an denen man jedoch viele Sachverhalte erklären kann. Gerade für technisch weniger Versierte sollte dieses Modell hilfreich sein.

  • Ein Kochrezept: Ein Rezept entspricht in diesem Modell dem Sourcecode, der “Sprache”, in der Programme verfasst werden.
  • Ein Koch: Das sind wir - man stellt sich vor, jeder von uns Computernutzern sei ein Koch.
  • Ein Gericht: Aus einem Rezept kann ein Koch ein fertiges Gericht zubereiten. Dies entspricht in der Computerwelt einem ausführbaren Programm. Erfreulicherweise kann der Koch dabei keine Fehler machen; Es hängt also nicht von der Erfahrung des Koches ab, wie gut das Gericht wird, sondern ausschließlich vom Rezept. Rezepte und Gerichte haben in dieser imaginären Welt außerdem die Eigenschaft, dass die enorm schnell und kostengünsig vervielfältigt werden können, denn Dateien kann man schließlich auch kopieren.

Nochmal zusammengefasst: Der Koch bereitet aus einem Rezept ein leckeres Gericht zu. Als nächstes könnte man fragen: Woher bekommt der Koch seine Rezepte?

Möglichkeit 1: Er erfindet es selbst. Das ist natürlich ein langwieriger und aufwändiger Prozess. Damit verhielte er sich so wie ein Programmierer, der seine eigene Software entwickelt. Möglichkeit 2: Er kocht nach einem schon existierendem Rezept. Genau hier kommt der Gedanke der Freien Software beziehungsweise Rezepte ins Spiel: Wenn etwa jemand, der einige Rezepte erfunden hat, daraus ein Kochbuch schreibt, können alle Anderen ein Rezept nachschlagen und selbst kochen.

Das mag wie eine Selbstverständlichkeit klingen, doch diesen grandiosen Gedanken muss man sich vor Augen halten, wenn man das Prinzip wieder in die echte Welt überträgt: Autoren von freien Programmen veröffentlichen den Sourcecode kostenlos und jeder kann ihn aus dem Internet, von CDs oder anderen Datenträgern beziehen und mit einem Computer in ein funktionsfähiges Programm übersetzen.

Das ein solches Rezept nun “frei” ist, bedeutet nicht nur Kostenfreiheit, obwohl das sicher auch eine wichtige Eigenschaft ist. Noch wichtiger ist die Freiheit, das Rezept beliebig an andere Köche weitergeben zu können. Auch das Gericht darf man weitergeben, wenn man etwa Freunde einlädt und jedem einen Teller Nudeln vorsetzt (aufgrund der schnellen Verdopplung ist das natürlich noch leichter). Weiterhin kann man ein Rezept natürlich auch verändern und nach eigenen Vorlieben anpassen. Erneut sei hier daran erinnert, dass alle diese Eigenschaften auch auf Freie Software zutreffen! Beispiele für grandiose Freie Software sind GNU/Linux, Mozilla Firefox oder OpenOffice.org.

Schön und gut - klingt nach einer Menge positiver Eigenschaften. Doch ist das nicht alles irgendwie … selbstverständlich? Keineswegs! Die Welt ist voll von Köchen, die Geld mit ihren Kochkünsten machen wollen (Bill Gates etwa ist ein sehr prominenter). Das Ganze funktioniert bei ihnen so wie in einem Restaurant: Ihre Rezepte sind geheim und sie kochen hinter verschlossenen Türen. Das fertige Gericht wird dann gegen eine oft saftige Gebühr an den Tisch gebracht. Die Gäste in diesem Restaurant wissen weder, wie das Essen zubereitet wurde, noch was die Zutaten sind. Außerdem ist es fast unmöglich das Gericht selbst zu verändern, wenn es ihnen nicht schmeckt. Sie dürfen es auch keinesfalls kopieren, jeder Gast muss erneut bezahlen. Der Koch lacht sich dabei ins Fäustchen, denn wie wir wissen, können die Gerichte in diesem Modell fast kostenlos immer wieder verdoppelt werden. Zurück in die echte Welt! Für die meiste Software muss man heutzutage bezahlen. Man darf sie nicht studieren, nicht verändern, nicht weiterverbreiten und oft ist sogar die Benutzung eingeschränkt. Diese Art von Programmen nennt man proprietär oder unfrei. Windows und die Microsoft Office Suite sind bekannte Beispiele. Das war nicht immer so - vor einigen Jahrzehnten, als Computer noch in den Kinderschuhen steckten, war jedes Programm frei. Bill Gates war dann einer der ersten, die anfingen, für das sehr kostengünstige Kopieren von Software Geld zu verlangen.

Erwähnen sollte man noch Programme, die zwar kostenlos benutzbar sind, jedoch ebenfalls Einschränkungen in ihrer Benutzung haben - sogenannte Freeware. Diese muss man ganz deutlich von Freier Software angrenzen. Die Analogie wäre ein Mann mit Bauchladen, der kostenlos Fritten verteilt. Man muss zwar nichts bezahlen, aber alle anderen oben genannten Nachteile bleiben erhalten.

]]>
Aufruf: Benutzt Jabber! benutzt-jabber 2006-12-18T00:00:00+00:00 Sebastian Morr sebastian@morr.cc Hallo! Ich bin der Sebastian! Und ich erklär euch heute, wie man sich übers Internet unterhalten sollte und wie nicht.

Ihr kennt doch alle ICQ. Dieses bunte Programm zum chatten. Haben eure Freunde ja auch. Aber, was ihr vielleicht nicht wisst: ICQ ist sehr, sehr böse. Kann man hier alles nachlesen. Kurz gesagt, dürfen die Betreiber von ICQ alles, was ihr euch dadrin so schreibt, speichern und mitlesen. Ihr verliert all eure Rechte an dem, was ihr schreibt. Theoretisch dürften die eure geheimsten Gedanken auch veröffentlichen. Klingt komisch? Ist aber so.

Ist natürlich doof. Kann man aber was machen! ICQ, MSN und die anderen bösen Protokolle sind ja nicht die einzigen fürs Instant-Messaging! Da gibts nämlich auch noch was namens “Jabber”. Das ist ein freies Protokoll, da darf niemand mitlesen und so. Ein guter Client ist Pidgin. Kann man ganz einfach installieren und einrichten. Ist ganz ohne nervige Werbung. Und wenn ihr jetzt sagt “Das haben meine Freunde aber nicht!”, dann erzählt denen doch einfach davon und nennt ihnen die oben genannten Argumente gegen ICQ! Für die Übergangszeit könnt ihr auch mit Pidgin euer böses ICQ-Konto weiterbenutzen.

Auch ich finde das ganz schön blöd, dass so wenige Jabber benutzen. Aber vielleicht kann ich ja hiermit dazu beitragen, es bekannter zu machen. Denn jetzt wisst ihrs ja besser. So bleibt mir nur, ein letztes Mal zu sagen: “Benutzt Jabber!”

Und nächste Woche erzähle ich euch, welche Browser ihr verwenden solltet und welchen nicht!

Blitzstart

Wenn ihr dieser Anleitung folgt, habt ihr in etwa 10 Minuten einen eigenen Jabber-Account. Mit dem Programm dazu, Pidgin, könnt ihr sowohl die Vorzüge von Jabber nutzen, aber auch mit ICQ weiterchatten.

  1. Auf www.pidgin.im Pidgin herunterladen (10,9 MB).

  2. Das Programm installieren. Normalerweise reicht es, bei der Installation immer auf “Weiter” zu klicken.

  3. Beim ersten Start öffnet sich das Konten-Fenster. Dort klickt man auf “Hinzufügen”. Als Protokoll wählt man XMPP, das Jabber-Protokoll. Nun sucht man sich einen schönen Benutzernamen und ein Passwort aus. Die anderen Einstellungen kann man so lassen, wie sie sind. Bequemerweise klickt man schließlich noch auf “Passwort speichern”, macht ein Häkchen bei “Konto neu anlegen” und klickt zweimal auf “Registrieren”. Kommt die Fehlermeldung “Konflikt” hat sich schon jemand den Benutzernamen ausgesucht, man wiederholt die Prozedur dann einfach mit einem anderen Namen. Das wars schon! Das neue Jabber-Konto ist einsatzbereit!

Nun kannst dich mit einem Klick auf das Kästchen vor dem Konto anmelden. Adde alle Jabberaner, die du kennst (= mich, blinry@jabber.org) unter Buddys->Buddy hinzufügen.

Nun kannst du noch das alte ICQ-Konto hinzufügen: Wieder im Konten-Fenster auf “Hinzufügen”, als Protokoll ICQ (ist Pidgin nicht herrlich selbsterklärend?), als Benutzername deine ICQ-Nummer, Passwort wie gehabt, Speichern. Deine alte Kontaktliste wird übernommen.

Das war’s! Viel Spaß beim Chatten! (Und empfiehl Jabber weiter!)

]]>
Kalauer-Sammlung kalauer 2005-09-16T00:00:00+00:00 Sebastian Morr sebastian@morr.cc
  • Sagt die Null zur Acht: Schöner Gürtel!
  • Warum ham die Araber ka Brot? Weils ka Mehl haben!
  • Treffen sich zwei Jäger: Beide tot!
  • Ich gehe nicht zu seiner Beerdigung, er geht auch nicht zu meiner…
  • Was ist ein Keks unter einem Baum? Ein schattiges Plätzchen!
  • Was sind die Steigerungsformen von imposant? Im Hintern Kies, im Arsch Beton!
  • Ich hasse Leute, die mitten im Satz
  • Der kürzeste Trabbi-Witz: Steht’n Trabbi auf’m Berg…
  • Gestern hab ich bei den Weight Watchers angerufen - hat keiner abgenommen!
  • Treffen sich zwei Fische: “Hi!” - “Wo?”
  • Fällt ein Kuckuck ins Meer. Taucht ein Hai auf. Sagt der Kuckuck: “Hi!”. Sagt der Hai: “Kuckuck!”.
  • Was ist weiß und stört beim Essen? Eine Lawine!
  • Was ist weiß und tut weh, wenn man es ins Auge kriegt? Ein ICE!
  • Was ist weiß und steht hinterm Baum? Eine schüchterne Milch!
  • Ein Schneemann zum anderen: Riechst du auch Karotten?
  • Warum gehen Fliegen nicht in die Kirche? Sie sind Insekten!
  • Zwei Kanibalen essen einen Clown. Meint der eine: “Schmeckt irgendwie komisch.”
  • “Kellner, bitte Zahlen!” - “Fünfzehn, achtundsiebzig, elf…”
  • Wie heißt ein Bumerang, der nicht zurückkommt? Stock.
  • Ober: “Wie fanden Sie das Schnitzel?” Gast: “Rein zufällig unter dem Salatblatt!”
  • Pessimist: “Schlimmer geht’s nicht…” Optimist: “Doch!”
  • Was ist der Unterschied zwischen einem Ingenieur und einem Bauingenieur? Die einen bauen Waffen, die anderen Ziele.
  • Kundin ruft beim Support an: “Mein Monitor ist kaputt.” Support: “Ist er denn an?” Kundin: “Ja.” Support: “Dann machen sie ihn mal aus.” Kundin: “Oh, jetzt geht er.”
  • Brechstangen sind aus Diebstahl gemacht.
  • Der Pessimist: Das Glas ist halb leer! Der Optimist: Das Glas ist halb voll! Der Ingenieur: Das Glas ist doppelt so groß, wie es eigentlich sein müsste!
  • Fünf von vier Leuten können nicht rechnen.
  • Das Leben ist eine tödliche Krankheit, die durch Geschlechtsverkehr übertragen wird.
  • Ein Bahngleis ist ne harte Droge: Ein Zug und du bist tot…
  • Liebe ist nur ein Wort. Quark auch.
  • Neulich hab ich mal einen Chemie-Witz erzählt. Keine Reaktion.
  • Meine Freundin meint, ich wäre neugierig… zumindestens steht das in ihrem Tagebuch.
  • Wenn Atheismus eine Religion ist, dann ist “Aus” auch ein Fernsehsender.
  • Kann ich mein Leben mal kurz speichern und was ausprobieren?
  • Bevor man stirbt, zieht das ganze Leben an einem vorbei. In Echtzeit.

  • A balanced diet is a chocolade in both hands.
  • If I agreed with you, we’d both be wrong.
  • I stepped on a corn flake - now I’m a cereal killer.
  • If this sentence is true, then Santa Claus exists.
  • ]]>
    Kunstprojekt "Babel" babel 2005-09-06T00:00:00+00:00 Sebastian Morr sebastian@morr.cc Diese Fotoserie entstand in der zehnen Klasse. Es stellt in achtzehn Bildern zwischenmenschliche Beziehungen mit Büchern dar.

    Ich habe auch eine Reflexion über die Entstehung geschrieben.

    Freudschaft

    Freudschaft

    Liebe

    Liebe

    Familiensinn

    Familiensinn

    Disziplin

    Disziplin

    Ueberwachung

    Ueberwachung

    Bedrohung

    Bedrohung

    Furcht

    Furcht

    Hass

    Hass

    Ausgrenzung

    Ausgrenzung

    Bedrohung

    Bedrohung

    Misshandlung

    Misshandlung

    Trauer

    Trauer

    Angst

    Angst

    Bedraengung

    Bedraengung

    Raserei

    Raserei

    Machtlosigkeit

    Machtlosigkeit

    Sehnsucht

    Sehnsucht

    Ehrfurcht

    Ehrfurcht

    ]]>
    Simpsons-Zitate simpsons-zitate 2005-08-22T00:00:00+00:00 Sebastian Morr sebastian@morr.cc Zitate aus der gelbsten Fernsehserie der Welt. Gesammelt während meiner intensiven Simpsons-Phase um 2005 herum.


    Homer: “Tut mir nichts, ich hab Frau und Kinder! Tötet die!”


    Grampa: “Ich mach jeden Test mit, den ihr wollt: Sehtest, Hörtest, Erinnerungstest, Erinnerungstest, …”


    (Dokumentarfilm): “Mach dir nichts vor, Jimmy. Wenn eine Kuh die Möglichkeit hötte, würde sie dich auch essen und alle, die du lieb hast!”


    (Krusty tritt als Vampir verkleidet auf): “HEYHEY! Today I’m going to SUCK!” (Pause) “… your blood!”


    (Etwas explodiert)

    Wiggums: “Puuh, das war knapp! Gut, dass es in dem qualmenden Krater gelandet ist!”


    (Marge betet und ein Wunder geschieht)

    Homer: “Gut Marge, er ist drauf reingefallen!”


    Homer: “Bart, Lisa, geht auf eure Zimmer und verprügelt euch selbst!”

    Bart: “So ein fauler Vater…”


    Marge: “In den meisten Serien wird leider viel zu viel wiederholt”

    Smithers kommt reingestürmt: “Maggie hat schon wieder Mr. Burns umgebracht!”


    Lisa zu Milhouse: “Sei nicht traurig, du hast noch dein ganzes Leben vor dir!”

    Milhouse: “OH NEIN!! WÄHÄHÄ!!”


    Moe: “Seht euch nur die Sterne an… So viele kleine Lichter, die im Grunde niemandem nützen…”


    Homer: “So eine dumme Topfpflanze! Steht einfach hier rum und vertrocknet!”


    Homer: “Sieh dir nur diese Typen an, mit ihren Pelzmänteln und komischen Hüten!”

    Marge: “Homer, das sind Hirsche!”

    Homer: “Na und? Ich hasse sie trotzdem!”


    TV-Spot: “Bürgermeister Quimby setzt sich für Drehtüren an Gefängnissen ein und hat sogar den Massenmörder Tingeltangel-Bob freigelassen! Kann man einem solchen Menschen trauen? Wählt Tingeltangel-Bob!”


    Homer: “Oh nein, das jüngste Gericht! Schnell, schafft Bart aus dem Haus, bevor Gott kommt!”


    Chief Wiggums: “Hey, das ist Tierquälerei!” (lächelt freundlich) “Haben Sie eine Genehmigung dazu?”


    (Nach Itchy und Scratchy)

    “Dieser Film enthielt äußerst gewaltsame Szenen und hätte nicht von kleinen Kindern gesehen werden dürfen”


    Wiggums: “Ihr Rücklicht hat ‘nen Wackelkontakt, das blinkt beim Abbiegen”


    Homer: “Hm, wie bestraft dich deine Mutter normalerweise?”

    Bart: “Sie zwingt mich, Bier zu trinken”


    Homer: “Oh nein, wir haben Mr. Burns umgebracht! Mr. Burns wird bestimmt sauer sein!”


    Homer: “Kommt, wir gehen nach Hause!”

    Lisa: “Wir sind zuhause…”

    Homer: “Das ging aber schnell!”


    (Homer testet eine Pistole und fuchtelt damit herum)

    Verkäufer: “He, nehmen Sie sich in acht!”

    Homer: “Ich brauch mich nicht in acht zu nehmen, ich hab ne Waffe!”


    Willie zu Edna: “Es würde mir konvenieren, dienstagabend mit Ihnen zu dinieren”

    Schreibt in seinen Kalender: “Schlampe bumsen”


    Grampa: “Ich möchte in Würde sterben, zum Beispiel beim Ausrutschen in der Dusche! Und dann findet mann mich zwei Wochen später so aufgequollen, dass man nicht weiß, bin ich ein Mann oder ein Sofa?”


    Flanders: “Ich bin Flanders, aber meine Freunde nennen mich Ned”

    Homer: “Hallo, Flanders”


    (Filmleute malen einem Pferd Flecken auf)

    Martin: “Entschuldigung, aber warum nehmen Sie keine echten Kühe?”

    “Kühe sehen im Film nicht wie Kühe aus, da muss man Pferde nehmen”

    “Und was machen Sie, wenn ein Tier wie ein Pferd aussehen soll?”

    “Ach, da binden wir meistens nur ein paar Katzen zusammen”


    (Bart ist taub)

    Skinner: “Ah ja, ein Klassiker, genauso wie der blinde Bart, Rollstuhl-Bart, der schwangere Bart und mein persönlicher Favorit, Eisenbahnschwellen-Bolzen-durch-den-Kopf-Bart”


    Zeitungstyp: “Unsere Zeitungen enthalten einen gewissen Prozentsatz recyceltes Papier!”

    Lisa: “Und welchen?”

    “Null! Null ist auch ein Prozentsatz!”


    Homer: “If an emergency goes off, there are earplugs in the top drawer.”


    [Ethiopian resautaurant] Lisa: “They’re using pancakes as spoons.” - Bart: “Ooh, let’s see what else they do wrong!”


    Bart: “Heh, heh, we totally wasted his time!” - Homer: “And ours!”


    (Psychologist) “So, what I understand from our phone conversation, you have a very poor service provider.”


    “Tonights Simpsons episode was brought you by… the number e. Not the letter, but the number, whose exponential function is the derivative of itself.”


    “America has so many enemies: Iran, Iraq, China, Mordor, …”


    Lisa, on walkie talkie: “Roger.” - Bart: “Name’s Bart.”

    ]]>
    Was man alles mit einem Backstein machen kann backstein 2004-06-11T00:00:00+00:00 Sebastian Morr sebastian@morr.cc

    Vor vielen Jahren gingen wir im Klassenforum der 9c der Frage nach, was man alles mit einem Backstein machen kann. Hier die gesammelten Ergebnisse!

    1 Gegen Türen werfen
    2 Drauf sitzen
    3 aus dem fenster werfen
    4 papier drumm wickeln
    5 gegen Bauch werfen
    6 gegen Kopf werfen
    7 In eine Menschenmenge werfen
    8 Versuchen zu essen
    9 Ein stück von abschlagen
    10 Cd auf den boden legen und stein durff werfen
    11 Auf stifte werfen
    12 Auf mäuse werfen
    13 auf mäuse (pc) werfen
    14 auf tastaturen werfen
    15 auf bildschirme werfen
    16 gegen puter werfen
    17 versuchen mit dem kopf in der mitte zu zerbrechen
    18 draufstellen
    19 in die luft werfen
    20 in die luft werfen und nicht weggehen
    21 in einen bratwürstchen stand werfen
    22 verkleiden als ein würstchen und dann verkaufen gg
    23 einen bieba butzemann enthüllen und drüber stülpen
    24 ein haus bauen
    25 eine mauer bauen
    26 ein turm bauen
    27 in baugruben schmeißen
    28 gegen wände schmeißen
    29 auf den boden schmeißen
    30 arbeitern gegen kopf werfen
    31 Tiere abwerfen
    32 in mülleimer schmeißen
    33 in brennende mülleimer schmeißen
    34 gegen laternen schmeißen
    35 gegen litfaßsäulen (scheiß wort) werfen
     
    so jetzt macht ihr mal weiter!!
     
    so viel Zerstörung...
    ok, geb ich auch meinen senf dazu
     
    -=:§ DIE LECKEREN BACKSTEINREZEPTE §:=-
     
    36 gebratener Backstein mit Weißbrot
    37 gekochter Backstein mit Schnitzel und Pilzsoße
    38 mit Käse überBACKener Backstein (muhaha)
    39 Backsteinauflauf
    40 Kartoffeln mit Backsteinsoße
    41 Backsteinpudding mit heißen Kirschen
    42 Backsteinpuffer mit Apfelmus
    43 gedünsteter Backstein mit Johannisbeeren
    44 und die Spezialität des Hauses, Backsteinkuchen mit Zuckerguss und 
    Schlagsahne auf Wunsch
     
    -------------------------------------------
     
    45 in den Kühlschrank legen und Eltern erschrecken
    46 mit in die Schule nehmen und damit angeben
    47 in den Garten pflanzen und warten ob ein Backsteinbaum wächst
    48 in der Handtasche mitnehmen
    49 in der Schule damit rumprahlen
    50 viele stapeln und dann wieder durcheinanderschmeißen
    51 kleinen Geschwistern zum Spielen geben
    52 Tauschbörse eröffnen
    53 ins Diskettenlaufwerk schieben
    54 als Glücksbringer mit zu Mathearbeiten nehmen
    55 sich damit unterhalten
    56 bei Ebay versteigern
    57 bis in die Erdatmosphäre pfeffern
    58 zerkrümeln und Feinden ins Essen streuen
    59 Gedichte drauf schreiben
    60 ins Vakuum stellen und gucken, was passiert
    61 verschenken
    62 filmen
    63 fotografieren
    64 ein abstraktes Kunstwerk draus machen
    65 anbeten
    66 Toiletten damit verstopfen
    67 in Briefkästen der Nachbarschaft werfen
    68 "Backstein" in Englisch, Französisch, Spanisch, Elbisch und
    Zamonisch übersetzen
    69 damit schimpfen
    70 lieb haben und damit kuscheln
     
    viel Spaß beim Nachmachen
     
    woho, du hast ehrlich die besser fantasie, meine besteht nur aus 
    zerstörung! Muhahahahahaha!! :D
     
    71 an Stromkreis anschließen
    72 erhitzen
    73 abkühlen
    74 mit radioaktiver Strahlung beschießen
    75 im Teilchenbeschleuniger gaaaaanz schnell beschleunigen
    76 in den Weltraum schießen
    77 mit einem Thermoelement die Temperatur des Backsteins messen
    78 würfeln und damit Wahrscheinlichkeitsrechnung machen
     
    Kann man mit einem Backstein vielleicht auch mathematisches machen? Zum
    LGS lösen taugen sie jedenfalls nicht...
     
     
    man könnte doch auch die kanten messen und die oberfläche und das
    volumen ausrechen! ist doch mathematisch oder?!
     
    stümmt
     
    79 Höhe mal Breite mal Tiefe ausrechnen
    80 Zwei mal Höhe mal Tiefe und zwei mal Höhe mal Breite und Zwei mal
    Tiefe mal Breite ausrechnen
     
    und noch was naturwissenschaftliches
     
    81 Teilchenmenge ausrechnen
    81 wiegen
    82 Zusammensetzung untersuche Massenproduktion
    85 verkaufen
     
    da komme ich von der Wissenschaft ab... Jetzt was revolutionäres
     
    86 auspressen und
    87 Treibstoff daraus herstellen
    88 verstrahlt als Lichtquelle nutzen
    89 und sowieso als Energiequelle
    90 sehr viele verbrennen um einen Klimaumschwung zu erzeugen
    91 wenn die Polkappen abschmelzen aufpumpen und zusammenbetonieren um
    Boote herzustellen
    92 damit Wohnungen unter der Wasseroberfläche bauen
    93 oho; als neue Währung einführen (nennen wir sie doch "Backstein")
    94 alle alten Gebäude vom damaligen Land abreißen und reich werden
    (muhahaa, daher kommt "steinreich" :)
    95 Raumschiffe daraus bauen und zu einem unverseuchten Planeten fliegen
     
    jetzt werden wir wieder primitiv
     
    96 möglichen Außerirdischen an den Kopf werfen
    97 auf deren Gebäude und Technologien werfen
     
    98 neue Städte daraus aufbauen
    99 den Backsteintag als Nationalfeiertag einführen
    100 den Backstein als eigenständiges Wesen verehren
     
    vergessen habe ich jetzt
     
    98,1 Neue Längen-,
    98,2 Gewichts- und
    98,3 Volumeneinheiten auf Grundlage der Länge, des Gewichts und des
    Volumens eines Backsteins einführen
    98,4 ärgern, das früher alles viel einfacher war und deshalb alle 
    existierenden Backsteine
    siehe 20 in die luft werfen und nicht weggehen
     
    Boah 100 erreicht! Respekt!
     
    da gibt es bestimmt noch viel mehr!!!=)
     
    stimmt.
     
    101 Stefan an den Kopf werfen (von Frau Evers)
    und meine Ideen a la David:
    102 David an den Kopf werfen
    103 Henni an den Kopf werfen
    104 Möhrchen an den Kopf werfen
    105 Schmiddi an den Kopf werfen
    106 Maurus an den Kopf werfen
    107 Hendrik an den Kopf werfen
    108 Benni  an den Kopf werfen
    109 Gerrit an den Kopf werfen
    110 Daniel an den Kopf werfen
    111 Jasper an den Kopf werfen
    112 Joachim an den Kopf werfen
    113 Lukas an den Kopf werfen
    115 Jan an den Kopf werfen
    116 Simon an den Kopf werfen
    117 Tim an den Kopf werfen
    muuhaha; jetzt gaaaanz weit werfen:
    118 Peer an den Kopf werfen
    119 Kevin an den Kopf werfen
    Keine Gewalt gegenüber Fastfrauen.
     
     
    Man kann auch leckere Sachen damit machen:
    120 Essen
    121 Zerbröckeln und als Brause trinken
    122 Kochen
    123 Braten
    124 Erwärmen bis es flüssig wird und dann trinken
    125 Erwärmen bis es gasförmig wird und dann einatmen
    etc. (usw.)
     
    126 weihnachtsgeschenk
    127dem weihnachtsmann an den kopf werfen
    128 in geschenkpapier einwickeln
    129 als kerzenständer nutzen
    130kekse drauflegen!!;)
     
    etwas aus dem sportlichen bereich:
     
    131 handstand drauf machen
    132 Handstandüberschlag drauf machen
    133 handstand drüber machen
    134 Handstandüberschlag drüber machen
    (sehr einfallsreich ;))
    135 Mit skatboard fahrn
    136 kickflip mit machen
    137 Eine Halfpipe mit runter fahren
    138 Zwei jeweils unter einen Fuß schnallen und mit Inliner fahren
    139 damit an einer rail grinden
    140 versuchen irgendwo aufzuhängen und einen aufschwung machen
    141 wenn klappt umschwung
    142 unterschwung dann umfallen
    143 dann den stein auf den kopf bekommen
    144 als boxsack gebrauchen(kann möglicherweise wehtuen, nicht machen)
    145 Auf einen tich legen und hocke drüber machen
    146 drüber hüpfen
    147 drauf seilspringen
    148 drauf arobic (wusste bich wie's geschrieben wird) machen
    149 Rolle drauf machen
    150 Handstandabrollen drau machen
     
    suuuuper ideen! eine übertrifft die andere! für manche übungen brauchst
    du aber einen gaaaanz großen stein...
    so langsam wird dieser backstein lästig... versuch mal ihn
    loszuwerden...
     
    151 in Scheiben schneiden
    152 in eine Kanone stopfen und wegschießen
    153 ertränken
    154 einfrieren
    155 vergraben
    156 grillen
    157-172 mit dem Blaster, der Bl, der Lavapistole, dem Minigeschützturm,
    der Klingenpistole, dem Multiwurfstern, dem Lancer, dem Blitzgewehr,
    dem Infektor, dem Schicksalsagenten, dem Zoomer, der Bananenpistole,
    dem Vernichter (keine Lust mehr) und der N48 kaputtmachen
    173 in einen Lavasee werfen
    174 sprengen
    175 implodieren lassen (keine Ahnung, wie das gehen soll)
    176 als Dummy benutzen
    177 an die Hochspannungsleitung anschließen
    178 in die Streckbank spannen (ja, und kurbeln)
    179 versuchen, Daumenschrauben anzulegen
    180 auf den elektrischen Stuhl mit ihm!
    181 werft ihn ins Feuer!!
    aber ich soll mich nicht von meinen Gefühlen leiten lassen
    182 Bioarbeit schreiben lassen
    183 ihm die Bioarbeit wiedergeben
    184 ihn die Bioarbeit berichtigen lassen
    185 ihm die Bioarbeit mit Fehlern wiedergeben
    186 ihn die Bioarbeit nochmal berichtigen lassen
    187 im finsteren, bitterkalten Wald aussetzen
    188 ihn Rotkäppchen als Geschenk für die Großmutter mitgeben
    189 ahaaaa: vom bösen Wolf fressen lassen
    190 in ein Reh verwandeln
    191 in den Backofen schubsen
    192 aus dem achten Stock fallen lassen
    193 Stücke abschlagen
    194 Stücke abraspeln
    195 Stücke abschmirgeln
    196 Stücke abfeilen
    197 in einen aktiven Vulkan werfen
    198 in einen aktiven Wirbelsturm werfen
    199 nach einem Erdbeben in eine Erdspalte werfen
    -=:[200]:=- über Millionen Jahre hinweg von Bakterien zersetzen lassen
     
    ob wir den nochmal wiedersehen?
     
    201 per modernster technik wieder rematerialisieren
    202 ihn fragen wie es vor millionen jahren mal war
    203 ihn ein geschichtsbuch schreiben lassen (was den titel "Geschichte 
    eines (psychisch und physisch gequälten) Backstein" trägt)
     
    nein ahh, uhuhuaarrrrrrrrgg, wahhhhhhhhhh, 203 eine ungrade zahl, was
    soll das? hm? sach ma? was fällt dir eigendlich ein?ß hm? erklär mir
    das?
     
    Etwas aus dem nützlichen Bereich
     
    204 als türstopper benutzen
    2e
    206 lochen und abheften, dafür, dass man ihn mal irgendwann wieder
    brauch
    207 rundmachen und als kunstobjekt bezeichnen
    208 dünn fräsen und als klopapier benutzen
    209 dünn fräsen und taschentücher draus machen
     
     
    210 klein hacken und als kleine kekse auf dem weihnachtmarkt verkaufen
    211 in ein brötchen packen, ketchup drauf und als 1/2 kilo bratwurst
    auf dem weihnachtmarkt verkaufen
    212 zu pulver machen und als tütensuppe verkaufen
     
    an david: ich galube briefbeschwerer war schon dabei!!!
     
    haha selber reingefallen, dann wäre es jetzt keine ungerade zahl
    mehr!!!!!!!
     
    danke jasper! :D
     
    213 als Erkennungszeichen für einen geheimen Bund benutzen
    Kähähä
    
    hey was soll das :'C  jetzt bin ich ganz traurig und schreib was da
    zu!!
    214 bei einer Versteigerung versteigern(ist nicht ebay!!)
    kähähähähähä
    
    hmm. ist 214 eine schöne zahl? huch, ich hab nichts gesagt, wir wollen
    ja die backsteingötter nicht verärgern... backstein drüber! ahaaa:
    
    215 damit die Tafel wischen
    216 damit waschen
    217 214 Backsteine abzählen und finden, dass das keine schöne Zahl ist
    218 Rätselheft machen:
    
    --------------------------------------------------------------------
    DAS GROßE BACKSTEINRÄTSELHEFT
    
    219 Was ist schwer, schmeckt gut, ist leicht zu zerstören und eine
    wirksame Waffe?
    220 Suchsel
    Such das versteckte Wort:
    ORAC
    WDBX
    YAAL
    DICÖ
    SCKH
    MESC
    KTTG
    UTEP
    ESIM
    NNNN
    CPÜG
    MFIP
    
    221 Führe den Backstein zum Mörtelsack!
    Tipp: Geh nicht den direktesten Weg!
                                                             _W_
     _____    ###########################################   /    \
    |\ ____\                           #                   |     |
    \|_____|  ##################       #      ###########  |_____|
                               #              #
                               ################
    Außen rumgehen ist gemogelt!
    
    222 Wie kommt man auf die Idee, zu fragen, was man alles mit einem
    Backstein machen kann?
    - Man bestraft ein Geburtstagskind damit.
    
    HÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ????
    werden jetzt manche sagen.
    Aber David kann uns die Geschichte erzählen (falls er sie noch weiß)
    

    David hat die Geschichte im Forum nicht mehr erzählt, wenn ich mich recht entsinne, wurde sein Bruder mal an dessen Geburtstag im Geschichtsuntericht mit dieser Aufgabe betraut. Whatever. Unsere Aktionen im Forum haben gerockt! :-)

    ]]>
    The Mork mork 2001-01-01T00:00:00+00:00 Sebastian Morr sebastian@morr.cc One my oldest digital works I still have. A stop motion video, made around 2001, filmed with the Lego Camera that came with the Lego Mindstorms Vision Command kit!

    The content was probably inspired by the Plonsters. The video file is named Mork.avi, so I assume that was supposed to be the character’s name!

    ]]>