Day 8 - Internet Protocol Suite (TCP/IP)

Description

Internet Protocol Suite, or famously known as TCP/IP, is a model of networking layering consists of 4 layers which is Application layer, Transport layer, Internet layer and Link layer. Each layer is represented with a protocol for data transmission. The most important layer is Transport layer and Internet layer as it consist of both TCP and IP protocol, which ensure data is sent and received successfully.

Application layer

This is the top most layer in Internet Protocol Suite. It is the layer where data were processed to sent and after receiving. Programs and applications can only access and exchange data in this layer. Examples of protocol belonged in this layer are HyperText Transfer Protocol (HTTP), File Transfer Protocol (FTP) and Simple Mail Transfer Protocol (SMTP).

Analogy: This is the place where you send or receive a pascal to or from oversea in post office.

[ Sender's Post Office ] [ Sorting Area ] → [ Sender's country van ] → [ Ships oversea] ↓
[ Receiver's Post Office ] [ Sorting Area ] ← [ Receiver's country van ] ← [ Ships oversea ]

Transport layer

This is the second layer in Internet Protocol Suite. Data from or to Application layer is processed here. Transport layer assign the destination for the data. When transport layer recieved a data, it will transport the data to correct application layer protocol. Examples of transport layer are Transmission Control Protocol (TCP) and User Datagram Protocol (UDP)

Analogy: This is where your pascal will be sorted and organized before shipping into a van to deliver it.

[ Sender's Post Office ] [ Sorting Area ] [ Sender's country van ] → [ Ships oversea] ↓
[ Receiver's Post Office ] [ Sorting Area ] [ Receiver's country van ] ← [ Ships oversea ]

Internet layer

The third layer of Internet Protocol Suite. It routes the data through network to it's destination. It also find for another route when the original route is having problem. Example of this layer is Internet Protocol (IP).

Analogy: This is where a van will deliver your pascal to the dock where ships will deliver the pascal oversea.

[ Sender's Post Office ] → [ Sorting Area ] [ Sender's country van ] [ Ships oversea] ↓
[ Receiver's Post Office ] ← [ Sorting Area ] [ Receiver's country van ] [ Ships oversea ]

Link layer

This is the lowest layer of Internet Protocol Suite. It is the layer where data transmit through the connection physically through wires. Example for this layer is ARP (Address Resolution Protocol) and Ethernet.

Analogy: This is the place where a ship will deliver your pascal oversea to another location.

[ Sender's Post Office ] → [ Sorting Area ] → [ Sender's country van ] [ Ships oversea]
[ Receiver's Post Office ] ← [ Sorting Area ] ← [ Receiver's country van ] [ Ships oversea ]

This article is referred from Wikipedia's Internet protocol suite article. (With a few sub-articles)

Day 7 - Esoteric programming language (esolang)

Description

Esoteric programming language serves little or no purposes for a coder. It is used as a challenge, debugging test, Prove of Concept (PoC) or even as a joke. The creators of esolang usually do not intent the language to be used on mainstream programming. Such language are popular among hackers and hobbyist.

Examples of esolang

Here are some well known esolang with Hello World sample:

Brainfuck:
Very well known esolang, it only uses 8 symbols to represent the code. The word "brain fuck" means the code is too complicated it exceeded one's  limit of understanding.
++++++++++[>+++++++>++++++++++>+++<<<-]>++.>+.+++++++
 ..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.

Chef:
Another well known esolang. It is a stack based language where program looks like a cooking recipe.
Hello World Souffle.

This recipe prints the immortal words "Hello world!", in a basically brute force way. It also makes a lot of food for one person.

Ingredients.
72 g haricot beans
101 eggs
108 g lard
111 cups oil
32 zucchinis
119 ml water
114 g red salmon
100 g dijon mustard
33 potatoes

Method.
Put potatoes into the mixing bowl. Put dijon mustard into the mixing bowl. Put lard into the mixing bowl. Put red salmon into the mixing bowl. Put oil into the mixing bowl. Put water into the mixing bowl. Put zucchinis into the mixing bowl. Put oil into the mixing bowl. Put lard into the mixing bowl. Put lard into the mixing bowl. Put eggs into the mixing bowl. Put haricot beans into the mixing bowl. Liquefy contents of the mixing bowl. Pour contents of the mixing bowl into the baking dish.

INTERCAL:
Short for Compiler Language With No Pronounceable Acronym, it is possibly the oldest esolang created.
DO ,1 <- #13
PLEASE DO ,1 SUB #1 <- #238
DO ,1 SUB #2 <- #108
DO ,1 SUB #3 <- #112
DO ,1 SUB #4 <- #0
DO ,1 SUB #5 <- #64
DO ,1 SUB #6 <- #194
DO ,1 SUB #7 <- #48
PLEASE DO ,1 SUB #8 <- #22
DO ,1 SUB #9 <- #248
DO ,1 SUB #10 <- #168
DO ,1 SUB #11 <- #24
DO ,1 SUB #12 <- #16
DO ,1 SUB #13 <- #162
PLEASE READ OUT ,1
PLEASE GIVE UP

