How big is a character when you store it on your computer? How big is a character when you store it on the Steem blockchain? Well, I'm not exactly sure, but most applications I've seen use UTF-8 protocol:
It depends what is the character and what encoding it is in: An ASCII character in 8-bit ASCII encoding is 8 bits (1 byte), though it can fit in 7 bits. An ISO-8895-1 character in ISO-8859-1 encoding is 8 bits (1 byte). A Unicode character in UTF-8 encoding is between 8 bits (1 byte) and 32 bits (4 bytes).
-- Jan 31, 2011
Therefore, a character might take up anywhere between 1 and 4 bytes. How much is a byte? A byte is eight bits. What is a bit? A bit is true or false, on or off, one or zero, black or white, purple or yellow. A bit is the smallest binary unit of a computer.
Because everything on a computer is calculated with bits, all measurements are made in powers of 2. A byte is 8 bits. This is two to the eighth power (2^8).
- One bit can store 2 values of information (1 or 0) 2^1 = 2 values
- Two bits can store 4 values of information (00, 01, 10, 11) 2^2 = 4 values
- Three bits can store 8 values of information
- (000, 001, 010, 011, 100, 101, 110, 111) 2^3 = 8 values
- And so on and so on. A byte can store 2^8 = 256 values.
As you can see, you only have to add a single bit to double the storage size. This is the foundation that makes computing so powerful. This core concept is one of the reasons why technology advances exponentially over time. One byte can store 256 values, but two bytes can store 2^16 = 65536 values.
If one is able to half the size of a one dimensional space they can fit twice as much on that line of the circuit board (2^1). However, if you can half the size of a two dimensional space you can fit four times as much (2^2) and if you half the size of a three dimensional space you can fit eight times as much (2^3).
Corporate America doesn't care if you know this stuff. In fact, the less you know the better. The elite wants you to be fully dependent on them. A megabyte is 2^10 = 1024 kilobytes, but some "brilliant" salesman came up with idea to claim a megabyte was 1000 kilobytes because they can legally get away with that claim. After all, the technical definition of mega is a million and kilo is 1000 ( #bless the metric system ).
Why do this? Because now you can say a hard drive is 1 terabyte when it's really only 1,000,000,000,000 bytes. Then you go to plug in your hard drive and you're like WTF because this thing only has 1,000,000,000,000 bytes on it when it should have 1 terabyte, which is 1024 gigabytes, which is 1,048,576 megabytes, which is 1,073,741,824 kilobytes, which is 1,099,511,627,776 bytes. A difference of a full ten percent! Isn't compound interest fun? So these dirty salesmen started selling the same products but legally claimed they were better than they actually were.
BUT IT DOESN'T STOP THERE!
Nope. They've gotten even more flagrant with their math. Internet service providers like Comcast will tell you they offer download speeds in Mb/s. Dicks! The small 'b' is short for bits! No one measures bits! It's a worthless measurement. However, by saying:
We'll give you 8 megabits per second download speed!
It sounds like a hell of a lot more than 1 MB/s. Spoiler alert, these are the same values. A few years ago I had a Comcast tech installing internet at my house and he said 8 megabytes per second. I said, "Are you sure? I think you mean bits." He didn't even know. How sad is that? It was bits. I already knew the answer. It was the cheapest internet available in my area at the time.
I just ran this speed test 2 seconds ago. Look at that! Today I have beastmode Internet compared to a few years ago. Basically 50 MB/s download with 1.5 MB/s upload. I remember having a 28.8k baud modem. I remember 5KB/s download speeds and people flipping out that nothing was going to get faster than 56k baud. I would spend days trying to download a compressed movie or other big file. Look how far we've come. It's insane.
This same insanity is going to happen with crypto. That is a fact. If you can read this, then you are a temporarily embarrassed millionaire.
That might sound like crazy talk, but in the end, what is value? What's going to happen when humanity frees itself from these invisible chains? What's going to happen when robots are the new slaves? We will either continue down the path of centralized capitalism, where all the resources are getting funneled to the top 1%, or we will create cooperative decentralized communities. We will figure out a way to distribute those automation resources more fairly. This really is the only option. The other leads to oblivion.
Tie it back to the main point.
Ok, so what do these things have to do with each other? Well, advancing technology is reducing overhead costs. It's allowing the little guys (like me) to pop up and be like, "Hm, what do we have here?" I have access to this blockchain called Steem, but I have no idea how to use it yet. The technology is so new and learning things takes a while. Make no mistake, developers are going to catch up once they realize what they are missing out on. They are missing out on free access to an ultra-secure server tied to it's own ultra-secure currency with a built in community. Most people are not understanding how insane this is, yet.
Even more insane is that they are missing out on ownership. How many developers are slaving away at their jobs for a company they don't even like? That company leeches value from all their developers. They pay their "slaves" a flat fee, and in exchange, the company makes a gamble that the project they invested in will make far more than it cost them to develop. All successful companies are masters of taking their employees for everything they're worth and more.
In a decentralized environment developers will own a piece of the product that they have worked so hard to produce. They will be a part of taking that gamble on the future of investment. Crypto is going to create entirely new previously impossible business models, and it's going to be incredible.
Text Size Is Still Cheap
How many characters am I allowed to store on the Steem blockchain every month? With 2044 Steem Power, I get 2.6 gigabytes of bandwidth. Assume it takes 2 bytes to store a single character. 2.6 gigabytes / 2 bytes = 1.3 giga-characters; about 1.4 billion characters... a month. Wow, that's a lot of characters; more than I could ever spend if I was just blogging and chatting with Steemians.
But what if you weren't blogging or chatting?
The foundation of Steemit is blogging, but text is the foundation of every program ever written by a person. I could theoretically create a media player for Steem that took text and interpreted that text into sound or video. The text that we store on this blockchain can be used as the foundation for literally any application. Those applications are intimately linked to Steem, and we can all upvote (support) the projects or the work we want to support in the most secure way possible. This is revolutionary.
Okay, so I'm allowed to put a few billion characters on the blockchain, but that's not even the revolutionary thing about Steem. I can create a decentralized app that forces other users to use their own bandwidth to make it operate. That's right. A decentralized app will leech bandwidth from every user putting text on the blockchain and sending information back and forth.
It is for this reason that I believe that Steem is lying to us. There are no decentralized apps on this blockchain, and I believe when they arrive, they will bring Steem to it's knees and they will be forced to severely cut back on that bandwidth that is currently promised to us.
Will this be a bad thing? No, it will actually be amazing, because steem bandwidth is an extremely undervalued resource. In fact, we may even see a shift of users caring much more about their bandwidth than how many Steem coins they actually have. Everyone touts the speed and scalability of Steem, but I will bring Steem to it's knees and show the developers where optimizations need to be made. I'm kind of surprised this isn't happening already if I'm being honest.
I could write a decentralized app on Steem that interpreted binary machine code. The posts would just be 1's and 0's. It would be totally unreadable, but the client interpreter (that anyone could download) would understand the machine code and do whatever it was supposed to.
However, ones and zeros are just bits, and if Steem stores characters in blocks of two bytes, you'd be using 16 bits to store those single bits. What a huge waste of space!
Programmers often use hexadecimal in place of binary code in order to make low level language calls more organized and easier to read and manipulate. The Arabic number system, the one that we all use, is base 10 (0123456789). Binary is base 2 (01), and hexadecimal is base 16 (aka base 2^4 or four bits)(0123456789ABCDEF). Two hexadecimal character are equal to a full byte. In fact, we've all been subjected to hexadecimal as crypto enthusiasts.
This is my Ethereum address, send your money now :D
I'm not quite sure what the 0x is for but the rest is hexadecimal.
Instead of posting binary to Steem, I could post hex. Remember, two hex values equal one byte, but one character on Steem is one byte (explained below). Therefore, instead of wasting a factor of 8 space posting bits, I would waste only a factor of 2 (half) space posting hex. It sounds like a lot, but it really wouldn't be that big a deal at all.
In fact, when you declare a boolean in Java:
boolean mathIsHard = true;
It technically only needs one bit to store this value, but it puts that value into an entire byte, effectively wasting 7 bits of data. Why? Because all the programming logic in Java is done in bytes at the smallest level for simplicity. My point here is that when technology is exponentially increasing it is often much smarter to sacrifice efficiency for organization. Being frugal only matters when your resources are limited, and technology is increasing so fast that, given certain applications, resources are relatively unlimited. Case in point, I can put 2.6 Gigs on the Steem blockchain. How would I ever go about doing this using only text and a 20 second refresh rate between posts? LOL.
You see? The limit on a single post is 16KB. At 20 seconds per post, it would take me 39 days of constant posting to put 2.6 gigs of info on the blockchain. I assume the bandwidth limit is per month, so it's literally impossible for me to spend all my bandwidth unless I use a bot army to do so.
Because I was already half way there, I just now figured out that each character on the Steem blockchain is only a single byte. I copy pasted 0123456789 ten times for 100 characters total, then i copy pasted that 10 times for 1000 characters total, then I copy pasted that 16 times for 16000 characters total. The next paste broke the limit. Each character on Steem is only one byte.
So my bandwidth would allow me to put 2.8 billion characters on the blockchain a month... pretty crazy amirite? If I were able to organize that free bandwidth information into a useful app I could create a product that was simple and part of an online network, but still fully protected by the robust security of the Steem blockchain. This is exactly what I aim to accomplish here.
However, I'm not going to be posting unreadable hex to the blockchain, I'm going to be posting straight up readable commands. I've already accomplished this back in the day when my Cards Against Humanity clone was working. @smartasscards.
Here are some example blockchain commands:
I rather like using the hashtag as a command because it gets it's own link on the Steem blockchain and turns colors, giving you the impression that it is actually doing something (because it is). However, JSON and XML might be smarter organization methods as programs start to scale up. We'll see.
Seriously though, buy more Steem. Steem is a blank slate without a single decentralized app on it. Once development progresses coins and bandwidth will be worth so much more. This place is an untapped goldmine.