Coding

Filing Away Another Post

Computers.

It’s the 21st century, computers are all around us, and explaining them can yield to some pretty interesting blog content.

If you have used a computer you’ve used or at the very least heard of a file, and you have probably seen many different file extensions (.png, .wav, .docx, .txt).

“What makes them different?” You might ask.

Formats.

To a computer a file looks exactly like any other file. Strings of binary, rows upon rows of 0’s and 1’s. A computer has no notion of a, b, c, unless we tell them something like 001 is a 010 is b and 100 is c. So that’s what we do. And to make it more readable we turn 8 bits (each digit in binary) into a more compressed byte (which is 2 digits in hex). This is turning 10001010 (base-2) into 8a (base-16).

This means that different files are just different ways of reading those bytes. Some files have strict formatting rules and some have no rules at all.

There are essentially two different kinds of files, even though all files are really just bytes. Human-readable and binary. Binary files are files that aren’t really intended on being read by humans, while human-readable is exactly what it sounds like.

.txt files are human-readable, if you open one up and readily convert the bytes to characters without following any formatting rules then you’ll get a file that you should be able to read.

.csv files are also human-readable but have a common formatting they have commas separating all of the variables. These are common for spreadsheets.

stuff,stuff,stuff
a,b,c
1,2,3

On the opposite end, things like .docx, the document used to hold your Microsoft Word document, is binary. It sounds confusing, but .docx is capable of holding pictures and formatting and colors and so many things that a conventional .txt couldn’t hold.

Another binary file could be something like .png which can display cool images given the proper program to read it, but also looks like this when you open it in a hex editor.Screen Shot 2018-03-26 at 3.17.23 PM.png

The right side shows what the byte values on the left look like as character, and is what it will look like if you try to open a .png in a text editor (like notepad). If you didn’t have a program to interpret it (like paint) you wouldn’t be able to get an image.

A couple of thing are worth noting here though. Notice “IHDR” on the first line?Screen Shot 2018-03-26 at 3.17.23 PM.png

That indicates to a .png reader that it is the first chunk of the .png. It has to be there and all the future data is interpreted based off of that chunk.

On the flip-side “IEND” indicates the last chunk of the .png. This lets the .png reader know to stop reading the file, since it won’t get anymore information about the image.

Screen Shot 2018-03-26 at 3.24.34 PM.png

This means that you could shove a ton of data at the end of a .png file and it won’t be read. For example: The entire Bee Movie Script.

LOL_BEE_MOVIE_SCRIPT.png

While retaining a completely normal .png image of Barry from the Bee Movie, you can actually put the entire Bee Movie Script by Script-o-rama.com on the end of it. That said, if you download that image right now it won’t have it on there, because the image reader for WordPress actually will chop it all off after only reading what is needed for the image.

If you did decide to open up a text editor and try it yourself, it would look something like this, and the image would look exactly the same, when you opened it up.

Screen Shot 2018-03-26 at 3.28.52 PM.png

A Perl of a Script

“if something — anything — requires more than 90 seconds of his time, he writes a script to automate that.”
-guy from online article

Today was the first time I wrote a script that increased my productivity. Although mundane, I wrote a script to auto-name my notes in class to the current day’s date.

Ever since I got into college I have heard stories of people automating. This was the article that put automation in my scopes. I never want to become so automated that robot me sends my future wife texts, but I was fascinated knowing that there is enough potential in scripting to do such an absurd thing.

I have never really been able to script because I never fully knew a language that was built for scripting. I knew Java, C, C++ but these are known as compiled languages. You have to run the code through another program to get an executable to run for later.

I needed to learn a language like Python or Perl, which is built for more interaction and doesn’t have to be compiled. This yields the great benefit of being able to modify the code and immediately run it. I can easily modify my notes script to format the files a different way and then start running it again like nothing happened.

And this summer, lo and behold, I decided to learn Perl. It is a really fun language to learn, especially coming from C, since Perl’s word and input manipulation is basically indestructible. The script I wrote is in Perl and it took me about an hour to write because I learned Perl at the beginning of summer and then haven’t touched it much since. Now I could probably write a script like that in significantly less time.

This school year I am going to be efficient, I am going to be organized, I am going to be fit, and most importantly, I am going to very best me I can possibly be.

To any students reading this blog, good luck this school year, you’ve got this!