aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitja Felicijan <mitja.felicijan@gmail.com>2021-10-07 21:13:14 +0200
committerMitja Felicijan <mitja.felicijan@gmail.com>2021-10-07 21:13:14 +0200
commit7f631c493d04ba96e36975365532e2172fec367e (patch)
treefc0c0f81901f77f44c572536b7388babaf2d98ee
parent994c67d522b413fb3184376955a43d4a4f50d716 (diff)
downloadmitjafelicijan.com-7f631c493d04ba96e36975365532e2172fec367e.tar.gz
Added dithered images
-rw-r--r--Makefile1
-rw-r--r--assets/dna-sequence/chart-encoding-speed.png.dith.gifbin0 -> 3758 bytes
-rw-r--r--assets/dna-sequence/chart-file-sizes.png.dith.gifbin0 -> 3701 bytes
-rw-r--r--assets/dna-sequence/dna-basics.jpg.dith.gifbin0 -> 10044 bytes
-rw-r--r--assets/dna-sequence/quote.png.dith.gifbin0 -> 2336 bytes
-rw-r--r--assets/dna-sequence/sample-binary-file.png.dith.gifbin0 -> 9300 bytes
-rw-r--r--assets/dna-sequence/sample.png.dith.gifbin0 -> 60908 bytes
-rw-r--r--assets/do-fuse/fuse-droplets.png.dith.gifbin0 -> 4193 bytes
-rw-r--r--assets/do-fuse/fuse-spaces.png.dith.gifbin0 -> 3327 bytes
-rw-r--r--assets/dropbox-sync/dropbox-spaces.png.dith.gifbin0 -> 4074 bytes
-rw-r--r--assets/esp8366-micropython/boards.jpg.dith.gifbin0 -> 26238 bytes
-rw-r--r--assets/general/favicon.png.dith.gifbin0 -> 332 bytes
-rw-r--r--assets/goaccess/goaccess-dash-html.png.dith.gifbin0 -> 4783 bytes
-rw-r--r--assets/goaccess/goaccess-dash-term.png.dith.gifbin0 -> 7606 bytes
-rw-r--r--assets/iot-application/iot-app-output.png.dith.gifbin0 -> 6198 bytes
-rw-r--r--assets/iot-application/iot-rest-example.png.dith.gifbin0 -> 3620 bytes
-rw-r--r--assets/iot-application/iot-sqlite-db.png.dith.gifbin0 -> 14622 bytes
-rw-r--r--assets/iot-application/kcachegrind.png.dith.gifbin0 -> 4476 bytes
-rw-r--r--assets/iot-application/profiling-viewer.png.dith.gifbin0 -> 11283 bytes
-rw-r--r--assets/iot-application/snakeviz.png.dith.gifbin0 -> 4951 bytes
-rw-r--r--assets/profile-bind-error/error.jpg.dith.gifbin0 -> 11794 bytes
-rw-r--r--assets/python-profiling/kcachegrind.png.dith.gifbin0 -> 4476 bytes
-rw-r--r--assets/python-profiling/profiling-viewer.png.dith.gifbin0 -> 11283 bytes
-rw-r--r--assets/python-profiling/snakeviz.png.dith.gifbin0 -> 4951 bytes
-rw-r--r--assets/sentiment-analysis/guardian-sa-title-desc-relationship.png.dith.gifbin0 -> 4695 bytes
-rw-r--r--assets/simple-pubsub-server/caniuse.png.dith.gifbin0 -> 10170 bytes
-rw-r--r--assets/simple-pubsub-server/chrome-debugging.png.dith.gifbin0 -> 15615 bytes
-rw-r--r--assets/simple-pubsub-server/pubsub-overview.png.dith.gifbin0 -> 5116 bytes
-rw-r--r--assets/world-clock/hardware.jpg.dith.gifbin0 -> 11351 bytes
-rw-r--r--assets/world-clock/world-clock.jpg.dith.gifbin0 -> 7940 bytes
-rw-r--r--dither-images.sh6
-rw-r--r--posts/2017-04-21-profiling-python-web-applications-with-visual-tools.md6
-rw-r--r--posts/2017-08-11-simple-iot-application.md6
-rw-r--r--posts/2018-01-16-using-digitalocean-spaces-object-storage-with-fuse.md4
-rw-r--r--posts/2019-01-03-encoding-binary-data-into-dna-sequence.md6
-rw-r--r--posts/2019-10-19-using-sentiment-analysis-for-click-bait-detection-in-rss-feeds.md2
-rw-r--r--posts/2020-03-22-simple-sse-based-pubsub-server.md6
-rw-r--r--posts/2020-09-06-esp-and-micropython.md2
-rw-r--r--posts/2020-09-08-bind-warning-on-login.md2
-rw-r--r--posts/2021-01-24-replacing-dropbox-with-s3.md2
-rw-r--r--posts/2021-01-25-goaccess.md4
-rw-r--r--posts/2021-06-26-simple-world-clock.md4
-rwxr-xr-xtemplate/_meta.html4
-rwxr-xr-xtemplate/script.js16
-rwxr-xr-xtemplate/style.css1
45 files changed, 48 insertions, 24 deletions
diff --git a/Makefile b/Makefile
index d93812a..eade890 100644
--- a/Makefile
+++ b/Makefile
@@ -16,6 +16,7 @@ dev:
16 alternator --watch 16 alternator --watch
17 17
18build: 18build:
19 bash dither-images.sh
19 mkdir -p public 20 mkdir -p public
20 openring -l 165 -n 4 -p 1 \ 21 openring -l 165 -n 4 -p 1 \
21 -s https://cronokirby.com/posts/index.xml \ 22 -s https://cronokirby.com/posts/index.xml \
diff --git a/assets/dna-sequence/chart-encoding-speed.png.dith.gif b/assets/dna-sequence/chart-encoding-speed.png.dith.gif
new file mode 100644
index 0000000..97cfaa9
--- /dev/null
+++ b/assets/dna-sequence/chart-encoding-speed.png.dith.gif
Binary files differ
diff --git a/assets/dna-sequence/chart-file-sizes.png.dith.gif b/assets/dna-sequence/chart-file-sizes.png.dith.gif
new file mode 100644
index 0000000..4074890
--- /dev/null
+++ b/assets/dna-sequence/chart-file-sizes.png.dith.gif
Binary files differ
diff --git a/assets/dna-sequence/dna-basics.jpg.dith.gif b/assets/dna-sequence/dna-basics.jpg.dith.gif
new file mode 100644
index 0000000..b33745f
--- /dev/null
+++ b/assets/dna-sequence/dna-basics.jpg.dith.gif
Binary files differ
diff --git a/assets/dna-sequence/quote.png.dith.gif b/assets/dna-sequence/quote.png.dith.gif
new file mode 100644
index 0000000..11ead55
--- /dev/null
+++ b/assets/dna-sequence/quote.png.dith.gif
Binary files differ
diff --git a/assets/dna-sequence/sample-binary-file.png.dith.gif b/assets/dna-sequence/sample-binary-file.png.dith.gif
new file mode 100644
index 0000000..8d35c68
--- /dev/null
+++ b/assets/dna-sequence/sample-binary-file.png.dith.gif
Binary files differ
diff --git a/assets/dna-sequence/sample.png.dith.gif b/assets/dna-sequence/sample.png.dith.gif
new file mode 100644
index 0000000..269b77d
--- /dev/null
+++ b/assets/dna-sequence/sample.png.dith.gif
Binary files differ
diff --git a/assets/do-fuse/fuse-droplets.png.dith.gif b/assets/do-fuse/fuse-droplets.png.dith.gif
new file mode 100644
index 0000000..62d8ba2
--- /dev/null
+++ b/assets/do-fuse/fuse-droplets.png.dith.gif
Binary files differ
diff --git a/assets/do-fuse/fuse-spaces.png.dith.gif b/assets/do-fuse/fuse-spaces.png.dith.gif
new file mode 100644
index 0000000..1f7786e
--- /dev/null
+++ b/assets/do-fuse/fuse-spaces.png.dith.gif
Binary files differ
diff --git a/assets/dropbox-sync/dropbox-spaces.png.dith.gif b/assets/dropbox-sync/dropbox-spaces.png.dith.gif
new file mode 100644
index 0000000..2fb9245
--- /dev/null
+++ b/assets/dropbox-sync/dropbox-spaces.png.dith.gif
Binary files differ
diff --git a/assets/esp8366-micropython/boards.jpg.dith.gif b/assets/esp8366-micropython/boards.jpg.dith.gif
new file mode 100644
index 0000000..36f67ef
--- /dev/null
+++ b/assets/esp8366-micropython/boards.jpg.dith.gif
Binary files differ
diff --git a/assets/general/favicon.png.dith.gif b/assets/general/favicon.png.dith.gif
new file mode 100644
index 0000000..740f1b7
--- /dev/null
+++ b/assets/general/favicon.png.dith.gif
Binary files differ
diff --git a/assets/goaccess/goaccess-dash-html.png.dith.gif b/assets/goaccess/goaccess-dash-html.png.dith.gif
new file mode 100644
index 0000000..ea6a26a
--- /dev/null
+++ b/assets/goaccess/goaccess-dash-html.png.dith.gif
Binary files differ
diff --git a/assets/goaccess/goaccess-dash-term.png.dith.gif b/assets/goaccess/goaccess-dash-term.png.dith.gif
new file mode 100644
index 0000000..bc26010
--- /dev/null
+++ b/assets/goaccess/goaccess-dash-term.png.dith.gif
Binary files differ
diff --git a/assets/iot-application/iot-app-output.png.dith.gif b/assets/iot-application/iot-app-output.png.dith.gif
new file mode 100644
index 0000000..02b3762
--- /dev/null
+++ b/assets/iot-application/iot-app-output.png.dith.gif
Binary files differ
diff --git a/assets/iot-application/iot-rest-example.png.dith.gif b/assets/iot-application/iot-rest-example.png.dith.gif
new file mode 100644
index 0000000..cb1d122
--- /dev/null
+++ b/assets/iot-application/iot-rest-example.png.dith.gif
Binary files differ
diff --git a/assets/iot-application/iot-sqlite-db.png.dith.gif b/assets/iot-application/iot-sqlite-db.png.dith.gif
new file mode 100644
index 0000000..4c272f1
--- /dev/null
+++ b/assets/iot-application/iot-sqlite-db.png.dith.gif
Binary files differ
diff --git a/assets/iot-application/kcachegrind.png.dith.gif b/assets/iot-application/kcachegrind.png.dith.gif
new file mode 100644
index 0000000..50d6473
--- /dev/null
+++ b/assets/iot-application/kcachegrind.png.dith.gif
Binary files differ
diff --git a/assets/iot-application/profiling-viewer.png.dith.gif b/assets/iot-application/profiling-viewer.png.dith.gif
new file mode 100644
index 0000000..0023947
--- /dev/null
+++ b/assets/iot-application/profiling-viewer.png.dith.gif
Binary files differ
diff --git a/assets/iot-application/snakeviz.png.dith.gif b/assets/iot-application/snakeviz.png.dith.gif
new file mode 100644
index 0000000..7e25d0f
--- /dev/null
+++ b/assets/iot-application/snakeviz.png.dith.gif
Binary files differ
diff --git a/assets/profile-bind-error/error.jpg.dith.gif b/assets/profile-bind-error/error.jpg.dith.gif
new file mode 100644
index 0000000..4cc36e5
--- /dev/null
+++ b/assets/profile-bind-error/error.jpg.dith.gif
Binary files differ
diff --git a/assets/python-profiling/kcachegrind.png.dith.gif b/assets/python-profiling/kcachegrind.png.dith.gif
new file mode 100644
index 0000000..50d6473
--- /dev/null
+++ b/assets/python-profiling/kcachegrind.png.dith.gif
Binary files differ
diff --git a/assets/python-profiling/profiling-viewer.png.dith.gif b/assets/python-profiling/profiling-viewer.png.dith.gif
new file mode 100644
index 0000000..0023947
--- /dev/null
+++ b/assets/python-profiling/profiling-viewer.png.dith.gif
Binary files differ
diff --git a/assets/python-profiling/snakeviz.png.dith.gif b/assets/python-profiling/snakeviz.png.dith.gif
new file mode 100644
index 0000000..7e25d0f
--- /dev/null
+++ b/assets/python-profiling/snakeviz.png.dith.gif
Binary files differ
diff --git a/assets/sentiment-analysis/guardian-sa-title-desc-relationship.png.dith.gif b/assets/sentiment-analysis/guardian-sa-title-desc-relationship.png.dith.gif
new file mode 100644
index 0000000..cb7644c
--- /dev/null
+++ b/assets/sentiment-analysis/guardian-sa-title-desc-relationship.png.dith.gif
Binary files differ
diff --git a/assets/simple-pubsub-server/caniuse.png.dith.gif b/assets/simple-pubsub-server/caniuse.png.dith.gif
new file mode 100644
index 0000000..204c156
--- /dev/null
+++ b/assets/simple-pubsub-server/caniuse.png.dith.gif
Binary files differ
diff --git a/assets/simple-pubsub-server/chrome-debugging.png.dith.gif b/assets/simple-pubsub-server/chrome-debugging.png.dith.gif
new file mode 100644
index 0000000..898a6d0
--- /dev/null
+++ b/assets/simple-pubsub-server/chrome-debugging.png.dith.gif
Binary files differ
diff --git a/assets/simple-pubsub-server/pubsub-overview.png.dith.gif b/assets/simple-pubsub-server/pubsub-overview.png.dith.gif
new file mode 100644
index 0000000..c642d96
--- /dev/null
+++ b/assets/simple-pubsub-server/pubsub-overview.png.dith.gif
Binary files differ
diff --git a/assets/world-clock/hardware.jpg.dith.gif b/assets/world-clock/hardware.jpg.dith.gif
new file mode 100644
index 0000000..bcbb428
--- /dev/null
+++ b/assets/world-clock/hardware.jpg.dith.gif
Binary files differ
diff --git a/assets/world-clock/world-clock.jpg.dith.gif b/assets/world-clock/world-clock.jpg.dith.gif
new file mode 100644
index 0000000..69cec9d
--- /dev/null
+++ b/assets/world-clock/world-clock.jpg.dith.gif
Binary files differ
diff --git a/dither-images.sh b/dither-images.sh
new file mode 100644
index 0000000..8852ce5
--- /dev/null
+++ b/dither-images.sh
@@ -0,0 +1,6 @@
1cd assets/
2find . -type f \( -name "*.png" -o -name "*.jpg" \) | while read fname; do
3 echo "$fname"
4 convert "$fname" -type Grayscale -ordered-dither 2x2 "$fname.dith.gif"
5done
6
diff --git a/posts/2017-04-21-profiling-python-web-applications-with-visual-tools.md b/posts/2017-04-21-profiling-python-web-applications-with-visual-tools.md
index f2d4190..9a0540b 100644
--- a/posts/2017-04-21-profiling-python-web-applications-with-visual-tools.md
+++ b/posts/2017-04-21-profiling-python-web-applications-with-visual-tools.md
@@ -18,7 +18,7 @@ Before we begin there are some requirements. We will need to:
18 18
19If you are using MacOS you should check out [Profiling Viewer](http://www.profilingviewer.com/) or [MacCallGrind](http://www.maccallgrind.com/). 19If you are using MacOS you should check out [Profiling Viewer](http://www.profilingviewer.com/) or [MacCallGrind](http://www.maccallgrind.com/).
20 20
21![KCachegrind](/assets/python-profiling/kcachegrind.png) 21![KCachegrind](/assets/python-profiling/kcachegrind.png.dith.gif)
22 22
23We will be dividing this post into two main categories: 23We will be dividing this post into two main categories:
24 24
@@ -137,7 +137,7 @@ $ pyprof2calltree -i awesome_random_number.prof
137 137
138This file can be opened with visualizing tools listed above. In this case we will be using Profilling Viewer under MacOS. You can open image in new tab. As you can see from this example there is hierarchy of execution order of your code. 138This file can be opened with visualizing tools listed above. In this case we will be using Profilling Viewer under MacOS. You can open image in new tab. As you can see from this example there is hierarchy of execution order of your code.
139 139
140![Profilling Viewer](/assets/python-profiling/profiling-viewer.png) 140![Profilling Viewer](/assets/python-profiling/profiling-viewer.png.dith.gif)
141 141
142> Make sure you convert output of the cProfile output every time you want to refresh and take a look at your possible optimizations because cProfile updates .prof file every time browser hits the function. 142> Make sure you convert output of the cProfile output every time you want to refresh and take a look at your possible optimizations because cProfile updates .prof file every time browser hits the function.
143 143
@@ -160,7 +160,7 @@ $ snakeviz awesome_random_number.prof
160# shows visualized profile 160# shows visualized profile
161``` 161```
162 162
163![SnakeViz](/assets/python-profiling/snakeviz.png) 163![SnakeViz](/assets/python-profiling/snakeviz.png.dith.gif)
164 164
165Reddit user [ccharles](https://www.reddit.com/user/ccharles) suggested a better way for installing pip software by targeting user level instead of using sudo. 165Reddit user [ccharles](https://www.reddit.com/user/ccharles) suggested a better way for installing pip software by targeting user level instead of using sudo.
166 166
diff --git a/posts/2017-08-11-simple-iot-application.md b/posts/2017-08-11-simple-iot-application.md
index 0c90f43..ff8cf9d 100644
--- a/posts/2017-08-11-simple-iot-application.md
+++ b/posts/2017-08-11-simple-iot-application.md
@@ -150,11 +150,11 @@ To run this simply go to folder containing python file and run ```python webapp.
150 150
151After testing the service with Restlet Client you should be able to view your data in a database file ```data.db```. 151After testing the service with Restlet Client you should be able to view your data in a database file ```data.db```.
152 152
153![REST settings example](/assets/iot-application/iot-rest-example.png) 153![REST settings example](/assets/iot-application/iot-rest-example.png.dith.gif)
154 154
155You can also check the contents of new database file by using desktop client for SQLite → [DB Browser for SQLite](http://sqlitebrowser.org/). 155You can also check the contents of new database file by using desktop client for SQLite → [DB Browser for SQLite](http://sqlitebrowser.org/).
156 156
157![SQLite database example](/assets/iot-application/iot-sqlite-db.png) 157![SQLite database example](/assets/iot-application/iot-sqlite-db.png.dith.gif)
158 158
159Table structure is as simple as it can be. We have ts (timestamp) and value (value from Arduino). As you can see timestamp is generated on API side. If you would happen to have atomic clock on Arduino it would be then better to generate and send timestamp with the value. This would be particularity useful if we would be collecting sensor data at a higher frequency and then sending this data in bulk to API. 159Table structure is as simple as it can be. We have ts (timestamp) and value (value from Arduino). As you can see timestamp is generated on API side. If you would happen to have atomic clock on Arduino it would be then better to generate and send timestamp with the value. This would be particularity useful if we would be collecting sensor data at a higher frequency and then sending this data in bulk to API.
160 160
@@ -471,7 +471,7 @@ If everything goes well you should be seeing new data-points rendered on chart e
471 471
472If you navigate to ```http://0.0.0.0:5000``` you should see rendered chart as shown on picture below. 472If you navigate to ```http://0.0.0.0:5000``` you should see rendered chart as shown on picture below.
473 473
474![Application output](/assets/iot-application/iot-app-output.png) 474![Application output](/assets/iot-application/iot-app-output.png.dith.gif)
475 475
476Complete application with all the code is available for [download](/assets/iot-application/simple-iot-application.zip). 476Complete application with all the code is available for [download](/assets/iot-application/simple-iot-application.zip).
477 477
diff --git a/posts/2018-01-16-using-digitalocean-spaces-object-storage-with-fuse.md b/posts/2018-01-16-using-digitalocean-spaces-object-storage-with-fuse.md
index 9b75ac7..5293576 100644
--- a/posts/2018-01-16-using-digitalocean-spaces-object-storage-with-fuse.md
+++ b/posts/2018-01-16-using-digitalocean-spaces-object-storage-with-fuse.md
@@ -28,13 +28,13 @@ To make this work you will need DigitalOcean account. If you don't have one you
28 28
29Instuctions on how to use SSH keys and how to setup them are available in article [How To Use SSH Keys with DigitalOcean Droplets](https://www.digitalocean.com/community/tutorials/how-to-use-ssh-keys-with-digitalocean-droplets). 29Instuctions on how to use SSH keys and how to setup them are available in article [How To Use SSH Keys with DigitalOcean Droplets](https://www.digitalocean.com/community/tutorials/how-to-use-ssh-keys-with-digitalocean-droplets).
30 30
31![DigitalOcean Droplets](/assets/do-fuse/fuse-droplets.png) 31![DigitalOcean Droplets](/assets/do-fuse/fuse-droplets.png.dith.gif)
32 32
33After we created Droplet it's time to create new Space. This is done by clicking on a button [Create](https://cloud.digitalocean.com/spaces/new) (right top corner) and selecting Spaces. Choose pronounceable ```Unique name``` because we will use it in examples below. You can either choose Private or Public, it doesn't matter in our case. And you can always change that in the future. 33After we created Droplet it's time to create new Space. This is done by clicking on a button [Create](https://cloud.digitalocean.com/spaces/new) (right top corner) and selecting Spaces. Choose pronounceable ```Unique name``` because we will use it in examples below. You can either choose Private or Public, it doesn't matter in our case. And you can always change that in the future.
34 34
35When you have created new Space we should [generate Access key](https://cloud.digitalocean.com/settings/api/tokens). This link will guide to the page when you can generate this key. After you create new one, please save provided Key and Secret because Secret will not be shown again. 35When you have created new Space we should [generate Access key](https://cloud.digitalocean.com/settings/api/tokens). This link will guide to the page when you can generate this key. After you create new one, please save provided Key and Secret because Secret will not be shown again.
36 36
37![DigitalOcean Spaces](/assets/do-fuse/fuse-spaces.png) 37![DigitalOcean Spaces](/assets/do-fuse/fuse-spaces.png.dith.gif)
38 38
39Now that we have new Space and Access key we should SSH into our machine. 39Now that we have new Space and Access key we should SSH into our machine.
40 40
diff --git a/posts/2019-01-03-encoding-binary-data-into-dna-sequence.md b/posts/2019-01-03-encoding-binary-data-into-dna-sequence.md
index b743017..ea2bec8 100644
--- a/posts/2019-01-03-encoding-binary-data-into-dna-sequence.md
+++ b/posts/2019-01-03-encoding-binary-data-into-dna-sequence.md
@@ -83,7 +83,7 @@ Deoxyribonucleic acid, a self-replicating material which is **present in nearly
83 83
84The nucleotide in DNA consists of a sugar (deoxyribose), one of four bases (cytosine (C), thymine (T), adenine (A), guanine (G)), and a phosphate. Cytosine and thymine are pyrimidine bases, while adenine and guanine are purine bases. The sugar and the base together are called a nucleoside. 84The nucleotide in DNA consists of a sugar (deoxyribose), one of four bases (cytosine (C), thymine (T), adenine (A), guanine (G)), and a phosphate. Cytosine and thymine are pyrimidine bases, while adenine and guanine are purine bases. The sugar and the base together are called a nucleoside.
85 85
86![DNA](/assets/dna-sequence/dna-basics.jpg#center) 86![DNA](/assets/dna-sequence/dna-basics.jpg.dith.gif)
87 87
88*DNA (a) forms a double stranded helix, and (b) adenine pairs with thymine and cytosine pairs with guanine. (credit a: modification of work by Jerome Walker, Dennis Myts)* 88*DNA (a) forms a double stranded helix, and (b) adenine pairs with thymine and cytosine pairs with guanine. (credit a: modification of work by Jerome Walker, Dennis Myts)*
89 89
@@ -248,7 +248,7 @@ Then we encode FASTA file from previous operation to encode this data into PNG.
248 248
249After encoding into PNG format this file looks like this. 249After encoding into PNG format this file looks like this.
250 250
251![Encoded Quote in PNG format](/assets/dna-sequence/quote.png) 251![Encoded Quote in PNG format](/assets/dna-sequence/quote.png.dith.gif)
252 252
253The larger the input stream is the larger the PNG file would be. 253The larger the input stream is the larger the PNG file would be.
254 254
@@ -315,7 +315,7 @@ dd if=<(openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=
315 315
316Our freshly generated 1KB file looks something like this (its full of garbage data as intended). 316Our freshly generated 1KB file looks something like this (its full of garbage data as intended).
317 317
318![Sample binary file 1KB](/assets/dna-sequence/sample-binary-file.png) 318![Sample binary file 1KB](/assets/dna-sequence/sample-binary-file.png.dith.gif)
319 319
320We create following binary files: 320We create following binary files:
321- 1KB.bin 321- 1KB.bin
diff --git a/posts/2019-10-19-using-sentiment-analysis-for-click-bait-detection-in-rss-feeds.md b/posts/2019-10-19-using-sentiment-analysis-for-click-bait-detection-in-rss-feeds.md
index c74501a..088b431 100644
--- a/posts/2019-10-19-using-sentiment-analysis-for-click-bait-detection-in-rss-feeds.md
+++ b/posts/2019-10-19-using-sentiment-analysis-for-click-bait-detection-in-rss-feeds.md
@@ -74,7 +74,7 @@ plt.show()
742. Rule-based approach may not be the best way of doing this. By using deep learning we would be able to get better insights. 742. Rule-based approach may not be the best way of doing this. By using deep learning we would be able to get better insights.
753. **Next step would be to** periodically fetch RSS items and store them over a longer period of time and then perform analysis again and use either machine learning or deep learning on top of it. 753. **Next step would be to** periodically fetch RSS items and store them over a longer period of time and then perform analysis again and use either machine learning or deep learning on top of it.
76 76
77![Relationship between title and description](/assets/sentiment-analysis/guardian-sa-title-desc-relationship.png) 77![Relationship between title and description](/assets/sentiment-analysis/guardian-sa-title-desc-relationship.png.dith.gif)
78 78
79Figure above displays difference between title and description sentiment for specific RSS feed item. 1 means positive and -1 means negative sentiment. 79Figure above displays difference between title and description sentiment for specific RSS feed item. 1 means positive and -1 means negative sentiment.
80 80
diff --git a/posts/2020-03-22-simple-sse-based-pubsub-server.md b/posts/2020-03-22-simple-sse-based-pubsub-server.md
index 4256aed..4db3a57 100644
--- a/posts/2020-03-22-simple-sse-based-pubsub-server.md
+++ b/posts/2020-03-22-simple-sse-based-pubsub-server.md
@@ -23,7 +23,7 @@ Publisher Subscriber model is nothing new and there are many amazing solutions o
23 23
24The easiest way to explain this is with diagram bellow. Basic function is simple. We have subscribers that receive messages, and we have publishers that create and post messages. Similar model is also well know pattern that works on a premise of consumers and producers, and they take similar roles. 24The easiest way to explain this is with diagram bellow. Basic function is simple. We have subscribers that receive messages, and we have publishers that create and post messages. Similar model is also well know pattern that works on a premise of consumers and producers, and they take similar roles.
25 25
26![How PubSub works](/assets/simple-pubsub-server/pubsub-overview.png) 26![How PubSub works](/assets/simple-pubsub-server/pubsub-overview.png.dith.gif)
27 27
28**These are some naive characteristics we want to achieve:** 28**These are some naive characteristics we want to achieve:**
29 29
@@ -49,7 +49,7 @@ Read more about it on [official specification page](https://html.spec.whatwg.org
49 49
50### Current browser support 50### Current browser support
51 51
52![Browser support](../assets/simple-pubsub-server/caniuse.png) 52![Browser support](../assets/simple-pubsub-server/caniuse.png.dith.gif)
53 53
54Check [https://caniuse.com/#feat=eventsource](https://caniuse.com/#feat=eventsource) for latest information about browser support. 54Check [https://caniuse.com/#feat=eventsource](https://caniuse.com/#feat=eventsource) for latest information about browser support.
55 55
@@ -107,7 +107,7 @@ Google Chrome provides build-in debugging and exploration tool for [Server-Sent
107 107
108> You can debug only client side events that get received and not the server ones. For debugging server events add `console.log` to `server.js` code and print out events. 108> You can debug only client side events that get received and not the server ones. For debugging server events add `console.log` to `server.js` code and print out events.
109 109
110![Google Chrome Developer Tools EventStream](../assets/simple-pubsub-server/chrome-debugging.png) 110![Google Chrome Developer Tools EventStream](../assets/simple-pubsub-server/chrome-debugging.png.dith.gif)
111 111
112## Server implementation 112## Server implementation
113 113
diff --git a/posts/2020-09-06-esp-and-micropython.md b/posts/2020-09-06-esp-and-micropython.md
index a0a3b93..730ca7e 100644
--- a/posts/2020-09-06-esp-and-micropython.md
+++ b/posts/2020-09-06-esp-and-micropython.md
@@ -25,7 +25,7 @@ A while ago I bought some [ESP8266](https://www.espressif.com/en/products/socs/e
25 25
26For my project, I used [ESP32](https://www.espressif.com/en/products/socs/esp32) but I could easily choose [ESP8266](https://www.espressif.com/en/products/socs/esp8266). This guide contains which tools I use and how I prepared my workspace to code for [ESP8266](https://www.espressif.com/en/products/socs/esp8266). 26For my project, I used [ESP32](https://www.espressif.com/en/products/socs/esp32) but I could easily choose [ESP8266](https://www.espressif.com/en/products/socs/esp8266). This guide contains which tools I use and how I prepared my workspace to code for [ESP8266](https://www.espressif.com/en/products/socs/esp8266).
27 27
28![ESP8266 and ESP32 boards](/assets/esp8366-micropython/boards.jpg) 28![ESP8266 and ESP32 boards](/assets/esp8366-micropython/boards.jpg.dith.gif)
29 29
30This guide covers: 30This guide covers:
31- flashing SOC 31- flashing SOC
diff --git a/posts/2020-09-08-bind-warning-on-login.md b/posts/2020-09-08-bind-warning-on-login.md
index ab26b0c..cae781f 100644
--- a/posts/2020-09-08-bind-warning-on-login.md
+++ b/posts/2020-09-08-bind-warning-on-login.md
@@ -23,7 +23,7 @@ bind '"\e[Z":menu-complete-backward'
23 23
24I haven't noticed anything wrong with this and all was working fine until I restarted my machine and then I got this error. 24I haven't noticed anything wrong with this and all was working fine until I restarted my machine and then I got this error.
25 25
26![Profile bind error](/assets/profile-bind-error/error.jpg) 26![Profile bind error](/assets/profile-bind-error/error.jpg.dith.gif)
27 27
28When I pressed OK, I got into the [Gnome shell](https://wiki.gnome.org/Projects/GnomeShell) and all was working fine, but the error was still bugging me. I started looking for the reason why this is happening and found a solution to this error on [Remote SSH Commands - bash bind warning: line editing not enabled](https://superuser.com/a/892682). 28When I pressed OK, I got into the [Gnome shell](https://wiki.gnome.org/Projects/GnomeShell) and all was working fine, but the error was still bugging me. I started looking for the reason why this is happening and found a solution to this error on [Remote SSH Commands - bash bind warning: line editing not enabled](https://superuser.com/a/892682).
29 29
diff --git a/posts/2021-01-24-replacing-dropbox-with-s3.md b/posts/2021-01-24-replacing-dropbox-with-s3.md
index 4a181b5..55f8923 100644
--- a/posts/2021-01-24-replacing-dropbox-with-s3.md
+++ b/posts/2021-01-24-replacing-dropbox-with-s3.md
@@ -80,7 +80,7 @@ You can use this script in a combination with [Cron](https://en.wikipedia.org/wi
80 80
81When you start syncing your local stuff with a remote server you can review your items on DigitalOcean. 81When you start syncing your local stuff with a remote server you can review your items on DigitalOcean.
82 82
83![Dropbox Spaces](/assets/dropbox-sync/dropbox-spaces.png) 83![Dropbox Spaces](/assets/dropbox-sync/dropbox-spaces.png.dith.gif)
84 84
85I have been using this script now for quite some time, and it's working flawlessly. I also uninstalled Dropbox and stopped using it completely. 85I have been using this script now for quite some time, and it's working flawlessly. I also uninstalled Dropbox and stopped using it completely.
86 86
diff --git a/posts/2021-01-25-goaccess.md b/posts/2021-01-25-goaccess.md
index 7b5ba5c..e0bda95 100644
--- a/posts/2021-01-25-goaccess.md
+++ b/posts/2021-01-25-goaccess.md
@@ -31,10 +31,10 @@ I found this amazing software [GoAccess](https://goaccess.io/) which provides al
31 31
32GoAccess can be used in two different modes. 32GoAccess can be used in two different modes.
33 33
34![GoAccess Terminal](/assets/goaccess/goaccess-dash-term.png) 34![GoAccess Terminal](/assets/goaccess/goaccess-dash-term.png.dith.gif)
35<center><i>Running in a terminal</i></center> 35<center><i>Running in a terminal</i></center>
36 36
37![GoAccess HTML](/assets/goaccess/goaccess-dash-html.png) 37![GoAccess HTML](/assets/goaccess/goaccess-dash-html.png.dith.gif)
38<center><i>Running in a browser</i></center> 38<center><i>Running in a browser</i></center>
39 39
40I, however, need this to run in a browser. So, the second option is the way to go. The Idea is to periodically run cronjob and export this report into a folder that gets then server by Nginx behind a Basic authentication. 40I, however, need this to run in a browser. So, the second option is the way to go. The Idea is to periodically run cronjob and export this report into a folder that gets then server by Nginx behind a Basic authentication.
diff --git a/posts/2021-06-26-simple-world-clock.md b/posts/2021-06-26-simple-world-clock.md
index 29c199a..1e1cd99 100644
--- a/posts/2021-06-26-simple-world-clock.md
+++ b/posts/2021-06-26-simple-world-clock.md
@@ -15,7 +15,7 @@ But I also have a bunch of electronics that I bought through the time, and I am
15 15
16A while ago I bought a small eInk display [Inky pHAT](https://shop.pimoroni.com/products/inky-phat?variant=12549254217811) and I have a bunch of [Raspberry Pi's Zero](https://www.raspberrypi.org/products/raspberry-pi-zero/) lying around that I really need to use. 16A while ago I bought a small eInk display [Inky pHAT](https://shop.pimoroni.com/products/inky-phat?variant=12549254217811) and I have a bunch of [Raspberry Pi's Zero](https://www.raspberrypi.org/products/raspberry-pi-zero/) lying around that I really need to use.
17 17
18![Inky pHAT, Raspberry Pi Zero](/assets/world-clock/hardware.jpg) 18![Inky pHAT, Raspberry Pi Zero](/assets/world-clock/hardware.jpg.dith.gif)
19 19
20Since the Inky [Inky pHAT](https://shop.pimoroni.com/products/inky-phat?variant=12549254217811) is essentially a HAT, it can easily be added on top of the [Raspberry Pi Zero](https://www.raspberrypi.org/products/raspberry-pi-zero/). 20Since the Inky [Inky pHAT](https://shop.pimoroni.com/products/inky-phat?variant=12549254217811) is essentially a HAT, it can easily be added on top of the [Raspberry Pi Zero](https://www.raspberrypi.org/products/raspberry-pi-zero/).
21 21
@@ -80,7 +80,7 @@ Then we add a cronjob with `crontab -e`.
80 80
81So, we end up with a result like this. 81So, we end up with a result like this.
82 82
83![World Clock](/assets/world-clock/world-clock.jpg) 83![World Clock](/assets/world-clock/world-clock.jpg.dith.gif)
84 84
85And for the enclosure that can be 3D printed, but I haven't yet something like this can be used. 85And for the enclosure that can be 3D printed, but I haven't yet something like this can be used.
86 86
diff --git a/template/_meta.html b/template/_meta.html
index 9d92e34..b617f0f 100755
--- a/template/_meta.html
+++ b/template/_meta.html
@@ -3,10 +3,10 @@
3<meta name="viewport" content="width=device-width, initial-scale=1.0"> 3<meta name="viewport" content="width=device-width, initial-scale=1.0">
4<meta http-equiv="X-UA-Compatible" content="ie=edge"> 4<meta http-equiv="X-UA-Compatible" content="ie=edge">
5 5
6<link rel="stylesheet" href="/style.css?v=20210731-11"> 6<link rel="stylesheet" href="/style.css?v=2021-10-07">
7 7
8<link rel="alternate" type="application/rss+xml" href="/feed.rss"> 8<link rel="alternate" type="application/rss+xml" href="/feed.rss">
9<link rel="alternate" type="application/feed+json" href="/feed.json"> 9<link rel="alternate" type="application/feed+json" href="/feed.json">
10<link rel="alternate" type="application/rss+xml" href="/yapyap.xml" title="YapYap"> 10<link rel="alternate" type="application/rss+xml" href="/yapyap.xml" title="YapYap">
11 11
12<link rel="icon" href="/assets/general/favicon.png?v=20210731-01" type="image/png"> 12<link rel="icon" href="/assets/general/favicon.png?v=2021-10-07" type="image/png">
diff --git a/template/script.js b/template/script.js
index 8b13789..3d80484 100755
--- a/template/script.js
+++ b/template/script.js
@@ -1 +1,17 @@
1// dither image on mouse over replace
2document.querySelectorAll('article img').forEach(img => {
1 3
4 const ditheredImage = img.src;
5 const originalImage = img.src.replace('.dith.gif', '');
6
7 img.addEventListener('mouseover', evt => {
8 evt.target.src = originalImage;
9 console.log('mouseover')
10 });
11
12 img.addEventListener('mouseout', evt => {
13 evt.target.src = ditheredImage;
14 console.log('mouseout')
15 });
16
17});
diff --git a/template/style.css b/template/style.css
index 8152dab..8da06fd 100755
--- a/template/style.css
+++ b/template/style.css
@@ -307,6 +307,7 @@ article img {
307 position: relative; 307 position: relative;
308 left: -10%; 308 left: -10%;
309 margin: 70px auto; 309 margin: 70px auto;
310 border: 1px solid #eee;
310} 311}
311 312
312article strong { 313article strong {