LOLCODE:
LOLCODE is a language derived from an Internet phenomenon called lolcats.
HAI 1.2
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE

Piet:
This language uses 20 colours, ordered with 6-steps hue cycles and 3-step brightness cycles plus black and white. The language is named after a Dutch painter Piet Mondrain. 













This article is referred from Wikipedia's Esoteric programming language article.

Day 6 - Low, Mid and High level programming languages

Description

The level resembles the level of abstraction between the language and the machine code. The lower the level, the lesser the abstraction, thus making it harder for coder to understand and more looking like a machine code.

Low level programming language

This type of programming language provides little to no amount of abstraction. Most of the code are hard to understand and contains little meaning to the coder. This level doesn't require interpreter or compiler to handle the code. It uses assembler that runs the code directly on processor. A low level programming language can execute code very quickly and uses minimal amount of memory. Examples of the language in this level are Assembly and Machine Code.

Middle level programming language

This level of programming language provides more abstraction, while having fair amount of hard to understand machine code. It is easier to use, making a program simpler and more understandable. This level of language dealt with variables, arrays, boolean expressions and other abstract computer science concepts. Examples for this type of language are C, C++, and Java.

High level programming language

Highest level of programming language is very easy to understand as it offers high amount of abstraction. As a pay-off, high level programming language do not offer as much function as low level programming language. Examples of this type of language are Perl, Ruby, Python and Visual Basic.

Example rank of programming languages

Lowest: Machine code
Low: Assembly
Medium-low: C
Medium: C++
Medium-high: Java
High: Python
Highest: SQL

This article is referred from Wikipedia's Low-level programming language, High-level programming language and Very high-level programming language article.

Day 5 - GUID Partition Table (GPT)

GUID Partition Table

GPT is a new way to handle a file system that could possibly replace the older standard MBR. It should be used on an UEFI (Unified Extensible Firmware Interface) system, although some BIOS (Basic Input Output System) system do support GPT file system

Features

GPT superseded MBR with the following features:
- GPT breaks the MBR partition limit of 2 TiB to virtually unlimited 18 EB (~18,000,000 TB)
- GPT allows up to 128 primary partitions to be made
- A protective MBR sector will be located at sector 0, the most front of the partition to prevent MBR-only operating system mistaken the the GPT as unpartitioned and overwrite everything in the GPT
- It stores critical files on after the protective MBR and end of partition to increase redundancy
- It contains cyclic redundancy check (CRC) to check for corrupted files and attempt to repair it

Compatibility

Most newer versions of operating systems supports reading and writing file on a GPT file system.

Support both read/write and booting from GPT (BIOS and UEFI):
- Windows Vista and 7 (64 bit only), 8, 8.1 and 10 (32 bit and 64 bit)
- Windows Server 2003 (IA-64), 2008, 2008 R2, 2012 and 2016 (IA-32)

Complete support for GPT:
- Windows Server from 2003 to 2016 that uses IA-64 architecture
- OS X since 10.4 (Only for Intel Macintosh Computer)
- Linux, Fedora since version 8 and Ubuntu since version 8.4
- FreeBSD since version 7.0
- Solaris since Solaris 10

This article is referred from Wikipedia's GUID Partition Table article.

Day 4 - Master Boot Record (MBR)

Master Boot Record



MBR is an older way to handle file system. MBR exist since 1983, even before Microsoft Windows exist. MBR contains the information about how the file system be handled. It also holds the bootloader. Optionally it contains 32-bit disk time stamp and signature.

Limitations

MBR has a few limitation, which is the reason why MBR is superseded by GPT (GUID Partition Table). The limitations are:
- MBR can only handle maximum hard disk size of 2 TiB (~2.2 TB).
- MBR can only have maximum of 4 primary partition, or 3 primary partition and 1 extended partition. (The extended partition can contains unlimited amount of logical partitions, but logical partition cannot be booted.)

This article is referred from Wikipedia's Master Boot Record article.

Day 3 - Common video ports

Introduction
There are a lot of video output connectors, this post will briefly introduce 5 of the common ones and their respective features.

Composite video connector (Early 1940)

Composite video connector is specifically for television and it is always yellow in color. It is designed date back to 1940 along with the red and white audio connector. This connector uses analog to transmit signal, therefore it is very vulnerable to interference and the quality will degrade very quickly due to length of the connector. This connector can be found in older television and game consoles, although it is almost obsolete by superseded by  new HDMI and DisplayPort cable.

VGA connector (1987)

