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.