diff options
| -rw-r--r-- | content/pages/curriculum-vitae.md | 2 | ||||
| -rw-r--r-- | content/posts/2017-03-07-golang-profiling-simplified.md | 4 | ||||
| -rw-r--r-- | content/posts/2017-04-21-profiling-python-web-applications-with-visual-tools.md | 6 | ||||
| -rw-r--r-- | content/posts/2017-08-11-simple-iot-application.md | 10 | ||||
| -rw-r--r-- | content/posts/2018-01-16-using-digitalocean-spaces-object-storage-with-fuse.md | 12 | ||||
| -rw-r--r-- | content/posts/2019-01-03-encoding-binary-data-into-dna-sequence.md | 8 | ||||
| -rw-r--r-- | content/posts/2019-10-19-using-sentiment-analysis-for-clickbait-detection.md | 4 | ||||
| -rw-r--r-- | content/posts/2020-03-22-simple-sse-based-pubsub-server.md | 8 | ||||
| -rw-r--r-- | content/posts/2020-09-06-esp-and-micropython.md | 2 | ||||
| -rw-r--r-- | content/posts/2020-09-08-bind-warning-on-login.md | 2 | ||||
| -rw-r--r-- | content/posts/2021-01-24-replacing-dropbox-with-s3.md | 2 | ||||
| -rw-r--r-- | content/posts/2021-01-25-goaccess.md | 4 | ||||
| -rw-r--r-- | content/posts/2021-06-26-simple-world-clock.md | 6 | ||||
| -rw-r--r-- | content/posts/2021-12-03-debian-based-riced-up-distribution-for-developers.md | 18 | ||||
| -rw-r--r-- | content/posts/2021-12-25-running-golang-application-as-pid1.md | 6 | ||||
| -rw-r--r-- | content/posts/2021-12-30-wap-mobile-web-before-the-web.md | 4 | ||||
| -rw-r--r-- | content/posts/2022-06-30-trying-out-helix-editor.md | 2 | ||||
| -rw-r--r-- | content/posts/2022-07-05-what-would-dna-sound-if-synthesized.md | 30 | ||||
| -rw-r--r-- | content/posts/2022-08-13-algae-spotted-on-river-sava.md | 12 | ||||
| -rw-r--r-- | static/assets/algae-sava/dji-algae-0.jpg (renamed from static/algae-sava/dji-algae-0.jpg) | bin | 145615 -> 145615 bytes | |||
| -rw-r--r-- | static/assets/algae-sava/dji-algae-1.jpg (renamed from static/algae-sava/dji-algae-1.jpg) | bin | 154416 -> 154416 bytes | |||
| -rw-r--r-- | static/assets/algae-sava/dji-algae-2.jpg (renamed from static/algae-sava/dji-algae-2.jpg) | bin | 114347 -> 114347 bytes | |||
| -rw-r--r-- | static/assets/algae-sava/dji-algae-3.jpg (renamed from static/algae-sava/dji-algae-3.jpg) | bin | 128019 -> 128019 bytes | |||
| -rw-r--r-- | static/assets/algae-sava/dji-algae-4.jpg (renamed from static/algae-sava/dji-algae-4.jpg) | bin | 217747 -> 217747 bytes | |||
| -rw-r--r-- | static/assets/algae-sava/dji-algae-5.jpg (renamed from static/algae-sava/dji-algae-5.jpg) | bin | 264884 -> 264884 bytes | |||
| -rw-r--r-- | static/assets/cv/avatar.gif (renamed from static/cv/avatar.gif) | bin | 2174 -> 2174 bytes | |||
| -rw-r--r-- | static/assets/dfd-rice/desktop.png (renamed from static/dfd-rice/desktop.png) | bin | 329498 -> 329498 bytes | |||
| -rw-r--r-- | static/assets/dfd-rice/install-00.png (renamed from static/dfd-rice/install-00.png) | bin | 35695 -> 35695 bytes | |||
| -rw-r--r-- | static/assets/dfd-rice/install-01.png (renamed from static/dfd-rice/install-01.png) | bin | 28042 -> 28042 bytes | |||
| -rw-r--r-- | static/assets/dfd-rice/install-02.png (renamed from static/dfd-rice/install-02.png) | bin | 21638 -> 21638 bytes | |||
| -rw-r--r-- | static/assets/dfd-rice/install-03.png (renamed from static/dfd-rice/install-03.png) | bin | 34698 -> 34698 bytes | |||
| -rw-r--r-- | static/assets/dfd-rice/install-04.png (renamed from static/dfd-rice/install-04.png) | bin | 28346 -> 28346 bytes | |||
| -rw-r--r-- | static/assets/dfd-rice/install-05.png (renamed from static/dfd-rice/install-05.png) | bin | 13755 -> 13755 bytes | |||
| -rw-r--r-- | static/assets/dfd-rice/installation.svg (renamed from static/dfd-rice/installation.svg) | 0 | ||||
| -rw-r--r-- | static/assets/dfd-rice/layout.png (renamed from static/dfd-rice/layout.png) | bin | 9072 -> 9072 bytes | |||
| -rw-r--r-- | static/assets/dfd-rice/layout.svg (renamed from static/dfd-rice/layout.svg) | 0 | ||||
| -rw-r--r-- | static/assets/dfd-rice/script.png (renamed from static/dfd-rice/script.png) | bin | 65747 -> 65747 bytes | |||
| -rw-r--r-- | static/assets/dna-sequence/benchmarks.ods (renamed from static/dna-sequence/benchmarks.ods) | bin | 21911 -> 21911 bytes | |||
| -rw-r--r-- | static/assets/dna-sequence/chart-encoding-speed.png (renamed from static/dna-sequence/chart-encoding-speed.png) | bin | 14201 -> 14201 bytes | |||
| -rw-r--r-- | static/assets/dna-sequence/chart-file-sizes.png (renamed from static/dna-sequence/chart-file-sizes.png) | bin | 12391 -> 12391 bytes | |||
| -rw-r--r-- | static/assets/dna-sequence/dna-basics.jpg (renamed from static/dna-sequence/dna-basics.jpg) | bin | 165883 -> 165883 bytes | |||
| -rw-r--r-- | static/assets/dna-sequence/quote.png (renamed from static/dna-sequence/quote.png) | bin | 1068 -> 1068 bytes | |||
| -rw-r--r-- | static/assets/dna-sequence/sample-binary-file.png (renamed from static/dna-sequence/sample-binary-file.png) | bin | 66417 -> 66417 bytes | |||
| -rw-r--r-- | static/assets/dna-sequence/sample.png (renamed from static/dna-sequence/sample.png) | bin | 65930 -> 65930 bytes | |||
| -rw-r--r-- | static/assets/dna-synthesized/bison/in.txt (renamed from static/dna-synthesized/bison/in.txt) | 0 | ||||
| -rw-r--r-- | static/assets/dna-synthesized/bison/out.mp3 (renamed from static/dna-synthesized/bison/out.mp3) | bin | 960469 -> 960469 bytes | |||
| -rw-r--r-- | static/assets/dna-synthesized/bison/spectogram.png (renamed from static/dna-synthesized/bison/spectogram.png) | bin | 52808 -> 52808 bytes | |||
| -rwxr-xr-x | static/assets/dna-synthesized/elektron/IMG_0619.jpg (renamed from static/dna-synthesized/elektron/IMG_0619.jpg) | bin | 226025 -> 226025 bytes | |||
| -rwxr-xr-x | static/assets/dna-synthesized/elektron/IMG_0620.jpg (renamed from static/dna-synthesized/elektron/IMG_0620.jpg) | bin | 242937 -> 242937 bytes | |||
| -rwxr-xr-x | static/assets/dna-synthesized/elektron/IMG_0622.jpg (renamed from static/dna-synthesized/elektron/IMG_0622.jpg) | bin | 279234 -> 279234 bytes | |||
| -rwxr-xr-x | static/assets/dna-synthesized/elektron/elektron.mp4 (renamed from static/dna-synthesized/elektron/elektron.mp4) | bin | 22478213 -> 22478213 bytes | |||
| -rwxr-xr-x | static/assets/dna-synthesized/elektron/midi-studio.jpg (renamed from static/dna-synthesized/elektron/midi-studio.jpg) | bin | 63633 -> 63633 bytes | |||
| -rw-r--r-- | static/assets/dna-synthesized/mouse/in.txt (renamed from static/dna-synthesized/mouse/in.txt) | 0 | ||||
| -rw-r--r-- | static/assets/dna-synthesized/mouse/out.mp3 (renamed from static/dna-synthesized/mouse/out.mp3) | bin | 864547 -> 864547 bytes | |||
| -rw-r--r-- | static/assets/dna-synthesized/mouse/spectogram.png (renamed from static/dna-synthesized/mouse/spectogram.png) | bin | 114261 -> 114261 bytes | |||
| -rw-r--r-- | static/assets/dna-synthesized/quote/in.txt (renamed from static/dna-synthesized/quote/in.txt) | 0 | ||||
| -rw-r--r-- | static/assets/dna-synthesized/quote/out.mp3 (renamed from static/dna-synthesized/quote/out.mp3) | bin | 678973 -> 678973 bytes | |||
| -rw-r--r-- | static/assets/dna-synthesized/quote/spectogram.png (renamed from static/dna-synthesized/quote/spectogram.png) | bin | 108863 -> 108863 bytes | |||
| -rw-r--r-- | static/assets/dna-synthesized/symphony-no6-1st-movement.mp3 (renamed from static/dna-synthesized/symphony-no6-1st-movement.mp3) | bin | 11650187 -> 11650187 bytes | |||
| -rw-r--r-- | static/assets/dna-synthesized/symphony-no6-1st-movement.png (renamed from static/dna-synthesized/symphony-no6-1st-movement.png) | bin | 245694 -> 245694 bytes | |||
| -rw-r--r-- | static/assets/dna-synthesized/taurus/in.txt (renamed from static/dna-synthesized/taurus/in.txt) | 0 | ||||
| -rw-r--r-- | static/assets/dna-synthesized/taurus/out.mp3 (renamed from static/dna-synthesized/taurus/out.mp3) | bin | 1056599 -> 1056599 bytes | |||
| -rw-r--r-- | static/assets/dna-synthesized/taurus/spectogram.png (renamed from static/dna-synthesized/taurus/spectogram.png) | bin | 109064 -> 109064 bytes | |||
| -rw-r--r-- | static/assets/do-fuse/copy-benchmarks.tsv (renamed from static/do-fuse/copy-benchmarks.tsv) | 0 | ||||
| -rw-r--r-- | static/assets/do-fuse/fuse-droplets.png (renamed from static/do-fuse/fuse-droplets.png) | bin | 42891 -> 42891 bytes | |||
| -rw-r--r-- | static/assets/do-fuse/fuse-spaces.png (renamed from static/do-fuse/fuse-spaces.png) | bin | 32450 -> 32450 bytes | |||
| -rw-r--r-- | static/assets/do-fuse/sqlite-benchmarks.tsv (renamed from static/do-fuse/sqlite-benchmarks.tsv) | 0 | ||||
| -rw-r--r-- | static/assets/dropbox-sync/dropbox-spaces.png (renamed from static/dropbox-sync/dropbox-spaces.png) | bin | 47661 -> 47661 bytes | |||
| -rw-r--r-- | static/assets/esp8366-micropython/boards.jpg (renamed from static/esp8366-micropython/boards.jpg) | bin | 98162 -> 98162 bytes | |||
| -rw-r--r-- | static/assets/go-profiling/golang-profiling-cpu.pdf (renamed from static/go-profiling/golang-profiling-cpu.pdf) | bin | 16518 -> 16518 bytes | |||
| -rw-r--r-- | static/assets/go-profiling/golang-profiling-mem.pdf (renamed from static/go-profiling/golang-profiling-mem.pdf) | bin | 19221 -> 19221 bytes | |||
| -rw-r--r-- | static/assets/goaccess/goaccess-dash-html.png (renamed from static/goaccess/goaccess-dash-html.png) | bin | 16129 -> 16129 bytes | |||
| -rw-r--r-- | static/assets/goaccess/goaccess-dash-term.png (renamed from static/goaccess/goaccess-dash-term.png) | bin | 9188 -> 9188 bytes | |||
| -rw-r--r-- | static/assets/helix-editor/editor.png (renamed from static/helix-editor/editor.png) | bin | 159442 -> 159442 bytes | |||
| -rw-r--r-- | static/assets/iot-application/iot-app-output.png (renamed from static/iot-application/iot-app-output.png) | bin | 23767 -> 23767 bytes | |||
| -rw-r--r-- | static/assets/iot-application/iot-rest-example.png (renamed from static/iot-application/iot-rest-example.png) | bin | 33912 -> 33912 bytes | |||
| -rw-r--r-- | static/assets/iot-application/iot-sqlite-db.png (renamed from static/iot-application/iot-sqlite-db.png) | bin | 199821 -> 199821 bytes | |||
| -rw-r--r-- | static/assets/iot-application/kcachegrind.png (renamed from static/iot-application/kcachegrind.png) | bin | 88486 -> 88486 bytes | |||
| -rw-r--r-- | static/assets/iot-application/profiling-viewer.png (renamed from static/iot-application/profiling-viewer.png) | bin | 173672 -> 173672 bytes | |||
| -rw-r--r-- | static/assets/iot-application/simple-iot-application-overview.svg (renamed from static/iot-application/simple-iot-application-overview.svg) | 0 | ||||
| -rw-r--r-- | static/assets/iot-application/simple-iot-application.zip (renamed from static/iot-application/simple-iot-application.zip) | bin | 6406 -> 6406 bytes | |||
| -rw-r--r-- | static/assets/iot-application/snakeviz.png (renamed from static/iot-application/snakeviz.png) | bin | 59601 -> 59601 bytes | |||
| -rw-r--r-- | static/assets/pid1/boxes.mp4 (renamed from static/pid1/boxes.mp4) | bin | 443830 -> 443830 bytes | |||
| -rw-r--r-- | static/assets/pid1/qemu.log (renamed from static/pid1/qemu.log) | 0 | ||||
| -rw-r--r-- | static/assets/pid1/unikernels.png (renamed from static/pid1/unikernels.png) | bin | 48567 -> 48567 bytes | |||
| -rw-r--r-- | static/assets/pid1/unikernels.svg (renamed from static/pid1/unikernels.svg) | 0 | ||||
| -rw-r--r-- | static/assets/profile-bind-error/error.jpg (renamed from static/profile-bind-error/error.jpg) | bin | 57047 -> 57047 bytes | |||
| -rw-r--r-- | static/assets/python-profiling/kcachegrind.png (renamed from static/python-profiling/kcachegrind.png) | bin | 88486 -> 88486 bytes | |||
| -rw-r--r-- | static/assets/python-profiling/profiling-viewer.png (renamed from static/python-profiling/profiling-viewer.png) | bin | 173672 -> 173672 bytes | |||
| -rw-r--r-- | static/assets/python-profiling/snakeviz.png (renamed from static/python-profiling/snakeviz.png) | bin | 59601 -> 59601 bytes | |||
| -rw-r--r-- | static/assets/sentiment-analysis/.ipynb_checkpoints/TF Test-checkpoint.ipynb (renamed from static/sentiment-analysis/.ipynb_checkpoints/TF Test-checkpoint.ipynb) | 0 | ||||
| -rw-r--r-- | static/assets/sentiment-analysis/.ipynb_checkpoints/sentiment-analysis-checkpoint.ipynb (renamed from static/sentiment-analysis/.ipynb_checkpoints/sentiment-analysis-checkpoint.ipynb) | 0 | ||||
| -rw-r--r-- | static/assets/sentiment-analysis/guardian-sa-title-desc-relationship.png (renamed from static/sentiment-analysis/guardian-sa-title-desc-relationship.png) | bin | 15404 -> 15404 bytes | |||
| -rw-r--r-- | static/assets/sentiment-analysis/sentiment-analysis.ipynb (renamed from static/sentiment-analysis/sentiment-analysis.ipynb) | 0 | ||||
| -rw-r--r-- | static/assets/simple-pubsub-server/caniuse.png (renamed from static/simple-pubsub-server/caniuse.png) | bin | 56379 -> 56379 bytes | |||
| -rw-r--r-- | static/assets/simple-pubsub-server/chrome-debugging.png (renamed from static/simple-pubsub-server/chrome-debugging.png) | bin | 151160 -> 151160 bytes | |||
| -rw-r--r-- | static/assets/simple-pubsub-server/clients.m4v (renamed from static/simple-pubsub-server/clients.m4v) | bin | 369179 -> 369179 bytes | |||
| -rw-r--r-- | static/assets/simple-pubsub-server/pubsub-overview.png (renamed from static/simple-pubsub-server/pubsub-overview.png) | bin | 18471 -> 18471 bytes | |||
| -rw-r--r-- | static/assets/simple-pubsub-server/sse-pubsub-server.zip (renamed from static/simple-pubsub-server/sse-pubsub-server.zip) | bin | 4158 -> 4158 bytes | |||
| -rw-r--r-- | static/assets/wap/emulator.mp4 (renamed from static/wap/emulator.mp4) | bin | 892887 -> 892887 bytes | |||
| -rw-r--r-- | static/assets/wap/phones.gif (renamed from static/wap/phones.gif) | bin | 348891 -> 348891 bytes | |||
| -rw-r--r-- | static/assets/world-clock/enclosure.stl (renamed from static/world-clock/enclosure.stl) | bin | 1884 -> 1884 bytes | |||
| -rw-r--r-- | static/assets/world-clock/hardware.jpg (renamed from static/world-clock/hardware.jpg) | bin | 82279 -> 82279 bytes | |||
| -rw-r--r-- | static/assets/world-clock/world-clock.jpg (renamed from static/world-clock/world-clock.jpg) | bin | 148673 -> 148673 bytes | |||
| -rw-r--r-- | static/assets/yapyap/hello.png (renamed from static/yapyap/hello.png) | bin | 25962 -> 25962 bytes | |||
| -rw-r--r-- | static/assets/yapyap/pid1.jpg (renamed from static/yapyap/pid1.jpg) | bin | 394011 -> 394011 bytes | |||
| -rw-r--r-- | themes/simple/layouts/partials/footer.html | 10 | ||||
| -rw-r--r-- | themes/simple/layouts/partials/head.html | 179 | ||||
| -rw-r--r-- | themes/simple/layouts/partials/tailwind.html | 106 |
109 files changed, 187 insertions, 250 deletions
diff --git a/content/pages/curriculum-vitae.md b/content/pages/curriculum-vitae.md index a4ba9e8..fe79fb3 100644 --- a/content/pages/curriculum-vitae.md +++ b/content/pages/curriculum-vitae.md | |||
| @@ -16,7 +16,7 @@ draft: false | |||
| 16 | 16 | ||
| 17 | <div class="cv-picture"> | 17 | <div class="cv-picture"> |
| 18 | 18 | ||
| 19 |  | 19 |  |
| 20 | 20 | ||
| 21 | </div> | 21 | </div> |
| 22 | 22 | ||
diff --git a/content/posts/2017-03-07-golang-profiling-simplified.md b/content/posts/2017-03-07-golang-profiling-simplified.md index d784dcc..92ff881 100644 --- a/content/posts/2017-03-07-golang-profiling-simplified.md +++ b/content/posts/2017-03-07-golang-profiling-simplified.md | |||
| @@ -107,5 +107,5 @@ go tool pprof -pdf ./cpu cpu.pprof > cpu.pdf | |||
| 107 | 107 | ||
| 108 | This will generate PDF document with visualized profile. | 108 | This will generate PDF document with visualized profile. |
| 109 | 109 | ||
| 110 | - [Memory PDF profile example](/go-profiling/golang-profiling-mem.pdf) | 110 | - [Memory PDF profile example](/assets/go-profiling/golang-profiling-mem.pdf) |
| 111 | - [CPU PDF profile example](/go-profiling/golang-profiling-cpu.pdf) | 111 | - [CPU PDF profile example](/assets/go-profiling/golang-profiling-cpu.pdf) |
diff --git a/content/posts/2017-04-21-profiling-python-web-applications-with-visual-tools.md b/content/posts/2017-04-21-profiling-python-web-applications-with-visual-tools.md index 3fe8a9d..466d838 100644 --- a/content/posts/2017-04-21-profiling-python-web-applications-with-visual-tools.md +++ b/content/posts/2017-04-21-profiling-python-web-applications-with-visual-tools.md | |||
| @@ -16,7 +16,7 @@ Before we begin there are some requirements. We will need to: | |||
| 16 | 16 | ||
| 17 | If you are using MacOS you should check out [Profiling Viewer](http://www.profilingviewer.com/) or [MacCallGrind](http://www.maccallgrind.com/). | 17 | If you are using MacOS you should check out [Profiling Viewer](http://www.profilingviewer.com/) or [MacCallGrind](http://www.maccallgrind.com/). |
| 18 | 18 | ||
| 19 |  | 19 |  |
| 20 | 20 | ||
| 21 | We will be dividing this post into two main categories: | 21 | We will be dividing this post into two main categories: |
| 22 | 22 | ||
| @@ -135,7 +135,7 @@ $ pyprof2calltree -i awesome_random_number.prof | |||
| 135 | 135 | ||
| 136 | This 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. | 136 | This 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. |
| 137 | 137 | ||
| 138 |  | 138 |  |
| 139 | 139 | ||
| 140 | > 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. | 140 | > 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. |
| 141 | 141 | ||
| @@ -158,7 +158,7 @@ $ snakeviz awesome_random_number.prof | |||
| 158 | # shows visualized profile | 158 | # shows visualized profile |
| 159 | ``` | 159 | ``` |
| 160 | 160 | ||
| 161 |  | 161 |  |
| 162 | 162 | ||
| 163 | Reddit user [ccharles](https://www.reddit.com/user/ccharles) suggested a better way for installing pip software by targeting user level instead of using sudo. | 163 | Reddit user [ccharles](https://www.reddit.com/user/ccharles) suggested a better way for installing pip software by targeting user level instead of using sudo. |
| 164 | 164 | ||
diff --git a/content/posts/2017-08-11-simple-iot-application.md b/content/posts/2017-08-11-simple-iot-application.md index b48f2fb..b34fe6b 100644 --- a/content/posts/2017-08-11-simple-iot-application.md +++ b/content/posts/2017-08-11-simple-iot-application.md | |||
| @@ -27,7 +27,7 @@ Step 1. and 3. will share the same web application. One route will be dedicated | |||
| 27 | 27 | ||
| 28 | Schema below represents what we will try to achieve and how different parts correlates to each other. | 28 | Schema below represents what we will try to achieve and how different parts correlates to each other. |
| 29 | 29 | ||
| 30 |  | 30 |  |
| 31 | 31 | ||
| 32 | ## Simple Python API | 32 | ## Simple Python API |
| 33 | 33 | ||
| @@ -148,11 +148,11 @@ To run this simply go to folder containing python file and run ```python webapp. | |||
| 148 | 148 | ||
| 149 | After testing the service with Restlet Client you should be able to view your data in a database file ```data.db```. | 149 | After testing the service with Restlet Client you should be able to view your data in a database file ```data.db```. |
| 150 | 150 | ||
| 151 |  | 151 |  |
| 152 | 152 | ||
| 153 | You can also check the contents of new database file by using desktop client for SQLite → [DB Browser for SQLite](http://sqlitebrowser.org/). | 153 | You can also check the contents of new database file by using desktop client for SQLite → [DB Browser for SQLite](http://sqlitebrowser.org/). |
| 154 | 154 | ||
| 155 |  | 155 |  |
| 156 | 156 | ||
| 157 | Table 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. | 157 | Table 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. |
| 158 | 158 | ||
| @@ -469,9 +469,9 @@ If everything goes well you should be seeing new data-points rendered on chart e | |||
| 469 | 469 | ||
| 470 | If you navigate to ```http://0.0.0.0:5000``` you should see rendered chart as shown on picture below. | 470 | If you navigate to ```http://0.0.0.0:5000``` you should see rendered chart as shown on picture below. |
| 471 | 471 | ||
| 472 |  | 472 |  |
| 473 | 473 | ||
| 474 | Complete application with all the code is available for [download](/iot-application/simple-iot-application.zip). | 474 | Complete application with all the code is available for [download](/assets/iot-application/simple-iot-application.zip). |
| 475 | 475 | ||
| 476 | ## Conclusion | 476 | ## Conclusion |
| 477 | 477 | ||
diff --git a/content/posts/2018-01-16-using-digitalocean-spaces-object-storage-with-fuse.md b/content/posts/2018-01-16-using-digitalocean-spaces-object-storage-with-fuse.md index 65cc7b5..504e659 100644 --- a/content/posts/2018-01-16-using-digitalocean-spaces-object-storage-with-fuse.md +++ b/content/posts/2018-01-16-using-digitalocean-spaces-object-storage-with-fuse.md | |||
| @@ -26,13 +26,13 @@ To make this work you will need DigitalOcean account. If you don't have one you | |||
| 26 | 26 | ||
| 27 | Instuctions 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). | 27 | Instuctions 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). |
| 28 | 28 | ||
| 29 |  | 29 |  |
| 30 | 30 | ||
| 31 | After 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. | 31 | After 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. |
| 32 | 32 | ||
| 33 | When 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. | 33 | When 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. |
| 34 | 34 | ||
| 35 |  | 35 |  |
| 36 | 36 | ||
| 37 | Now that we have new Space and Access key we should SSH into our machine. | 37 | Now that we have new Space and Access key we should SSH into our machine. |
| 38 | 38 | ||
| @@ -102,14 +102,14 @@ As I suspected, object size is not really that important. Sadly I don't have the | |||
| 102 | 102 | ||
| 103 | **Here are plotted results** | 103 | **Here are plotted results** |
| 104 | 104 | ||
| 105 | You can download [raw result here](/do-fuse/copy-benchmarks.tsv). Measurements are in seconds. | 105 | You can download [raw result here](/assets/do-fuse/copy-benchmarks.tsv). Measurements are in seconds. |
| 106 | 106 | ||
| 107 | <script src="//cdn.plot.ly/plotly-latest.min.js"></script> | 107 | <script src="//cdn.plot.ly/plotly-latest.min.js"></script> |
| 108 | <div id="copy-benchmarks"></div> | 108 | <div id="copy-benchmarks"></div> |
| 109 | <script> | 109 | <script> |
| 110 | (function(){ | 110 | (function(){ |
| 111 | var request = new XMLHttpRequest(); | 111 | var request = new XMLHttpRequest(); |
| 112 | request.open("GET", "/do-fuse/copy-benchmarks.tsv", true); | 112 | request.open("GET", "/assets/do-fuse/copy-benchmarks.tsv", true); |
| 113 | request.onload = function() { | 113 | request.onload = function() { |
| 114 | if (request.status >= 200 && request.status < 400) { | 114 | if (request.status >= 200 && request.status < 400) { |
| 115 | var payload = request.responseText.trim(); | 115 | var payload = request.responseText.trim(); |
| @@ -218,13 +218,13 @@ result_time = CLOSE = end_time - start_time | |||
| 218 | print("CLOSE: %g seconds" % (result_time)) | 218 | print("CLOSE: %g seconds" % (result_time)) |
| 219 | ``` | 219 | ``` |
| 220 | 220 | ||
| 221 | You can download [raw result here](/do-fuse/sqlite-benchmarks.tsv). And again, these results are done on a local block storage and do not represent capabilities of object storage. With my current approach and state of the test code these can not be done. I would need to make Python code much more robust and check locking etc. | 221 | You can download [raw result here](/assets/do-fuse/sqlite-benchmarks.tsv). And again, these results are done on a local block storage and do not represent capabilities of object storage. With my current approach and state of the test code these can not be done. I would need to make Python code much more robust and check locking etc. |
| 222 | 222 | ||
| 223 | <div id="sqlite-benchmarks"></div> | 223 | <div id="sqlite-benchmarks"></div> |
| 224 | <script> | 224 | <script> |
| 225 | (function(){ | 225 | (function(){ |
| 226 | var request = new XMLHttpRequest(); | 226 | var request = new XMLHttpRequest(); |
| 227 | request.open("GET", "/do-fuse/sqlite-benchmarks.tsv", true); | 227 | request.open("GET", "/assets/do-fuse/sqlite-benchmarks.tsv", true); |
| 228 | request.onload = function() { | 228 | request.onload = function() { |
| 229 | if (request.status >= 200 && request.status < 400) { | 229 | if (request.status >= 200 && request.status < 400) { |
| 230 | var payload = request.responseText.trim(); | 230 | var payload = request.responseText.trim(); |
diff --git a/content/posts/2019-01-03-encoding-binary-data-into-dna-sequence.md b/content/posts/2019-01-03-encoding-binary-data-into-dna-sequence.md index ff346d4..a4fd1d7 100644 --- a/content/posts/2019-01-03-encoding-binary-data-into-dna-sequence.md +++ b/content/posts/2019-01-03-encoding-binary-data-into-dna-sequence.md | |||
| @@ -81,7 +81,7 @@ Deoxyribonucleic acid, a self-replicating material which is **present in nearly | |||
| 81 | 81 | ||
| 82 | The 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. | 82 | The 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. |
| 83 | 83 | ||
| 84 |  | 84 |  |
| 85 | 85 | ||
| 86 | *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)* | 86 | *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)* |
| 87 | 87 | ||
| @@ -246,11 +246,11 @@ Then we encode FASTA file from previous operation to encode this data into PNG. | |||
| 246 | 246 | ||
| 247 | After encoding into PNG format this file looks like this. | 247 | After encoding into PNG format this file looks like this. |
| 248 | 248 | ||
| 249 |  | 249 |  |
| 250 | 250 | ||
| 251 | The larger the input stream is the larger the PNG file would be. | 251 | The larger the input stream is the larger the PNG file would be. |
| 252 | 252 | ||
| 253 | Compiled basic Hello World C program with [GCC](https://www.gnu.org/software/gcc/) would [look like](/dna-sequence/sample.png). | 253 | Compiled basic Hello World C program with [GCC](https://www.gnu.org/software/gcc/) would [look like](/assets/dna-sequence/sample.png). |
| 254 | 254 | ||
| 255 | ```c | 255 | ```c |
| 256 | // gcc -O3 -o sample sample.c | 256 | // gcc -O3 -o sample sample.c |
| @@ -313,7 +313,7 @@ dd if=<(openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count= | |||
| 313 | 313 | ||
| 314 | Our freshly generated 1KB file looks something like this (its full of garbage data as intended). | 314 | Our freshly generated 1KB file looks something like this (its full of garbage data as intended). |
| 315 | 315 | ||
| 316 |  | 316 |  |
| 317 | 317 | ||
| 318 | We create following binary files: | 318 | We create following binary files: |
| 319 | - 1KB.bin | 319 | - 1KB.bin |
diff --git a/content/posts/2019-10-19-using-sentiment-analysis-for-clickbait-detection.md b/content/posts/2019-10-19-using-sentiment-analysis-for-clickbait-detection.md index 0f5d994..30b0fd4 100644 --- a/content/posts/2019-10-19-using-sentiment-analysis-for-clickbait-detection.md +++ b/content/posts/2019-10-19-using-sentiment-analysis-for-clickbait-detection.md | |||
| @@ -72,11 +72,11 @@ plt.show() | |||
| 72 | 2. Rule-based approach may not be the best way of doing this. By using deep learning we would be able to get better insights. | 72 | 2. Rule-based approach may not be the best way of doing this. By using deep learning we would be able to get better insights. |
| 73 | 3. **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. | 73 | 3. **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. |
| 74 | 74 | ||
| 75 |  | 75 |  |
| 76 | 76 | ||
| 77 | Figure above displays difference between title and description sentiment for specific RSS feed item. 1 means positive and -1 means negative sentiment. | 77 | Figure above displays difference between title and description sentiment for specific RSS feed item. 1 means positive and -1 means negative sentiment. |
| 78 | 78 | ||
| 79 | [» Download Jupyter Notebook](/sentiment-analysis/sentiment-analysis.ipynb) | 79 | [» Download Jupyter Notebook](/assets/sentiment-analysis/sentiment-analysis.ipynb) |
| 80 | 80 | ||
| 81 | ## Going further | 81 | ## Going further |
| 82 | 82 | ||
diff --git a/content/posts/2020-03-22-simple-sse-based-pubsub-server.md b/content/posts/2020-03-22-simple-sse-based-pubsub-server.md index 0a039e6..939a62d 100644 --- a/content/posts/2020-03-22-simple-sse-based-pubsub-server.md +++ b/content/posts/2020-03-22-simple-sse-based-pubsub-server.md | |||
| @@ -21,7 +21,7 @@ Publisher Subscriber model is nothing new and there are many amazing solutions o | |||
| 21 | 21 | ||
| 22 | The 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. | 22 | The 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. |
| 23 | 23 | ||
| 24 |  | 24 |  |
| 25 | 25 | ||
| 26 | **These are some naive characteristics we want to achieve:** | 26 | **These are some naive characteristics we want to achieve:** |
| 27 | 27 | ||
| @@ -47,7 +47,7 @@ Read more about it on [official specification page](https://html.spec.whatwg.org | |||
| 47 | 47 | ||
| 48 | ### Current browser support | 48 | ### Current browser support |
| 49 | 49 | ||
| 50 |  | 50 |  |
| 51 | 51 | ||
| 52 | Check [https://caniuse.com/#feat=eventsource](https://caniuse.com/#feat=eventsource) for latest information about browser support. | 52 | Check [https://caniuse.com/#feat=eventsource](https://caniuse.com/#feat=eventsource) for latest information about browser support. |
| 53 | 53 | ||
| @@ -105,7 +105,7 @@ Google Chrome provides build-in debugging and exploration tool for [Server-Sent | |||
| 105 | 105 | ||
| 106 | > 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. | 106 | > 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. |
| 107 | 107 | ||
| 108 |  | 108 |  |
| 109 | 109 | ||
| 110 | ## Server implementation | 110 | ## Server implementation |
| 111 | 111 | ||
| @@ -234,7 +234,7 @@ One example would be, that we have index page and we want to receive messages ab | |||
| 234 | 234 | ||
| 235 | ### Publisher and subscriber in action | 235 | ### Publisher and subscriber in action |
| 236 | 236 | ||
| 237 | <video src="/simple-pubsub-server/clients.m4v" controls></video> | 237 | <video src="/assets/simple-pubsub-server/clients.m4v" controls></video> |
| 238 | 238 | ||
| 239 | You can download [the code](../simple-pubsub-server/sse-pubsub-server.zip) and follow along. | 239 | You can download [the code](../simple-pubsub-server/sse-pubsub-server.zip) and follow along. |
| 240 | 240 | ||
diff --git a/content/posts/2020-09-06-esp-and-micropython.md b/content/posts/2020-09-06-esp-and-micropython.md index 4b6e568..75e8295 100644 --- a/content/posts/2020-09-06-esp-and-micropython.md +++ b/content/posts/2020-09-06-esp-and-micropython.md | |||
| @@ -23,7 +23,7 @@ A while ago I bought some [ESP8266](https://www.espressif.com/en/products/socs/e | |||
| 23 | 23 | ||
| 24 | For 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). | 24 | For 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). |
| 25 | 25 | ||
| 26 |  | 26 |  |
| 27 | 27 | ||
| 28 | This guide covers: | 28 | This guide covers: |
| 29 | - flashing SOC | 29 | - flashing SOC |
diff --git a/content/posts/2020-09-08-bind-warning-on-login.md b/content/posts/2020-09-08-bind-warning-on-login.md index 3f276c6..62c421d 100644 --- a/content/posts/2020-09-08-bind-warning-on-login.md +++ b/content/posts/2020-09-08-bind-warning-on-login.md | |||
| @@ -21,7 +21,7 @@ bind '"\e[Z":menu-complete-backward' | |||
| 21 | 21 | ||
| 22 | I haven't noticed anything wrong with this and all was working fine until I restarted my machine and then I got this error. | 22 | I haven't noticed anything wrong with this and all was working fine until I restarted my machine and then I got this error. |
| 23 | 23 | ||
| 24 |  | 24 |  |
| 25 | 25 | ||
| 26 | When 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). | 26 | When 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). |
| 27 | 27 | ||
diff --git a/content/posts/2021-01-24-replacing-dropbox-with-s3.md b/content/posts/2021-01-24-replacing-dropbox-with-s3.md index 12fb8cf..f44aa63 100644 --- a/content/posts/2021-01-24-replacing-dropbox-with-s3.md +++ b/content/posts/2021-01-24-replacing-dropbox-with-s3.md | |||
| @@ -78,7 +78,7 @@ You can use this script in a combination with [Cron](https://en.wikipedia.org/wi | |||
| 78 | 78 | ||
| 79 | When you start syncing your local stuff with a remote server you can review your items on DigitalOcean. | 79 | When you start syncing your local stuff with a remote server you can review your items on DigitalOcean. |
| 80 | 80 | ||
| 81 |  | 81 |  |
| 82 | 82 | ||
| 83 | I have been using this script now for quite some time, and it's working flawlessly. I also uninstalled Dropbox and stopped using it completely. | 83 | I have been using this script now for quite some time, and it's working flawlessly. I also uninstalled Dropbox and stopped using it completely. |
| 84 | 84 | ||
diff --git a/content/posts/2021-01-25-goaccess.md b/content/posts/2021-01-25-goaccess.md index 2f3d56b..ba1e10c 100644 --- a/content/posts/2021-01-25-goaccess.md +++ b/content/posts/2021-01-25-goaccess.md | |||
| @@ -31,10 +31,10 @@ I found this amazing software [GoAccess](https://goaccess.io/) which provides al | |||
| 31 | 31 | ||
| 32 | GoAccess can be used in two different modes. | 32 | GoAccess can be used in two different modes. |
| 33 | 33 | ||
| 34 |  | 34 |  |
| 35 | <center><i>Running in a terminal</i></center> | 35 | <center><i>Running in a terminal</i></center> |
| 36 | 36 | ||
| 37 |  | 37 |  |
| 38 | <center><i>Running in a browser</i></center> | 38 | <center><i>Running in a browser</i></center> |
| 39 | 39 | ||
| 40 | I, 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. | 40 | I, 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/content/posts/2021-06-26-simple-world-clock.md b/content/posts/2021-06-26-simple-world-clock.md index e06d534..80d1e32 100644 --- a/content/posts/2021-06-26-simple-world-clock.md +++ b/content/posts/2021-06-26-simple-world-clock.md | |||
| @@ -13,7 +13,7 @@ But I also have a bunch of electronics that I bought through the time, and I am | |||
| 13 | 13 | ||
| 14 | A 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. | 14 | A 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. |
| 15 | 15 | ||
| 16 |  | 16 |  |
| 17 | 17 | ||
| 18 | Since 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/). | 18 | Since 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/). |
| 19 | 19 | ||
| @@ -78,10 +78,10 @@ Then we add a cronjob with `crontab -e`. | |||
| 78 | 78 | ||
| 79 | So, we end up with a result like this. | 79 | So, we end up with a result like this. |
| 80 | 80 | ||
| 81 |  | 81 |  |
| 82 | 82 | ||
| 83 | And for the enclosure that can be 3D printed, but I haven't yet something like this can be used. | 83 | And for the enclosure that can be 3D printed, but I haven't yet something like this can be used. |
| 84 | 84 | ||
| 85 | <iframe id="vs_iframe" src="https://www.viewstl.com/?embedded&url=https%3A%2F%2Fmitjafelicijan.com%2Fassets%2Fworld-clock%2Fenclosure.stl&color=gray&bgcolor=white&edges=no&orientation=front&noborder=no" style="border:0;margin:0;width:100%;height:400px;"></iframe> | 85 | <iframe id="vs_iframe" src="https://www.viewstl.com/?embedded&url=https%3A%2F%2Fmitjafelicijan.com%2Fassets%2Fworld-clock%2Fenclosure.stl&color=gray&bgcolor=white&edges=no&orientation=front&noborder=no" style="border:0;margin:0;width:100%;height:400px;"></iframe> |
| 86 | 86 | ||
| 87 | You can download my [STL file for the enclosure here](/world-clock/enclosure.stl), but make sure that dimensions make sense and also opening for USB port should be added or just use a drill and some hot glue to make it stick in the enclosure. | 87 | You can download my [STL file for the enclosure here](/assets/world-clock/enclosure.stl), but make sure that dimensions make sense and also opening for USB port should be added or just use a drill and some hot glue to make it stick in the enclosure. |
diff --git a/content/posts/2021-12-03-debian-based-riced-up-distribution-for-developers.md b/content/posts/2021-12-03-debian-based-riced-up-distribution-for-developers.md index 1f5bd89..5981392 100644 --- a/content/posts/2021-12-03-debian-based-riced-up-distribution-for-developers.md +++ b/content/posts/2021-12-03-debian-based-riced-up-distribution-for-developers.md | |||
| @@ -43,28 +43,28 @@ I didn't want this to just be a set of config files for theming purpose. I wante | |||
| 43 | 43 | ||
| 44 | First, I choose terminal installer and left it to load additional components. Avoid using graphical installer in this case. | 44 | First, I choose terminal installer and left it to load additional components. Avoid using graphical installer in this case. |
| 45 | 45 | ||
| 46 |  | 46 |  |
| 47 | 47 | ||
| 48 | After that I selected hostname and created a normal user and set password for that user and root user and choose guided mode for disk partitioning. | 48 | After that I selected hostname and created a normal user and set password for that user and root user and choose guided mode for disk partitioning. |
| 49 | 49 | ||
| 50 |  | 50 |  |
| 51 | 51 | ||
| 52 | I left it run to install all the things required for the base system and opted out of scanning additional media for use by the package manager. Those will be downloaded from the internet during installation. | 52 | I left it run to install all the things required for the base system and opted out of scanning additional media for use by the package manager. Those will be downloaded from the internet during installation. |
| 53 | 53 | ||
| 54 |  | 54 |  |
| 55 | 55 | ||
| 56 | 56 | ||
| 57 | I opted out of the popularity contest, and **now comes the important part**. Uncheck all the boxes in Software selection and only leave 'standard system utilities'. I also left an SSH server, so I was able to log in to the machine from my main PC. | 57 | I opted out of the popularity contest, and **now comes the important part**. Uncheck all the boxes in Software selection and only leave 'standard system utilities'. I also left an SSH server, so I was able to log in to the machine from my main PC. |
| 58 | 58 | ||
| 59 |  | 59 |  |
| 60 | 60 | ||
| 61 | At this point, I installed GRUB bootloader on the disk where I installed the system. | 61 | At this point, I installed GRUB bootloader on the disk where I installed the system. |
| 62 | 62 | ||
| 63 |  | 63 |  |
| 64 | 64 | ||
| 65 | That concluded the installation of base Debian and after restarting the computer I was prompted with the login screen. | 65 | That concluded the installation of base Debian and after restarting the computer I was prompted with the login screen. |
| 66 | 66 | ||
| 67 |  | 67 |  |
| 68 | 68 | ||
| 69 | Now that I had the base installation, it was time to choose what software do I want to include in this so-called distribution. I wanted out of the box developer experience, so I had plenty to choose. | 69 | Now that I had the base installation, it was time to choose what software do I want to include in this so-called distribution. I wanted out of the box developer experience, so I had plenty to choose. |
| 70 | 70 | ||
| @@ -84,7 +84,7 @@ One of the requirements for me was easy custom layouts because I use a really st | |||
| 84 | 84 | ||
| 85 | What I was doing in Gnome was having windows in a layout like the diagram below. This is my common practice. And if you look at it you can clearly see I was replicating tiling window manager setup in Gnome. | 85 | What I was doing in Gnome was having windows in a layout like the diagram below. This is my common practice. And if you look at it you can clearly see I was replicating tiling window manager setup in Gnome. |
| 86 | 86 | ||
| 87 |  | 87 |  |
| 88 | 88 | ||
| 89 | 89 | ||
| 90 | That made me look into a bunch of tiling window managers and then tested them out. Candidates I was looking at were: | 90 | That made me look into a bunch of tiling window managers and then tested them out. Candidates I was looking at were: |
| @@ -144,7 +144,7 @@ Currently, most of these recipes use what Debian and this is totally fine with m | |||
| 144 | 144 | ||
| 145 | This is some of the output from the installation script. | 145 | This is some of the output from the installation script. |
| 146 | 146 | ||
| 147 |  | 147 |  |
| 148 | 148 | ||
| 149 | Let's take a look at some examples in the installation script. | 149 | Let's take a look at some examples in the installation script. |
| 150 | 150 | ||
| @@ -191,4 +191,4 @@ The current version boots in 4s to the login prompt, and after you log in, the d | |||
| 191 | 191 | ||
| 192 | And this is how it looks with two terminals side by side. I really like the simplicity and clean interface. I will polish the colors and stuff like that, but I really do like the results. | 192 | And this is how it looks with two terminals side by side. I really like the simplicity and clean interface. I will polish the colors and stuff like that, but I really do like the results. |
| 193 | 193 | ||
| 194 |  | 194 |  |
diff --git a/content/posts/2021-12-25-running-golang-application-as-pid1.md b/content/posts/2021-12-25-running-golang-application-as-pid1.md index 2f49466..7a62d1c 100644 --- a/content/posts/2021-12-25-running-golang-application-as-pid1.md +++ b/content/posts/2021-12-25-running-golang-application-as-pid1.md | |||
| @@ -28,7 +28,7 @@ I really like the explanation from the article [Unikernels: Rise of the Virtual | |||
| 28 | 28 | ||
| 29 | If we compare a normal operating system to a unikernel side by side, they would look something like this. | 29 | If we compare a normal operating system to a unikernel side by side, they would look something like this. |
| 30 | 30 | ||
| 31 |  | 31 |  |
| 32 | 32 | ||
| 33 | From this image, we can see how the complexity significantly decreases with the use of Unikernels. This comes with a price, of course. Unikernels are hard to get running and require a lot of work since you don't have an actual proper kernel running in the background providing network access and drivers etc. | 33 | From this image, we can see how the complexity significantly decreases with the use of Unikernels. This comes with a price, of course. Unikernels are hard to get running and require a lot of work since you don't have an actual proper kernel running in the background providing network access and drivers etc. |
| 34 | 34 | ||
| @@ -221,7 +221,7 @@ Hello from Golang | |||
| 221 | Hello from Golang | 221 | Hello from Golang |
| 222 | ``` | 222 | ``` |
| 223 | 223 | ||
| 224 | The whole [log file here](/pid1/qemu.log). | 224 | The whole [log file here](/assets/pid1/qemu.log). |
| 225 | 225 | ||
| 226 | ## Size comparison | 226 | ## Size comparison |
| 227 | 227 | ||
| @@ -290,7 +290,7 @@ genisoimage -R \ | |||
| 290 | 290 | ||
| 291 | This will produce `GoAsPID1.iso` which you can use with [Virtualbox](https://www.virtualbox.org/) or [Gnome Boxes](https://apps.gnome.org/app/org.gnome.Boxes/). | 291 | This will produce `GoAsPID1.iso` which you can use with [Virtualbox](https://www.virtualbox.org/) or [Gnome Boxes](https://apps.gnome.org/app/org.gnome.Boxes/). |
| 292 | 292 | ||
| 293 | <video src="/pid1/boxes.mp4" controls></video> | 293 | <video src="/assets/pid1/boxes.mp4" controls></video> |
| 294 | 294 | ||
| 295 | ## Is running applications as PID 1 even worth it? | 295 | ## Is running applications as PID 1 even worth it? |
| 296 | 296 | ||
diff --git a/content/posts/2021-12-30-wap-mobile-web-before-the-web.md b/content/posts/2021-12-30-wap-mobile-web-before-the-web.md index e5f6714..49a7116 100644 --- a/content/posts/2021-12-30-wap-mobile-web-before-the-web.md +++ b/content/posts/2021-12-30-wap-mobile-web-before-the-web.md | |||
| @@ -29,7 +29,7 @@ These phones were rocking: | |||
| 29 | 29 | ||
| 30 | Let's take a look at these beauties. | 30 | Let's take a look at these beauties. |
| 31 | 31 | ||
| 32 |  | 32 |  |
| 33 | 33 | ||
| 34 | ## WAP - Wireless Application Protocol | 34 | ## WAP - Wireless Application Protocol |
| 35 | 35 | ||
| @@ -146,7 +146,7 @@ If you look at the python file, I convert all the images into tiny B&W images. T | |||
| 146 | 146 | ||
| 147 | Because I currently don't have a phone old enough to test it on, I used an emulator. And it was really hard to find one. I found [WAP Proof](http://wap-proof.sharewarejunction.com/) on shareware junction, and it did the job well enough. I will try to find and actual device to test it on. | 147 | Because I currently don't have a phone old enough to test it on, I used an emulator. And it was really hard to find one. I found [WAP Proof](http://wap-proof.sharewarejunction.com/) on shareware junction, and it did the job well enough. I will try to find and actual device to test it on. |
| 148 | 148 | ||
| 149 | <video src="/wap/emulator.mp4" controls></video> | 149 | <video src="/assets/wap/emulator.mp4" controls></video> |
| 150 | 150 | ||
| 151 | If you are using Nginx to serve the contents, add a directive to the hosts file that will automatically server `index.wml` file. | 151 | If you are using Nginx to serve the contents, add a directive to the hosts file that will automatically server `index.wml` file. |
| 152 | 152 | ||
diff --git a/content/posts/2022-06-30-trying-out-helix-editor.md b/content/posts/2022-06-30-trying-out-helix-editor.md index 8286735..5e25980 100644 --- a/content/posts/2022-06-30-trying-out-helix-editor.md +++ b/content/posts/2022-06-30-trying-out-helix-editor.md | |||
| @@ -25,7 +25,7 @@ I am still getting used to the keyboard shortcuts and getting better. What Helix | |||
| 25 | 25 | ||
| 26 | And it comes us packed with many [really good themes](https://github.com/helix-editor/helix/wiki/Themes). | 26 | And it comes us packed with many [really good themes](https://github.com/helix-editor/helix/wiki/Themes). |
| 27 | 27 | ||
| 28 |  | 28 |  |
| 29 | 29 | ||
| 30 | It's still young but has this mature feeling to it. It has sane defaults and mimics Vim (works a bit differently, but the overall idea is similar). | 30 | It's still young but has this mature feeling to it. It has sane defaults and mimics Vim (works a bit differently, but the overall idea is similar). |
| 31 | 31 | ||
diff --git a/content/posts/2022-07-05-what-would-dna-sound-if-synthesized.md b/content/posts/2022-07-05-what-would-dna-sound-if-synthesized.md index c028ec2..ba5cc4b 100644 --- a/content/posts/2022-07-05-what-would-dna-sound-if-synthesized.md +++ b/content/posts/2022-07-05-what-would-dna-sound-if-synthesized.md | |||
| @@ -145,10 +145,10 @@ sox output.wav -n spectrogram -o spectrogram.png | |||
| 145 | An example spectrogram of Ludwig van Beethoven Symphony No. 6 First movement. | 145 | An example spectrogram of Ludwig van Beethoven Symphony No. 6 First movement. |
| 146 | 146 | ||
| 147 | <audio controls> | 147 | <audio controls> |
| 148 | <source src="/dna-synthesized/symphony-no6-1st-movement.mp3" type="audio/mpeg"> | 148 | <source src="/assets/dna-synthesized/symphony-no6-1st-movement.mp3" type="audio/mpeg"> |
| 149 | </audio> | 149 | </audio> |
| 150 | 150 | ||
| 151 |  | 151 |  |
| 152 | 152 | ||
| 153 | The other option could also be in combination with [gnuplot](http://www.gnuplot.info/). This would require an intermediary step, however. | 153 | The other option could also be in combination with [gnuplot](http://www.gnuplot.info/). This would require an intermediary step, however. |
| 154 | 154 | ||
| @@ -194,40 +194,40 @@ What I did was take interesting parts from an animal's genome and feed it to a t | |||
| 194 | ### Niels Bohr quote | 194 | ### Niels Bohr quote |
| 195 | 195 | ||
| 196 | <audio controls> | 196 | <audio controls> |
| 197 | <source src="/dna-synthesized/quote/out.mp3" type="audio/mpeg"> | 197 | <source src="/assets/dna-synthesized/quote/out.mp3" type="audio/mpeg"> |
| 198 | </audio> | 198 | </audio> |
| 199 | 199 | ||
| 200 |  | 200 |  |
| 201 | 201 | ||
| 202 | ### Mouse | 202 | ### Mouse |
| 203 | 203 | ||
| 204 | This is part of a mouse genome `Mus_musculus.GRCm39.dna.nonchromosomal`. You can get [genom data here](http://ftp.ensembl.org/pub/release-106/fasta/mus_musculus/dna/). | 204 | This is part of a mouse genome `Mus_musculus.GRCm39.dna.nonchromosomal`. You can get [genom data here](http://ftp.ensembl.org/pub/release-106/fasta/mus_musculus/dna/). |
| 205 | 205 | ||
| 206 | <audio controls> | 206 | <audio controls> |
| 207 | <source src="/dna-synthesized/mouse/out.mp3" type="audio/mpeg"> | 207 | <source src="/assets/dna-synthesized/mouse/out.mp3" type="audio/mpeg"> |
| 208 | </audio> | 208 | </audio> |
| 209 | 209 | ||
| 210 |  | 210 |  |
| 211 | 211 | ||
| 212 | ### Bison | 212 | ### Bison |
| 213 | 213 | ||
| 214 | This is part of a bison genome `Bison_bison_bison.Bison_UMD1.0.cdna`. You can get [genom data here](http://ftp.ensembl.org/pub/release-106/fasta/bison_bison_bison/cdna/). | 214 | This is part of a bison genome `Bison_bison_bison.Bison_UMD1.0.cdna`. You can get [genom data here](http://ftp.ensembl.org/pub/release-106/fasta/bison_bison_bison/cdna/). |
| 215 | 215 | ||
| 216 | <audio controls> | 216 | <audio controls> |
| 217 | <source src="/dna-synthesized/bison/out.mp3" type="audio/mpeg"> | 217 | <source src="/assets/dna-synthesized/bison/out.mp3" type="audio/mpeg"> |
| 218 | </audio> | 218 | </audio> |
| 219 | 219 | ||
| 220 |  | 220 |  |
| 221 | 221 | ||
| 222 | ### Taurus | 222 | ### Taurus |
| 223 | 223 | ||
| 224 | This is part of a taurus genome `Bos_taurus.ARS-UCD1.2.cdna`. You can get [genom data here](http://ftp.ensembl.org/pub/release-106/fasta/bos_taurus/cdna/). | 224 | This is part of a taurus genome `Bos_taurus.ARS-UCD1.2.cdna`. You can get [genom data here](http://ftp.ensembl.org/pub/release-106/fasta/bos_taurus/cdna/). |
| 225 | 225 | ||
| 226 | <audio controls> | 226 | <audio controls> |
| 227 | <source src="/dna-synthesized/taurus/out.mp3" type="audio/mpeg"> | 227 | <source src="/assets/dna-synthesized/taurus/out.mp3" type="audio/mpeg"> |
| 228 | </audio> | 228 | </audio> |
| 229 | 229 | ||
| 230 |  | 230 |  |
| 231 | 231 | ||
| 232 | ## Making a drummer out of a DNA sequence | 232 | ## Making a drummer out of a DNA sequence |
| 233 | 233 | ||
| @@ -235,17 +235,17 @@ To make things even more interesting, I decided to send this data via MIDI to my | |||
| 235 | 235 | ||
| 236 | Elektron is connected to my MacBook via USB cable and audio out is patched to a Sony Bluetooth speaker I have that supports 3.5 mm audio in. Elektron doesn't have internal speakers. | 236 | Elektron is connected to my MacBook via USB cable and audio out is patched to a Sony Bluetooth speaker I have that supports 3.5 mm audio in. Elektron doesn't have internal speakers. |
| 237 | 237 | ||
| 238 |  | 238 |  |
| 239 | 239 | ||
| 240 |  | 240 |  |
| 241 | 241 | ||
| 242 |  | 242 |  |
| 243 | 243 | ||
| 244 | For communicating with Elektron, I choose `pygame` Python module that has MIDI built in. With this, it was rather simple to send notes to the device. All I did was map MIDI notes to the actual Nucleotides. | 244 | For communicating with Elektron, I choose `pygame` Python module that has MIDI built in. With this, it was rather simple to send notes to the device. All I did was map MIDI notes to the actual Nucleotides. |
| 245 | 245 | ||
| 246 | Before all of this I also checked Audio MIDI Setup app under MacOS and checked MIDI Studio by pressing ⌘-2. | 246 | Before all of this I also checked Audio MIDI Setup app under MacOS and checked MIDI Studio by pressing ⌘-2. |
| 247 | 247 | ||
| 248 |  | 248 |  |
| 249 | 249 | ||
| 250 | The whole script that parses and send notes to the Elektron looks like this. | 250 | The whole script that parses and send notes to the Elektron looks like this. |
| 251 | 251 | ||
| @@ -287,7 +287,7 @@ del player | |||
| 287 | pygame.midi.quit() | 287 | pygame.midi.quit() |
| 288 | ``` | 288 | ``` |
| 289 | 289 | ||
| 290 | <video src="/dna-synthesized/elektron/elektron.mp4" controls></video> | 290 | <video src="/assets/dna-synthesized/elektron/elektron.mp4" controls></video> |
| 291 | 291 | ||
| 292 | All of this could be made much more interesting if I choose different instruments for different Nucleotides, or doing more funky stuff with Elektron. But for now, this should be enough. It is just a proof of concept. Something to play around with. | 292 | All of this could be made much more interesting if I choose different instruments for different Nucleotides, or doing more funky stuff with Elektron. But for now, this should be enough. It is just a proof of concept. Something to play around with. |
| 293 | 293 | ||
diff --git a/content/posts/2022-08-13-algae-spotted-on-river-sava.md b/content/posts/2022-08-13-algae-spotted-on-river-sava.md index 2a7e6cd..40b960f 100644 --- a/content/posts/2022-08-13-algae-spotted-on-river-sava.md +++ b/content/posts/2022-08-13-algae-spotted-on-river-sava.md | |||
| @@ -9,16 +9,16 @@ This is a bit of a different post than I usually write, but quite interesting on | |||
| 9 | 9 | ||
| 10 | Below are some photographs taken from a DJI drone capturing the event. | 10 | Below are some photographs taken from a DJI drone capturing the event. |
| 11 | 11 | ||
| 12 |  | 12 |  |
| 13 | 13 | ||
| 14 |  | 14 |  |
| 15 | 15 | ||
| 16 |  | 16 |  |
| 17 | 17 | ||
| 18 |  | 18 |  |
| 19 | 19 | ||
| 20 |  | 20 |  |
| 21 | 21 | ||
| 22 |  | 22 |  |
| 23 | 23 | ||
| 24 | I will try to get more photos of this in the future days and if something intriguing shows up will post it again on the blog. | 24 | I will try to get more photos of this in the future days and if something intriguing shows up will post it again on the blog. |
diff --git a/static/algae-sava/dji-algae-0.jpg b/static/assets/algae-sava/dji-algae-0.jpg index d444c80..d444c80 100644 --- a/static/algae-sava/dji-algae-0.jpg +++ b/static/assets/algae-sava/dji-algae-0.jpg | |||
| Binary files differ | |||
diff --git a/static/algae-sava/dji-algae-1.jpg b/static/assets/algae-sava/dji-algae-1.jpg index 26ee43c..26ee43c 100644 --- a/static/algae-sava/dji-algae-1.jpg +++ b/static/assets/algae-sava/dji-algae-1.jpg | |||
| Binary files differ | |||
diff --git a/static/algae-sava/dji-algae-2.jpg b/static/assets/algae-sava/dji-algae-2.jpg index d38f8cd..d38f8cd 100644 --- a/static/algae-sava/dji-algae-2.jpg +++ b/static/assets/algae-sava/dji-algae-2.jpg | |||
| Binary files differ | |||
diff --git a/static/algae-sava/dji-algae-3.jpg b/static/assets/algae-sava/dji-algae-3.jpg index 9706fa0..9706fa0 100644 --- a/static/algae-sava/dji-algae-3.jpg +++ b/static/assets/algae-sava/dji-algae-3.jpg | |||
| Binary files differ | |||
diff --git a/static/algae-sava/dji-algae-4.jpg b/static/assets/algae-sava/dji-algae-4.jpg index b0db4a2..b0db4a2 100644 --- a/static/algae-sava/dji-algae-4.jpg +++ b/static/assets/algae-sava/dji-algae-4.jpg | |||
| Binary files differ | |||
diff --git a/static/algae-sava/dji-algae-5.jpg b/static/assets/algae-sava/dji-algae-5.jpg index f3c1b3b..f3c1b3b 100644 --- a/static/algae-sava/dji-algae-5.jpg +++ b/static/assets/algae-sava/dji-algae-5.jpg | |||
| Binary files differ | |||
diff --git a/static/cv/avatar.gif b/static/assets/cv/avatar.gif index 82e5f39..82e5f39 100644 --- a/static/cv/avatar.gif +++ b/static/assets/cv/avatar.gif | |||
| Binary files differ | |||
diff --git a/static/dfd-rice/desktop.png b/static/assets/dfd-rice/desktop.png index 8dcfd51..8dcfd51 100644 --- a/static/dfd-rice/desktop.png +++ b/static/assets/dfd-rice/desktop.png | |||
| Binary files differ | |||
diff --git a/static/dfd-rice/install-00.png b/static/assets/dfd-rice/install-00.png index 2660f90..2660f90 100644 --- a/static/dfd-rice/install-00.png +++ b/static/assets/dfd-rice/install-00.png | |||
| Binary files differ | |||
diff --git a/static/dfd-rice/install-01.png b/static/assets/dfd-rice/install-01.png index 1281be1..1281be1 100644 --- a/static/dfd-rice/install-01.png +++ b/static/assets/dfd-rice/install-01.png | |||
| Binary files differ | |||
diff --git a/static/dfd-rice/install-02.png b/static/assets/dfd-rice/install-02.png index 9cac5e3..9cac5e3 100644 --- a/static/dfd-rice/install-02.png +++ b/static/assets/dfd-rice/install-02.png | |||
| Binary files differ | |||
diff --git a/static/dfd-rice/install-03.png b/static/assets/dfd-rice/install-03.png index dc7cbd1..dc7cbd1 100644 --- a/static/dfd-rice/install-03.png +++ b/static/assets/dfd-rice/install-03.png | |||
| Binary files differ | |||
diff --git a/static/dfd-rice/install-04.png b/static/assets/dfd-rice/install-04.png index 675a78f..675a78f 100644 --- a/static/dfd-rice/install-04.png +++ b/static/assets/dfd-rice/install-04.png | |||
| Binary files differ | |||
diff --git a/static/dfd-rice/install-05.png b/static/assets/dfd-rice/install-05.png index 8b580b9..8b580b9 100644 --- a/static/dfd-rice/install-05.png +++ b/static/assets/dfd-rice/install-05.png | |||
| Binary files differ | |||
diff --git a/static/dfd-rice/installation.svg b/static/assets/dfd-rice/installation.svg index bb9560b..bb9560b 100644 --- a/static/dfd-rice/installation.svg +++ b/static/assets/dfd-rice/installation.svg | |||
diff --git a/static/dfd-rice/layout.png b/static/assets/dfd-rice/layout.png index a44d2cd..a44d2cd 100644 --- a/static/dfd-rice/layout.png +++ b/static/assets/dfd-rice/layout.png | |||
| Binary files differ | |||
diff --git a/static/dfd-rice/layout.svg b/static/assets/dfd-rice/layout.svg index 5a9031c..5a9031c 100644 --- a/static/dfd-rice/layout.svg +++ b/static/assets/dfd-rice/layout.svg | |||
diff --git a/static/dfd-rice/script.png b/static/assets/dfd-rice/script.png index 09be37a..09be37a 100644 --- a/static/dfd-rice/script.png +++ b/static/assets/dfd-rice/script.png | |||
| Binary files differ | |||
diff --git a/static/dna-sequence/benchmarks.ods b/static/assets/dna-sequence/benchmarks.ods index 62a8e30..62a8e30 100644 --- a/static/dna-sequence/benchmarks.ods +++ b/static/assets/dna-sequence/benchmarks.ods | |||
| Binary files differ | |||
diff --git a/static/dna-sequence/chart-encoding-speed.png b/static/assets/dna-sequence/chart-encoding-speed.png index 7fb106d..7fb106d 100644 --- a/static/dna-sequence/chart-encoding-speed.png +++ b/static/assets/dna-sequence/chart-encoding-speed.png | |||
| Binary files differ | |||
diff --git a/static/dna-sequence/chart-file-sizes.png b/static/assets/dna-sequence/chart-file-sizes.png index 31bfa66..31bfa66 100644 --- a/static/dna-sequence/chart-file-sizes.png +++ b/static/assets/dna-sequence/chart-file-sizes.png | |||
| Binary files differ | |||
diff --git a/static/dna-sequence/dna-basics.jpg b/static/assets/dna-sequence/dna-basics.jpg index c2e7f52..c2e7f52 100644 --- a/static/dna-sequence/dna-basics.jpg +++ b/static/assets/dna-sequence/dna-basics.jpg | |||
| Binary files differ | |||
diff --git a/static/dna-sequence/quote.png b/static/assets/dna-sequence/quote.png index 09fb01c..09fb01c 100644 --- a/static/dna-sequence/quote.png +++ b/static/assets/dna-sequence/quote.png | |||
| Binary files differ | |||
diff --git a/static/dna-sequence/sample-binary-file.png b/static/assets/dna-sequence/sample-binary-file.png index 1e4622a..1e4622a 100644 --- a/static/dna-sequence/sample-binary-file.png +++ b/static/assets/dna-sequence/sample-binary-file.png | |||
| Binary files differ | |||
diff --git a/static/dna-sequence/sample.png b/static/assets/dna-sequence/sample.png index 30f12da..30f12da 100644 --- a/static/dna-sequence/sample.png +++ b/static/assets/dna-sequence/sample.png | |||
| Binary files differ | |||
diff --git a/static/dna-synthesized/bison/in.txt b/static/assets/dna-synthesized/bison/in.txt index fd1eea6..fd1eea6 100644 --- a/static/dna-synthesized/bison/in.txt +++ b/static/assets/dna-synthesized/bison/in.txt | |||
diff --git a/static/dna-synthesized/bison/out.mp3 b/static/assets/dna-synthesized/bison/out.mp3 index d6408ca..d6408ca 100644 --- a/static/dna-synthesized/bison/out.mp3 +++ b/static/assets/dna-synthesized/bison/out.mp3 | |||
| Binary files differ | |||
diff --git a/static/dna-synthesized/bison/spectogram.png b/static/assets/dna-synthesized/bison/spectogram.png index 959902b..959902b 100644 --- a/static/dna-synthesized/bison/spectogram.png +++ b/static/assets/dna-synthesized/bison/spectogram.png | |||
| Binary files differ | |||
diff --git a/static/dna-synthesized/elektron/IMG_0619.jpg b/static/assets/dna-synthesized/elektron/IMG_0619.jpg index ebf60b0..ebf60b0 100755 --- a/static/dna-synthesized/elektron/IMG_0619.jpg +++ b/static/assets/dna-synthesized/elektron/IMG_0619.jpg | |||
| Binary files differ | |||
diff --git a/static/dna-synthesized/elektron/IMG_0620.jpg b/static/assets/dna-synthesized/elektron/IMG_0620.jpg index c9aa398..c9aa398 100755 --- a/static/dna-synthesized/elektron/IMG_0620.jpg +++ b/static/assets/dna-synthesized/elektron/IMG_0620.jpg | |||
| Binary files differ | |||
diff --git a/static/dna-synthesized/elektron/IMG_0622.jpg b/static/assets/dna-synthesized/elektron/IMG_0622.jpg index 98acee4..98acee4 100755 --- a/static/dna-synthesized/elektron/IMG_0622.jpg +++ b/static/assets/dna-synthesized/elektron/IMG_0622.jpg | |||
| Binary files differ | |||
diff --git a/static/dna-synthesized/elektron/elektron.mp4 b/static/assets/dna-synthesized/elektron/elektron.mp4 index f8e39b9..f8e39b9 100755 --- a/static/dna-synthesized/elektron/elektron.mp4 +++ b/static/assets/dna-synthesized/elektron/elektron.mp4 | |||
| Binary files differ | |||
diff --git a/static/dna-synthesized/elektron/midi-studio.jpg b/static/assets/dna-synthesized/elektron/midi-studio.jpg index 59075cd..59075cd 100755 --- a/static/dna-synthesized/elektron/midi-studio.jpg +++ b/static/assets/dna-synthesized/elektron/midi-studio.jpg | |||
| Binary files differ | |||
diff --git a/static/dna-synthesized/mouse/in.txt b/static/assets/dna-synthesized/mouse/in.txt index abd34a2..abd34a2 100644 --- a/static/dna-synthesized/mouse/in.txt +++ b/static/assets/dna-synthesized/mouse/in.txt | |||
diff --git a/static/dna-synthesized/mouse/out.mp3 b/static/assets/dna-synthesized/mouse/out.mp3 index e66e87b..e66e87b 100644 --- a/static/dna-synthesized/mouse/out.mp3 +++ b/static/assets/dna-synthesized/mouse/out.mp3 | |||
| Binary files differ | |||
diff --git a/static/dna-synthesized/mouse/spectogram.png b/static/assets/dna-synthesized/mouse/spectogram.png index 8b7f63f..8b7f63f 100644 --- a/static/dna-synthesized/mouse/spectogram.png +++ b/static/assets/dna-synthesized/mouse/spectogram.png | |||
| Binary files differ | |||
diff --git a/static/dna-synthesized/quote/in.txt b/static/assets/dna-synthesized/quote/in.txt index 81e8eb9..81e8eb9 100644 --- a/static/dna-synthesized/quote/in.txt +++ b/static/assets/dna-synthesized/quote/in.txt | |||
diff --git a/static/dna-synthesized/quote/out.mp3 b/static/assets/dna-synthesized/quote/out.mp3 index 985871d..985871d 100644 --- a/static/dna-synthesized/quote/out.mp3 +++ b/static/assets/dna-synthesized/quote/out.mp3 | |||
| Binary files differ | |||
diff --git a/static/dna-synthesized/quote/spectogram.png b/static/assets/dna-synthesized/quote/spectogram.png index c460ffd..c460ffd 100644 --- a/static/dna-synthesized/quote/spectogram.png +++ b/static/assets/dna-synthesized/quote/spectogram.png | |||
| Binary files differ | |||
diff --git a/static/dna-synthesized/symphony-no6-1st-movement.mp3 b/static/assets/dna-synthesized/symphony-no6-1st-movement.mp3 index 8c5a609..8c5a609 100644 --- a/static/dna-synthesized/symphony-no6-1st-movement.mp3 +++ b/static/assets/dna-synthesized/symphony-no6-1st-movement.mp3 | |||
| Binary files differ | |||
diff --git a/static/dna-synthesized/symphony-no6-1st-movement.png b/static/assets/dna-synthesized/symphony-no6-1st-movement.png index 8269f08..8269f08 100644 --- a/static/dna-synthesized/symphony-no6-1st-movement.png +++ b/static/assets/dna-synthesized/symphony-no6-1st-movement.png | |||
| Binary files differ | |||
diff --git a/static/dna-synthesized/taurus/in.txt b/static/assets/dna-synthesized/taurus/in.txt index 8c5bddb..8c5bddb 100644 --- a/static/dna-synthesized/taurus/in.txt +++ b/static/assets/dna-synthesized/taurus/in.txt | |||
diff --git a/static/dna-synthesized/taurus/out.mp3 b/static/assets/dna-synthesized/taurus/out.mp3 index ea7ae1a..ea7ae1a 100644 --- a/static/dna-synthesized/taurus/out.mp3 +++ b/static/assets/dna-synthesized/taurus/out.mp3 | |||
| Binary files differ | |||
diff --git a/static/dna-synthesized/taurus/spectogram.png b/static/assets/dna-synthesized/taurus/spectogram.png index 3be9b58..3be9b58 100644 --- a/static/dna-synthesized/taurus/spectogram.png +++ b/static/assets/dna-synthesized/taurus/spectogram.png | |||
| Binary files differ | |||
diff --git a/static/do-fuse/copy-benchmarks.tsv b/static/assets/do-fuse/copy-benchmarks.tsv index c7a7af4..c7a7af4 100644 --- a/static/do-fuse/copy-benchmarks.tsv +++ b/static/assets/do-fuse/copy-benchmarks.tsv | |||
diff --git a/static/do-fuse/fuse-droplets.png b/static/assets/do-fuse/fuse-droplets.png index d7ce243..d7ce243 100644 --- a/static/do-fuse/fuse-droplets.png +++ b/static/assets/do-fuse/fuse-droplets.png | |||
| Binary files differ | |||
diff --git a/static/do-fuse/fuse-spaces.png b/static/assets/do-fuse/fuse-spaces.png index 4dcc1c5..4dcc1c5 100644 --- a/static/do-fuse/fuse-spaces.png +++ b/static/assets/do-fuse/fuse-spaces.png | |||
| Binary files differ | |||
diff --git a/static/do-fuse/sqlite-benchmarks.tsv b/static/assets/do-fuse/sqlite-benchmarks.tsv index daa2c21..daa2c21 100644 --- a/static/do-fuse/sqlite-benchmarks.tsv +++ b/static/assets/do-fuse/sqlite-benchmarks.tsv | |||
diff --git a/static/dropbox-sync/dropbox-spaces.png b/static/assets/dropbox-sync/dropbox-spaces.png index c90f99f..c90f99f 100644 --- a/static/dropbox-sync/dropbox-spaces.png +++ b/static/assets/dropbox-sync/dropbox-spaces.png | |||
| Binary files differ | |||
diff --git a/static/esp8366-micropython/boards.jpg b/static/assets/esp8366-micropython/boards.jpg index 89e2b30..89e2b30 100644 --- a/static/esp8366-micropython/boards.jpg +++ b/static/assets/esp8366-micropython/boards.jpg | |||
| Binary files differ | |||
diff --git a/static/go-profiling/golang-profiling-cpu.pdf b/static/assets/go-profiling/golang-profiling-cpu.pdf index 15241cb..15241cb 100644 --- a/static/go-profiling/golang-profiling-cpu.pdf +++ b/static/assets/go-profiling/golang-profiling-cpu.pdf | |||
| Binary files differ | |||
diff --git a/static/go-profiling/golang-profiling-mem.pdf b/static/assets/go-profiling/golang-profiling-mem.pdf index 822e445..822e445 100644 --- a/static/go-profiling/golang-profiling-mem.pdf +++ b/static/assets/go-profiling/golang-profiling-mem.pdf | |||
| Binary files differ | |||
diff --git a/static/goaccess/goaccess-dash-html.png b/static/assets/goaccess/goaccess-dash-html.png index 917d959..917d959 100644 --- a/static/goaccess/goaccess-dash-html.png +++ b/static/assets/goaccess/goaccess-dash-html.png | |||
| Binary files differ | |||
diff --git a/static/goaccess/goaccess-dash-term.png b/static/assets/goaccess/goaccess-dash-term.png index e3f6357..e3f6357 100644 --- a/static/goaccess/goaccess-dash-term.png +++ b/static/assets/goaccess/goaccess-dash-term.png | |||
| Binary files differ | |||
diff --git a/static/helix-editor/editor.png b/static/assets/helix-editor/editor.png index 2648364..2648364 100644 --- a/static/helix-editor/editor.png +++ b/static/assets/helix-editor/editor.png | |||
| Binary files differ | |||
diff --git a/static/iot-application/iot-app-output.png b/static/assets/iot-application/iot-app-output.png index 1c80589..1c80589 100644 --- a/static/iot-application/iot-app-output.png +++ b/static/assets/iot-application/iot-app-output.png | |||
| Binary files differ | |||
diff --git a/static/iot-application/iot-rest-example.png b/static/assets/iot-application/iot-rest-example.png index 3ed86aa..3ed86aa 100644 --- a/static/iot-application/iot-rest-example.png +++ b/static/assets/iot-application/iot-rest-example.png | |||
| Binary files differ | |||
diff --git a/static/iot-application/iot-sqlite-db.png b/static/assets/iot-application/iot-sqlite-db.png index 82e1e29..82e1e29 100644 --- a/static/iot-application/iot-sqlite-db.png +++ b/static/assets/iot-application/iot-sqlite-db.png | |||
| Binary files differ | |||
diff --git a/static/iot-application/kcachegrind.png b/static/assets/iot-application/kcachegrind.png index 0dc48ab..0dc48ab 100644 --- a/static/iot-application/kcachegrind.png +++ b/static/assets/iot-application/kcachegrind.png | |||
| Binary files differ | |||
diff --git a/static/iot-application/profiling-viewer.png b/static/assets/iot-application/profiling-viewer.png index a450513..a450513 100644 --- a/static/iot-application/profiling-viewer.png +++ b/static/assets/iot-application/profiling-viewer.png | |||
| Binary files differ | |||
diff --git a/static/iot-application/simple-iot-application-overview.svg b/static/assets/iot-application/simple-iot-application-overview.svg index 817666d..817666d 100644 --- a/static/iot-application/simple-iot-application-overview.svg +++ b/static/assets/iot-application/simple-iot-application-overview.svg | |||
diff --git a/static/iot-application/simple-iot-application.zip b/static/assets/iot-application/simple-iot-application.zip index 46d3205..46d3205 100644 --- a/static/iot-application/simple-iot-application.zip +++ b/static/assets/iot-application/simple-iot-application.zip | |||
| Binary files differ | |||
diff --git a/static/iot-application/snakeviz.png b/static/assets/iot-application/snakeviz.png index 5bab395..5bab395 100644 --- a/static/iot-application/snakeviz.png +++ b/static/assets/iot-application/snakeviz.png | |||
| Binary files differ | |||
diff --git a/static/pid1/boxes.mp4 b/static/assets/pid1/boxes.mp4 index eb647ff..eb647ff 100644 --- a/static/pid1/boxes.mp4 +++ b/static/assets/pid1/boxes.mp4 | |||
| Binary files differ | |||
diff --git a/static/pid1/qemu.log b/static/assets/pid1/qemu.log index 11be312..11be312 100644 --- a/static/pid1/qemu.log +++ b/static/assets/pid1/qemu.log | |||
diff --git a/static/pid1/unikernels.png b/static/assets/pid1/unikernels.png index 16026ed..16026ed 100644 --- a/static/pid1/unikernels.png +++ b/static/assets/pid1/unikernels.png | |||
| Binary files differ | |||
diff --git a/static/pid1/unikernels.svg b/static/assets/pid1/unikernels.svg index 460fb94..460fb94 100644 --- a/static/pid1/unikernels.svg +++ b/static/assets/pid1/unikernels.svg | |||
diff --git a/static/profile-bind-error/error.jpg b/static/assets/profile-bind-error/error.jpg index c2e4e8f..c2e4e8f 100644 --- a/static/profile-bind-error/error.jpg +++ b/static/assets/profile-bind-error/error.jpg | |||
| Binary files differ | |||
diff --git a/static/python-profiling/kcachegrind.png b/static/assets/python-profiling/kcachegrind.png index 0dc48ab..0dc48ab 100644 --- a/static/python-profiling/kcachegrind.png +++ b/static/assets/python-profiling/kcachegrind.png | |||
| Binary files differ | |||
diff --git a/static/python-profiling/profiling-viewer.png b/static/assets/python-profiling/profiling-viewer.png index a450513..a450513 100644 --- a/static/python-profiling/profiling-viewer.png +++ b/static/assets/python-profiling/profiling-viewer.png | |||
| Binary files differ | |||
diff --git a/static/python-profiling/snakeviz.png b/static/assets/python-profiling/snakeviz.png index 5bab395..5bab395 100644 --- a/static/python-profiling/snakeviz.png +++ b/static/assets/python-profiling/snakeviz.png | |||
| Binary files differ | |||
diff --git a/static/sentiment-analysis/.ipynb_checkpoints/TF Test-checkpoint.ipynb b/static/assets/sentiment-analysis/.ipynb_checkpoints/TF Test-checkpoint.ipynb index e2a85c4..e2a85c4 100644 --- a/static/sentiment-analysis/.ipynb_checkpoints/TF Test-checkpoint.ipynb +++ b/static/assets/sentiment-analysis/.ipynb_checkpoints/TF Test-checkpoint.ipynb | |||
diff --git a/static/sentiment-analysis/.ipynb_checkpoints/sentiment-analysis-checkpoint.ipynb b/static/assets/sentiment-analysis/.ipynb_checkpoints/sentiment-analysis-checkpoint.ipynb index 2c0934c..2c0934c 100644 --- a/static/sentiment-analysis/.ipynb_checkpoints/sentiment-analysis-checkpoint.ipynb +++ b/static/assets/sentiment-analysis/.ipynb_checkpoints/sentiment-analysis-checkpoint.ipynb | |||
diff --git a/static/sentiment-analysis/guardian-sa-title-desc-relationship.png b/static/assets/sentiment-analysis/guardian-sa-title-desc-relationship.png index 7195bbf..7195bbf 100644 --- a/static/sentiment-analysis/guardian-sa-title-desc-relationship.png +++ b/static/assets/sentiment-analysis/guardian-sa-title-desc-relationship.png | |||
| Binary files differ | |||
diff --git a/static/sentiment-analysis/sentiment-analysis.ipynb b/static/assets/sentiment-analysis/sentiment-analysis.ipynb index 2c0934c..2c0934c 100644 --- a/static/sentiment-analysis/sentiment-analysis.ipynb +++ b/static/assets/sentiment-analysis/sentiment-analysis.ipynb | |||
diff --git a/static/simple-pubsub-server/caniuse.png b/static/assets/simple-pubsub-server/caniuse.png index 90f7883..90f7883 100644 --- a/static/simple-pubsub-server/caniuse.png +++ b/static/assets/simple-pubsub-server/caniuse.png | |||
| Binary files differ | |||
diff --git a/static/simple-pubsub-server/chrome-debugging.png b/static/assets/simple-pubsub-server/chrome-debugging.png index 1bdc448..1bdc448 100644 --- a/static/simple-pubsub-server/chrome-debugging.png +++ b/static/assets/simple-pubsub-server/chrome-debugging.png | |||
| Binary files differ | |||
diff --git a/static/simple-pubsub-server/clients.m4v b/static/assets/simple-pubsub-server/clients.m4v index 1342bc6..1342bc6 100644 --- a/static/simple-pubsub-server/clients.m4v +++ b/static/assets/simple-pubsub-server/clients.m4v | |||
| Binary files differ | |||
diff --git a/static/simple-pubsub-server/pubsub-overview.png b/static/assets/simple-pubsub-server/pubsub-overview.png index 0279ec3..0279ec3 100644 --- a/static/simple-pubsub-server/pubsub-overview.png +++ b/static/assets/simple-pubsub-server/pubsub-overview.png | |||
| Binary files differ | |||
diff --git a/static/simple-pubsub-server/sse-pubsub-server.zip b/static/assets/simple-pubsub-server/sse-pubsub-server.zip index 898b290..898b290 100644 --- a/static/simple-pubsub-server/sse-pubsub-server.zip +++ b/static/assets/simple-pubsub-server/sse-pubsub-server.zip | |||
| Binary files differ | |||
diff --git a/static/wap/emulator.mp4 b/static/assets/wap/emulator.mp4 index e4f59aa..e4f59aa 100644 --- a/static/wap/emulator.mp4 +++ b/static/assets/wap/emulator.mp4 | |||
| Binary files differ | |||
diff --git a/static/wap/phones.gif b/static/assets/wap/phones.gif index 15f99e2..15f99e2 100644 --- a/static/wap/phones.gif +++ b/static/assets/wap/phones.gif | |||
| Binary files differ | |||
diff --git a/static/world-clock/enclosure.stl b/static/assets/world-clock/enclosure.stl index 99f3d1a..99f3d1a 100644 --- a/static/world-clock/enclosure.stl +++ b/static/assets/world-clock/enclosure.stl | |||
| Binary files differ | |||
diff --git a/static/world-clock/hardware.jpg b/static/assets/world-clock/hardware.jpg index 315a04d..315a04d 100644 --- a/static/world-clock/hardware.jpg +++ b/static/assets/world-clock/hardware.jpg | |||
| Binary files differ | |||
diff --git a/static/world-clock/world-clock.jpg b/static/assets/world-clock/world-clock.jpg index afdb6e2..afdb6e2 100644 --- a/static/world-clock/world-clock.jpg +++ b/static/assets/world-clock/world-clock.jpg | |||
| Binary files differ | |||
diff --git a/static/yapyap/hello.png b/static/assets/yapyap/hello.png index d141cd3..d141cd3 100644 --- a/static/yapyap/hello.png +++ b/static/assets/yapyap/hello.png | |||
| Binary files differ | |||
diff --git a/static/yapyap/pid1.jpg b/static/assets/yapyap/pid1.jpg index 99bc1d8..99bc1d8 100644 --- a/static/yapyap/pid1.jpg +++ b/static/assets/yapyap/pid1.jpg | |||
| Binary files differ | |||
diff --git a/themes/simple/layouts/partials/footer.html b/themes/simple/layouts/partials/footer.html index 3d1e481..8881f46 100644 --- a/themes/simple/layouts/partials/footer.html +++ b/themes/simple/layouts/partials/footer.html | |||
| @@ -1,7 +1,9 @@ | |||
| 1 | <footer class="container-blog px-6 md:p-0 text-gray-400 text-sm mb-12"> | 1 | <footer class="container-blog px-6 md:p-0 text-gray-400 text-sm"> |
| 2 | This website does not track you. | 2 | <p class="pb-12"> |
| 3 | Content is made available under the <a href="https://creativecommons.org/licenses/by/4.0/" target="_blank" rel="noreferrer" class="underline hover:text-gray-800">CC BY 4.0 license</a> unless specified otherwise. | 3 | This website does not track you. |
| 4 | Blog feed is available as <a href="/index.xml" target="_blank" class="underline hover:text-gray-800">RSS</a> feed. | 4 | Content is made available under the <a href="https://creativecommons.org/licenses/by/4.0/" target="_blank" rel="noreferrer" class="underline hover:text-gray-800">CC BY 4.0 license</a> unless specified otherwise. |
| 5 | Blog feed is available as <a href="/index.xml" target="_blank" class="underline hover:text-gray-800">RSS</a> feed. | ||
| 6 | </p> | ||
| 5 | </footer> | 7 | </footer> |
| 6 | 8 | ||
| 7 | <!-- katex math library --> | 9 | <!-- katex math library --> |
diff --git a/themes/simple/layouts/partials/head.html b/themes/simple/layouts/partials/head.html index fc79650..28e4466 100644 --- a/themes/simple/layouts/partials/head.html +++ b/themes/simple/layouts/partials/head.html | |||
| @@ -2,187 +2,16 @@ | |||
| 2 | <meta name="theme-color" content="#ffffff"> | 2 | <meta name="theme-color" content="#ffffff"> |
| 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 | 4 | ||
| 5 | <script src="https://cdn.tailwindcss.com"></script> | ||
| 6 | 5 | ||
| 7 | <link rel="alternate" type="application/rss+xml" href="/index.xml"> | 6 | <link rel="alternate" type="application/rss+xml" href="/index.xml"> |
| 8 | 7 | ||
| 9 | <link | 8 | <link |
| 10 | href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL69vf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv76+/8LBwQkAAAAAAAAAAAAAAAC+vb3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL+9vf/Bv78JAAAAAAAAAAAAAAAAu7q6/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC7ubr/vr29CAAAAAAAAAAAy8nJAZ6foP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnqGj/6GipAoAAAAAHLjU/xcXHf/BwsL/I8XY/yPK3v8XGiD/IbjL/yPF2f8XGiD/Fxkf/yLF2f8gnK3/Fxog/62ztv8fwNf/FRcd/x271v8mz93/GRsi/xkXHf8p097/GiIp/xobIv8p0t3/KdPe/xocIv8fYmr/KNPe/xoZH/8aHCL/J87c/xy81/8VFxz/IsPZ/8zS0/8XGiD/Ir/R/yPH2/8XGiD/Fxkf/yPH2/8dd4T/GBog/yPJ3f8jyNr/uru9/xcUGv8cudb/EhITDKi5vRKlvMP/RUpOERwcHRAdOj4QHTk8EBwdHRAdNTgQHTo/EBwcHRAcHB0QSGduEKW4vf+koqQfHzg+EBqz0ewSFRv7EyMr/xq51vsTERb7ExUb+xq41fsau9j7ExUb+xiPp/sZudb7ExUb+xMVG/sZuNX/GKvI/BIUGfMdvdn/IrfL/xcaIP8n1eb/J9Dh/xkcIf8ZGR7/J8/f/xxCSv8ZGyH/J9Dg/ybQ4P8ZHCL/FSQs/yPK3/8UExj/GE1b/ybS5P8ZGB7/Ghwj/ynW5P8p2Ob/Ghwi/yWrtv8p1eH/Ghwi/xocIv8p1uT/J8XT/xkcIv8m1un/Hb7d/xUYH/8hzOr/HtHu/xcaIf8XGB//I8vi/xgxOv8XGSD/I8rg/yPK4P8XGiD/GUFL/yPP6f8SERj/Fhkh/x3A4f8AAAAAJ2f9/ydr//8mZPH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlYu38J2v//ydo/f8AAAAAAAAAAAd8/fkFqf//Iob8sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMY39awWr//8FfP3/AAAAAAAAAAAFm/7/SfD//wR+/f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOB/f9B7v//BaX+/wAAAAAAAAAAQ878SAyZ/v9n1v4KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADu9v8DDJb+/z3N/XgAAAAA3/sAAN/7AADf+wAA3/sAAAAAAAAAAAAAAAAAAN/7AAAAAAAAAAAAAAAAAAAAAAAAj/EAAI/5AACP8QAA3/sAAA==" | 9 | href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL69vf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv76+/8LBwQkAAAAAAAAAAAAAAAC+vb3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL+9vf/Bv78JAAAAAAAAAAAAAAAAu7q6/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC7ubr/vr29CAAAAAAAAAAAy8nJAZ6foP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnqGj/6GipAoAAAAAHLjU/xcXHf/BwsL/I8XY/yPK3v8XGiD/IbjL/yPF2f8XGiD/Fxkf/yLF2f8gnK3/Fxog/62ztv8fwNf/FRcd/x271v8mz93/GRsi/xkXHf8p097/GiIp/xobIv8p0t3/KdPe/xocIv8fYmr/KNPe/xoZH/8aHCL/J87c/xy81/8VFxz/IsPZ/8zS0/8XGiD/Ir/R/yPH2/8XGiD/Fxkf/yPH2/8dd4T/GBog/yPJ3f8jyNr/uru9/xcUGv8cudb/EhITDKi5vRKlvMP/RUpOERwcHRAdOj4QHTk8EBwdHRAdNTgQHTo/EBwcHRAcHB0QSGduEKW4vf+koqQfHzg+EBqz0ewSFRv7EyMr/xq51vsTERb7ExUb+xq41fsau9j7ExUb+xiPp/sZudb7ExUb+xMVG/sZuNX/GKvI/BIUGfMdvdn/IrfL/xcaIP8n1eb/J9Dh/xkcIf8ZGR7/J8/f/xxCSv8ZGyH/J9Dg/ybQ4P8ZHCL/FSQs/yPK3/8UExj/GE1b/ybS5P8ZGB7/Ghwj/ynW5P8p2Ob/Ghwi/yWrtv8p1eH/Ghwi/xocIv8p1uT/J8XT/xkcIv8m1un/Hb7d/xUYH/8hzOr/HtHu/xcaIf8XGB//I8vi/xgxOv8XGSD/I8rg/yPK4P8XGiD/GUFL/yPP6f8SERj/Fhkh/x3A4f8AAAAAJ2f9/ydr//8mZPH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlYu38J2v//ydo/f8AAAAAAAAAAAd8/fkFqf//Iob8sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMY39awWr//8FfP3/AAAAAAAAAAAFm/7/SfD//wR+/f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOB/f9B7v//BaX+/wAAAAAAAAAAQ878SAyZ/v9n1v4KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADu9v8DDJb+/z3N/XgAAAAA3/sAAN/7AADf+wAA3/sAAAAAAAAAAAAAAAAAAN/7AAAAAAAAAAAAAAAAAAAAAAAAj/EAAI/5AACP8QAA3/sAAA==" |
| 11 | rel="icon" type="image/x-icon" /> | 10 | rel="icon" type="image/x-icon" /> |
| 12 | 11 | ||
| 13 | <title>{{.Title}}</title> | 12 | <title>{{.Title}}</title> |
| 14 | <meta name="description" content="{{ .Site.Params.description }}" /> | 13 | <meta name="description" content="{{ .Site.Params.description }}" /> |
| 15 | 14 | ||
| 15 | <script src="https://cdn.tailwindcss.com"></script> | ||
| 16 | 16 | ||
| 17 | <style> | 17 | {{ partial "tailwind.html" . }} |
| 18 | .container-blog { | ||
| 19 | max-width: 640px; | ||
| 20 | margin: 0 auto; | ||
| 21 | } | ||
| 22 | |||
| 23 | ::selection { | ||
| 24 | background: rgb(255, 241, 177); | ||
| 25 | color: #000; | ||
| 26 | } | ||
| 27 | |||
| 28 | ::-moz-selection { | ||
| 29 | background: rgb(255, 241, 177); | ||
| 30 | color: #000; | ||
| 31 | } | ||
| 32 | |||
| 33 | article.single img { | ||
| 34 | max-width: 110%; | ||
| 35 | width: 110%; | ||
| 36 | position: relative; | ||
| 37 | left: -5%; | ||
| 38 | margin: 40px auto; | ||
| 39 | display: block; | ||
| 40 | border-radius: 5px; | ||
| 41 | } | ||
| 42 | |||
| 43 | article.single p { | ||
| 44 | display: block; | ||
| 45 | margin-block-start: 1em; | ||
| 46 | margin-block-end: 1em; | ||
| 47 | margin-inline-start: 0px; | ||
| 48 | margin-inline-end: 0px; | ||
| 49 | } | ||
| 50 | |||
| 51 | article.single ol { | ||
| 52 | display: block; | ||
| 53 | list-style-type: decimal; | ||
| 54 | margin-block-start: 1em; | ||
| 55 | margin-block-end: 1em; | ||
| 56 | margin-inline-start: 0px; | ||
| 57 | margin-inline-end: 0px; | ||
| 58 | padding-inline-start: 40px; | ||
| 59 | } | ||
| 60 | |||
| 61 | article.single ol>li>ol { | ||
| 62 | margin-block-start: 0 !important; | ||
| 63 | margin-block-end: 0 !important; | ||
| 64 | padding-inline-start: 20px; | ||
| 65 | } | ||
| 66 | |||
| 67 | article.single ul { | ||
| 68 | display: block; | ||
| 69 | list-style-type: disc; | ||
| 70 | margin-block-start: 1em; | ||
| 71 | margin-block-end: 1em; | ||
| 72 | margin-inline-start: 0px; | ||
| 73 | margin-inline-end: 0px; | ||
| 74 | padding-inline-start: 40px; | ||
| 75 | } | ||
| 76 | |||
| 77 | article.single code { | ||
| 78 | font-family: monospace; | ||
| 79 | background: rgb(255, 241, 177); | ||
| 80 | border-radius: 5px; | ||
| 81 | padding: 2px 8px; | ||
| 82 | font-weight: 500; | ||
| 83 | } | ||
| 84 | |||
| 85 | article.single pre { | ||
| 86 | background: unset; | ||
| 87 | padding: unset; | ||
| 88 | |||
| 89 | overflow-x: auto; | ||
| 90 | background: #f8f8f8 !important; | ||
| 91 | padding: 15px 20px; | ||
| 92 | border-radius: 5px; | ||
| 93 | |||
| 94 | margin-block-start: 40px; | ||
| 95 | margin-block-end: 40px; | ||
| 96 | } | ||
| 97 | |||
| 98 | article.single pre>code { | ||
| 99 | background: unset; | ||
| 100 | padding: unset; | ||
| 101 | font-weight: 400; | ||
| 102 | } | ||
| 103 | |||
| 104 | article.single h2 { | ||
| 105 | font-size: 180%; | ||
| 106 | line-height: 1.2em; | ||
| 107 | font-weight: 700; | ||
| 108 | margin-block-start: 40px; | ||
| 109 | margin-block-end: 20px; | ||
| 110 | } | ||
| 111 | |||
| 112 | article.single h3 { | ||
| 113 | margin-block-start: 30px; | ||
| 114 | margin-block-end: 20px; | ||
| 115 | font-size: 160%; | ||
| 116 | line-height: 1.2em; | ||
| 117 | font-weight: 700; | ||
| 118 | } | ||
| 119 | |||
| 120 | table { | ||
| 121 | width: 100%; | ||
| 122 | } | ||
| 123 | |||
| 124 | table, | ||
| 125 | th, | ||
| 126 | td { | ||
| 127 | border: 1px solid black; | ||
| 128 | text-align: left; | ||
| 129 | } | ||
| 130 | |||
| 131 | th, | ||
| 132 | td { | ||
| 133 | padding: 5px 10px; | ||
| 134 | } | ||
| 135 | |||
| 136 | article.single a { | ||
| 137 | text-decoration: underline; | ||
| 138 | } | ||
| 139 | |||
| 140 | article.single blockquote { | ||
| 141 | margin-left: 40px; | ||
| 142 | position: relative; | ||
| 143 | margin-block-start: 30px; | ||
| 144 | margin-block-end: 30px; | ||
| 145 | margin-right: 0; | ||
| 146 | } | ||
| 147 | |||
| 148 | article.single blockquote:before { | ||
| 149 | content: ' '; | ||
| 150 | background-image: url('/general/alert-light.svg'); | ||
| 151 | background-size: 30px 30px; | ||
| 152 | height: 30px; | ||
| 153 | width: 30px; | ||
| 154 | position: absolute; | ||
| 155 | left: -40px; | ||
| 156 | top: 6px; | ||
| 157 | } | ||
| 158 | |||
| 159 | article.single blockquote p { | ||
| 160 | padding-left: 10px; | ||
| 161 | } | ||
| 162 | |||
| 163 | article.single video { | ||
| 164 | max-width: 100%; | ||
| 165 | margin: 30px auto; | ||
| 166 | display: block; | ||
| 167 | border-radius: 5px; | ||
| 168 | background: #f8f8f8 !important; | ||
| 169 | } | ||
| 170 | |||
| 171 | article.single audio { | ||
| 172 | width: 100%; | ||
| 173 | outline: none; | ||
| 174 | } | ||
| 175 | |||
| 176 | article.single .katex-display { | ||
| 177 | margin-block-start: 40px; | ||
| 178 | margin-block-end: 40px; | ||
| 179 | } | ||
| 180 | |||
| 181 | @media only screen and (max-width: 600px) { | ||
| 182 | article img { | ||
| 183 | max-width: 100%; | ||
| 184 | position: initial; | ||
| 185 | margin: 20px auto; | ||
| 186 | } | ||
| 187 | } | ||
| 188 | </style> | ||
diff --git a/themes/simple/layouts/partials/tailwind.html b/themes/simple/layouts/partials/tailwind.html new file mode 100644 index 0000000..078882c --- /dev/null +++ b/themes/simple/layouts/partials/tailwind.html | |||
| @@ -0,0 +1,106 @@ | |||
| 1 | <style type="text/tailwindcss"> | ||
| 2 | @layer utilities { | ||
| 3 | |||
| 4 | /* Container */ | ||
| 5 | .container-blog { | ||
| 6 | max-width: 640px; | ||
| 7 | margin: 0 auto; | ||
| 8 | } | ||
| 9 | |||
| 10 | /* User text selection */ | ||
| 11 | ::selection { | ||
| 12 | @apply bg-yellow-100 text-black; | ||
| 13 | } | ||
| 14 | |||
| 15 | ::-moz-selection { | ||
| 16 | @apply bg-yellow-100 text-black; | ||
| 17 | } | ||
| 18 | |||
| 19 | /* Headings */ | ||
| 20 | article.single h2 { | ||
| 21 | @apply text-2xl font-bold mb-4 mt-8; | ||
| 22 | } | ||
| 23 | |||
| 24 | article.single h3 { | ||
| 25 | @apply text-xl font-bold mb-4 mt-8; | ||
| 26 | } | ||
| 27 | |||
| 28 | article.single h4 { | ||
| 29 | @apply text-lg font-bold mb-4 mt-8; | ||
| 30 | } | ||
| 31 | |||
| 32 | /* Paragraph */ | ||
| 33 | article.single p { | ||
| 34 | @apply mb-5; | ||
| 35 | } | ||
| 36 | |||
| 37 | /* Links */ | ||
| 38 | article.single a { | ||
| 39 | @apply underline hover:bg-yellow-200; | ||
| 40 | } | ||
| 41 | |||
| 42 | /* Blockquote */ | ||
| 43 | article.single blockquote { | ||
| 44 | background-image: url('/general/alert-light.svg'); | ||
| 45 | background-size: 30px 30px; | ||
| 46 | background-repeat: no-repeat; | ||
| 47 | background-position: 0 5px; | ||
| 48 | @apply pl-12 my-8; | ||
| 49 | } | ||
| 50 | |||
| 51 | /* Media: Images, audio, video */ | ||
| 52 | article.single img { | ||
| 53 | @apply rounded w-full !bg-gray-50 my-8; | ||
| 54 | } | ||
| 55 | |||
| 56 | article.single video { | ||
| 57 | @apply rounded w-full !bg-gray-50; | ||
| 58 | } | ||
| 59 | |||
| 60 | article.single audio { | ||
| 61 | @apply w-full mb-6; | ||
| 62 | } | ||
| 63 | |||
| 64 | /* Code */ | ||
| 65 | article.single code { | ||
| 66 | @apply bg-yellow-200 rounded px-2 py-1 text-xs font-medium; | ||
| 67 | } | ||
| 68 | |||
| 69 | article.single pre { | ||
| 70 | @apply !bg-gray-50 rounded text-xs p-4 mb-6 overflow-x-auto; | ||
| 71 | } | ||
| 72 | |||
| 73 | article.single pre code { | ||
| 74 | background: unset; | ||
| 75 | padding: unset; | ||
| 76 | @apply leading-relaxed; | ||
| 77 | } | ||
| 78 | |||
| 79 | /* Tables */ | ||
| 80 | article.single table { | ||
| 81 | @apply w-full border border-black border-collapse mb-4; | ||
| 82 | } | ||
| 83 | |||
| 84 | article.single table tr, | ||
| 85 | article.single table td, | ||
| 86 | article.single table th { | ||
| 87 | @apply px-4 py-2 border text-left; | ||
| 88 | } | ||
| 89 | |||
| 90 | /* Unordered list */ | ||
| 91 | article.single ul { | ||
| 92 | @apply list-disc pl-6 md:pl-10 mb-6; | ||
| 93 | } | ||
| 94 | |||
| 95 | /* Ordered list */ | ||
| 96 | article.single ol { | ||
| 97 | @apply list-decimal pl-8 md:pl-10; | ||
| 98 | } | ||
| 99 | |||
| 100 | /* Katex */ | ||
| 101 | article.single .katex-display { | ||
| 102 | @apply my-10; | ||
| 103 | } | ||
| 104 | |||
| 105 | } | ||
| 106 | </style> | ||