VGA is short for Video Graphics Array. It is 3-rows 15-pin DE-15 (D-sub) connector. It transmit signal using analog, therefore it is vulnerable to environmental inference and degrade with distance. This connector has a lock at both side to tighten the connection. Many monitors support VGA, as it is designed to connect to a CRT monitor. This cable is still usable even until today and some of the newer graphic card still supports VGA connector. It has a maximum resolution of 2048×1536@85Hz.

DVI connectors (1999)

DVI is short for Digital Visual Interface. It has a few types of connectors type, namely DVI-I, DVI-D and DVI-A. DVI-D and DVI-A both have single link and double link to choose from. There is also Mini-DVI and Micro-DVI but I won't talk about it here.
Digital version of these connector won't degrade much easier than analog ones. For a cable length up to 4.5 meters will work just fine with maximum resolution of 1980x1200 at single link and 2048x1536 at dual link. A DVI booster can be used to boost the signal across longer distance.

HDMI connectors (2002)

HDMI stands for High-Definition Multimedia Interface. This is a digital connector that exist in newer type of monitors and backward-compatible with DVI using a DVI to HDMI converter (Although no sound output can be made due to DVI can't transfer sound). HDMI transfer uncompressed video and audio from HDMI source. Initial HDMI version 1.0 managed to encode 1980x1200@60Hz but the latest 2.0 version (2013) managed to encode display up to 4096x2160@60Hz.

DisplayPort (2008)

DisplayPort is a better replacement for HDMI. The latest version is 1.4, which is only published recently on March 2016. The main difference between DisplayPort and HDMI is DisplayPort has a lock, which can be locked firmly on the port to prevent accidental fall off. DisplayPort can support resolution up to 7680x4320@60Hz, which is pretty ridiculous for now. 

This article is referred from Wikipedia's Composite Video, VGA Connector, Digital Visual Interface, HDMI and Display Port articles.

Day 2 - Scalable Link Interface (SLI)

Scalable Link Interface

Scalable Link Interface (SLI) is a nVidia brand name of technology combining 2 to 4 graphic cards to produce one single video output. 
Graphic cards will be setup in a master-slave mode, one card will be the master and others will work for the master card. For example, a 3 way SLI setup will have 3 cards. The first card will be the master and others will be slave. All cards will divide the workload accordingly and when the slave cards finished their processing, they will output the result to master card and master card will then output all the result to a projecting device.
To reduce the latency between master and slave cards, a SLI bridge is used to reduce the bandwidth constrain and able to send data between two cards directly. SLI will work without the bridge but performance for high-end cards could suffer due to not enough bandwidth.

AMD has similar technology called AMD CrossFireX.

Modes available 

There are a few modes to configure the SLI, two of which is Split Frame Rendering (SFR) and Alternating Frame Rendering (AFR).

SFR works by splitting the workload of a frame equally to each card. For example, a frame with clear sky and some building can be split by a 7 to 3 ratio, since rendering the sky doesn't require much more processing power than the buildings, some extra building workload will be given to the card that render the sky.

AFR on the other hand renders by dividing the frame need to render to each card. For example, to render 60 frames, 30 frames will render by the first card and another 30 frames will render by the second card.

SLI can also use to double the anti-aliasing (AA) performance by splitting the workload.

This article is referred from Wikipedia's Scalable Link Interface article.

Day 1 - Onion routing

Onion Routing

Onion routing is a method of transferring a message through computer networks anonymously. The anonymity is done by encapsulating the message by layers of encryptions, just like layers on onion. To decrypt the onion message, the sender pick a series of nodes to route the onion. This series of nodes is called a chain, the first node is called entry node and the last node is called exit node.
When the sender send the onion message to the entry node, the entry node will only decrypt the onion message, pealing off the first layer of encryption to reveal the next destination. It will not know whether the previous node is actually the sender, or just one of the node in the chain, therefore it would not be able to know where the location of sender, but only the location for the next node. After the first layer of node had been decrypted, the onion message will send to the second node in the chain to decrypt, and send to the third node in the chain... until the exit node, which reveal the message. The message will then send to the receiver by the exit node.

Disadvantages 

Even this technique of encryption will increase the anonymity of the sender, hiding the origin of the sender, some ISP can trace and log the connection between two computers/node. The information such as the time the connection occur and the amount of data sent can be seen by ISP. For example, sender send an onion message on 0 seconds and the size is 50 kilobytes. ISP will log the connection between the sender and the entry node. Then, the entry node receives, decrypt and send the message with the size exactly 50 kilobytes to the next node. A few second later, the node received the exact same 50 kilobytes of the file... By this, ISP can determine the connection from entry node to exit node.

Secondly, the exit node can be compromised to see the raw message. The job of the exit node is to reveal the last encryption and send the raw message to the receiver. Therefore, the exit node could be compromised and crackers can extract the raw message from it, possibly containing passwords, personal identity and bank accounts.

This article is referred from Wikipedia's Onion routing article.