First automatic population of zine/issue002.
This commit is contained in:
parent
0c93f9db0d
commit
a533a0c613
|
@ -0,0 +1,22 @@
|
|||
# Ask Jone
|
||||
|
||||
-- Do you have a problem? Send your questions to joneworlds@mailbox.org
|
||||
|
||||
C. asks:
|
||||
> I am having no luck at all trying to grow a vegetable garden. Do you have any tips?
|
||||
|
||||
Well C, you know I got into gardening a bunch of years back. Found some patch of dirt on my dad's land, took one of those prepper seed tins, and got busy. First two years, I got basically nothing. Maybe that's why those seed tins were so cheap, some skinny ex-prepper trying to scrape together a buck for a box of cookies or something.
|
||||
|
||||
Anyways, one spring day I was visiting Ellie, who always keeps a fantastic garden. And she's telling me some tips, and they seem all right. But you know I'm super observant, so I notice how she's watering her garden from a motor oil jug with holes punched in the bottom. And THAT gets me thinking. Oil! Energy rich, natural, from the earth. It's basically organic material. Liquid mulch! That had to be the secret of her success. (Now, later I learned that Ellie was actually just watering her garden with a cleaned-out jug - watering with water, not oil. But this did not occur to me at that time.)
|
||||
|
||||
So I set about finding me a suitable source of motor oil. I reasoned that a low-viscosity product would be ideal for this application, like 5W30. And it's got to be conventional oil, not synthetic, because I'm really into organic food, you know?
|
||||
|
||||
Del hooks me up with their friend with a garage, and they say I can have as much of their used oil as I want. Jackpot! It's rich and black, probably full of nutrients and minerals and metals. Many people don't get enough iron in their diet. I don't know how much I need, but I figure about 50L should do it.
|
||||
|
||||
So anyways, I get all this back to my garden, and start spreading it around with a jug, just like Ellie showed me. And then that smart-ass kid Leanne drops by for some reason, just as I'm laying down the last of the oil. She sees me working away, and she's like, what the hell are you doing. And I'm like, what does it look like I'm doing, I'm fertilizing. And she's like, oh my god you are such an idiot. And I'm like, hey don't call me an idiot, you're 12. And she's like, you're going to have to excavate that whole plot. And she's pretty annoying, but I'm not so proud that I won't take good advice even from a kid, so I'm like, okay then. Next day I dig out all that oily dirt and put regular dirt back in. Used Ric's bobcat digger for that job, which was a blast and I had a great time, except when I backed it into dad's shed and knocked it over. But it's okay, you know, stuff like that happens sometimes.
|
||||
|
||||
And I tell you, that summer was the best garden I ever had. There was tomatoes, and potatoes, and beans and strawberries and broccoli, and probably a bunch of stuff I'm forgetting. It all worked out.
|
||||
|
||||
Based on all that, the advice I have for you goes like this: plant, then plenty of used motor oil; excavate, and then plant again. All that, and also you can make a terrific watering can out of a jug. You can't miss.
|
||||
|
||||
Thanks for writing in. I hope that helps.
|
|
@ -0,0 +1,55 @@
|
|||
# Ask Jone
|
||||
|
||||
-- Do you have a problem? Send your questions to joneworlds@mailbox.org
|
||||
|
||||
C. asks:
|
||||
> I am having no luck at all trying to grow a vegetable garden. Do you have any
|
||||
tips?
|
||||
|
||||
Well C, you know I got into gardening a bunch of years back. Found some patch of
|
||||
dirt on my dad's land, took one of those prepper seed tins, and got busy. First
|
||||
two years, I got basically nothing. Maybe that's why those seed tins were so
|
||||
cheap, some skinny ex-prepper trying to scrape together a buck for a box of
|
||||
cookies or something.
|
||||
|
||||
Anyways, one spring day I was visiting Ellie, who always keeps a fantastic
|
||||
garden. And she's telling me some tips, and they seem all right. But you know
|
||||
I'm super observant, so I notice how she's watering her garden from a motor oil
|
||||
jug with holes punched in the bottom. And THAT gets me thinking. Oil! Energy
|
||||
rich, natural, from the earth. It's basically organic material. Liquid mulch!
|
||||
That had to be the secret of her success. (Now, later I learned that Ellie was
|
||||
actually just watering her garden with a cleaned-out jug - watering with water,
|
||||
not oil. But this did not occur to me at that time.)
|
||||
|
||||
So I set about finding me a suitable source of motor oil. I reasoned that a low-
|
||||
viscosity product would be ideal for this application, like 5W30. And it's got
|
||||
to be conventional oil, not synthetic, because I'm really into organic food, you
|
||||
know?
|
||||
|
||||
Del hooks me up with their friend with a garage, and they say I can have as much
|
||||
of their used oil as I want. Jackpot! It's rich and black, probably full of
|
||||
nutrients and minerals and metals. Many people don't get enough iron in their
|
||||
diet. I don't know how much I need, but I figure about 50L should do it.
|
||||
|
||||
So anyways, I get all this back to my garden, and start spreading it around with
|
||||
a jug, just like Ellie showed me. And then that smart-ass kid Leanne drops by
|
||||
for some reason, just as I'm laying down the last of the oil. She sees me
|
||||
working away, and she's like, what the hell are you doing. And I'm like, what
|
||||
does it look like I'm doing, I'm fertilizing. And she's like, oh my god you are
|
||||
such an idiot. And I'm like, hey don't call me an idiot, you're 12. And she's
|
||||
like, you're going to have to excavate that whole plot. And she's pretty
|
||||
annoying, but I'm not so proud that I won't take good advice even from a kid, so
|
||||
I'm like, okay then. Next day I dig out all that oily dirt and put regular dirt
|
||||
back in. Used Ric's bobcat digger for that job, which was a blast and I had a
|
||||
great time, except when I backed it into dad's shed and knocked it over. But
|
||||
it's okay, you know, stuff like that happens sometimes.
|
||||
|
||||
And I tell you, that summer was the best garden I ever had. There was tomatoes,
|
||||
and potatoes, and beans and strawberries and broccoli, and probably a bunch of
|
||||
stuff I'm forgetting. It all worked out.
|
||||
|
||||
Based on all that, the advice I have for you goes like this: plant, then plenty
|
||||
of used motor oil; excavate, and then plant again. All that, and also you can
|
||||
make a terrific watering can out of a jug. You can't miss.
|
||||
|
||||
Thanks for writing in. I hope that helps.
|
|
@ -0,0 +1,14 @@
|
|||
# Circumlunar Transmissions - issue002
|
||||
|
||||
## Preface
|
||||
|
||||
=> preface.gmi Editor's introduction
|
||||
|
||||
## Features
|
||||
|
||||
=> ask-jone-002.gmi Ask Jone
|
||||
=> katolaz_on-the-intriguing-beauty-of-whistled-languages.gmi On the intriguing beauty of whistled languages
|
||||
=> solderpunk_seeing-the-light-of-morse.gmi Seeing the light of Morse
|
||||
=> tfurrows_sanjay-cider.gmi A Day Sometimes Pivots on Its Lunch Break
|
||||
=> sloum_getting-started-with-programming.gmi Getting Started With Programming
|
||||
=> yargo_morse-code-promotion-manifesto.gmi Morse Code Promotion Manifesto
|
|
@ -0,0 +1,28 @@
|
|||
# On the intriguing beauty of whistled languages
|
||||
|
||||
I have always found intriguing how humans have found literally thousands of different systems to communicate their thoughts. We call those systems "languages", and when we talk about them we probably think of the fact that each language uses a different word to denote the same object or concept. But there is one aspect that (almost!) all the languages on Earth have in common: they are "spoken", which means that they consist of combinations of sounds made by modulating the flow of air through the mouth, and by movements of our tongue and lips. This is how we get vowels and consonants: leave your mouth wide open and you get an "a", stretch your lips in a smile and you get an "e", blow into your closed mouth for half a second and then release the air by suddenly opening your lips, and you get a "p". And so on.
|
||||
|
||||
But "speaking" is not the only possible manifestation of a human language. The strangest kind of languages I have bumped into are the so-called "whistled languages" [1], which are exactly what they sound like: languages consisting of combinations of tones that are whistled by the "speaker". You might be surprised to discover that there are literally hundreds of known whistled languages. One example is "Silbo Gomero" [2] (literally, "Gomeran whistle"), a whistled language used by the inhabitants of La Gomera in the Canary Islands. Most of the people in La Gomera can still speak the language today, thanks to a program to revitalise its usage, but all of the inhabitants understand it. Linguists believe that whistled languages are connected to the necessity to communicate over long distances and across impervious terrains, and in fact La Gomera is known for its deep valleys and canyons. And this same pattern seems to be shared by most of the whistled languages still in use today, from Asia to central America: the terrain of a region forced its inhabitants to whistle their thoughts, in order to be heard more easily and more efficiently.
|
||||
|
||||
Some recent studies have even shown that the speakers of "whistled" languages actually process whistles using the same regions of the brain that other humans use to process words in the usual "spoken" languages.
|
||||
|
||||
But why am I telling you about "whistled" languages? Well, because I recently started learning an artificial language that resembles "whistled" languages a lot. I am talking about Morse code [3]. Yes, the one used back in the days for telegraphy, where each letter of the alphabet consists of a short series of dot and dashes, or dits and dahs, and so on. It turns out Morse code is far from extinct, as it is currently in use by radio amateurs around the globe to communicate in the so-called "Continuous Wave" mode, normally abbreviated "CW" [4]. Basically, you send your message as a concatenation of long and short tones or pulses, which are then decoded by the person at the other end of the contact.
|
||||
|
||||
If you ever try to learn Morse code (it is totally doable in a few weeks, or even less) you will be told that you must not think of each letter as consisting of a certain sequence of dots and dashes, but rather as a "sound", a new way to "pronounce" and "perceive" the same letter you are used to reading and writing [5]. The aim is to force your brain to think of "A" whenever you hear the sound "di-daa" and to think of "R" whenever you hear the sound "di-daah-dit", without having to double-translate the sound to dot-and-dashes and then back to the images of letters that our brain constructs and keeps.
|
||||
|
||||
And how different is this from teaching your brain that a certain whistle, with a certain tone, must be associated with "A", while another whistle, with another tone, shall be associated to "R"?
|
||||
|
||||
I really think learning CW is indeed not too different from learning a whistled language. You forget quite soon about dots and dashes, and only hear "the sound of T", and then start putting together individual sounds into words, to recognise "the sound of 'THE'". Obviously, this process requires a certain amount of time and effort, but it is not much different from learning any other language. The words are still in English, or Spanish, but they are articulated in a totally different way.
|
||||
|
||||
Coincidentally, CW (i.e., Morse code over radio) is often one of the few transmission modes that can successfully "get through" long distances or bad propagation conditions, when all the other voice modes cannot. Exactly as the whistling patterns of Silbo Gomero get through the valleys of La Gomera, while most of your shouting would not be intelligible at all. Obviously, there are several more efficient transmission modes available nowadays, mostly digital ones, which do not require much human intervention, if any at all. But I like to think that the deep reason why Morse code is still in wide use in ham radio is that hams like to "whistle" their thoughts, and find pleasure in putting some concrete effort to "copy" the whistled thoughts of their correspondents. Like the Gomerean have been doing for hundreds of years.
|
||||
|
||||
KatolaZ
|
||||
|
||||
-+-+-+-
|
||||
|
||||
References:
|
||||
[1] gopher://gopherpedia.com/0/Whistled language
|
||||
[2] gopher://gopherpedia.com/0/Silbo Gomero
|
||||
[3] gopher://gopherpedia.com/0/Morse code
|
||||
[4] gopher://gopherpedia.com/0/Continuous wave
|
||||
[5] http://www.tasrt.ca/bookdown.html
|
|
@ -0,0 +1,87 @@
|
|||
# On the intriguing beauty of whistled languages
|
||||
|
||||
I have always found intriguing how humans have found literally thousands of
|
||||
different systems to communicate their thoughts. We call those systems
|
||||
"languages", and when we talk about them we probably think of the fact that each
|
||||
language uses a different word to denote the same object or concept. But there
|
||||
is one aspect that (almost!) all the languages on Earth have in common: they are
|
||||
"spoken", which means that they consist of combinations of sounds made by
|
||||
modulating the flow of air through the mouth, and by movements of our tongue and
|
||||
lips. This is how we get vowels and consonants: leave your mouth wide open and
|
||||
you get an "a", stretch your lips in a smile and you get an "e", blow into your
|
||||
closed mouth for half a second and then release the air by suddenly opening your
|
||||
lips, and you get a "p". And so on.
|
||||
|
||||
But "speaking" is not the only possible manifestation of a human language. The
|
||||
strangest kind of languages I have bumped into are the so-called "whistled
|
||||
languages" [1], which are exactly what they sound like: languages consisting of
|
||||
combinations of tones that are whistled by the "speaker". You might be surprised
|
||||
to discover that there are literally hundreds of known whistled languages. One
|
||||
example is "Silbo Gomero" [2] (literally, "Gomeran whistle"), a whistled
|
||||
language used by the inhabitants of La Gomera in the Canary Islands. Most of the
|
||||
people in La Gomera can still speak the language today, thanks to a program to
|
||||
revitalise its usage, but all of the inhabitants understand it. Linguists
|
||||
believe that whistled languages are connected to the necessity to communicate
|
||||
over long distances and across impervious terrains, and in fact La Gomera is
|
||||
known for its deep valleys and canyons. And this same pattern seems to be shared
|
||||
by most of the whistled languages still in use today, from Asia to central
|
||||
America: the terrain of a region forced its inhabitants to whistle their
|
||||
thoughts, in order to be heard more easily and more efficiently.
|
||||
|
||||
Some recent studies have even shown that the speakers of "whistled" languages
|
||||
actually process whistles using the same regions of the brain that other humans
|
||||
use to process words in the usual "spoken" languages.
|
||||
|
||||
But why am I telling you about "whistled" languages? Well, because I recently
|
||||
started learning an artificial language that resembles "whistled" languages a
|
||||
lot. I am talking about Morse code [3]. Yes, the one used back in the days for
|
||||
telegraphy, where each letter of the alphabet consists of a short series of dot
|
||||
and dashes, or dits and dahs, and so on. It turns out Morse code is far from
|
||||
extinct, as it is currently in use by radio amateurs around the globe to
|
||||
communicate in the so-called "Continuous Wave" mode, normally abbreviated "CW"
|
||||
[4]. Basically, you send your message as a concatenation of long and short tones
|
||||
or pulses, which are then decoded by the person at the other end of the contact.
|
||||
|
||||
If you ever try to learn Morse code (it is totally doable in a few weeks, or
|
||||
even less) you will be told that you must not think of each letter as consisting
|
||||
of a certain sequence of dots and dashes, but rather as a "sound", a new way to
|
||||
"pronounce" and "perceive" the same letter you are used to reading and writing
|
||||
[5]. The aim is to force your brain to think of "A" whenever you hear the sound
|
||||
"di-daa" and to think of "R" whenever you hear the sound "di-daah-dit", without
|
||||
having to double-translate the sound to dot-and-dashes and then back to the
|
||||
images of letters that our brain constructs and keeps.
|
||||
|
||||
And how different is this from teaching your brain that a certain whistle, with
|
||||
a certain tone, must be associated with "A", while another whistle, with another
|
||||
tone, shall be associated to "R"?
|
||||
|
||||
I really think learning CW is indeed not too different from learning a whistled
|
||||
language. You forget quite soon about dots and dashes, and only hear "the sound
|
||||
of T", and then start putting together individual sounds into words, to
|
||||
recognise "the sound of 'THE'". Obviously, this process requires a certain
|
||||
amount of time and effort, but it is not much different from learning any other
|
||||
language. The words are still in English, or Spanish, but they are articulated
|
||||
in a totally different way.
|
||||
|
||||
Coincidentally, CW (i.e., Morse code over radio) is often one of the few
|
||||
transmission modes that can successfully "get through" long distances or bad
|
||||
propagation conditions, when all the other voice modes cannot. Exactly as the
|
||||
whistling patterns of Silbo Gomero get through the valleys of La Gomera, while
|
||||
most of your shouting would not be intelligible at all. Obviously, there are
|
||||
several more efficient transmission modes available nowadays, mostly digital
|
||||
ones, which do not require much human intervention, if any at all. But I like to
|
||||
think that the deep reason why Morse code is still in wide use in ham radio is
|
||||
that hams like to "whistle" their thoughts, and find pleasure in putting some
|
||||
concrete effort to "copy" the whistled thoughts of their correspondents. Like
|
||||
the Gomerean have been doing for hundreds of years.
|
||||
|
||||
KatolaZ
|
||||
|
||||
-+-+-+-
|
||||
|
||||
References:
|
||||
[1] gopher://gopherpedia.com/0/Whistled language
|
||||
[2] gopher://gopherpedia.com/0/Silbo Gomero
|
||||
[3] gopher://gopherpedia.com/0/Morse code
|
||||
[4] gopher://gopherpedia.com/0/Continuous wave
|
||||
[5] http://www.tasrt.ca/bookdown.html
|
|
@ -0,0 +1,10 @@
|
|||
# Preface
|
||||
|
||||
Welcome to the second issue of Circumlunar Transmissions! The time between the first and second issues has perhaps been longer than had originally hoped, but rest assured the project is very much still alive. Expect new issues to continue to appear, at exactly the pace that we end up completing them; no faster and no slower.
|
||||
|
||||
Any sort of unifying set of themes and philosophies to the content of the zine will arrive organically over time, if at all, reflecting (as mieum put it so well in the inaugural preface) the diverse interests, talents and backgrounds of the Sundog community. For now we're still in "topic salad" mode, although as it turned out this issue has a common theme of Morse code uniting some of the content. Minimalistic communication technology as focus of CS interest should surprise precisely no one, of course.
|
||||
|
||||
But it's not all tech! There's a delightful short story, a recipe, a new Circumlunar Mixtape and more of the inimitable advice of Jone. I, for one, hope the zine continues to move in the direction of a solid balance between technical and non-technical content.
|
||||
|
||||
~solderpunk
|
||||
July xx, 2021
|
|
@ -0,0 +1,23 @@
|
|||
# Preface
|
||||
|
||||
Welcome to the second issue of Circumlunar Transmissions! The time between the
|
||||
first and second issues has perhaps been longer than had originally hoped, but
|
||||
rest assured the project is very much still alive. Expect new issues to
|
||||
continue to appear, at exactly the pace that we end up completing them; no
|
||||
faster and no slower.
|
||||
|
||||
Any sort of unifying set of themes and philosophies to the content of the zine
|
||||
will arrive organically over time, if at all, reflecting (as mieum put it so
|
||||
well in the inaugural preface) the diverse interests, talents and backgrounds of
|
||||
the Sundog community. For now we're still in "topic salad" mode, although as it
|
||||
turned out this issue has a common theme of Morse code uniting some of the
|
||||
content. Minimalistic communication technology as focus of CS interest should
|
||||
surprise precisely no one, of course.
|
||||
|
||||
But it's not all tech! There's a delightful short story, a recipe, a new
|
||||
Circumlunar Mixtape and more of the inimitable advice of Jone. I, for one, hope
|
||||
the zine continues to move in the direction of a solid balance between technical
|
||||
and non-technical content.
|
||||
|
||||
~solderpunk
|
||||
July xx, 2021
|
|
@ -0,0 +1,217 @@
|
|||
# Getting Started With Programming
|
||||
|
||||
I am a big believer in making your own tools *when possible*. For example, I do not have the ability to make a computer processor myself (well, not the kind used in modern general purpose computers), but I do have the ability to learn to program software that will run on that chip.
|
||||
|
||||
This, of course, can extend beyond computing: making a jig when working with wood, making pottery or baskets, sewing, etc. The way the world is at present, or maybe always, it is hard to control the whole chain. You likely have to acquire something to do the making: a hammer, a needle and thread, etc.
|
||||
|
||||
With computers it is comparatively easy to make things once you have a general purpose computer. Every operating system I can think of allows for some type of programming of applications and/or the system itself. Once you have a system you can create an endless array of tools for yourself, or modify ones that already exist. You could even code a bootloader and an operating system if you were so inclined.
|
||||
|
||||
I believe just about anyone can do this (write applications for computers), if they are so inclined. This is not something solely available to C programming wizards that have been doing it for decades. There are lots of easy to approach programming languages and environments for people new to the concepts.
|
||||
|
||||
## Why Build Your Own Tools
|
||||
|
||||
At the end of the day the best reason I can think of is for the satisfaction of using something you built and of knowing how a thing works (at least at the level of abstraction needed to be able to mostly control or modify it).
|
||||
|
||||
Of course there is also knowledge. The learning that happens when you build a piece of software can be quite valuable. It can help you learn to think and reason in different ways. Solving problems is good brain exercise.
|
||||
|
||||
## How To Get Started
|
||||
|
||||
As stated above: you do not need to have prior programming experience to start building your own tools. The first step is to pick a language to work with. This choice mostly doesn't matter too much, at least from a certain perspective.
|
||||
|
||||
### Languages
|
||||
|
||||
When starting out it is good to choose a language with good documentation and lots of resources online for working with that language, but most languages you will find nowadays will be fine. A few good/popular choices that come to mind:
|
||||
|
||||
=> https://www.python.org/about/gettingstarted/ Python
|
||||
|
||||
Python code is generally easy to read and reason about (at least at beginner levels) and there is a lot of information about writing Python programs available online. The built-in library has just about anything you'd need to write most types of programs, even graphical programs.
|
||||
|
||||
If you are on Linux or OSX it is likely that Python is already installed on your system. Read ahead to learn a small bit about terminals/shells and then run `python3 --version`. If you get a response that says it is not found, try running `python --version`. If it is still not found then you will need to install it with the instructions on the Python website (linked above) or with your package manager (if you system uses one).
|
||||
|
||||
=> https://www.lua.org/start.html Lua
|
||||
|
||||
Lua, like Python, is straight-forward and easy to read and reason about. Lua's built-in library is MUCH smaller. This has a lot of benefits though: Lua is a small enough language that a person can reasonably hold pretty close to all of it in their head at one time. So after a bit of practice you should just be able to write things without constantly looking at the documentation. Some downsides are that the built-in library does not have things like sockets (which let you communicate over the internet as a client or server, among other things). A lot of video game engines allow games to be written in Lua (Love2D, Pico-8, etc.), so if you like video games Lua might be a good choice.
|
||||
|
||||
Both of the above are interpreted languages. To run any programs written with them, a person needs to have the Lua or Python program installed on their system. Thus, sharing your creations has an added step of getting someone to get that interpreter on their system.
|
||||
|
||||
There are also compiled languages. These languages use a compiler (another program that converts the code you write into lower level code of some sort - it varies from compiler to compiler). Once a program is compiled it can generally be run without needing to have the language installed on the system or invoking and interpreter. Most programs on your system were likely written in the programming language 'C'. This is a fairly old programming language that I do not generally recommend as a first language to people these days. It is VERY powerful, but can be harder to reason about than Python or Lua, especially for a beginner. It can also be tricky to find actionable information on. There are a number of compiler and library implementations, and they may vary in how they are used. The language features and available functions/macros can also vary from OS to OS and architecture to architecture.
|
||||
|
||||
Rust is a newer programming language that can work in similar domains to C. But it is a complicated language in comparison the the others being recommended here. The programs it creates, when coded well, can be really solid and safe (from a memory standpoint)... but it can be a lot for someone just starting out.
|
||||
|
||||
As such, I tend to recommend learning Go as a first compiled language:
|
||||
|
||||
=> https://go.dev/learn/ Go
|
||||
|
||||
Go is a more modern compiled language. It differs from C in a number of ways, that mostly make it easier for you to program... but make it less suitable for certain types of applications (anything where garbage collection would be a problem - but that won't be an issue for 99% of people learning to program). The documentation is fantastic and the code is easy to reason about. The built-in library is almost as complete as Python's (though there is no direct help with GUI programming built in).
|
||||
|
||||
All of the links provided above are to "Getting Started" instructions. Again, the language doesn't matter so much. If you see something out there other than one of these three that tickles your fancy and have found readable documentation that makes some level of sense to you: go for it!! I just recommend these three to give novices somewhere to start.
|
||||
|
||||
You may have noticed I did not include JavaScript. This is intentional. I do not think it is a good place to start. The ecosystem is complicated and the tooling is difficult. To effectively use JavaScript in a modern way in a browser you will likely need to learn HTML and CSS along with JavaScript. Additionally, it has become trendy to use various frameworks and libraries rather than just writing JavaScript code (using React, Vue, Angular, Svelt, jQuery, etc). These extra things to learn can make approaching JavaScript as a beginner confusing and difficult and may create long term confusion about some basic programming concepts. It is also harder to look up documentation due to the wide variety of frameworks that people work in. While you could use nodeJS to build console applications like you would when starting out with Python or Lua, I just feel like nodeJS is not as good as Lua or Python and that its ecosystem is terrible (opinions on this will vary, and I am just giving you mine).
|
||||
|
||||
You may also notice, if you have experience in such things, that I have not included any sort of shell programming (bash, fish, zsh, etc. scripting). While these options can be very useful for system automation and can even be used to make larger programs... their syntax is often not clear and the ability to just call as if in the shell is unlike most of the rest of the programming world. They might be something good for people to look into, but not a great choice as a first language as I think they would create some misunderstandings and possibly bad habits.
|
||||
|
||||
There will likely be many opinions that disagree with me and encourage starting with Rust, C, or some functional language (Haskell, Clojure, Elixir, Erlang) or other. All of these languages are powerful languages that can be really great to work with. I have made my recommendations based on my experience and a desire to allow someone to "dip a toe in". Not everyone needs to become a systems programmer, and my advice is really geared toward people that just want to try out coding to see what it is all about. In earlier times BASIC or Pascal would have been recommended for this purpose, but those days are largely past us. I think Python, Lua, and Go are sensible choices for someone to try things out.
|
||||
|
||||
### Terminals, Shells, and Text Editors
|
||||
|
||||
Once you have followed the installation instructions for the language you have chosen, you will likely need to open a terminal window.
|
||||
|
||||
Many folks that do not program may not know much about terminals (on any modern system it will likely be a terminal emulator... but you don't need to worry about that). Each of the major operating systems includes some textual interface to the system. On OSX the application is `Terminal.app`. On Linux or BSD there will be a terminal of some form, but its name will vary by distribution/OS (`gnome-terminal` will be present on Ubuntu, for example). On Windows, if memory serves correctly, it is called `Cmd.exe`, but don't quote me on that (I have not used a Windows machine, even in passing, for over a decade).
|
||||
|
||||
Once the terminal is open you will be presented with a prompt of some sort (likely ending in `$`, `#`, or `>`, but that is not a rule). You can type commands at this prompt and get output. On Linux/BSD/OSX type `ls` and press Enter; on Windows type `dir` and press Enter. You should see a list of files in the current folder. You entered the name of a program: `ls`/`dir`. This program takes your current directory and loops over all of the files in the directory and outputs their names. It then exits, returning control to the terminal (actually the shell, which is running inside of the terminal, but lets not get ahead of ourselves).
|
||||
|
||||
Your first programs will likely be similar: you will call them from the terminal, they will do their thing, and then exit. Many programs can take arguments, additional pieces of information being passed into the program. For example, the `ls` program can be entered as `ls -l`. The `-l` is an argument that tells the `ls` program to output extended information about each file... its owner, access settings, size, etc. So, the `ls` program has code to look at the arguments that were sent into it and do things with them. Your early programs will likely not include many arguments, but it is good to know about them since passing in paths to files or other input will quickly become useful.
|
||||
|
||||
I do not know much about the Windows command line, so from here on I will be talking about Linux/BSD/OSX. If you enter:
|
||||
|
||||
``` shell input
|
||||
cd ~
|
||||
mkdir programming_practice
|
||||
cd programming_practice
|
||||
```
|
||||
|
||||
You will move directories to your home directory. The program `cd` takes a file path as an argument. In this case the `~` is something the shell (the actual program running inside the terminal that lets you input commands) knows to expand to meaning a user's home directory. We then create a directory in your home folder called `programming_practice` and then `cd` into it.
|
||||
|
||||
You can always go directly to this folder with:
|
||||
|
||||
``` shell input
|
||||
cd ~/programming_practice
|
||||
```
|
||||
|
||||
Then you can run `ls` to see any files or subfolders you may want to work on/in.
|
||||
|
||||
You now have a place to work on programs. You can navigate to this folder in a graphical file browser as well.
|
||||
|
||||
Now you are ready to write a program... but you need something to write it with. Using 'MS Word' or OSX's 'Pages' will not work. Those are word processors that use their own document formats as output. You want to work in so-called 'plain text'.
|
||||
|
||||
There are editors for your terminal as well as graphical editors. For simple things using Windows' 'Notepad' or OSX's 'TextEdit' can work fine for this purpose in a pinch, but using an actual code editor will provide many useful things to you, including automatic coloring of various words and structures in your given programming language to make the code easier to read.
|
||||
|
||||
Here are some editors to look into (all of them are free to use):
|
||||
|
||||
* 'nano' - A lot of people love this editor. It is a terminal based editor. I hate this editor, but concede it is a safe place for a beginner to start. To use it for code you will need to turn syntax highlighting on (a search online can help you do so). 'nano' may already be installed on your system. Try typing `nano` at your shell prompt.
|
||||
* 'vs code' - This is the current hot editor as far as graphical editors go. It will need little to no configuration for you to get started, but it is a memory hog. This can be downloaded online after a quick search. Be aware that this application may do usage analytics and send information to Microsoft.
|
||||
* 'notepad++' - Windows users seem to like this graphical editor. A similar equivalent exists in the form of 'gedit' for Linux/BSD folks running Gnome as their desktop environment.
|
||||
|
||||
For those that are used to terminal environments and have used them before, or feel like a challenge (one that will, in my opinion, have a great payoff)... the following are great options:
|
||||
|
||||
* vim
|
||||
* emacs
|
||||
|
||||
Both of them offer graphical versions as well as terminal versions. But neither are as simple as just opening it up and typing. They require you to learn lots of commands and key combinations to use them. They offer very powerful editing capabilities for coding and other writing, but may not be a good place to start if you are not familiar with them. Vim is likely installed on your system and can be invoked by typing 'vim', followed by an optional filename, at the shell. You will immediately notice that it does not respond like you are used to when keys are pressed. It is a common joke that vim, or its predecessor 'vi' (also likely on your system), traps people in it if they don't already know how to use it. If you end up in one of them and can't get out, press Escape, then type: ':q!', then press Enter. I have less experience with emacs, but it is not without a steep learning curve as well.
|
||||
|
||||
Once you pick an editor and a language and get them both installed you may want to try running a program. Here are some very basic example programs that you can type into a file for each of the three languages I recommended above:
|
||||
|
||||
### Python Example File
|
||||
|
||||
Create a file named `hello.py` in the current directory (`nano hello.py`, for example) and enter the following text:
|
||||
|
||||
``` Python code
|
||||
def say_hello():
|
||||
name = input("What is your name? ")
|
||||
print("Hello " + name)
|
||||
|
||||
say_hello()
|
||||
```
|
||||
|
||||
Then run the following in your terminal/shell:
|
||||
|
||||
``` sh code
|
||||
python3 ./hello.py
|
||||
```
|
||||
|
||||
If it doesn't work, make sure you have Python 3 installed (type `python3 --version` at the shell and see if you get a Python version number printed. It is possible that the program may be called `python` on your system, in which case replace `python3` in any of the above with `python`).
|
||||
|
||||
If it is installed and still not working, make sure you are in the folder containing your file. Run `ls` to see the folder contents. If you don't see your file, run `pwd` to see what file-path you are at and navigate as needed to where the file is using the `cd` command. Then try running the program again.
|
||||
|
||||
### Lua Example
|
||||
|
||||
Create a file named `hello.lua` and enter the following text:
|
||||
|
||||
``` Lua code
|
||||
function say_hello()
|
||||
io.write("What is your name? ")
|
||||
io.flush()
|
||||
local name = io.read()
|
||||
print("Hello " .. name)
|
||||
end
|
||||
|
||||
say_hello()
|
||||
```
|
||||
|
||||
Then run the following in your terminal/shell:
|
||||
|
||||
``` sh code
|
||||
lua ./hello.lua
|
||||
```
|
||||
|
||||
If it doesn't work, make sure you have Lua installed (type `lua -v` at the shell, if you get a version number printed then you are good to go, if not then you should check your install instructions for Lua).
|
||||
|
||||
If it is installed and still not working, make sure you are in the folder containing your file. Run `ls` to see the folder contents. If you don't see your file, run `pwd` to see what file-path you are at and navigate as needed to where the file is using the `cd` command. Then try running the program again.
|
||||
|
||||
### Go Example
|
||||
|
||||
You may notice that this is very different from the Python and Lua. Go has some rules for how file structure should be set up, they aren't too complicated.
|
||||
|
||||
Create a directory for the program by running `mkdir go_hello && cd go_hello` at your shell/terminal. Then create a file named `main.go` and enter the following text:
|
||||
|
||||
``` Go code
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
func main() {
|
||||
var name string
|
||||
fmt.Print("What is your name? ")
|
||||
fmt.Scanln(&name)
|
||||
fmt.Printf("Hello %s", name)
|
||||
}
|
||||
```
|
||||
|
||||
Then run the following in your terminal/shell:
|
||||
|
||||
``` sh code
|
||||
go build
|
||||
./go_hello
|
||||
```
|
||||
|
||||
You may notice that running the program is a little different here. We call `go build` first. This compiles the program into an executable file. We then run that file by giving the shell the path to the file (`./` just means "inside the current directory").
|
||||
|
||||
That file will run on any system with the same OS and Processor architecture (there are maybe two or three in common consumer usage at present, though retrocomputing enthusiasts or people on the cutting edge may have others). This is a cool benefit of using Go: you could just share that file (or output one that works on a friends machine) and they do not need to have Go installed on their system at all.
|
||||
|
||||
### An Actual Application
|
||||
|
||||
Your first programs will likely be simple things that print output to a terminal screen, or maybe take a bit of user input and modify it or print it out. Most languages will have a "getting started" guide that will walk you through these introductory steps. Once you get past the basic concepts and structures you should be able to pick an actual project that creates something useful for you.
|
||||
|
||||
You will often hear the refrain "don't reinvent the wheel". I could not disagree more. Trying to either replicate the wheel or straight up reinvent it may not produce a better wheel... but it will almost certainly teach you a lot about wheels.
|
||||
|
||||
I, for example, am writing this in a text editor I wrote. That editor is being run by a shell that I wrote. I am listening to music acquired with a web scraper (similar to youtube-dl) that I wrote. I did not code the audio player, but am working on that as a project as well. When searching for music I usually use an internet client that I wrote.
|
||||
|
||||
Not everyone needs to go to the trouble of all of that, but I can certainly say I have enjoyed it. I know how these programs work (again, at a reasonable abstraction level) and can change them when they do something I don't want them to. They are sometimes buggy, but they get better each time I add to the code.
|
||||
|
||||
For first projects I recommend thinking about the tasks that you do on computers or in life a lot. Think about what could benefit from automation or data storage/retrieval. Perhaps you read a lot and want to keep track of what you have read? A simple system to store and recall books by genre, author, title, or rating should be fairly easy to construct (with or without a database). Perhaps you write on gopher or gemini a lot and want to create a tool that converts your documents to HTML? Or maybe you like games? Converting a board game to a terminal game is a great way to start learning to code. Creating a game for two human players is easier, since you don't need to program a "player" for the game.
|
||||
|
||||
Here are some steps for thinking about how to code your first bigger application:
|
||||
|
||||
* Come up with the idea
|
||||
* Understand the problem well, and think out a few different ways to solve it (from a high level perspective, not in code)
|
||||
* Think about what the inputs and outputs are (often text, but sometimes numbers, or key presses). Think about how they could best be represented in your code. How you structure data will be among the most important things in your code, and there are LOTS of options, from simple variables to arrays, structs, objects, databases, etc.
|
||||
* Once you have a basic sense of how you will be holding onto and thinking about your inputs/data, you can start to reason about working with that data. This could be a good point to write out a flow chart in plain English for how you think things should flow through your program... or you could just start coding and see what happens. Either way will provide good lessons.
|
||||
* Start coding! Where possible try running your program as you reach different milestones. Sometimes things will break, most interpreters or compilers will give you a message telling you what line something is broken on and, hopefully, a hint about how to fix it. Get good at reading this output.
|
||||
* An easy way to test as you develop, that some people frown on but I think is invaluable, is to print out text/variables at various places so you can see that your code is being executed as you think. You can print data or just information text (ie. "made it out of loop" or "got into 'x' function"). Be sure to delete these when you are done using them. Don't rely too much on them, but for a quick sanity check they can be useful. Many languages have testing suites and tooling for debugging that you may want to look into as well.
|
||||
* Remember that it is an iterative process and you will likely rewrite parts of applications or sometimes the whole thing. This is a normal part of working on a project, even for experienced developers.
|
||||
|
||||
If you find you are stuck, there are resources online. Stack Overflow is a code help site where you can post questions and get answers. Your question may have already been asked, so you could search for it.
|
||||
|
||||
=> https://stackoverflow.com/ Stack Overflow
|
||||
|
||||
There are lots of developers using public nix systems. If you are on one, it may be a good idea to ask around for help. I think people generally want to support their communities on these systems and would likely be able to point you in the right direction.
|
||||
|
||||
If you want, feel free to reach out to me: <sloum AT THE HOST rawtext.club>.
|
||||
|
||||
## Wrapping Up
|
||||
|
||||
This started out as a writeup about creating the tools you use, and turned into more of a "how to get started coding". I know it is cursory at best, but hopefully has some information useful to someone. I know there are a lot of people out there that want to learn how to do these things and may feel overwhelmed by the sheer volume of information and all of the options. We are living in a time of plenty in many respects with regard to languages, libraries, frameworks, tutorials, opinions, etc. Though there is less variety now in the systems themselves (a shame).
|
||||
|
||||
The key thing is to try and have fun, but expect there to be some hurdles and roadblocks. I think programming appeals a lot to people who like to solve puzzles and ponder different ways of doing things. If this describes you, then you may enjoy programming. It can be a useful skill, but it can also just be a fun skill that could serve the same role as solving sudoku puzzles for someone, but with the added benefit of creating something cool or interesting. However you come to it, you may be starting down what could become a lifelong obsession. It has been for me (I started coding with BASIC as a kid in the late 80s).
|
|
@ -0,0 +1,477 @@
|
|||
# Getting Started With Programming
|
||||
|
||||
I am a big believer in making your own tools *when possible*. For example, I do
|
||||
not have the ability to make a computer processor myself (well, not the kind
|
||||
used in modern general purpose computers), but I do have the ability to learn to
|
||||
program software that will run on that chip.
|
||||
|
||||
This, of course, can extend beyond computing: making a jig when working with
|
||||
wood, making pottery or baskets, sewing, etc. The way the world is at present,
|
||||
or maybe always, it is hard to control the whole chain. You likely have to
|
||||
acquire something to do the making: a hammer, a needle and thread, etc.
|
||||
|
||||
With computers it is comparatively easy to make things once you have a general
|
||||
purpose computer. Every operating system I can think of allows for some type of
|
||||
programming of applications and/or the system itself. Once you have a system you
|
||||
can create an endless array of tools for yourself, or modify ones that already
|
||||
exist. You could even code a bootloader and an operating system if you were so
|
||||
inclined.
|
||||
|
||||
I believe just about anyone can do this (write applications for computers), if
|
||||
they are so inclined. This is not something solely available to C programming
|
||||
wizards that have been doing it for decades. There are lots of easy to approach
|
||||
programming languages and environments for people new to the concepts.
|
||||
|
||||
## Why Build Your Own Tools
|
||||
|
||||
At the end of the day the best reason I can think of is for the satisfaction of
|
||||
using something you built and of knowing how a thing works (at least at the
|
||||
level of abstraction needed to be able to mostly control or modify it).
|
||||
|
||||
Of course there is also knowledge. The learning that happens when you build a
|
||||
piece of software can be quite valuable. It can help you learn to think and
|
||||
reason in different ways. Solving problems is good brain exercise.
|
||||
|
||||
## How To Get Started
|
||||
|
||||
As stated above: you do not need to have prior programming experience to start
|
||||
building your own tools. The first step is to pick a language to work with. This
|
||||
choice mostly doesn't matter too much, at least from a certain perspective.
|
||||
|
||||
### Languages
|
||||
|
||||
When starting out it is good to choose a language with good documentation and
|
||||
lots of resources online for working with that language, but most languages you
|
||||
will find nowadays will be fine. A few good/popular choices that come to mind:
|
||||
|
||||
=> https://www.python.org/about/gettingstarted/ Python
|
||||
|
||||
|
||||
Python code is generally easy to read and reason about (at least at beginner
|
||||
levels) and there is a lot of information about writing Python programs
|
||||
available online. The built-in library has just about anything you'd need to
|
||||
write most types of programs, even graphical programs.
|
||||
|
||||
If you are on Linux or OSX it is likely that Python is already installed on your
|
||||
system. Read ahead to learn a small bit about terminals/shells and then run
|
||||
`python3 --version`. If you get a response that says it is not found, try
|
||||
running `python --version`. If it is still not found then you will need to
|
||||
install it with the instructions on the Python website (linked above) or with
|
||||
your package manager (if you system uses one).
|
||||
|
||||
=> https://www.lua.org/start.html Lua
|
||||
|
||||
|
||||
Lua, like Python, is straight-forward and easy to read and reason about. Lua's
|
||||
built-in library is MUCH smaller. This has a lot of benefits though: Lua is a
|
||||
small enough language that a person can reasonably hold pretty close to all of
|
||||
it in their head at one time. So after a bit of practice you should just be able
|
||||
to write things without constantly looking at the documentation. Some downsides
|
||||
are that the built-in library does not have things like sockets (which let you
|
||||
communicate over the internet as a client or server, among other things). A lot
|
||||
of video game engines allow games to be written in Lua (Love2D, Pico-8, etc.),
|
||||
so if you like video games Lua might be a good choice.
|
||||
|
||||
Both of the above are interpreted languages. To run any programs written with
|
||||
them, a person needs to have the Lua or Python program installed on their
|
||||
system. Thus, sharing your creations has an added step of getting someone to get
|
||||
that interpreter on their system.
|
||||
|
||||
There are also compiled languages. These languages use a compiler (another
|
||||
program that converts the code you write into lower level code of some sort - it
|
||||
varies from compiler to compiler). Once a program is compiled it can generally
|
||||
be run without needing to have the language installed on the system or invoking
|
||||
and interpreter. Most programs on your system were likely written in the
|
||||
programming language 'C'. This is a fairly old programming language that I do
|
||||
not generally recommend as a first language to people these days. It is VERY
|
||||
powerful, but can be harder to reason about than Python or Lua, especially for a
|
||||
beginner. It can also be tricky to find actionable information on. There are a
|
||||
number of compiler and library implementations, and they may vary in how they
|
||||
are used. The language features and available functions/macros can also vary
|
||||
from OS to OS and architecture to architecture.
|
||||
|
||||
Rust is a newer programming language that can work in similar domains to C. But
|
||||
it is a complicated language in comparison the the others being recommended
|
||||
here. The programs it creates, when coded well, can be really solid and safe
|
||||
(from a memory standpoint)... but it can be a lot for someone just starting out.
|
||||
|
||||
As such, I tend to recommend learning Go as a first compiled language:
|
||||
|
||||
=> https://go.dev/learn/ Go
|
||||
|
||||
|
||||
Go is a more modern compiled language. It differs from C in a number of ways,
|
||||
that mostly make it easier for you to program... but make it less suitable for
|
||||
certain types of applications (anything where garbage collection would be a
|
||||
problem - but that won't be an issue for 99% of people learning to program). The
|
||||
documentation is fantastic and the code is easy to reason about. The built-in
|
||||
library is almost as complete as Python's (though there is no direct help with
|
||||
GUI programming built in).
|
||||
|
||||
All of the links provided above are to "Getting Started" instructions. Again,
|
||||
the language doesn't matter so much. If you see something out there other than
|
||||
one of these three that tickles your fancy and have found readable documentation
|
||||
that makes some level of sense to you: go for it!! I just recommend these three
|
||||
to give novices somewhere to start.
|
||||
|
||||
You may have noticed I did not include JavaScript. This is intentional. I do not
|
||||
think it is a good place to start. The ecosystem is complicated and the tooling
|
||||
is difficult. To effectively use JavaScript in a modern way in a browser you
|
||||
will likely need to learn HTML and CSS along with JavaScript. Additionally, it
|
||||
has become trendy to use various frameworks and libraries rather than just
|
||||
writing JavaScript code (using React, Vue, Angular, Svelt, jQuery, etc). These
|
||||
extra things to learn can make approaching JavaScript as a beginner confusing
|
||||
and difficult and may create long term confusion about some basic programming
|
||||
concepts. It is also harder to look up documentation due to the wide variety of
|
||||
frameworks that people work in. While you could use nodeJS to build console
|
||||
applications like you would when starting out with Python or Lua, I just feel
|
||||
like nodeJS is not as good as Lua or Python and that its ecosystem is terrible
|
||||
(opinions on this will vary, and I am just giving you mine).
|
||||
|
||||
You may also notice, if you have experience in such things, that I have not
|
||||
included any sort of shell programming (bash, fish, zsh, etc. scripting). While
|
||||
these options can be very useful for system automation and can even be used to
|
||||
make larger programs... their syntax is often not clear and the ability to just
|
||||
call as if in the shell is unlike most of the rest of the programming world.
|
||||
They might be something good for people to look into, but not a great choice as
|
||||
a first language as I think they would create some misunderstandings and
|
||||
possibly bad habits.
|
||||
|
||||
There will likely be many opinions that disagree with me and encourage starting
|
||||
with Rust, C, or some functional language (Haskell, Clojure, Elixir, Erlang) or
|
||||
other. All of these languages are powerful languages that can be really great to
|
||||
work with. I have made my recommendations based on my experience and a desire to
|
||||
allow someone to "dip a toe in". Not everyone needs to become a systems
|
||||
programmer, and my advice is really geared toward people that just want to try
|
||||
out coding to see what it is all about. In earlier times BASIC or Pascal would
|
||||
have been recommended for this purpose, but those days are largely past us. I
|
||||
think Python, Lua, and Go are sensible choices for someone to try things out.
|
||||
|
||||
### Terminals, Shells, and Text Editors
|
||||
|
||||
Once you have followed the installation instructions for the language you have
|
||||
chosen, you will likely need to open a terminal window.
|
||||
|
||||
Many folks that do not program may not know much about terminals (on any modern
|
||||
system it will likely be a terminal emulator... but you don't need to worry
|
||||
about that). Each of the major operating systems includes some textual interface
|
||||
to the system. On OSX the application is `Terminal.app`. On Linux or BSD there
|
||||
will be a terminal of some form, but its name will vary by distribution/OS
|
||||
(`gnome-terminal` will be present on Ubuntu, for example). On Windows, if memory
|
||||
serves correctly, it is called `Cmd.exe`, but don't quote me on that (I have not
|
||||
used a Windows machine, even in passing, for over a decade).
|
||||
|
||||
Once the terminal is open you will be presented with a prompt of some sort
|
||||
(likely ending in `$`, `#`, or `>`, but that is not a rule). You can type
|
||||
commands at this prompt and get output. On Linux/BSD/OSX type `ls` and press
|
||||
Enter; on Windows type `dir` and press Enter. You should see a list of files in
|
||||
the current folder. You entered the name of a program: `ls`/`dir`. This program
|
||||
takes your current directory and loops over all of the files in the directory
|
||||
and outputs their names. It then exits, returning control to the terminal
|
||||
(actually the shell, which is running inside of the terminal, but lets not get
|
||||
ahead of ourselves).
|
||||
|
||||
Your first programs will likely be similar: you will call them from the
|
||||
terminal, they will do their thing, and then exit. Many programs can take
|
||||
arguments, additional pieces of information being passed into the program. For
|
||||
example, the `ls` program can be entered as `ls -l`. The `-l` is an argument
|
||||
that tells the `ls` program to output extended information about each file...
|
||||
its owner, access settings, size, etc. So, the `ls` program has code to look at
|
||||
the arguments that were sent into it and do things with them. Your early
|
||||
programs will likely not include many arguments, but it is good to know about
|
||||
them since passing in paths to files or other input will quickly become useful.
|
||||
|
||||
I do not know much about the Windows command line, so from here on I will be
|
||||
talking about Linux/BSD/OSX. If you enter:
|
||||
|
||||
cd ~
|
||||
|
||||
mkdir programming_practice
|
||||
|
||||
cd programming_practice
|
||||
|
||||
|
||||
You will move directories to your home directory. The program `cd` takes a file
|
||||
path as an argument. In this case the `~` is something the shell (the actual
|
||||
program running inside the terminal that lets you input commands) knows to
|
||||
expand to meaning a user's home directory. We then create a directory in your
|
||||
home folder called `programming_practice` and then `cd` into it.
|
||||
|
||||
You can always go directly to this folder with:
|
||||
|
||||
cd ~/programming_practice
|
||||
|
||||
|
||||
Then you can run `ls` to see any files or subfolders you may want to work on/in.
|
||||
|
||||
You now have a place to work on programs. You can navigate to this folder in a
|
||||
graphical file browser as well.
|
||||
|
||||
Now you are ready to write a program... but you need something to write it with.
|
||||
Using 'MS Word' or OSX's 'Pages' will not work. Those are word processors that
|
||||
use their own document formats as output. You want to work in so-called 'plain
|
||||
text'.
|
||||
|
||||
There are editors for your terminal as well as graphical editors. For simple
|
||||
things using Windows' 'Notepad' or OSX's 'TextEdit' can work fine for this
|
||||
purpose in a pinch, but using an actual code editor will provide many useful
|
||||
things to you, including automatic coloring of various words and structures in
|
||||
your given programming language to make the code easier to read.
|
||||
|
||||
Here are some editors to look into (all of them are free to use):
|
||||
|
||||
* 'nano' - A lot of people love this editor. It is a terminal based editor. I
|
||||
hate this editor, but concede it is a safe place for a beginner to start. To use
|
||||
it for code you will need to turn syntax highlighting on (a search online can
|
||||
help you do so). 'nano' may already be installed on your system. Try typing
|
||||
`nano` at your shell prompt.
|
||||
* 'vs code' - This is the current hot editor as far as graphical editors go. It
|
||||
will need little to no configuration for you to get started, but it is a memory
|
||||
hog. This can be downloaded online after a quick search. Be aware that this
|
||||
application may do usage analytics and send information to Microsoft.
|
||||
* 'notepad++' - Windows users seem to like this graphical editor. A similar
|
||||
equivalent exists in the form of 'gedit' for Linux/BSD folks running Gnome as
|
||||
their desktop environment.
|
||||
|
||||
For those that are used to terminal environments and have used them before, or
|
||||
feel like a challenge (one that will, in my opinion, have a great payoff)... the
|
||||
following are great options:
|
||||
|
||||
* vim
|
||||
* emacs
|
||||
|
||||
Both of them offer graphical versions as well as terminal versions. But neither
|
||||
are as simple as just opening it up and typing. They require you to learn lots
|
||||
of commands and key combinations to use them. They offer very powerful editing
|
||||
capabilities for coding and other writing, but may not be a good place to start
|
||||
if you are not familiar with them. Vim is likely installed on your system and
|
||||
can be invoked by typing 'vim', followed by an optional filename, at the shell.
|
||||
You will immediately notice that it does not respond like you are used to when
|
||||
keys are pressed. It is a common joke that vim, or its predecessor 'vi' (also
|
||||
likely on your system), traps people in it if they don't already know how to use
|
||||
it. If you end up in one of them and can't get out, press Escape, then type:
|
||||
':q!', then press Enter. I have less experience with emacs, but it is not
|
||||
without a steep learning curve as well.
|
||||
|
||||
Once you pick an editor and a language and get them both installed you may want
|
||||
to try running a program. Here are some very basic example programs that you can
|
||||
type into a file for each of the three languages I recommended above:
|
||||
|
||||
### Python Example File
|
||||
|
||||
Create a file named `hello.py` in the current directory (`nano hello.py`, for
|
||||
example) and enter the following text:
|
||||
|
||||
def say_hello():
|
||||
|
||||
name = input("What is your name? ")
|
||||
|
||||
print("Hello " + name)
|
||||
|
||||
|
||||
|
||||
say_hello()
|
||||
|
||||
|
||||
Then run the following in your terminal/shell:
|
||||
|
||||
python3 ./hello.py
|
||||
|
||||
|
||||
If it doesn't work, make sure you have Python 3 installed (type `python3
|
||||
--version` at the shell and see if you get a Python version number printed. It
|
||||
is possible that the program may be called `python` on your system, in which
|
||||
case replace `python3` in any of the above with `python`).
|
||||
|
||||
If it is installed and still not working, make sure you are in the folder
|
||||
containing your file. Run `ls` to see the folder contents. If you don't see your
|
||||
file, run `pwd` to see what file-path you are at and navigate as needed to where
|
||||
the file is using the `cd` command. Then try running the program again.
|
||||
|
||||
### Lua Example
|
||||
|
||||
Create a file named `hello.lua` and enter the following text:
|
||||
|
||||
function say_hello()
|
||||
|
||||
io.write("What is your name? ")
|
||||
|
||||
io.flush()
|
||||
|
||||
local name = io.read()
|
||||
|
||||
print("Hello " .. name)
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
say_hello()
|
||||
|
||||
|
||||
Then run the following in your terminal/shell:
|
||||
|
||||
lua ./hello.lua
|
||||
|
||||
|
||||
If it doesn't work, make sure you have Lua installed (type `lua -v` at the
|
||||
shell, if you get a version number printed then you are good to go, if not then
|
||||
you should check your install instructions for Lua).
|
||||
|
||||
If it is installed and still not working, make sure you are in the folder
|
||||
containing your file. Run `ls` to see the folder contents. If you don't see your
|
||||
file, run `pwd` to see what file-path you are at and navigate as needed to where
|
||||
the file is using the `cd` command. Then try running the program again.
|
||||
|
||||
### Go Example
|
||||
|
||||
You may notice that this is very different from the Python and Lua. Go has some
|
||||
rules for how file structure should be set up, they aren't too complicated.
|
||||
|
||||
Create a directory for the program by running `mkdir go_hello && cd go_hello` at
|
||||
your shell/terminal. Then create a file named `main.go` and enter the following
|
||||
text:
|
||||
|
||||
package main
|
||||
|
||||
|
||||
|
||||
import (
|
||||
|
||||
"fmt"
|
||||
|
||||
)
|
||||
|
||||
|
||||
|
||||
func main() {
|
||||
|
||||
var name string
|
||||
|
||||
fmt.Print("What is your name? ")
|
||||
|
||||
fmt.Scanln(&name)
|
||||
|
||||
fmt.Printf("Hello %s", name)
|
||||
|
||||
}
|
||||
|
||||
|
||||
Then run the following in your terminal/shell:
|
||||
|
||||
go build
|
||||
|
||||
./go_hello
|
||||
|
||||
|
||||
You may notice that running the program is a little different here. We call `go
|
||||
build` first. This compiles the program into an executable file. We then run
|
||||
that file by giving the shell the path to the file (`./` just means "inside the
|
||||
current directory").
|
||||
|
||||
That file will run on any system with the same OS and Processor architecture
|
||||
(there are maybe two or three in common consumer usage at present, though
|
||||
retrocomputing enthusiasts or people on the cutting edge may have others). This
|
||||
is a cool benefit of using Go: you could just share that file (or output one
|
||||
that works on a friends machine) and they do not need to have Go installed on
|
||||
their system at all.
|
||||
|
||||
### An Actual Application
|
||||
|
||||
Your first programs will likely be simple things that print output to a terminal
|
||||
screen, or maybe take a bit of user input and modify it or print it out. Most
|
||||
languages will have a "getting started" guide that will walk you through these
|
||||
introductory steps. Once you get past the basic concepts and structures you
|
||||
should be able to pick an actual project that creates something useful for you.
|
||||
|
||||
You will often hear the refrain "don't reinvent the wheel". I could not disagree
|
||||
more. Trying to either replicate the wheel or straight up reinvent it may not
|
||||
produce a better wheel... but it will almost certainly teach you a lot about
|
||||
wheels.
|
||||
|
||||
I, for example, am writing this in a text editor I wrote. That editor is being
|
||||
run by a shell that I wrote. I am listening to music acquired with a web scraper
|
||||
(similar to youtube-dl) that I wrote. I did not code the audio player, but am
|
||||
working on that as a project as well. When searching for music I usually use an
|
||||
internet client that I wrote.
|
||||
|
||||
Not everyone needs to go to the trouble of all of that, but I can certainly say
|
||||
I have enjoyed it. I know how these programs work (again, at a reasonable
|
||||
abstraction level) and can change them when they do something I don't want them
|
||||
to. They are sometimes buggy, but they get better each time I add to the code.
|
||||
|
||||
For first projects I recommend thinking about the tasks that you do on computers
|
||||
or in life a lot. Think about what could benefit from automation or data
|
||||
storage/retrieval. Perhaps you read a lot and want to keep track of what you
|
||||
have read? A simple system to store and recall books by genre, author, title, or
|
||||
rating should be fairly easy to construct (with or without a database). Perhaps
|
||||
you write on gopher or gemini a lot and want to create a tool that converts your
|
||||
documents to HTML? Or maybe you like games? Converting a board game to a
|
||||
terminal game is a great way to start learning to code. Creating a game for two
|
||||
human players is easier, since you don't need to program a "player" for the
|
||||
game.
|
||||
|
||||
Here are some steps for thinking about how to code your first bigger
|
||||
application:
|
||||
|
||||
* Come up with the idea
|
||||
* Understand the problem well, and think out a few different ways to solve it
|
||||
(from a high level perspective, not in code)
|
||||
* Think about what the inputs and outputs are (often text, but sometimes
|
||||
numbers, or key presses). Think about how they could best be represented in your
|
||||
code. How you structure data will be among the most important things in your
|
||||
code, and there are LOTS of options, from simple variables to arrays, structs,
|
||||
objects, databases, etc.
|
||||
* Once you have a basic sense of how you will be holding onto and thinking about
|
||||
your inputs/data, you can start to reason about working with that data. This
|
||||
could be a good point to write out a flow chart in plain English for how you
|
||||
think things should flow through your program... or you could just start coding
|
||||
and see what happens. Either way will provide good lessons.
|
||||
* Start coding! Where possible try running your program as you reach different
|
||||
milestones. Sometimes things will break, most interpreters or compilers will
|
||||
give you a message telling you what line something is broken on and, hopefully,
|
||||
a hint about how to fix it. Get good at reading this output.
|
||||
* An easy way to test as you develop, that some people frown on but I think is
|
||||
invaluable, is to print out text/variables at various places so you can see that
|
||||
your code is being executed as you think. You can print data or just information
|
||||
text (ie. "made it out of loop" or "got into 'x' function"). Be sure to delete
|
||||
these when you are done using them. Don't rely too much on them, but for a quick
|
||||
sanity check they can be useful. Many languages have testing suites and tooling
|
||||
for debugging that you may want to look into as well.
|
||||
* Remember that it is an iterative process and you will likely rewrite parts of
|
||||
applications or sometimes the whole thing. This is a normal part of working on a
|
||||
project, even for experienced developers.
|
||||
|
||||
If you find you are stuck, there are resources online. Stack Overflow is a code
|
||||
help site where you can post questions and get answers. Your question may have
|
||||
already been asked, so you could search for it.
|
||||
|
||||
=> https://stackoverflow.com/ Stack Overflow
|
||||
|
||||
|
||||
There are lots of developers using public nix systems. If you are on one, it may
|
||||
be a good idea to ask around for help. I think people generally want to support
|
||||
their communities on these systems and would likely be able to point you in the
|
||||
right direction.
|
||||
|
||||
If you want, feel free to reach out to me: <sloum AT THE HOST rawtext.club>.
|
||||
|
||||
## Wrapping Up
|
||||
|
||||
This started out as a writeup about creating the tools you use, and turned into
|
||||
more of a "how to get started coding". I know it is cursory at best, but
|
||||
hopefully has some information useful to someone. I know there are a lot of
|
||||
people out there that want to learn how to do these things and may feel
|
||||
overwhelmed by the sheer volume of information and all of the options. We are
|
||||
living in a time of plenty in many respects with regard to languages, libraries,
|
||||
frameworks, tutorials, opinions, etc. Though there is less variety now in the
|
||||
systems themselves (a shame).
|
||||
|
||||
The key thing is to try and have fun, but expect there to be some hurdles and
|
||||
roadblocks. I think programming appeals a lot to people who like to solve
|
||||
puzzles and ponder different ways of doing things. If this describes you, then
|
||||
you may enjoy programming. It can be a useful skill, but it can also just be a
|
||||
fun skill that could serve the same role as solving sudoku puzzles for someone,
|
||||
but with the added benefit of creating something cool or interesting. However
|
||||
you come to it, you may be starting down what could become a lifelong obsession.
|
||||
It has been for me (I started coding with BASIC as a kid in the late 80s).
|
|
@ -0,0 +1,24 @@
|
|||
# Circumlunar Mixtape
|
||||
|
||||
Circumlunar Mixtape is an ongoing series for Circumlunar Transmissions where one user per issue shares 10 tracks they have been listening to. Y'all have all kinds of ways to stream or otherwise find and listen to music, so tracks are just listed and it is on the reader to locate them. As a courtesy, when a weblink to streaming is available playlist curators may choose to supply it.
|
||||
|
||||
## Solderpunk's space-psych-jazz-techno salad
|
||||
|
||||
Here's a somewhat ecclectic collection of tracks I have been digging lately. They are all "new to me", in the sense that I hadn't even heard of any of these artists a year ago. Maybe a year and a half in a few cases. There is a healthy serving of stuff from the space rock / psych rock category, but to keep things interesting there are also some electronic tracks in there and even a few jazz pieces! I hope you enjoy.
|
||||
|
||||
Format: [track name] by [artist name] from [album name]
|
||||
|
||||
=> https://thebudosband.bandcamp.com/track/black-venom
|
||||
=> https://www.youtube.com/watch?v=ys0HyevZpQg E2-E4 by Manuel Göttsching (see footnote)
|
||||
=> https://www.youtube.com/watch?v=hYiG57ZKAxY&t=1745s Lemon and Ginger by Susumu Yokota
|
||||
=> https://samuelcadima.bandcamp.com/track/de-partida-no-teleporto
|
||||
=> https://ouluspacejamcollective.bandcamp.com/track/speedway-to-titan
|
||||
=> https://lamagaia.bandcamp.com/track/alabamian-horologists
|
||||
=> https://dhidalah.bandcamp.com/track/moon-people
|
||||
=> https://mtmountain.bandcamp.com/track/cathedral-2
|
||||
=> https://gnod.bandcamp.com/track/drop-out
|
||||
=> https://www.youtube.com/watch?v=o5D8k5I8LkA Switch Blade
|
||||
=> https://www.youtube.com/watch?v=skGQV6N-KSQ Kofi by Donald Byrd
|
||||
|
||||
Alright, technically E2-E4 is an album and not a track, but for all intents and purposes it *is* just one long track without meaningful transitions so it makes no sense to me to highlight some arbitrary subsection. To be honest, my music listening is heavily album-centric these days so you should consider yourselves lucky I was able to pick out tracks at all!
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
# Circumlunar Mixtape
|
||||
|
||||
Circumlunar Mixtape is an ongoing series for Circumlunar Transmissions where one
|
||||
user per issue shares 10 tracks they have been listening to. Y'all have all
|
||||
kinds of ways to stream or otherwise find and listen to music, so tracks are
|
||||
just listed and it is on the reader to locate them. As a courtesy, when a
|
||||
weblink to streaming is available playlist curators may choose to supply it.
|
||||
|
||||
## Solderpunk's space-psych-jazz-techno salad
|
||||
|
||||
Here's a somewhat ecclectic collection of tracks I have been digging lately.
|
||||
They are all "new to me", in the sense that I hadn't even heard of any of these
|
||||
artists a year ago. Maybe a year and a half in a few cases. There is a healthy
|
||||
serving of stuff from the space rock / psych rock category, but to keep things
|
||||
interesting there are also some electronic tracks in there and even a few jazz
|
||||
pieces! I hope you enjoy.
|
||||
|
||||
Format: [track name] by [artist name] from [album name]
|
||||
|
||||
=> https://thebudosband.bandcamp.com/track/black-venom
|
||||
|
||||
=> https://www.youtube.com/watch?v=ys0HyevZpQg E2-E4 by Manuel Göttsching (see footnote)
|
||||
|
||||
=> https://www.youtube.com/watch?v=hYiG57ZKAxY&t=1745s Lemon and Ginger by Susumu Yokota
|
||||
|
||||
=> https://samuelcadima.bandcamp.com/track/de-partida-no-teleporto
|
||||
|
||||
=> https://ouluspacejamcollective.bandcamp.com/track/speedway-to-titan
|
||||
|
||||
=> https://lamagaia.bandcamp.com/track/alabamian-horologists
|
||||
|
||||
=> https://dhidalah.bandcamp.com/track/moon-people
|
||||
|
||||
=> https://mtmountain.bandcamp.com/track/cathedral-2
|
||||
|
||||
=> https://gnod.bandcamp.com/track/drop-out
|
||||
|
||||
=> https://www.youtube.com/watch?v=o5D8k5I8LkA Switch Blade
|
||||
|
||||
=> https://www.youtube.com/watch?v=skGQV6N-KSQ Kofi by Donald Byrd
|
||||
|
||||
|
||||
Alright, technically E2-E4 is an album and not a track, but for all intents and
|
||||
purposes it *is* just one long track without meaningful transitions so it makes
|
||||
no sense to me to highlight some arbitrary subsection. To be honest, my music
|
||||
listening is heavily album-centric these days so you should consider yourselves
|
||||
lucky I was able to pick out tracks at all!
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
# Seeing the light of Morse
|
||||
|
||||
Both yargo and katolaz submitted articles dealing to some extent with Morse codeto this issue of Circumlunar Transmissions. After reading them both in my capacity as editor of this issue, I felt compelled to make a small contribution of my own in the hopes of rounding this theme out a little. The other two articles focus mainly on the use of Morse code in the context of radio. This makes perfect sense, as amateur radio is in some sense the "natural habitat" of Morse code in the 21st century (and, of course, both the authors are licensed amateur radio operators). However, as yargo mentioned, the code itself is largely independent of medium and can be transmitted using any system which offers control over the duration for which any two distinct "symbols" are present. Probably the second most frequent medium in which Morse code has been used, after radio, is light.
|
||||
|
||||
Instead of transmitting a radio carrier or generating an audible tone, one can turn simply turn on any source of visible light, and leave it on for the appropriate duration before turning it off again. Particularly at night time, the flashing light can be seen over long distances, especially if binoculars or a telescope are used. Not as long as a high frequency radio signal bouncing off the ionosphere can travel, of course, but longer than a shout (or a whistle) can be heard.
|
||||
|
||||
Using visible light to send communications using Morse code has a long history, especially in military contexts, dating back to at least the 19th century. So-called "heliographs", using a mirror to reflect the bright light of the sun and relying on purely mechanical means to break the beam were used in both World Wars and early conflicts to provide instantaneous long-distance communication without any need for electricity or cables. So-called "Aldis lamps" have a long tradition of use at sea, a method pioneered by the Royal Navy. Heliographs were also used in civillian contexts, including the US Forestry Service.
|
||||
|
||||
There are two things that I find especially appealing about light-based Morse code:
|
||||
|
||||
Firstly, unlike radio, there is essentially no legal barrier and greatly reduced financial barriers to its use. Almost every country on Earth has a complicated system of regulation in place controlling who is allowed
|
||||
to send radio communiations of given strengths on given frequencies. Getting a license to transmit typically involves studying for an exam and paying a regular fee, and amateur operators are typically required to identify themselves on air regularly and are prohibited from using encryption. In contrast, I very much doubt there is any country on Earth that has laws prohibiting the use of an electric flashlight in just about any way whatsoever, and most people could start communiating in Morse this way at the drop of a hat if they had somebody to communicate with and a clear line-of-sight to that person, with no technical training (aside from learning the code itself) and at negligible cost. Building your own equipment to improve on a flashlight is much easier and much cheaper than building your own radio transmitter.
|
||||
|
||||
Secondly, it scales incredibly well with technology level, in both directions. In a high-tech, industrialised society, the entire process could happen purely automatically at high speed using energy efficient LEDs and highly sensitive photodiodes connected to microcontrollers. Automatic repeater stations could relay signals further than the range of any individual link, perfectly analogous to the use of radio repeaters. On the other hand, the *exact* same system is feasible, albeit at much lower speeds, in a purely pre-industrial society using mirrors (which have been made since the Bronze age) during the day and oil lamps at night. The scheme benefits from but is in no way dependent upon various bits of science and technology in between these two extremes, like being able to grind magnifying lenses out of glass, or use electricity to generate light at night time. If you're interested in communications technology which "degrades gracefully" in the face of natural disasters, power shortages or infrastructure breakdowns, or even full-blown societal collapse, this is an extremely desirable property.
|
||||
|
||||
Of course, optical communication is not without drawbacks: compared to radio it is much vulnerable to having its range shortened by heavy rain, fog, smoke, or terrain. Communicating over plains or between mountain peaks is easy, but if you're down in a valley it's a different story. But for people who are interested in more sustainable, lower-tech approaches to wireless communication, I think it's certainly worth thinking about and experimenting with.
|
|
@ -0,0 +1,72 @@
|
|||
# Seeing the light of Morse
|
||||
|
||||
Both yargo and katolaz submitted articles dealing to some extent with Morse
|
||||
codeto this issue of Circumlunar Transmissions. After reading them both in my
|
||||
capacity as editor of this issue, I felt compelled to make a small contribution
|
||||
of my own in the hopes of rounding this theme out a little. The other two
|
||||
articles focus mainly on the use of Morse code in the context of radio. This
|
||||
makes perfect sense, as amateur radio is in some sense the "natural habitat" of
|
||||
Morse code in the 21st century (and, of course, both the authors are licensed
|
||||
amateur radio operators). However, as yargo mentioned, the code itself is
|
||||
largely independent of medium and can be transmitted using any system which
|
||||
offers control over the duration for which any two distinct "symbols" are
|
||||
present. Probably the second most frequent medium in which Morse code has been
|
||||
used, after radio, is light.
|
||||
|
||||
Instead of transmitting a radio carrier or generating an audible tone, one can
|
||||
turn simply turn on any source of visible light, and leave it on for the
|
||||
appropriate duration before turning it off again. Particularly at night time,
|
||||
the flashing light can be seen over long distances, especially if binoculars or
|
||||
a telescope are used. Not as long as a high frequency radio signal bouncing off
|
||||
the ionosphere can travel, of course, but longer than a shout (or a whistle) can
|
||||
be heard.
|
||||
|
||||
Using visible light to send communications using Morse code has a long history,
|
||||
especially in military contexts, dating back to at least the 19th century. So-
|
||||
called "heliographs", using a mirror to reflect the bright light of the sun and
|
||||
relying on purely mechanical means to break the beam were used in both World
|
||||
Wars and early conflicts to provide instantaneous long-distance communication
|
||||
without any need for electricity or cables. So-called "Aldis lamps" have a long
|
||||
tradition of use at sea, a method pioneered by the Royal Navy. Heliographs were
|
||||
also used in civillian contexts, including the US Forestry Service.
|
||||
|
||||
There are two things that I find especially appealing about light-based Morse
|
||||
code:
|
||||
|
||||
Firstly, unlike radio, there is essentially no legal barrier and greatly reduced
|
||||
financial barriers to its use. Almost every country on Earth has a complicated
|
||||
system of regulation in place controlling who is allowed
|
||||
to send radio communiations of given strengths on given frequencies. Getting a
|
||||
license to transmit typically involves studying for an exam and paying a regular
|
||||
fee, and amateur operators are typically required to identify themselves on air
|
||||
regularly and are prohibited from using encryption. In contrast, I very much
|
||||
doubt there is any country on Earth that has laws prohibiting the use of an
|
||||
electric flashlight in just about any way whatsoever, and most people could
|
||||
start communiating in Morse this way at the drop of a hat if they had somebody
|
||||
to communicate with and a clear line-of-sight to that person, with no technical
|
||||
training (aside from learning the code itself) and at negligible cost. Building
|
||||
your own equipment to improve on a flashlight is much easier and much cheaper
|
||||
than building your own radio transmitter.
|
||||
|
||||
Secondly, it scales incredibly well with technology level, in both directions.
|
||||
In a high-tech, industrialised society, the entire process could happen purely
|
||||
automatically at high speed using energy efficient LEDs and highly sensitive
|
||||
photodiodes connected to microcontrollers. Automatic repeater stations could
|
||||
relay signals further than the range of any individual link, perfectly analogous
|
||||
to the use of radio repeaters. On the other hand, the *exact* same system is
|
||||
feasible, albeit at much lower speeds, in a purely pre-industrial society using
|
||||
mirrors (which have been made since the Bronze age) during the day and oil lamps
|
||||
at night. The scheme benefits from but is in no way dependent upon various bits
|
||||
of science and technology in between these two extremes, like being able to
|
||||
grind magnifying lenses out of glass, or use electricity to generate light at
|
||||
night time. If you're interested in communications technology which "degrades
|
||||
gracefully" in the face of natural disasters, power shortages or infrastructure
|
||||
breakdowns, or even full-blown societal collapse, this is an extremely desirable
|
||||
property.
|
||||
|
||||
Of course, optical communication is not without drawbacks: compared to radio it
|
||||
is much vulnerable to having its range shortened by heavy rain, fog, smoke, or
|
||||
terrain. Communicating over plains or between mountain peaks is easy, but if
|
||||
you're down in a valley it's a different story. But for people who are
|
||||
interested in more sustainable, lower-tech approaches to wireless communication,
|
||||
I think it's certainly worth thinking about and experimenting with.
|
|
@ -0,0 +1,55 @@
|
|||
# A Day Sometimes Pivots on Its Lunch Break
|
||||
|
||||
(This short story is from a collection of stories about two characters--Sanjay and Cider--who have lived many lives. In this iteration, Sanjay is an obsessive/compulsive fellow with some heightened sensitivities, who overthinks the world around him. The story is written to represent exactly one day in his life. It is written to have exactly enough paragraphs to represent the entire English alphabet, and no more. Each paragraph starts with a sequential letter of the alphabet, and is written to have exactly one hundred words, with hyphenated words counting as two. The form reflects the main character, and is part of the story.)
|
||||
|
||||
At exactly six o'clock each morning, Sanjay awoke to a narrow band, fixed frequency signal with an abrupt onset and intermittent sustained decibel levels. Most people thought of this simply as "an annoying alarm clock noise", but ever since Sanjay read Daniel P.W. Ellis' 2001 study on "Detecting Alarm Sounds", he couldn't help visualizing the spectrogram of the shrill, grating tone that meant it was time to get up and face the day. He wondered why the alarm clock manufacturers, knowing that their products would primarily be employed in tranquil bedrooms, designed based on principles meant for high noise environments.
|
||||
|
||||
Breakfast took precisely twelve minutes to prepare. Sanjay enjoyed rolled oats, which were slow to cook, but had an agreeable texture. The water took five minutes to boil, which is enough time to brush your teeth thoroughly and properly. The oats, tamped and flat in their measuring cup, were poured into the scalding liquid, stirred three times, and reduced to simmer for five minutes. While he waited, Sanjay would read. Then, the heat was turned off, and the pot was covered for two additional minutes. Time enough to arrange the bowl, spoon, and toppings: honey, molasses, dried cherries, and butter.
|
||||
|
||||
Commuting by carpool never completely suited him, but Sanjay had calculated the efficiency of the arrangement and determined that it would be irrational to discontinue. There were four people in his carpool, who split the cost of fuel, insurance, and vehicle maintenance. Two of these enjoyed chatting during the commute, while Sanjay and the remaining party enjoyed silent contemplation, reading, or other preparation for the work day. Only occasionally would the first two parties attempt to engage the latter in discussion, and only when they were certain that the topic would be of interest. They were all a good match.
|
||||
|
||||
Downtown was both pleasing and disturbing to Sanjay. The tidy grid was soothing on paper, but the clamor and commotion of the actual streets was unnerving. Sanjay was dropped off first, at the corner of 23rd and Madison. He would walk three blocks to his office--he could have shortened his route through simple optimizations, but he opted instead to avoid the stress of more crowded intersections. The final approach to his building entrance was an exception, teeming with people, but unavoidable. He would sometimes wait several minutes for a clearing, so he could approach the revolving doors without obstruction.
|
||||
|
||||
Entering the office building was stressful. The revolving doors provided a bottleneck, metering the flow of pedestrians from one side to the other. Sanjay imagined it like the narrow glass neck of an hourglass. In the morning it was turned one way, with the people flowing in, and in the afternoon it was turned upside-down, with the people flowing out. The two sides--inside and outside—--were nothing more than the two reservoirs of the glass, places for the grains to reside as they waited to continue their endless inversion from home to work. Was he a grain of sand?
|
||||
|
||||
Fighting his way through the lobby to the elevators left only a brief moment for philosophizing. He found that by staying close behind one person and matching their speed, he could usually make it through the horde without brushing against too many people. He kept his head down, and swung his briefcase wide to carve out his place. If he somehow lost his front cover, he would stop and look at his watch or phone until he found a new target. It was important that he not be at the front of the line when he reached the elevator doors.
|
||||
|
||||
Getting on the elevator also presented a challenge. The person at the front had to press the button (which was most certainly riddled with germs), and manage the space necessary to allow the current occupants to debark before the next crew loaded in. It was a major responsibility, and Sanjay avoided it fastidiously. Any slot in the middle of the line was acceptable. Being toward the front meant he had a greater chance of finding one of the coveted three corners away from the button matrix (another catastrophe), where he could safely sequester himself for the duration of the ascent.
|
||||
|
||||
Happy to debark at his 28th floor office, Sanjay would breath a sigh of relief as he wiggled his way off the elevator. The lobby was quiet and cool, and rarely hosted more than a handful of people. It was a place to pass through for most, but for Sanjay it was a destination of regeneration, a rare lull in the City That Never Sleeps. The receptionist sat behind a high counter, and by scooting to a far recess of the room, he could sit quietly and fiddle with his briefcase for several minutes without attracting any attention at all.
|
||||
|
||||
If he could stop the day right there, he would, but time waits for no man--especially not Sanjay. There were calls to make, clients to please, figures to crunch, and paperwork to be filled out. Always paperwork. Years ago, he had gotten obsessed with origami. Ever since, he couldn't help pondering on the massive zoo of folded animals he could create if he gave every report, every form, every letter over to that ancient art. The resultant paper wildlife park would boggle the imagination. He would sometimes reflect briefly on the idea as he sat down at his desk.
|
||||
|
||||
Just as soon as he sat down, the work would begin. Sanjay often wondered at how quickly the emails, phone calls, and coworkers would flow into his mental and physical space, as if some giant work spigot were activated by the pressure of his butt on the seat. But this was it, the ladder-climbing, nose-grinding J-O-B. This was what he had studied for in college. This is what he had searched and interviewed for. And what wasn't to like? His tasks were clear enough, and he had the capacity to complete them. What more could he ask for?
|
||||
|
||||
Knowing all this didn't make it better. The job was hard. His days were hard. Even leaving home was hard. He looked forward to his mid-morning break. At precisely 10:30am he would mute his phone, turn off his screen, and pull a book out of his briefcase. Setting it down carefully in the middle of his desk, he would stand and stretch while he examined the cover and imagined the contents. Four minutes of neck, arm, and back stretches left him exactly eleven minutes of reading time. Others might spend the time in the break room, but not Sanjay.
|
||||
|
||||
Lunch wasn't for another hour and fifteen minutes. It would be tedious to describe his profession, so I'll describe a certain feeling Sanjay got every day just before lunch hour. In almost all cases, Sanjay was a solitary creature, ruled by a firm injunction that other humans were to be avoided. This he applied with religious exactness--except with Cider, a red-headed coworker from HR. She was kind, quiet, sincere--and yet personable and warm. He calculated his chances of running in to her on any given day at 48%; high enough for her to be a pleasant preoccupation.
|
||||
|
||||
Maybe it was because he liked to eat on the 32nd floor patio. It was a small patio, with a few plants, and several places to sit. Nothing fancy, but if it were any fancier it would attract attention and more visitors--and so it was perfect. They both seemed to like it, and would bump into one another. Maybe they both thought about the odds. It was certain that they both enjoyed meeting one another, whether by chance or design, or something in-between. This particular day was one of those chance days, when fate twisted their paths together.
|
||||
|
||||
Never did an hour pass as fast as it did with Cider! Everything about her was perfect, but more than anything else Sanjay appreciated how she made him feel as if the world really was good. When she was around, all of the anxiety seemed to fade into the background. They would chat about everything and nothing, and no matter how it went, it always went right. She would smile and laugh, and he would smile and laugh with her. She would cry and complain, and he would be indignant for her sake--but without feeling frustrated or disquieted himself.
|
||||
|
||||
On this particular day, a lunch hour just wasn't enough. Sanjay went back to his work on time, of course, but his head wasn't in the game. He couldn't focus. When the phone rang, he let it ring two or three times, rather than answering as soon as the first ring ended. When an email came in, he sat and stared at the subject line, instead of opening it up and getting right to work. He was, in a word, distrait. This troubled him, and he racked his brain for an explanation. Sanjay liked for everything to have an explanation.
|
||||
|
||||
Perhaps some aspect of the conversation was left unresolved? No, all of the topics had been suitably covered. Maybe there was something that they missed, some tangent that should have been explored? Impossible; he had analyzed each subject and outlined them in his head, carefully covering those areas that she overlooked. Could it be something he consciously missed? He replayed their conversation and found nothing lacking. Try as he might, there was no logical explanation. All the ignoring of phone calls and emails in the world couldn't make it make sense, but it was still true: one hour wasn't enough.
|
||||
|
||||
Questions still crowded his mind as work ended, and his focus on them reduced his focus on the crowds in the elevator, the grains of sand in the lobby, and even the crowds on the street as he walked to his carpool rendezvous spot. He didn't count how many strange people he brushed against. He didn't cross over to the other side of the road to avoid the bustle of humanity. As he rode home, he stared out the window absent-mindedly. All the while, a notion was fixing itself in his mind: just one hour is just not enough.
|
||||
|
||||
Realization became resolve. There was no law stating that they could only see one another on lunch breaks! Sanjay fought back his anxiety, and found the courage to call her cell. She had given him the number once--in case he had any HR problems, she said--and so why not? Was this an HR problem? He wasn't sure, but she had given him her number. He hadn't really seen her or spoken with her outside their lunch meetings, so he didn't know what to expect. He was elated that she was as wonderful on the phone as in person.
|
||||
|
||||
Sanjay asked Cider on a date. Cider asked where and when. Sanjay, in his excitement, said they could meet that very evening at a restaurant of her choosing. Cider, to his surprise, accepted, and chose a restaurant that was quiet, and usually uncrowded. He could hardly believe it had worked! One hour didn't have to be enough, they could have more! More of that peace, that calm, that joy. More of that conversation that was worth calculating the percentage of having. More of something he didn't have any of when she wasn't around. Life could be more than it was.
|
||||
|
||||
The restaurant was too far to walk to, so Sanjay used a ride service. He didn't like ride services, because he never quite knew what to expect from the car or the driver, but he really didn't have any other choice. The vehicle that pulled up had dark tinted windows, and a sort of eerie green glow from aftermarket lights installed under the fenders. The driver was too friendly, and too talkative, and too fast, and smelled faintly of Patchouli. Sanjay drew in short breaths through his mouth and tried to look out the blackened window at the city lights.
|
||||
|
||||
Uncomfortable as he was, it was worth it. As they pulled up, he saw Cider waiting for him by the entrance, her cinnamon curls dancing in the neon light of the restaurant sign. She smiled lavishly as he paid the driver and got out of the car, then gave Sanjay a knowing nose-curl as she caught a whiff of the cars interior. He nodded and pinched his nose as the car drove off. Cider nodded toward the the restaurant entrance, and without a word the pair made their way inside; the street was no place for civilized people to talk.
|
||||
|
||||
Variety was not Sanjay's strong point, so he was relieved when he saw some very familiar options on the menu. They ordered and ate and conversed. There was enough background noise to ease tension, but not enough to irritate. The light was cool and relaxed. Plants, and even an aquarium added to the general calm. Was it better than the 32nd floor patio? It was at least just as pleasant, and more so because there was no work to rush back to, no time limit, nothing else to think about. He couldn't recall when he had last felt this relaxed.
|
||||
|
||||
What made it even better was the apparent pleasure Cider took in their conversation. She was so genuine. When she laughed, it was jubilant. When she questioned, it was earnest. When she was shocked, it was sincere. How many people had he met in his life that couldn't manage this one thing: to be the person that they were, to face the world and present themselves, without hiding behind convention? Who didn't wear the mask of social niceties, sport the facade of learned behaviors which would make them acceptable? How much better this was, how much truer, how much simpler!
|
||||
|
||||
Xerox copies, that's what most people were. But not Cider. The two enjoyed what can only be described as a perfect evening together, both being themselves, both loved and accepted and appreciated. Though generally practical, Sanjay somehow knew this evening had been magical, enchanted. He got along so little with most people! But with her, everything was different. Somehow, he had to make this last forever. He didn't know how, exactly, but he knew he had to find a way. When they parted, neither wanted to leave. Their feelings on the subject were a perfect reflection, an image of unity.
|
||||
|
||||
Yesterday, Sanjay would have considered himself unlucky. Unlucky to exist in a world that he didn't understand, and that didn't understand him. Unlucky to struggle with imperfection. Somehow his perspective had now shifted. He knew what he wanted to pursue. Jobs and success never held much sway in his heart--nothing did, really. That was no longer the case. Cider held sway there now. He thought of her all the way home. He didn't stop as he got ready for bed. He still thought of her as he shut off the lamp, set the alarm, and crawled into his bed.
|
||||
|
||||
Zoos full of origami animals of every description crowded his mind as he drifted off to sleep. The papery beasts danced and fluttered and swirled around his office desk, which floated just above the ground of the 32nd floor patio. The surroundings changed in an instant, transforming in to the cool, dimly lit restaurant. He watched the stream of animals march into the aquarium, where they each turned to trembling origami fish. Suddenly, through the crystal water, he saw Cider's face smiling at him on the other side. He fell deep into her eyes, and in his sleep, he smiled.
|
|
@ -0,0 +1,236 @@
|
|||
# A Day Sometimes Pivots on Its Lunch Break
|
||||
|
||||
(This short story is from a collection of stories about two characters--Sanjay
|
||||
and Cider--who have lived many lives. In this iteration, Sanjay is an
|
||||
obsessive/compulsive fellow with some heightened sensitivities, who overthinks
|
||||
the world around him. The story is written to represent exactly one day in his
|
||||
life. It is written to have exactly enough paragraphs to represent the entire
|
||||
English alphabet, and no more. Each paragraph starts with a sequential letter of
|
||||
the alphabet, and is written to have exactly one hundred words, with hyphenated
|
||||
words counting as two. The form reflects the main character, and is part of the
|
||||
story.)
|
||||
|
||||
At exactly six o'clock each morning, Sanjay awoke to a narrow band, fixed
|
||||
frequency signal with an abrupt onset and intermittent sustained decibel levels.
|
||||
Most people thought of this simply as "an annoying alarm clock noise", but ever
|
||||
since Sanjay read Daniel P.W. Ellis' 2001 study on "Detecting Alarm Sounds", he
|
||||
couldn't help visualizing the spectrogram of the shrill, grating tone that meant
|
||||
it was time to get up and face the day. He wondered why the alarm clock
|
||||
manufacturers, knowing that their products would primarily be employed in
|
||||
tranquil bedrooms, designed based on principles meant for high noise
|
||||
environments.
|
||||
|
||||
Breakfast took precisely twelve minutes to prepare. Sanjay enjoyed rolled oats,
|
||||
which were slow to cook, but had an agreeable texture. The water took five
|
||||
minutes to boil, which is enough time to brush your teeth thoroughly and
|
||||
properly. The oats, tamped and flat in their measuring cup, were poured into the
|
||||
scalding liquid, stirred three times, and reduced to simmer for five minutes.
|
||||
While he waited, Sanjay would read. Then, the heat was turned off, and the pot
|
||||
was covered for two additional minutes. Time enough to arrange the bowl, spoon,
|
||||
and toppings: honey, molasses, dried cherries, and butter.
|
||||
|
||||
Commuting by carpool never completely suited him, but Sanjay had calculated the
|
||||
efficiency of the arrangement and determined that it would be irrational to
|
||||
discontinue. There were four people in his carpool, who split the cost of fuel,
|
||||
insurance, and vehicle maintenance. Two of these enjoyed chatting during the
|
||||
commute, while Sanjay and the remaining party enjoyed silent contemplation,
|
||||
reading, or other preparation for the work day. Only occasionally would the
|
||||
first two parties attempt to engage the latter in discussion, and only when they
|
||||
were certain that the topic would be of interest. They were all a good match.
|
||||
|
||||
Downtown was both pleasing and disturbing to Sanjay. The tidy grid was soothing
|
||||
on paper, but the clamor and commotion of the actual streets was unnerving.
|
||||
Sanjay was dropped off first, at the corner of 23rd and Madison. He would walk
|
||||
three blocks to his office--he could have shortened his route through simple
|
||||
optimizations, but he opted instead to avoid the stress of more crowded
|
||||
intersections. The final approach to his building entrance was an exception,
|
||||
teeming with people, but unavoidable. He would sometimes wait several minutes
|
||||
for a clearing, so he could approach the revolving doors without obstruction.
|
||||
|
||||
Entering the office building was stressful. The revolving doors provided a
|
||||
bottleneck, metering the flow of pedestrians from one side to the other. Sanjay
|
||||
imagined it like the narrow glass neck of an hourglass. In the morning it was
|
||||
turned one way, with the people flowing in, and in the afternoon it was turned
|
||||
upside-down, with the people flowing out. The two sides--inside and
|
||||
outside—--were nothing more than the two reservoirs of the glass, places for the
|
||||
grains to reside as they waited to continue their endless inversion from home to
|
||||
work. Was he a grain of sand?
|
||||
|
||||
Fighting his way through the lobby to the elevators left only a brief moment for
|
||||
philosophizing. He found that by staying close behind one person and matching
|
||||
their speed, he could usually make it through the horde without brushing against
|
||||
too many people. He kept his head down, and swung his briefcase wide to carve
|
||||
out his place. If he somehow lost his front cover, he would stop and look at his
|
||||
watch or phone until he found a new target. It was important that he not be at
|
||||
the front of the line when he reached the elevator doors.
|
||||
|
||||
Getting on the elevator also presented a challenge. The person at the front had
|
||||
to press the button (which was most certainly riddled with germs), and manage
|
||||
the space necessary to allow the current occupants to debark before the next
|
||||
crew loaded in. It was a major responsibility, and Sanjay avoided it
|
||||
fastidiously. Any slot in the middle of the line was acceptable. Being toward
|
||||
the front meant he had a greater chance of finding one of the coveted three
|
||||
corners away from the button matrix (another catastrophe), where he could safely
|
||||
sequester himself for the duration of the ascent.
|
||||
|
||||
Happy to debark at his 28th floor office, Sanjay would breath a sigh of relief
|
||||
as he wiggled his way off the elevator. The lobby was quiet and cool, and rarely
|
||||
hosted more than a handful of people. It was a place to pass through for most,
|
||||
but for Sanjay it was a destination of regeneration, a rare lull in the City
|
||||
That Never Sleeps. The receptionist sat behind a high counter, and by scooting
|
||||
to a far recess of the room, he could sit quietly and fiddle with his briefcase
|
||||
for several minutes without attracting any attention at all.
|
||||
|
||||
If he could stop the day right there, he would, but time waits for no man--
|
||||
especially not Sanjay. There were calls to make, clients to please, figures to
|
||||
crunch, and paperwork to be filled out. Always paperwork. Years ago, he had
|
||||
gotten obsessed with origami. Ever since, he couldn't help pondering on the
|
||||
massive zoo of folded animals he could create if he gave every report, every
|
||||
form, every letter over to that ancient art. The resultant paper wildlife park
|
||||
would boggle the imagination. He would sometimes reflect briefly on the idea as
|
||||
he sat down at his desk.
|
||||
|
||||
Just as soon as he sat down, the work would begin. Sanjay often wondered at how
|
||||
quickly the emails, phone calls, and coworkers would flow into his mental and
|
||||
physical space, as if some giant work spigot were activated by the pressure of
|
||||
his butt on the seat. But this was it, the ladder-climbing, nose-grinding J-O-B.
|
||||
This was what he had studied for in college. This is what he had searched and
|
||||
interviewed for. And what wasn't to like? His tasks were clear enough, and he
|
||||
had the capacity to complete them. What more could he ask for?
|
||||
|
||||
Knowing all this didn't make it better. The job was hard. His days were hard.
|
||||
Even leaving home was hard. He looked forward to his mid-morning break. At
|
||||
precisely 10:30am he would mute his phone, turn off his screen, and pull a book
|
||||
out of his briefcase. Setting it down carefully in the middle of his desk, he
|
||||
would stand and stretch while he examined the cover and imagined the contents.
|
||||
Four minutes of neck, arm, and back stretches left him exactly eleven minutes of
|
||||
reading time. Others might spend the time in the break room, but not Sanjay.
|
||||
|
||||
Lunch wasn't for another hour and fifteen minutes. It would be tedious to
|
||||
describe his profession, so I'll describe a certain feeling Sanjay got every day
|
||||
just before lunch hour. In almost all cases, Sanjay was a solitary creature,
|
||||
ruled by a firm injunction that other humans were to be avoided. This he applied
|
||||
with religious exactness--except with Cider, a red-headed coworker from HR. She
|
||||
was kind, quiet, sincere--and yet personable and warm. He calculated his chances
|
||||
of running in to her on any given day at 48%; high enough for her to be a
|
||||
pleasant preoccupation.
|
||||
|
||||
Maybe it was because he liked to eat on the 32nd floor patio. It was a small
|
||||
patio, with a few plants, and several places to sit. Nothing fancy, but if it
|
||||
were any fancier it would attract attention and more visitors--and so it was
|
||||
perfect. They both seemed to like it, and would bump into one another. Maybe
|
||||
they both thought about the odds. It was certain that they both enjoyed meeting
|
||||
one another, whether by chance or design, or something in-between. This
|
||||
particular day was one of those chance days, when fate twisted their paths
|
||||
together.
|
||||
|
||||
Never did an hour pass as fast as it did with Cider! Everything about her was
|
||||
perfect, but more than anything else Sanjay appreciated how she made him feel as
|
||||
if the world really was good. When she was around, all of the anxiety seemed to
|
||||
fade into the background. They would chat about everything and nothing, and no
|
||||
matter how it went, it always went right. She would smile and laugh, and he
|
||||
would smile and laugh with her. She would cry and complain, and he would be
|
||||
indignant for her sake--but without feeling frustrated or disquieted himself.
|
||||
|
||||
On this particular day, a lunch hour just wasn't enough. Sanjay went back to his
|
||||
work on time, of course, but his head wasn't in the game. He couldn't focus.
|
||||
When the phone rang, he let it ring two or three times, rather than answering as
|
||||
soon as the first ring ended. When an email came in, he sat and stared at the
|
||||
subject line, instead of opening it up and getting right to work. He was, in a
|
||||
word, distrait. This troubled him, and he racked his brain for an explanation.
|
||||
Sanjay liked for everything to have an explanation.
|
||||
|
||||
Perhaps some aspect of the conversation was left unresolved? No, all of the
|
||||
topics had been suitably covered. Maybe there was something that they missed,
|
||||
some tangent that should have been explored? Impossible; he had analyzed each
|
||||
subject and outlined them in his head, carefully covering those areas that she
|
||||
overlooked. Could it be something he consciously missed? He replayed their
|
||||
conversation and found nothing lacking. Try as he might, there was no logical
|
||||
explanation. All the ignoring of phone calls and emails in the world couldn't
|
||||
make it make sense, but it was still true: one hour wasn't enough.
|
||||
|
||||
Questions still crowded his mind as work ended, and his focus on them reduced
|
||||
his focus on the crowds in the elevator, the grains of sand in the lobby, and
|
||||
even the crowds on the street as he walked to his carpool rendezvous spot. He
|
||||
didn't count how many strange people he brushed against. He didn't cross over to
|
||||
the other side of the road to avoid the bustle of humanity. As he rode home, he
|
||||
stared out the window absent-mindedly. All the while, a notion was fixing itself
|
||||
in his mind: just one hour is just not enough.
|
||||
|
||||
Realization became resolve. There was no law stating that they could only see
|
||||
one another on lunch breaks! Sanjay fought back his anxiety, and found the
|
||||
courage to call her cell. She had given him the number once--in case he had any
|
||||
HR problems, she said--and so why not? Was this an HR problem? He wasn't sure,
|
||||
but she had given him her number. He hadn't really seen her or spoken with her
|
||||
outside their lunch meetings, so he didn't know what to expect. He was elated
|
||||
that she was as wonderful on the phone as in person.
|
||||
|
||||
Sanjay asked Cider on a date. Cider asked where and when. Sanjay, in his
|
||||
excitement, said they could meet that very evening at a restaurant of her
|
||||
choosing. Cider, to his surprise, accepted, and chose a restaurant that was
|
||||
quiet, and usually uncrowded. He could hardly believe it had worked! One hour
|
||||
didn't have to be enough, they could have more! More of that peace, that calm,
|
||||
that joy. More of that conversation that was worth calculating the percentage of
|
||||
having. More of something he didn't have any of when she wasn't around. Life
|
||||
could be more than it was.
|
||||
|
||||
The restaurant was too far to walk to, so Sanjay used a ride service. He didn't
|
||||
like ride services, because he never quite knew what to expect from the car or
|
||||
the driver, but he really didn't have any other choice. The vehicle that pulled
|
||||
up had dark tinted windows, and a sort of eerie green glow from aftermarket
|
||||
lights installed under the fenders. The driver was too friendly, and too
|
||||
talkative, and too fast, and smelled faintly of Patchouli. Sanjay drew in short
|
||||
breaths through his mouth and tried to look out the blackened window at the city
|
||||
lights.
|
||||
|
||||
Uncomfortable as he was, it was worth it. As they pulled up, he saw Cider
|
||||
waiting for him by the entrance, her cinnamon curls dancing in the neon light of
|
||||
the restaurant sign. She smiled lavishly as he paid the driver and got out of
|
||||
the car, then gave Sanjay a knowing nose-curl as she caught a whiff of the cars
|
||||
interior. He nodded and pinched his nose as the car drove off. Cider nodded
|
||||
toward the the restaurant entrance, and without a word the pair made their way
|
||||
inside; the street was no place for civilized people to talk.
|
||||
|
||||
Variety was not Sanjay's strong point, so he was relieved when he saw some very
|
||||
familiar options on the menu. They ordered and ate and conversed. There was
|
||||
enough background noise to ease tension, but not enough to irritate. The light
|
||||
was cool and relaxed. Plants, and even an aquarium added to the general calm.
|
||||
Was it better than the 32nd floor patio? It was at least just as pleasant, and
|
||||
more so because there was no work to rush back to, no time limit, nothing else
|
||||
to think about. He couldn't recall when he had last felt this relaxed.
|
||||
|
||||
What made it even better was the apparent pleasure Cider took in their
|
||||
conversation. She was so genuine. When she laughed, it was jubilant. When she
|
||||
questioned, it was earnest. When she was shocked, it was sincere. How many
|
||||
people had he met in his life that couldn't manage this one thing: to be the
|
||||
person that they were, to face the world and present themselves, without hiding
|
||||
behind convention? Who didn't wear the mask of social niceties, sport the facade
|
||||
of learned behaviors which would make them acceptable? How much better this was,
|
||||
how much truer, how much simpler!
|
||||
|
||||
Xerox copies, that's what most people were. But not Cider. The two enjoyed what
|
||||
can only be described as a perfect evening together, both being themselves, both
|
||||
loved and accepted and appreciated. Though generally practical, Sanjay somehow
|
||||
knew this evening had been magical, enchanted. He got along so little with most
|
||||
people! But with her, everything was different. Somehow, he had to make this
|
||||
last forever. He didn't know how, exactly, but he knew he had to find a way.
|
||||
When they parted, neither wanted to leave. Their feelings on the subject were a
|
||||
perfect reflection, an image of unity.
|
||||
|
||||
Yesterday, Sanjay would have considered himself unlucky. Unlucky to exist in a
|
||||
world that he didn't understand, and that didn't understand him. Unlucky to
|
||||
struggle with imperfection. Somehow his perspective had now shifted. He knew
|
||||
what he wanted to pursue. Jobs and success never held much sway in his heart--
|
||||
nothing did, really. That was no longer the case. Cider held sway there now. He
|
||||
thought of her all the way home. He didn't stop as he got ready for bed. He
|
||||
still thought of her as he shut off the lamp, set the alarm, and crawled into
|
||||
his bed.
|
||||
|
||||
Zoos full of origami animals of every description crowded his mind as he drifted
|
||||
off to sleep. The papery beasts danced and fluttered and swirled around his
|
||||
office desk, which floated just above the ground of the 32nd floor patio. The
|
||||
surroundings changed in an instant, transforming in to the cool, dimly lit
|
||||
restaurant. He watched the stream of animals march into the aquarium, where they
|
||||
each turned to trembling origami fish. Suddenly, through the crystal water, he
|
||||
saw Cider's face smiling at him on the other side. He fell deep into her eyes,
|
||||
and in his sleep, he smiled.
|
|
@ -0,0 +1,47 @@
|
|||
# Morse Code Promotion Manifesto
|
||||
|
||||
## A primer on Morse code communication and the requirements to keep it alive
|
||||
|
||||
Morse code seems to be rather useless in these times of ubiquitous digital means of communication, but it is highly appealing if you like to keep communication independent of electronic go-betweens.
|
||||
|
||||
### What is Morse code?
|
||||
|
||||
(Note: I won't go into the history of Morse code in this text, and I will only talk about the so-called "International Code", not the old "American Code" initially used on telegraph lines. Please consult your favourite Encyclopaedia for further details!)
|
||||
|
||||
Morse code is a representation of the Latin alphabet, numbers (figures) and some punctuation marks and control signs by long and short signals, intended for consumption by humans. It is a **ternary** encoding with the following basic elements:
|
||||
|
||||
* short signal followed by a short pause, called "dot",
|
||||
* long signal followed by a short pause, called "dash",
|
||||
* character pause,
|
||||
|
||||
where the relation of duration is defined as "long" being 3 times "short". The duration of the character pause is 2 times "short"; as it always follows a signal with its accompanying "short" pause, the total pause between characters corresponds to 3 "short" pauses. Words are separated by two additional character pauses, resulting in 7 "short" pauses in total between the last signal of the first word and the first signal of the second word.
|
||||
|
||||
The ternary nature of Morse code permits characters of varying lengths, and the encoding was chosen to roughly correspond to the letter frequency of Western languages; for example, `E` is encoded as "dot", `T` as "dash", `I` as "dot dot", `Q` as "dash dash dot dash".
|
||||
|
||||
### Current Use of Morse Code
|
||||
|
||||
While Morse code transmissions were initially the only means to transmit information by radio waves (before the availability of continuous wave oscillators), they are now only used by armed forces, radio amateurs, and some beacon and navigational systems. This is due to the fact that whilst Morse code allows for communication on very noisy channels, it still requires human operators, and there exist modern digital transmission systems which can reliably work under similar noise conditions. Human radio operators are very expensive, and therefore only armed forces and radio amateurs can afford their use and at the same time profit from the low technical requirements and high reliability Morse code offers.
|
||||
|
||||
It has the following advantages over other transmission types:
|
||||
|
||||
* It requires only a channel capable of carrying binary signals (the ternary element is defined by timing), permitting use of very simple and consequently reliable/rugged equipment;
|
||||
* the channel can be very noisy (the limits depending on the experience and collaboration of the operators), allowing Morse code to remain usable even under very bad conditions;
|
||||
* the bandwidth of the channel can be very low (depending on the desired transmission speed: for experienced operators and comfortable communication in the range of 20 to 50 Hz), resulting in very good use of the available spectrum and permitting "piggybacking" on other signals.
|
||||
|
||||
Although best results can be achieved by auditory reception (sound or signals converted to sound), also visual or even mechanical reception (by feeling vibration or pressure) is possible. Note that Morse code can even be used to circumvent sensoric and motoric inabilities due to illness or accidents!
|
||||
|
||||
In my opinion, it is therefore very useful and highly recommendable to learn Morse code, but it should be done with the focus on auditory training, as any visualization of the signals will prevent the brain from making use of the musical/rhythmical nature of Morse code.
|
||||
|
||||
### Promote Morse Code
|
||||
|
||||
Unfortunately, the current volume of clear text Morse code transmissions on the entire radio spectrum is very low (except for amateur radio), and therefore there is very little material on air to listen for. This makes it difficult to get people interested in learning Morse code, as "it is useless", and only radio amateurs have a chance of using it "for real".
|
||||
|
||||
However, it is straightforward to automatically generate Morse code transmissions with cheap modern electronics, and the almost infinite source of texts available on the internet can be used for cleartext generation. As it is much easier (and cheaper) than generating spoken word broadcasts in an appealing way, it may also be interesting from the viewpoint of distribution of information independent of big media.
|
||||
|
||||
The main problem preventing transmissions are legal restrictions, especially on frequency bands allowing for long distance communications. But laws in this respect vary considerably between various jurisdictions, which should be exploited as much as possible. As an intermediate step, promoting internet multicasting of cleartext transmissions might be useful, though.
|
||||
|
||||
If we want *to keep Morse code alive and promote learning* and use, we should therefore:
|
||||
|
||||
* explore the various national legal possibilities of (radio) broadcasting Morse code to a larger audience,
|
||||
* build systems (hard- and software) facilitating automatic generation of cleartext Morse code transmissions,
|
||||
* organize people interested in Morse code also outside of amateur radio, with the focus on keeping communication independent of opaque digital systems.
|
|
@ -0,0 +1,102 @@
|
|||
# Morse Code Promotion Manifesto
|
||||
|
||||
## A primer on Morse code communication and the requirements to keep it alive
|
||||
|
||||
Morse code seems to be rather useless in these times of ubiquitous digital means
|
||||
of communication, but it is highly appealing if you like to keep communication
|
||||
independent of electronic go-betweens.
|
||||
|
||||
### What is Morse code?
|
||||
|
||||
(Note: I won't go into the history of Morse code in this text, and I will only
|
||||
talk about the so-called "International Code", not the old "American Code"
|
||||
initially used on telegraph lines. Please consult your favourite Encyclopaedia
|
||||
for further details!)
|
||||
|
||||
Morse code is a representation of the Latin alphabet, numbers (figures) and some
|
||||
punctuation marks and control signs by long and short signals, intended for
|
||||
consumption by humans. It is a **ternary** encoding with the following basic
|
||||
elements:
|
||||
|
||||
* short signal followed by a short pause, called "dot",
|
||||
* long signal followed by a short pause, called "dash",
|
||||
* character pause,
|
||||
|
||||
where the relation of duration is defined as "long" being 3 times "short". The
|
||||
duration of the character pause is 2 times "short"; as it always follows a
|
||||
signal with its accompanying "short" pause, the total pause between characters
|
||||
corresponds to 3 "short" pauses. Words are separated by two additional
|
||||
character pauses, resulting in 7 "short" pauses in total between the last signal
|
||||
of the first word and the first signal of the second word.
|
||||
|
||||
The ternary nature of Morse code permits characters of varying lengths, and the
|
||||
encoding was chosen to roughly correspond to the letter frequency of Western
|
||||
languages; for example, `E` is encoded as "dot", `T` as "dash", `I` as "dot
|
||||
dot", `Q` as "dash dash dot dash".
|
||||
|
||||
### Current Use of Morse Code
|
||||
|
||||
While Morse code transmissions were initially the only means to transmit
|
||||
information by radio waves (before the availability of continuous wave
|
||||
oscillators), they are now only used by armed forces, radio amateurs, and some
|
||||
beacon and navigational systems. This is due to the fact that whilst Morse code
|
||||
allows for communication on very noisy channels, it still requires human
|
||||
operators, and there exist modern digital transmission systems which can
|
||||
reliably work under similar noise conditions. Human radio operators are very
|
||||
expensive, and therefore only armed forces and radio amateurs can afford their
|
||||
use and at the same time profit from the low technical requirements and high
|
||||
reliability Morse code offers.
|
||||
|
||||
It has the following advantages over other transmission types:
|
||||
|
||||
* It requires only a channel capable of carrying binary signals (the ternary
|
||||
element is defined by timing), permitting use of very simple and consequently
|
||||
reliable/rugged equipment;
|
||||
* the channel can be very noisy (the limits depending on the experience and
|
||||
collaboration of the operators), allowing Morse code to remain usable even under
|
||||
very bad conditions;
|
||||
* the bandwidth of the channel can be very low (depending on the desired
|
||||
transmission speed: for experienced operators and comfortable communication in
|
||||
the range of 20 to 50 Hz), resulting in very good use of the available spectrum
|
||||
and permitting "piggybacking" on other signals.
|
||||
|
||||
Although best results can be achieved by auditory reception (sound or signals
|
||||
converted to sound), also visual or even mechanical reception (by feeling
|
||||
vibration or pressure) is possible. Note that Morse code can even be used to
|
||||
circumvent sensoric and motoric inabilities due to illness or accidents!
|
||||
|
||||
In my opinion, it is therefore very useful and highly recommendable to learn
|
||||
Morse code, but it should be done with the focus on auditory training, as any
|
||||
visualization of the signals will prevent the brain from making use of the
|
||||
musical/rhythmical nature of Morse code.
|
||||
|
||||
### Promote Morse Code
|
||||
|
||||
Unfortunately, the current volume of clear text Morse code transmissions on the
|
||||
entire radio spectrum is very low (except for amateur radio), and therefore
|
||||
there is very little material on air to listen for. This makes it difficult to
|
||||
get people interested in learning Morse code, as "it is useless", and only radio
|
||||
amateurs have a chance of using it "for real".
|
||||
|
||||
However, it is straightforward to automatically generate Morse code
|
||||
transmissions with cheap modern electronics, and the almost infinite source of
|
||||
texts available on the internet can be used for cleartext generation. As it is
|
||||
much easier (and cheaper) than generating spoken word broadcasts in an appealing
|
||||
way, it may also be interesting from the viewpoint of distribution of
|
||||
information independent of big media.
|
||||
|
||||
The main problem preventing transmissions are legal restrictions, especially on
|
||||
frequency bands allowing for long distance communications. But laws in this
|
||||
respect vary considerably between various jurisdictions, which should be
|
||||
exploited as much as possible. As an intermediate step, promoting internet
|
||||
multicasting of cleartext transmissions might be useful, though.
|
||||
|
||||
If we want *to keep Morse code alive and promote learning* and use, we should
|
||||
therefore:
|
||||
|
||||
* explore the various national legal possibilities of (radio) broadcasting Morse
|
||||
code to a larger audience,
|
||||
* build systems (hard- and software) facilitating automatic generation of
|
||||
cleartext Morse code transmissions,
|
||||
* organize people interested in Morse code also outside of amateur radio, with
|
||||
the focus on keeping communication independent of opaque digital systems.
|
Loading…
Reference in New Issue