Cryptoquest
Posted by Mariia Mykhailova on July 9, 2012As a child I was fascinated by detective or adventure stories in which people had to break ciphers and extract hidden messages from the most innocent-looking text or images. A decade later, a beautiful cipher and the crooked path to its decoding still make my heart pant. This was one of the reasons why I took Stanford online class "Introduction to Cryptography". The very first programming assignment (breaking a one-time pad used more than once) inspired me to create a small quest featuring several historically important ciphers - the ones which don't get used in real life any more but which are so much fun to break by hand.
Here is the actual quest. It is a so-called zip-quest, the principle is: on each level you are given a ciphertext, you have to break it, figure out the message encrypted, get a password from it and apply it to unzip the archive which contains the next level. Zero-level archive (cryptoquest.zip) has no password. In all cases the plain text message contains not only the password itself but also some English text - otherwise the cryptanalysis would be too complicated, if not impossible.
Enjoy breaking the ciphers!
Continue reading →My granny is a programmer
Posted by Mariia Mykhailova on June 6, 2012I'm a third-generation female programmer: my grandmother was the first programmer in the family, my mother followed the example, and now I continue the tradition. My granny's career started half a century ago in the Soviet Union; and here is her story.
Continue reading →Authors of Esoteric Languages
Posted by Mariia Mykhailova on June 3, 2012Esoteric programming languages are pretty weird domain of human knowledge. Most people who learn about them claim that they are completely useless. Well, there is a grain of truth in this - nobody uses an esoteric language for developing applications of practical value, otherwise this language would cease to be esoteric. However, there are people who can appreciate the use and the fun of such languages; furthermore, there are people who don't limit themselves to learning existing languages, but think out of the box and invent ones of their own. Meet the authors of the most famous esoteric programming languages.
Continue reading →Chaos Chef
Posted by Mariia Mykhailova on January 22, 2012Today we participated in a nice contest named Chaos. It required solving problems in a language announced only minutes before the start of the contest - a concept similar to Unknown Language Rounds at Codeforces. Today the language turned out to be Chef, which I know quite well, so it took only one hour to solve all 6 problems and win.
Here are the solutions to the problems.
Continue reading →New Year geek quest
Posted by Mariia Mykhailova on December 30, 2011A couple of days ago I gave way to New Year spirit and decided to create a geek quest. Well, here it is: http://tc-alchemy.progopedia.com/quest.zip :-)
The principle is: on each level you are given a task (a text file or an image). You have to solve it to get a password for the archive which contains the next level. Zero-level archive (quest.zip) has no password.
The tasks of the quests are related to esoteric programming languages, but they don't require deep knowledge of the domain - most of them need only a moment of enlightenment or a wild guess. Thinking outside the box is helpful too.
Since one can extract a lot of versions of hidden message from any text, let alone from an image, correct password is prefixed with "pwd:" for all levels (you have to enter the password without this prefix).
I hope you'll enjoy the quest. Happy New Year!
Continue reading →Several Ways to Congratulate a Programmer
Posted by Mariia Mykhailova on October 20, 2011I want to carry on a tradition I started a year ago with this post, and tell about several more ways to make your "Happy Programmer's Day!" greetings look both unusual and professional at the same time. This time I'll be printing simply "congrats" - all simple ways have already been covered last year.
I know this post is a month late, but my studies, travels and studies again prevented me from publishing it earlier.
Continue reading →Gourmet Programming
Posted by Mariia Mykhailova on July 31, 2011Esoteric programming languages are fascinating; thanks in no small part to the fact that for every occasion there is a language. Literally. A language for animal lovers and painters, for hackers and puzzle lovers, for jargonauts and poets... Here are several languages for gourmets - people who don't live by bread alone.
Chef
Continue reading →Programming Languages: the First Joke
Posted by Mariia Mykhailova on April 1, 2011Programming languages have jokes and jokers of their own. As a matter of fact, most esoteric programming languages were designed to be a joke (unless they were a brain exercise like the infamous Brainfuck). But there is one language which really deserves to be called The First Joke. In ages past and gone, in year 1972, when all existing programming languages were entirely rational and deadly serious, two jokers pushed the limits and invented a completely new language. They called it "Compiler Language With No Pronounceable Acronym", which for obvious reasons abbreviated to INTERCAL.
Continue reading →Pi in Programming Languages
Posted by Mariia Mykhailova on March 14, 2011March 14th is a worldwide Pi (π) day. Founded in 1989 and officially recognized in 2009, this day can be celebrated in multiple ways, the most popular of which are eating circular pies and discussing things related to Pi. It would be weird not to have a couple of programming languages based on Pi or at least named after it. In this article I'll talk about them - after all, one has to support good traditions :-)
1. Pi - dialect of Brainfuck
Brainfuck has plenty of dialects for all occasions, including Pi day. The commands of the Pi language are the same as in Brainfuck, but written as erroneous digits of Pi number in the following way. For each command a position is chosen in which it will be hidden (the positions are ordered in the same way as in the original code). A table of commands and corresponding digits is constructed from the initial one
Continue reading →If Programming Languages Were Women
Posted by Mariia Mykhailova on March 3, 2011The upcoming spring made me wonder: if programming languages were women, what kind of women would they be? A bit of googling brought up a few outdated articles which missed a lot of my favorite languages, so I decided to bring together a list of my own. Some of the most popular languages just don't feel like a female character for me, so I skipped them - you're welcome to suggest a vision of your own. No offense is meant for any language or its users, or to women, since I'm one of them :-)
Prolog
A woman you can only dream about: she does whatever you want. The problem is, the description of what exactly you want takes longer than the explanation of how to do this.
BASIC
A hot divorcée; she specializes in seducing teenagers, and a lot of them get their first experience from her. The adults have various opinions about her: some recall her fondly, while the others disapprove her bad influence on young minds.
Java
A business-woman in her thirties. Can handle anything and doesn't really care about her job conditions, so she's really appreciated in corporations. Dates mostly businessmen. She's too focused on her job to look or behave sexy, but she's really good in bed once you're there. Continue reading →Numerical Signatures (with a Bit of Magic)
Posted by Mariia Mykhailova on January 31, 2011I've always been fascinated by programming magic - small tricks which make seemingly meaningless code do something unexpected. The most famous of such tricks are "signatures", which output a short text (usually author's name). My previous post featured several unusual ways of printing text using esoteric programming languages, and (surprisingly) it helped someone to make their new-year greetings something special. But real magic is doing such things in common everyday languages, like C++ or Java. In this writeup I will show several ways to print short text using only numeric constants as raw data.
Continue reading →Several Ways to Congratulate a Programmer
Posted by Mariia Mykhailova on September 20, 2010- Hey, it's really Programmers' Day, - realized I about two hours prior to it coming. Then I imagined tomorrow's congratulations - boring commonplace phrases, not a bit different from things said on any other day. And I yearned for something professional, with zest in it! I got to work immediately, and here is the result. This article suggests several methods to represent any trivial greetings in a special way, with respect to our profession and this encyclopedia.
Continue reading →10 unnatural ways to calculate Fibonacci numbers
Posted by Mariia Mykhailova on May 30, 2010The task of calculating first dozen of Fibonacci numbers has lost its practical value ages ago. Nowadays it's used mostly for illustrating some basic programming techniques, recursion and iteration among them. In this writeup I will use it to show several programming languages, in which it acquires uncommon and sometimes definitely unhealthy look.
So, here goes my rating of ten most unnatural ways to calculate Fibonacci numbers of the ones
I used for Progopedia project. For a more accurate definition, let's demand that the program
outputs first 16 numbers, formatted as
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, ...
10. Sanscript
A visual programming language, in which all language elements are represented as elementary blocks. The "code" itself, called flowgram, is built from these blocks by connecting them with links. What placed this language in the rating is:
- the size of flowgrams: two dozens of blocks is a maximum that can be used within one flowgram without scrolling it or getting entangled in connections between blocks;
- the complexity of basic language constructs: each loop or conditional statement requires one or more separate flowgrams of description, and their numbers multiply endlessly;
- the fact that the program is not written but drawn, and the keyboard is used only for entering constant values, renaming elementary blocks and adding comments;
- and the way the flowgrams overall look like large bowls of spaghetti - talk about spaghetti code!
Main flowgram
Retro? Necro? Oh yes, Turbo!
Posted by Mariia Mykhailova on January 25, 2010Most people who write about Turbo Pascal start with their memorials about its appearance and their experience with it. I can't pattern them, since Turbo Pascal 1.0 is exactly two years older than I am, so I used only 7.0 version, followed by Delphi.
I'll have to approach this topic from opposite direction and tell you how Turbo Pascal looks from the modern point of view, for a person who was raised on modern IDEs and turns to Turbo Pascal with purely exploratory purposes.
So, let's have a look at year 1983 and Turbo Pascal 1.0...
Turbo Pascal 1.0