summaryrefslogtreecommitdiff
path: root/080_blog/00040_Haskell/00065_Base64-Encoder
diff options
context:
space:
mode:
Diffstat (limited to '080_blog/00040_Haskell/00065_Base64-Encoder')
-rw-r--r--080_blog/00040_Haskell/00065_Base64-Encoder/base64.cast220
-rw-r--r--080_blog/00040_Haskell/00065_Base64-Encoder/index.md11
2 files changed, 74 insertions, 157 deletions
diff --git a/080_blog/00040_Haskell/00065_Base64-Encoder/base64.cast b/080_blog/00040_Haskell/00065_Base64-Encoder/base64.cast
index 54f3ab5..b32cd78 100644
--- a/080_blog/00040_Haskell/00065_Base64-Encoder/base64.cast
+++ b/080_blog/00040_Haskell/00065_Base64-Encoder/base64.cast
@@ -1,226 +1,146 @@
{
- "command": null,
- "width": 101,
- "title": null,
- "height": 6,
"env": {
- "SHELL": "/bin/bash",
- "TERM": "screen-256color"
+ "TERM": "screen-256color",
+ "SHELL": "/bin/bash"
},
+ "version": 1,
+ "command": null,
+ "title": null,
+ "width": 90,
+ "height": 7,
+ "duration": 26.498611,
"stdout": [
[
- 0.020042,
+ 0.018948,
"miguel@megaloman:~/git/haskell/base64$ "
],
[
- 0.972847,
- "cat /dev/urandom | pv | ./base64 > /dev/null "
+ 0.831467,
+ "cat /tmp/random.bin | pv | ./base64 > /dev/null "
],
[
- 0.43902,
- "\r\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[1Pecho \"Welcome to Base64 encoding\" | ./base64"
+ 0.269283,
+ "\r\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[17Pecho \"Hello Base64!\" | ./base64"
],
[
- 0.83889,
+ 1.242802,
"\r\n"
],
[
- 0.001251,
- "V2VsY29tZSB0byBCYXNlNjQgZW5jb2RpbmcK\r\n"
+ 0.002817,
+ "SGVsbG8gQmFzZTY0IQo=\r\n"
],
[
- 0.000356,
+ 0.000531,
"miguel@megaloman:~/git/haskell/base64$ "
],
[
- 1.151505,
- "echo \"Welcome to Base64 encoding\" | ./base64"
+ 0.827791,
+ "echo \"Hello Base64!\" | ./base64"
],
[
- 0.328933,
- "\r\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[Ccat /dev/urandom | pv | ./base64 > /dev/null "
+ 0.207417,
+ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\bcat /tmp/random.bin | pv | ./base64 > /dev/null "
],
[
- 0.833,
+ 0.963475,
"\r\n"
],
[
- 1.001665,
- " 253MiB 0:00:01 [ 253MiB/s] [ <=> ]\r"
- ],
- [
- 0.999837,
- " 500MiB 0:00:02 [ 247MiB/s] [ <=> ]\r"
- ],
- [
- 1.000048,
- " 753MiB 0:00:03 [ 252MiB/s] [ <=> ]\r"
- ],
- [
- 1.000117,
- "1001MiB 0:00:04 [ 247MiB/s] [ <=> ]\r"
- ],
- [
- 0.999649,
- "1.22GiB 0:00:05 [ 251MiB/s] [ <=> ]\r"
- ],
- [
- 1.000026,
- "1.47GiB 0:00:06 [ 250MiB/s] [ <=> ]\r"
- ],
- [
- 1.000236,
- "1.72GiB 0:00:07 [ 253MiB/s] [ <=> ]\r"
- ],
- [
- 1.000056,
- "1.96GiB 0:00:08 [ 252MiB/s] [ <=> ]\r"
- ],
- [
- 0.999645,
- " 2.2GiB 0:00:09 [ 244MiB/s] [ <=> ]\r"
- ],
- [
- 1.000274,
- "2.45GiB 0:00:10 [ 253MiB/s] [ <=> ]\r"
- ],
- [
- 0.999751,
- "2.69GiB 0:00:11 [ 244MiB/s] [ <=> ]\r"
+ 1.002914,
+ " 434MiB 0:00:01 [ 434MiB/s] [ <=> ]\r"
],
[
- 1.000191,
- "2.93GiB 0:00:12 [ 252MiB/s] [ <=> ]\r"
+ 0.99997,
+ " 876MiB 0:00:02 [ 441MiB/s] [ <=> ]\r"
],
[
- 0.999772,
- "3.18GiB 0:00:13 [ 248MiB/s] [ <=> ]\r"
+ 1.000022,
+ "1.28GiB 0:00:03 [ 439MiB/s] [ <=> ]\r"
],
[
- 1.000312,
- "3.43GiB 0:00:14 [ 257MiB/s] [ <=> ]\r"
+ 1.000032,
+ "1.73GiB 0:00:04 [ 455MiB/s] [ <=> ]\r"
],
[
- 0.999856,
- "3.68GiB 0:00:15 [ 254MiB/s] [ <=> ]\r"
- ],
- [
- 1.000239,
- "3.93GiB 0:00:16 [ 253MiB/s] [ <=> ]\r"
- ],
- [
- 0.99986,
- "4.17GiB 0:00:17 [ 248MiB/s] [ <=> ]\r"
- ],
- [
- 0.999739,
- " 4.4GiB 0:00:18 [ 242MiB/s] [ <=> ]\r"
- ],
- [
- 1.000023,
- "4.65GiB 0:00:19 [ 252MiB/s] [ <=> ]\r"
- ],
- [
- 1.000103,
- "4.89GiB 0:00:20 [ 245MiB/s] [ <=> ]\r"
- ],
- [
- 1.000106,
- "5.14GiB 0:00:21 [ 255MiB/s] [ <=> ]\r"
- ],
- [
- 1.000102,
- "5.38GiB 0:00:22 [ 246MiB/s] [ <=> ]\r"
- ],
- [
- 1.000042,
- "5.63GiB 0:00:23 [ 252MiB/s] [ <=> ]\r"
- ],
- [
- 0.999787,
- "5.87GiB 0:00:24 [ 250MiB/s] [ <=> ]\r"
- ],
- [
- 1.000079,
- "6.11GiB 0:00:25 [ 248MiB/s] [ <=> ]\r"
+ 0.999929,
+ "2.18GiB 0:00:05 [ 464MiB/s] [ <=> ]\r"
],
[
- 1.000035,
- "6.36GiB 0:00:26 [ 247MiB/s] [ <=> ]\r"
+ 0.999976,
+ "2.64GiB 0:00:06 [ 464MiB/s] [ <=> ]\r"
],
[
- 0.999929,
- " 6.6GiB 0:00:27 [ 250MiB/s] [ <=> ]\r"
+ 1.000019,
+ "3.09GiB 0:00:07 [ 466MiB/s] [ <=> ]\r"
],
[
- 0.999966,
- "6.84GiB 0:00:28 [ 244MiB/s] [ <=> ]\r"
+ 1.00003,
+ "3.55GiB 0:00:08 [ 467MiB/s] [ <=> ]\r"
],
[
- 1.000047,
- "7.09GiB 0:00:29 [ 252MiB/s] [ <=> ]\r"
+ 1.0,
+ "3.99GiB 0:00:09 [ 452MiB/s] [ <=> ]\r"
],
[
- 0.999829,
- "7.33GiB 0:00:30 [ 250MiB/s] [ <=> ]\r"
+ 0.999962,
+ "4.43GiB 0:00:10 [ 451MiB/s] [ <=> ]\r"
],
[
- 0.99996,
- "7.57GiB 0:00:31 [ 245MiB/s] [ <=> ]\r"
+ 1.000027,
+ "4.88GiB 0:00:11 [ 459MiB/s] [ <=> ]\r"
],
[
- 1.000063,
- "7.81GiB 0:00:32 [ 248MiB/s] [ <=> ]\r"
+ 1.000061,
+ "5.32GiB 0:00:12 [ 451MiB/s] [ <=> ]\r"
],
[
- 0.999947,
- "8.06GiB 0:00:33 [ 251MiB/s] [ <=> ]\r"
+ 0.999986,
+ "5.76GiB 0:00:13 [ 449MiB/s] [ <=> ]\r"
],
[
- 1.000249,
- " 8.3GiB 0:00:34 [ 246MiB/s] [ <=> ]\r"
+ 0.999944,
+ "6.19GiB 0:00:14 [ 441MiB/s] [ <=> ]\r"
],
[
- 1.000158,
- "8.55GiB 0:00:35 [ 253MiB/s] [ <=> ]\r"
+ 0.999991,
+ "6.64GiB 0:00:15 [ 453MiB/s] [ <=> ]\r"
],
[
- 0.999634,
- "8.79GiB 0:00:36 [ 254MiB/s] [ <=> ]\r"
+ 1.000027,
+ "7.07GiB 0:00:16 [ 442MiB/s] [ <=> ]\r"
],
[
- 1.000289,
- "9.04GiB 0:00:37 [ 251MiB/s] [ <=> ]\r"
+ 1.00001,
+ " 7.5GiB 0:00:17 [ 442MiB/s] [ <=> ]\r"
],
[
- 0.99977,
- "9.29GiB 0:00:38 [ 251MiB/s] [ <=> ]\r"
+ 1.000009,
+ "7.93GiB 0:00:18 [ 440MiB/s] [ <=> ]\r"
],
[
- 1.000013,
- "9.53GiB 0:00:39 [ 248MiB/s] [ <=> ]\r"
+ 0.999988,
+ "8.37GiB 0:00:19 [ 449MiB/s] [ <=> ]\r"
],
[
- 1.000045,
- "9.77GiB 0:00:40 [ 247MiB/s] [ <=> ]\r"
+ 1.000024,
+ "8.81GiB 0:00:20 [ 445MiB/s] [ <=> ]\r"
],
[
- 0.999859,
- " 10GiB 0:00:41 [ 248MiB/s] [ <=> ]\r"
+ 0.99992,
+ "9.26GiB 0:00:21 [ 461MiB/s] [ <=> ]\r"
],
[
- 0.760304,
- "^C\r\n"
+ 1.000016,
+ "9.71GiB 0:00:22 [ 461MiB/s] [ <=> ]\r"
],
[
- 0.000409,
- "\r\n"
+ 0.129892,
+ "9.77GiB 0:00:22 [ 451MiB/s] [ <=> ]\r\r\n"
],
[
- 0.000128,
+ 0.000604,
"miguel@megaloman:~/git/haskell/base64$ "
]
- ],
- "version": 1,
- "duration": 46.348438
+ ]
} \ No newline at end of file
diff --git a/080_blog/00040_Haskell/00065_Base64-Encoder/index.md b/080_blog/00040_Haskell/00065_Base64-Encoder/index.md
index 3fd87ee..cabf19e 100644
--- a/080_blog/00040_Haskell/00065_Base64-Encoder/index.md
+++ b/080_blog/00040_Haskell/00065_Base64-Encoder/index.md
@@ -1,15 +1,12 @@
Miguel's Base64 Encoder
=======================
February 19, 2018
-
Initially coded on a cold winter afternoon to fully understand **base64 encoding** and play with
-**Haskell**, which is always an indisputable pleasure.
-
-Coded in _big anger_, due to my friend Nick's fairy tales about saving his encrypted binary
-data in plain _ASCII_ configuration files, featuring strange letters and non-printable characters. :smile:
+**Haskell**, which is always an indisputable pleasure. Hacked together in _big anger_, due to my
+friend Nick's fairy tales about saving his encrypted binary data in plain _ASCII_
+configuration files,... featuring strange letters and non-printable characters. :smile:
-_EDIT_: After optimizing my naive implementation, the encoder now reaches speeds
-of around **240MB/s** on a single core of my _i7-4790K_.
+After optimizing quite a bit, the encoder performs around **460MB/s** on a single core of my _i7-4790K_.
<asciinema-player loop="1" preload="true" theme="solarized-dark" autoplay="true" src="base64.cast"></asciinema-player>