## Golang 1.7

Golang 1.7 主打更小的 binary size：「Smaller Go 1.7 binaries」：

Typical programs, ranging from tiny toys to large production programs, are about 30% smaller when built with Go 1.7. ## 0.1 + 0.2 = 0.30000000000000004

Your language isn't broken, it's doing floating point math. Computers can only natively store integers, so they need some way of representing decimal numbers. This representation comes with some degree of inaccuracy. That's why, more often than not, .1 + .2 != .3.

It's actually pretty simple. When you have a base 10 system (like ours), it can only express fractions that use a prime factor of the base. The prime factors of 10 are 2 and 5. So 1/2, 1/4, 1/5, 1/8, and 1/10 can all be expressed cleanly because the denominators all use prime factors of 10. In contrast, 1/3, 1/6, and 1/7 are all repeating decimals because their denominators use a prime factor of 3 or 7. In binary (or base 2), the only prime factor is 2. So you can only express fractions cleanly which only contain 2 as a prime factor. In binary, 1/2, 1/4, 1/8 would all be expressed cleanly as decimals. While, 1/5 or 1/10 would be repeating decimals. So 0.1 and 0.2 (1/10 and 1/5) while clean decimals in a base 10 system, are repeating decimals in the base 2 system the computer is operating in. When you do math on these repeating decimals, you end up with leftovers which carry over when you convert the computer's base 2 (binary) number into a more human readable base 10 number.

## Command Line 下把 Hex 轉成 Base64...

xxd 預設是把 binary 轉成 hex，但你可以用 `-r` 參數變成反向，也就是 hex 轉 binary。

`echo 0123456789ABCDEF | xxd -r -p | base64`

`echo 0123456789ABCDEF | xxd -r -p | openssl enc -base64`

## 將 latin1 的表格轉換成 UTF-8 表格...

Percona 的人寫了一篇「utf8 data on latin1 tables: converting to utf8 without downtime or double encoding」，告訴你怎麼將 latin1 的 TEXT 欄位轉成 UTF-8，文章內有提到利用 BLOB 轉。