From 4b2d1a4571f44f8287888985aa8669b0151e7541 Mon Sep 17 00:00:00 2001 From: Miguel Date: Tue, 19 Feb 2019 16:42:05 +0100 Subject: v0.1 --- 00_404/index.md | 4 - 010_me/Michal-Idziorek.jpg | Bin 8381 -> 0 bytes 010_me/Michal_Idziorek_CV.pdf | Bin 1444412 -> 0 bytes 010_me/index.md | 53 -- .../index.md | 43 - .../00110_Midnight-Commander-Cheatsheet/index.md | 61 -- 080_blog/00010_Various-Cheat-Sheets/index.md | 3 - .../index.md | 391 ---------- 080_blog/00015_Admin/00005_Miscellanous/index.md | 866 +++++++++++++++++++++ .../index.md | 43 + .../00110_Midnight-Commander-Cheatsheet/index.md | 61 ++ .../00010_Various-Cheat-Sheets/index.md | 3 + .../index.md | 89 +++ .../00090_Miguels-KVM-Adventures/index.md | 212 +++++ .../00090_Miguels-KVM-Adventures/ipv4.png | Bin 0 -> 123475 bytes 080_blog/00015_Admin/index.md | 2 + 080_blog/00015_Miscellanous/index.md | 475 ----------- 080_blog/00020_WWW-Projects-and-Apps/aquarelle.jpg | Bin 0 -> 26481 bytes .../00020_WWW-Projects-and-Apps/atenefunds.png | Bin 0 -> 231690 bytes .../00020_WWW-Projects-and-Apps/atenefunds2.jpg | Bin 0 -> 28192 bytes .../00020_WWW-Projects-and-Apps/atenefunds3.jpg | Bin 0 -> 32643 bytes .../00020_WWW-Projects-and-Apps/atenefunds4.jpg | Bin 0 -> 14992 bytes 080_blog/00020_WWW-Projects-and-Apps/atenekom.jpg | Bin 0 -> 6732 bytes 080_blog/00020_WWW-Projects-and-Apps/aufbau.jpg | Bin 0 -> 279483 bytes .../austria-org-pl-old.png | Bin 0 -> 581535 bytes .../00020_WWW-Projects-and-Apps/austria-org-pl.png | Bin 0 -> 431793 bytes .../00020_WWW-Projects-and-Apps/austrian-wine.png | Bin 0 -> 500283 bytes 080_blog/00020_WWW-Projects-and-Apps/balbuza.png | Bin 0 -> 479725 bytes .../00020_WWW-Projects-and-Apps/bildershopping.jpg | Bin 0 -> 41078 bytes .../00020_WWW-Projects-and-Apps/bildershopping.png | Bin 0 -> 570595 bytes .../bildershopping2.png | Bin 0 -> 708693 bytes .../breitbandausschreibungen1.png | Bin 0 -> 329626 bytes .../breitbandausschreibungen2.png | Bin 0 -> 408084 bytes 080_blog/00020_WWW-Projects-and-Apps/brlr1.png | Bin 0 -> 176063 bytes 080_blog/00020_WWW-Projects-and-Apps/bunzlauer.png | Bin 0 -> 1810734 bytes .../00020_WWW-Projects-and-Apps/bunzlauershop.png | Bin 0 -> 452369 bytes .../00020_WWW-Projects-and-Apps/captainsdinner.png | Bin 0 -> 190249 bytes 080_blog/00020_WWW-Projects-and-Apps/casamila.png | Bin 0 -> 3172147 bytes .../00020_WWW-Projects-and-Apps/condition-red.png | Bin 0 -> 464616 bytes .../00020_WWW-Projects-and-Apps/copterwerk.png | Bin 0 -> 841318 bytes 080_blog/00020_WWW-Projects-and-Apps/cornea.jpg | Bin 0 -> 30996 bytes 080_blog/00020_WWW-Projects-and-Apps/cornea.png | Bin 0 -> 120721 bytes 080_blog/00020_WWW-Projects-and-Apps/cqs.jpg | Bin 0 -> 299525 bytes 080_blog/00020_WWW-Projects-and-Apps/cuadro.png | Bin 0 -> 674510 bytes 080_blog/00020_WWW-Projects-and-Apps/flipper.jpg | Bin 0 -> 27938 bytes 080_blog/00020_WWW-Projects-and-Apps/flipper2.jpg | Bin 0 -> 53303 bytes .../00020_WWW-Projects-and-Apps/foto-pschill.png | Bin 0 -> 200807 bytes 080_blog/00020_WWW-Projects-and-Apps/ikm.jpg | Bin 0 -> 40688 bytes .../00020_WWW-Projects-and-Apps/immoconnect.png | Bin 0 -> 531589 bytes 080_blog/00020_WWW-Projects-and-Apps/index.md | 541 +++++++++++++ .../00020_WWW-Projects-and-Apps/kulturmanag.jpg | Bin 0 -> 49488 bytes .../00020_WWW-Projects-and-Apps/kunst-stuecke.png | Bin 0 -> 175802 bytes 080_blog/00020_WWW-Projects-and-Apps/lev.jpg | Bin 0 -> 39240 bytes 080_blog/00020_WWW-Projects-and-Apps/link-all.png | Bin 0 -> 371759 bytes 080_blog/00020_WWW-Projects-and-Apps/maiden.jpg | Bin 0 -> 25425 bytes 080_blog/00020_WWW-Projects-and-Apps/maiden2.png | Bin 0 -> 290072 bytes 080_blog/00020_WWW-Projects-and-Apps/mazury.png | Bin 0 -> 1056601 bytes .../00020_WWW-Projects-and-Apps/meersalzgrotte.png | Bin 0 -> 918115 bytes 080_blog/00020_WWW-Projects-and-Apps/mmtour.png | Bin 0 -> 1280083 bytes 080_blog/00020_WWW-Projects-and-Apps/nadler.png | Bin 0 -> 311992 bytes 080_blog/00020_WWW-Projects-and-Apps/nadler2.png | Bin 0 -> 595521 bytes 080_blog/00020_WWW-Projects-and-Apps/norti.png | Bin 0 -> 2158182 bytes .../00020_WWW-Projects-and-Apps/panner-admin.png | Bin 0 -> 56668 bytes 080_blog/00020_WWW-Projects-and-Apps/panner.jpg | Bin 0 -> 27992 bytes 080_blog/00020_WWW-Projects-and-Apps/platin.png | Bin 0 -> 1680027 bytes 080_blog/00020_WWW-Projects-and-Apps/preschl.jpg | Bin 0 -> 24415 bytes 080_blog/00020_WWW-Projects-and-Apps/ringy.png | Bin 0 -> 774379 bytes 080_blog/00020_WWW-Projects-and-Apps/sensor.png | Bin 0 -> 2363605 bytes .../00020_WWW-Projects-and-Apps/telenetprofi.png | Bin 0 -> 1095670 bytes 080_blog/00020_WWW-Projects-and-Apps/textlabor.jpg | Bin 0 -> 30542 bytes 080_blog/00020_WWW-Projects-and-Apps/todoapp.png | Bin 0 -> 905957 bytes .../00020_WWW-Projects-and-Apps/wekkaprojekt.png | Bin 0 -> 1123569 bytes .../00020_WWW-Projects-and-Apps/werbereich.png | Bin 0 -> 432046 bytes .../00040_Graham-Scan-(Haskell)/index.md | 128 --- .../00040_Graham-Scan/index.md | 128 +++ .../00065_Base64-Encoder-(Haskell)/index.md | 51 -- .../00065_Base64-Encoder/index.md | 51 ++ .../00120_Lambda-Calculus-(Haskell)/index.md | 38 - .../00120_Lambda-Calculus/index.md | 38 + .../index.md | 29 - .../00130_Calculator-on-Parsec-and-GTK/calc.glade | 312 ++++++++ .../00130_Calculator-on-Parsec-and-GTK/calc.hs | 74 ++ .../00130_Calculator-on-Parsec-and-GTK/calc.png | Bin 0 -> 22734 bytes .../00130_Calculator-on-Parsec-and-GTK/index.md | 23 + .../SimpleSvg.hs | 179 ----- .../index.md | 31 - .../svg.png | Bin 13130 -> 0 bytes .../00140_Minimalistic-SVG-Generator/SimpleSvg.hs | 179 +++++ .../00140_Minimalistic-SVG-Generator/index.md | 31 + .../00140_Minimalistic-SVG-Generator/svg.png | Bin 0 -> 13130 bytes .../100_Estatico-Page-Maker/index.md | 35 + .../100_Static-Page-Maker-in-Haskell/index.md | 121 --- .../index.md | 89 --- 080_blog/00090_Miguels-KVM-Adventures/index.md | 212 ----- 080_blog/00090_Miguels-KVM-Adventures/ipv4.png | Bin 123475 -> 0 bytes .../00100_Webkit-Keyboardless-Navigation/index.md | 30 + .../00100_Webkit-Keyboardless-Navigation/v1.mp4 | Bin 0 -> 947491 bytes .../00100_Webkit-Keyboardless-Navigation/v1.ogv | Bin 0 -> 1005278 bytes .../00010_Monospace-Font-Bitmap-Generator/index.md | 64 -- .../00_garbage/00020_About-Software-Fools/index.md | 54 -- .../00020_Notes-on-Mail-Clients/index.md | 144 ---- .../00025_Open-Source-Gaming-on-Linux/index.md | 33 - 080_blog/00_garbage/index.md | 5 - .../0100_Webkit-Keyboardless-Navigation/index.md | 30 - .../0100_Webkit-Keyboardless-Navigation/v1.mp4 | Bin 947491 -> 0 bytes .../0100_Webkit-Keyboardless-Navigation/v1.ogv | Bin 1005278 -> 0 bytes 080_blog/020_WWW-Projects/index.md | 536 ------------- 080_blog/index.md | 3 + Michal-Idziorek.jpg | Bin 0 -> 8381 bytes Michal_Idziorek_CV.pdf | Bin 0 -> 1444412 bytes index.md | 53 ++ template.html | 2 +- 112 files changed, 2775 insertions(+), 2775 deletions(-) delete mode 100644 010_me/Michal-Idziorek.jpg delete mode 100644 010_me/Michal_Idziorek_CV.pdf delete mode 100644 010_me/index.md delete mode 100644 080_blog/00010_Various-Cheat-Sheets/00105_GNU-Screen-Multiplexer-Keyboard-Shortcuts/index.md delete mode 100644 080_blog/00010_Various-Cheat-Sheets/00110_Midnight-Commander-Cheatsheet/index.md delete mode 100644 080_blog/00010_Various-Cheat-Sheets/index.md delete mode 100644 080_blog/00013_Old-Software-Fools-Mediawiki-Content/index.md create mode 100644 080_blog/00015_Admin/00005_Miscellanous/index.md create mode 100644 080_blog/00015_Admin/00010_Various-Cheat-Sheets/00105_GNU-Screen-Multiplexer-Keyboard-Shortcuts/index.md create mode 100644 080_blog/00015_Admin/00010_Various-Cheat-Sheets/00110_Midnight-Commander-Cheatsheet/index.md create mode 100644 080_blog/00015_Admin/00010_Various-Cheat-Sheets/index.md create mode 100644 080_blog/00015_Admin/00070_Password-Management-on-the-Command-Line/index.md create mode 100644 080_blog/00015_Admin/00090_Miguels-KVM-Adventures/index.md create mode 100644 080_blog/00015_Admin/00090_Miguels-KVM-Adventures/ipv4.png create mode 100644 080_blog/00015_Admin/index.md delete mode 100644 080_blog/00015_Miscellanous/index.md create mode 100644 080_blog/00020_WWW-Projects-and-Apps/aquarelle.jpg create mode 100644 080_blog/00020_WWW-Projects-and-Apps/atenefunds.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/atenefunds2.jpg create mode 100644 080_blog/00020_WWW-Projects-and-Apps/atenefunds3.jpg create mode 100644 080_blog/00020_WWW-Projects-and-Apps/atenefunds4.jpg create mode 100644 080_blog/00020_WWW-Projects-and-Apps/atenekom.jpg create mode 100644 080_blog/00020_WWW-Projects-and-Apps/aufbau.jpg create mode 100644 080_blog/00020_WWW-Projects-and-Apps/austria-org-pl-old.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/austria-org-pl.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/austrian-wine.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/balbuza.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/bildershopping.jpg create mode 100644 080_blog/00020_WWW-Projects-and-Apps/bildershopping.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/bildershopping2.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/breitbandausschreibungen1.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/breitbandausschreibungen2.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/brlr1.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/bunzlauer.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/bunzlauershop.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/captainsdinner.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/casamila.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/condition-red.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/copterwerk.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/cornea.jpg create mode 100644 080_blog/00020_WWW-Projects-and-Apps/cornea.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/cqs.jpg create mode 100644 080_blog/00020_WWW-Projects-and-Apps/cuadro.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/flipper.jpg create mode 100644 080_blog/00020_WWW-Projects-and-Apps/flipper2.jpg create mode 100644 080_blog/00020_WWW-Projects-and-Apps/foto-pschill.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/ikm.jpg create mode 100644 080_blog/00020_WWW-Projects-and-Apps/immoconnect.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/index.md create mode 100644 080_blog/00020_WWW-Projects-and-Apps/kulturmanag.jpg create mode 100644 080_blog/00020_WWW-Projects-and-Apps/kunst-stuecke.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/lev.jpg create mode 100644 080_blog/00020_WWW-Projects-and-Apps/link-all.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/maiden.jpg create mode 100644 080_blog/00020_WWW-Projects-and-Apps/maiden2.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/mazury.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/meersalzgrotte.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/mmtour.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/nadler.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/nadler2.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/norti.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/panner-admin.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/panner.jpg create mode 100644 080_blog/00020_WWW-Projects-and-Apps/platin.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/preschl.jpg create mode 100644 080_blog/00020_WWW-Projects-and-Apps/ringy.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/sensor.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/telenetprofi.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/textlabor.jpg create mode 100644 080_blog/00020_WWW-Projects-and-Apps/todoapp.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/wekkaprojekt.png create mode 100644 080_blog/00020_WWW-Projects-and-Apps/werbereich.png delete mode 100644 080_blog/00040_Haskell-Projects/00040_Graham-Scan-(Haskell)/index.md create mode 100644 080_blog/00040_Haskell-Projects/00040_Graham-Scan/index.md delete mode 100644 080_blog/00040_Haskell-Projects/00065_Base64-Encoder-(Haskell)/index.md create mode 100644 080_blog/00040_Haskell-Projects/00065_Base64-Encoder/index.md delete mode 100644 080_blog/00040_Haskell-Projects/00120_Lambda-Calculus-(Haskell)/index.md create mode 100644 080_blog/00040_Haskell-Projects/00120_Lambda-Calculus/index.md delete mode 100644 080_blog/00040_Haskell-Projects/00130_Calculator-on-Parsec-and-GTK-(Haskell)/index.md create mode 100644 080_blog/00040_Haskell-Projects/00130_Calculator-on-Parsec-and-GTK/calc.glade create mode 100644 080_blog/00040_Haskell-Projects/00130_Calculator-on-Parsec-and-GTK/calc.hs create mode 100644 080_blog/00040_Haskell-Projects/00130_Calculator-on-Parsec-and-GTK/calc.png create mode 100644 080_blog/00040_Haskell-Projects/00130_Calculator-on-Parsec-and-GTK/index.md delete mode 100644 080_blog/00040_Haskell-Projects/00140_Minimalistic-SVG-Generator-(Haskell)/SimpleSvg.hs delete mode 100644 080_blog/00040_Haskell-Projects/00140_Minimalistic-SVG-Generator-(Haskell)/index.md delete mode 100644 080_blog/00040_Haskell-Projects/00140_Minimalistic-SVG-Generator-(Haskell)/svg.png create mode 100644 080_blog/00040_Haskell-Projects/00140_Minimalistic-SVG-Generator/SimpleSvg.hs create mode 100644 080_blog/00040_Haskell-Projects/00140_Minimalistic-SVG-Generator/index.md create mode 100644 080_blog/00040_Haskell-Projects/00140_Minimalistic-SVG-Generator/svg.png create mode 100644 080_blog/00040_Haskell-Projects/100_Estatico-Page-Maker/index.md delete mode 100644 080_blog/00040_Haskell-Projects/100_Static-Page-Maker-in-Haskell/index.md delete mode 100644 080_blog/00070_Password-Management-on-the-Command-Line/index.md delete mode 100644 080_blog/00090_Miguels-KVM-Adventures/index.md delete mode 100644 080_blog/00090_Miguels-KVM-Adventures/ipv4.png create mode 100644 080_blog/00100_Webkit-Keyboardless-Navigation/index.md create mode 100644 080_blog/00100_Webkit-Keyboardless-Navigation/v1.mp4 create mode 100644 080_blog/00100_Webkit-Keyboardless-Navigation/v1.ogv delete mode 100644 080_blog/00_garbage/00010_Monospace-Font-Bitmap-Generator/index.md delete mode 100644 080_blog/00_garbage/00020_About-Software-Fools/index.md delete mode 100644 080_blog/00_garbage/00020_Notes-on-Mail-Clients/index.md delete mode 100644 080_blog/00_garbage/00025_Open-Source-Gaming-on-Linux/index.md delete mode 100644 080_blog/00_garbage/index.md delete mode 100644 080_blog/0100_Webkit-Keyboardless-Navigation/index.md delete mode 100644 080_blog/0100_Webkit-Keyboardless-Navigation/v1.mp4 delete mode 100644 080_blog/0100_Webkit-Keyboardless-Navigation/v1.ogv delete mode 100644 080_blog/020_WWW-Projects/index.md create mode 100644 Michal-Idziorek.jpg create mode 100644 Michal_Idziorek_CV.pdf diff --git a/00_404/index.md b/00_404/index.md index 6e50e7d..d0832ab 100644 --- a/00_404/index.md +++ b/00_404/index.md @@ -2,7 +2,6 @@ Page Request resulted in 404 ============================= We are sorry, but the requested page could not be found. -If you think something went wrong feel free to [contact](/contact) me. Move along ---------- @@ -11,6 +10,3 @@ Just use one of the Links below to continue browsing this Website: * [Go Home](/) * [Read the Blog](/blog) -* [Browse my projects](/projects) -* [Check my Portfolio](/work) -* [Contact me](/contact) diff --git a/010_me/Michal-Idziorek.jpg b/010_me/Michal-Idziorek.jpg deleted file mode 100644 index ddb3640..0000000 Binary files a/010_me/Michal-Idziorek.jpg and /dev/null differ diff --git a/010_me/Michal_Idziorek_CV.pdf b/010_me/Michal_Idziorek_CV.pdf deleted file mode 100644 index f73fe30..0000000 Binary files a/010_me/Michal_Idziorek_CV.pdf and /dev/null differ diff --git a/010_me/index.md b/010_me/index.md deleted file mode 100644 index ec17625..0000000 --- a/010_me/index.md +++ /dev/null @@ -1,53 +0,0 @@ -###>>>KWD Michal Idziorek, Michał Idziorek, Michael Idziorek, Idziorek -###>>>DSC Everything you ever wanted to know about Michal Idziorek. This Website acts as a central Hub hosting his notes, projects, achievements as well as utter failiures. -###>>>TITLE Michal Idziorek -Michal Idziorek -=============== - -
-Hello and Welcome to the virtual home of Michal Idziorek, -known as Miguel the Red Scorpio, a -developer, software engineer, scientist, philosopher, -as well as self-proclaimed artist and culinarian. -Michal Idziorek graduated from the _Vienna University of Technology_ -and holds a _Master of Science_ degree in _Media and Computer Science_. - -Over the years Michal professionally engaged in multidisciplinary -academic, corporate and freelance activities, acquiring a broad toolkit of -skills, he is continuously and passionately extending. - -
-
-![](Michal-Idziorek.jpg){itemprop="contentUrl" .img-fluid alt="Michal Idziorek smiling in front of green grass" title="~~ But youth smiles without any reason. It is one of its chiefest charms. ~~"} -
_Michal Idziorek smiling_
-
-
- -What is this Website About? -=========================== - -This website serves as shelter for some of my [notes](/blog) on a variety -of subjects and hosts a somehow random selection of my works and projects. -Please keep in mind, that this website is essentially under sustained -construction and more content is scheduled to follow. - -Contact -======= - -You can Contact me in English, German, Polish or Klingon via any of the following channels: - -* email: [m.i@gmx.at](mailto:m.i@gmx.at) -* XMPP: miguel (on the softwarefools.com server) -* IRC: oo\_miguel (on freenode or oftc) - -Feel free to send questions or suggestions. - -CV -== - -Download a PDF version of my Curriculum Vitae: - -[Michal\_Idziorek\_CV.pdf](/DATA/Michal_Idziorek_CV.pdf) - -It is likely out of date, sorry. - diff --git a/080_blog/00010_Various-Cheat-Sheets/00105_GNU-Screen-Multiplexer-Keyboard-Shortcuts/index.md b/080_blog/00010_Various-Cheat-Sheets/00105_GNU-Screen-Multiplexer-Keyboard-Shortcuts/index.md deleted file mode 100644 index 80b24b1..0000000 --- a/080_blog/00010_Various-Cheat-Sheets/00105_GNU-Screen-Multiplexer-Keyboard-Shortcuts/index.md +++ /dev/null @@ -1,43 +0,0 @@ -GNU Screen - Keyboard Shortcuts -============================================= - -Invocation ----------- - $ screen [-S session_name] # simply start new session - $ screen -ls # lists sessions - $ screen -r session_name # resume detached session - $ screen -d -R session_name # resume session (also detach or create) - $ screen -d -RR #resume first session - -Shortcuts ---------- - ctrl-a c NEW WINDOW - ctrl-a n / ctrl-a p NEXT/PREVIOUS - ctrl-a d DETACH - ctrl-a D D DETACH and LOGOUT - - ctrl-a S SPLIT HORIZ. - ctrl-a | SPLIT VERTICAL - ctrl-a tab NEXT REGION - ctrl-x REMOVE REGION - ctrl-a q REMOVE ALL OTHER REGIONS - ctrl-a F FIT WINDOW - - ctrl-a c CLEAR SCREEN - ctrl-a k KILL WINDOW - ctrl-a \ QUIT - - ctrl-a esc COPY/SCROLLBACK MODE - -Layout Commands ---------------- - ctrl-a : #enter command mode - :layout new [title] - :layout remove [n|title] - :layout next - :layout prev - :layout show #list layouts - -Reference ---------- - [1] $ man screen diff --git a/080_blog/00010_Various-Cheat-Sheets/00110_Midnight-Commander-Cheatsheet/index.md b/080_blog/00010_Various-Cheat-Sheets/00110_Midnight-Commander-Cheatsheet/index.md deleted file mode 100644 index eedc66a..0000000 --- a/080_blog/00010_Various-Cheat-Sheets/00110_Midnight-Commander-Cheatsheet/index.md +++ /dev/null @@ -1,61 +0,0 @@ -###>>>KWD midnight commander cheatsheet, mc cheatsheet, mc shortcuts, midnight commander shortcuts -###>>>DSC Cheatsheet for Midnight Commander summarizing the most useful shortcuts. -Midnight Commander Cheatsheet -============================= - -A short cheat-sheet summarizing midnight commander's most useful shortcut keys. - -Basic Navigation ----------------- - tab switch active panel - up/down select previous/next rown - return open selected directory - alt-o open selected directory on other panel - -View ----- - alt-. toggle hidden files - ctrl-o toggle console - alt-t toggle listing mode - alt-i sync with other panel - ctrl-u swap panels - -Miscellaneous -------------- - shift-f6 rename, filling in the current filename - insert/ctrl-t/+/\/* selections - esc-tab auto complete - ctrl-enter / alt-enter copy currently selected filename to console - Ctrl + Shift + Enter copy full path - - alt-shift-h show dir history - alt-y/alt-u navigate history - - alt+?/alt-s/ctrl-s searches - - ctrl-space calculte size - ctrl - x c chmod - ctrl - x o chown - -Troubleshooting / Extras ------------------------- -Adding this to your _.bashrc_ will let _mc_ stay in the current directory after exiting: - - alias mc='. /usr/libexec/mc/mc-wrapper.sh' - -I run _midgnight commander_ inside _tmux_ and the shifted function keys did not work as -expected. Use midnight commanders _Learn Keys_ dialog to fix this. - -Set default viewer for pdf: - - xdg-mime default evince.desktop application/pdf - -Set default editor: - - alias mc='EDITOR=vim' - -Reference ---------- - -* http://klimer.eu/2015/05/01/use-midnight-commander-like-a-pro/ -* man mc diff --git a/080_blog/00010_Various-Cheat-Sheets/index.md b/080_blog/00010_Various-Cheat-Sheets/index.md deleted file mode 100644 index ee779fa..0000000 --- a/080_blog/00010_Various-Cheat-Sheets/index.md +++ /dev/null @@ -1,3 +0,0 @@ -Cheat Sheets -============ -A growing collection of some of my cheat sheets. diff --git a/080_blog/00013_Old-Software-Fools-Mediawiki-Content/index.md b/080_blog/00013_Old-Software-Fools-Mediawiki-Content/index.md deleted file mode 100644 index cb6581f..0000000 --- a/080_blog/00013_Old-Software-Fools-Mediawiki-Content/index.md +++ /dev/null @@ -1,391 +0,0 @@ -Fool’s Wiki Knowledge -===================== - - February 24, 2016 - -Migrated from our former Mediawiki: - -Welcome to the Foolo-Pedia! Foolo-Pedia is a growing collection of interesting, important, ridiculous or useless information gathered and refined by the SoftwareFools team for all Friends of Fools. We decided to mainly keep this Wiki in english to be compatible with all our costumers and friends. Some destinct pages maybe in polish, german or klingon. - -Articles which might be of universal interest, divided by area and topic. - -## Minilinux - - software fools minimal linux - - 1. usb stick - 2. create one big partition (2gb) - 3. mkefs.ext4 /dev/sdx1 - 4. mount /dev/sdx1 /mnt - 5. compile kernel - 6. cp bzImage /mnt - 7. boot - - 8. - grub> search /bzImage - grub> linux /bzImage root=?? - - PROBLEMS WITH kernel config! - -## Kernel Building - - cd linux-source-[xxx] - make mrproper - cp someconfig .config -i - make oldconfig - make menuconfig - make localmodconfig - make localyesconfig - make - (OPT) make modules - su - make install - (OPT) make modules_install - (OPT) update-intiramfs -c -k [kernel-postfix] - - (REMOVE UNWANTED FILES FROM BOOT!) - update-grub - grub-install /dev/sda - reboot - -## GDB - - http://www.cprogramming.com/debuggers.html - - use gcc or clang with : -ggdb -O0 - - h - help - - r - run - c - continue - n - next - s - step - - b - break - p - print - - wa - watch - - bt - frame - list - info locals - - set = - set substitute-path FROM TO - - call - -## clang - - http://llvm.org/releases/3.7.0/docs/CMake.html - http://clang.llvm.org/get_started.html - put MAKEFLAGS="-j8" or similar in front of your CMake invocations. - - extracted llvm to ~/temp/clang/llvm-3.7.0.src/ - extracted clang to ~/temp/clang/llvm-3.7.0.src/tools/clang/ - extracted compiler-rt to ~/temp/clang/llvm-3.7.0.src/projects/compiler-rt - extracted libcxx to ~/temp/clang/llvm-3.7.0.src/projects/libcxx - - $ cd ~/temp/clang/llvm-3.7.0-build - $ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/home/miguel/opt/llvm-3.7.0 ../llvm-3.7.0.src - $ cmake --build . - $ cmake --build . --target install - -## XMPP - -### Idea - -Today I figured out, once again, that there are many open-source and free (as in freedom) alternatives to all those chat clients and their proprietary protocols, which we dislike and want to avoid. Taking it seriously I decided to set up a XMPP Server on our Softwarefools Server (http://www.softwarefools.com) to finally enable secure and comfortable communication between me, myself and my fellow peers. - -### Starting Point - -* We have a Debian Virtual Private Server (VPS) Running wheezy (stable) -* I just found that tutorial: http://wiki.linuxwall.info/doku.php/en:ressources:articles:ejabberd - -### I. get package - - # apt-get install ejabberd - -### II. adapt config - -In /etc/ejabberd/ejabberd.cfg adapt the hosts line as that: (if you wonder this is Erlang) - - %% Hostname - {hosts, ["softwarefools.com"]}. - -### III. setup certificate - - # mkdir /etc/ejabberd/certs - -For now we skip the rest of that step and proceed with the self-signed certificate provided by Debian. (/etc/ejabberd/ejabberd.pem) - -### IV. restart server - - # /etc/init.d/ejabberd restart - -### V. create user - - # ejabberdctl register miguel softwarefools.com 'pass123' - # ejabberdctl register niki softwarefools.com 'pass321' - -### VI. open ports - - # iptables -I INPUT -p tcp --dport 5222 -j ACCEPT - # iptables -I INPUT -p tcp --dport 5269 -j ACCEPT - -TODO: in fact we need more here! - -### VII. connect with client - -* Get Pidgin http://www.pidgin.im/ -* Connect & Enjoy  - -### Further Work -* certificate -* dns configuration – should provide xmpp info (? - - -## Benchmark - -### Tools for Stress Testing your RIG - - May 12, 2017 - - Some nice tools to stress-test your computer: - - CPU: Prime95 - GPU: FurMark - RAM: MemTest86+ - HDD/SSD: S.M.A.R.T - - Ref: http://www.pcworld.com/article/2028882/keep-it-stable-stupid-how-to-stress-test-your-pc-hardware.html - -### Networking - - 1. Connected my [laptop] and [desktop] via 5meter cat5e cable -> 1000mbit full duplex link - 2. created ~1.5G ramdisks with tmpfs on each. - 3. created a 1 giga file with data from /dev/urandom on [desktop] - 4. copied file with scp from [desktop] to [laptop] - 5. copied file with scp from [laptop] to [desktop] - 6. repeated 4 & 5 10 times : average speed ~70+MB/s from desk & 80+MB/s to desk, link stays up all the time. ping around 0.2-0.3ms - 7. repeated 1-6 with my other 3meter ethernet cable. - 8. tried both direction simultanously which gave a total data throughput even over 100MB/s - -### Hard Disk - -To get some information about the disk run: - -Request identification info directly from the drive, which is displayed in a new expanded format with considerably more detail than with the older -i option. - - $ hdparm -I /dev/sda - -Timings - - $ hdparm -tT /dev/sda - -Clear Cache - - $ echo 3 > /proc/sys/vm/drop_caches - -I am using this block-size and count which results in ~2GB: - - $ dd [...] bs=1048576 count=2048 - -READ: - - $ dd if=test of=/dev/null - $ dd if=/dev/sdX of=/dev/null - -WRTIE: - - $ dd if=/dev/zero of=test - $ dd if=/dev/zero of=/dev/sdX - -smartmontools: - - seatage: - Raw_Read_Error_Rate - Seek_Error_Rate - - example: - % python - >>> 200009354607 & 0xFFFFFFFF - 2440858991 <---- total number - >>> (200009354607 & 0xFFFF00000000) >> 32 - 46 <--- number of errors - -## Fixing HDD after Free Falling - -So you also dropped your hard-disk and some of your secotrs got damaged, -probably by the head hitting the platter? The following short text outlines, -how I approached fixing my disk after it hit the floor. Of course I would -not rely on this disk for mission critical data anymore, but it -might serve as a scratch/temporarily/redundant space. - -Backup all your data in advance because the disk will almost certainly -require reformatting and repartitoning after follwing this procedure! - -Some Tools/Programms I used: - -* smartctl -* hdparm -* grep - -### smartctl - -Try from fastest to slowest to find faulty sector: replace LBAi\_START,LBA\_END with meaningful values. - - smartctl -t [long|conveyence|short|select,LBA_START-LBA_END] -C /dev/sda - -The following did not work for me. Resulted in ‘interrupted by host’ for some reason. -Probably the disks goes to sleep or something. Issueing some read operations every minute might fix this(?) - - -C to run test in foreground mode! - -### hdparm - -You can bi-search via –read-sector if complete ranges are affected (As in my case) and then fix them in one step: - - for i in {36312851..36312886}; do hdparm --write-sector $i /dev/sda; done - -### Example - -Exemplary session fixing one sector: - -**WARNING: this will destroy your data !** - - 1) # smartctl -a /dev/sda | egrep 'Pend|Real|Offline_Unc' - - 5 Reallocated_Sector_Ct 0x0033 100 100 036 Pre-fail Always - 4 - 197 Current_Pending_Sector 0x0012 098 098 000 Old_age Always - 47 - 198 Offline_Uncorrectable 0x0010 098 098 000 Old_age Offline - 47 - - 2) # smartctl -t short /dev/sda - - 3) # smartctl -l selftest /dev/sda - - [...] 1 Short offline Completed: read failure 90% 10632 152076520 - - 4) # hdparm --read-sector 152076520 /dev/sda # verification - - [...] reading sector 152076520: FAILED: Input/output error - - 5) # hdparm --write-sector 152076520 /dev/sda - - 6) # smartctl -a /dev/sda | egrep 'Pend|Real|Offline_Unc' - - 5 Reallocated_Sector_Ct 0x0033 100 100 036 Pre-fail Always - 4 - 197 Current_Pending_Sector 0x0012 098 098 000 Old_age Always - 46 - 198 Offline_Uncorrectable 0x0010 098 098 000 Old_age Offline - 46 - -## Raid and LVM - - - Also refer to: http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/foreward.html - - Here I will write down some of my considarations about setting up a RAID - and LVM. - - We want to get a performance boost and minimize the ssd wear-out. - Also we will not put there any mission-critical files, because the content - of the ssd will not be mirrored. beside regular backups of course. - We also need to take the limited diskspace into account. - while our hdd’s are 2*2TB we only have a single 250MB sdd. - - So we will be looking at files that are: - - * not updated very often - * read often - * not critical if they get lost. - * not too huge - - So I consider for my usecase - * /bin - * /sbin - * /boot - * /lib{,32,64} - - * /usr (without /usr/local) - - That directories will reside on our raid1 since they contain important files: - * /home/miguel - * /root - * /opt - * /usr/local - - Finally we will mount the following things in ram for superfast and temporary space: - - * /tmp - * /var/log (unless you care about logs) - - What about that directories? - consider speed vs. security vs. drive wear-out - - * /etc - * /var - - Never mount swap on your ssd! - - == extending logical volume and fs == - * https://wiki.archlinux.org/index.php/LVM - - # lvextend -L +20G VolGroup00/lvolhome - - resize fs (ext2, ext3 or ext4) - for ext4 this can be done even without unmounting the device - - # resize2fs /dev// - -## Some RAID Problems on my old Desktop - - https://www.thomas-krenn.com/en/wiki/Mdadm_checkarray - https://plone.lucidsolutions.co.nz/linux/io/ssd-on-nvidia-sata-port-generates-error-eh-in-swncq-mode-and-failed-command-read-fpdma-queued/view - https://www.howtoforge.com/replacing_hard_disks_in_a_raid1_array - - Kernel options: sata_nv.swncq=0 - - [ 8625.896029] ata5.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen - [ 8625.896035] ata5.00: failed command: WRITE DMA EXT - [ 8625.896040] ata5.00: cmd 35/00:08:50:06:b0/00:00:13:00:00/e0 tag 0 dma 4096 out - res 40/00:00:00:4f:c2/00:00:00:00:00/40 Emask 0x4 (timeout) - [ 8625.896043] ata5.00: status: { DRDY } - [ 8625.896048] ata5: hard resetting link - [ 8625.896050] ata5: nv: skipping hardreset on occupied port - [ 8626.364038] ata5: SATA link up 3.0 Gbps (SStatus 123 SControl 300) - [ 8631.372026] ata5.00: qc timeout (cmd 0x27) - [ 8631.372031] ata5.00: failed to read native max address (err_mask=0x4) - [ 8631.372033] ata5.00: HPA support seems broken, skipping HPA handling - [ 8631.372035] ata5.00: revalidation failed (errno=-5) - [ 8631.372042] ata5: hard resetting link - [ 8631.372044] ata5: nv: skipping hardreset on occupied port - [ 8631.840045] ata5: SATA link up 3.0 Gbps (SStatus 123 SControl 300) - [ 8631.864140] ata5.00: configured for UDMA/133 - [ 8631.864146] ata5.00: device reported invalid CHS sector 0 - [ 8631.864154] ata5: EH complete - [ 8662.888029] ata5.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen - [ 8662.888036] ata5.00: failed command: WRITE DMA EXT - [ 8662.888041] ata5.00: cmd 35/00:08:50:06:b0/00:00:13:00:00/e0 tag 0 dma 4096 out - res 40/00:00:00:4f:c2/00:00:00:00:00/40 Emask 0x4 (timeout) - [ 8662.888043] ata5.00: status: { DRDY } - [ 8662.888049] ata5: hard resetting link - [ 8662.888051] ata5: nv: skipping hardreset on occupied port - [ 8663.356038] ata5: SATA link up 3.0 Gbps (SStatus 123 SControl 300) - [ 8663.396135] ata5.00: configured for UDMA/133 - [ 8663.396141] ata5.00: device reported invalid CHS sector 0 - [ 8663.396151] ata5: EH complete - [ 8693.864031] ata5.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen - [ 8693.864038] ata5.00: failed command: WRITE DMA EXT - [ 8693.864043] ata5.00: cmd 35/00:08:50:06:b0/00:00:13:00:00/e0 tag 0 dma 4096 out - res 40/00:00:00:4f:c2/00:00:00:00:00/40 Emask 0x4 (timeout) - [ 8693.864045] ata5.00: status: { DRDY } - [ 8693.864051] ata5: hard resetting link - [ 8693.864052] ata5: nv: skipping hardreset on occupied port - [ 8694.332036] ata5: SATA link up 3.0 Gbps (SStatus 123 SControl 300) - [ 8694.356134] ata5.00: configured for UDMA/133 - [ 8694.356141] ata5.00: device reported invalid CHS sector 0 - [ 8694.356150] ata5: EH complete - [ 8724.840030] ata5: limiting SATA link speed to 1.5 Gbps - - - diff --git a/080_blog/00015_Admin/00005_Miscellanous/index.md b/080_blog/00015_Admin/00005_Miscellanous/index.md new file mode 100644 index 0000000..d247e7e --- /dev/null +++ b/080_blog/00015_Admin/00005_Miscellanous/index.md @@ -0,0 +1,866 @@ +Miscellanous Notes +================== + +A collection of short notes on things I wish to remember. Many topics are heavily outdated. + +Backing up and Restoring Docker Volumes +--------------------------------------- + + July 3, 2017 + +One of my first questions, when starting my docker experience was +how to backup and restore docker volumes. + +### On the source host + +First of all identify your volumes: + + $ docker ps + $ docker inspect my_container_name | grep -C 1 -i Source + +Now you can backup the directory to a tar on your host machine: + + $ docker run –rm –volumes-from my_container_name -v $(pwd):/backup ubuntu tar cvf /backup/backup_db.tar /var/lib/mysql + +### On the target host + +In order to securely copy and restore the volume on the target host one can run: + + $ scp source_host:~/backup_db.tar . + $ docker run –rm –volumes-frommy_container_name -v $(pwd):/backup ubuntu bash -c “cd /var/lib/mysql && tar xvf /backup/backup_db.tar –strip 1″ + +A Growing Collection of Linux Command Line One-Liners +------------------------------------------------------ + +Please believe me... this collection was really supposed to grow over time... + +inside a direcotry show disk usage of all hidden files and directories and sort by size: + + $ du $(ls .* -d | tail -n +3) -hs |sort -h + +inside a direcotry show disk usage of all files and directories (also hidden) and sort by size. +Exclude ./DATA file. + + $ du . -a -d 1 -h –exclude=’./DATA’ | sort -h + +Tar all files in current directory, excluding ./DATA and ./.cache + + $ tar –exclude=’./.cache’ –exclude=’./DATA’ -cvf home_miguel_20180216.tar . + +Find files in ./ARCHIVE NOT belonging to a specific user: miguel + + $ find ARCHIVE/ \! -user miguel + +set folder/ permissions to Read/Browse only for owner recursively + + $ sudo chmod -R u=r,g=,o= folder/ + $ chmod -R u=rX,g=,o= folder/ + +find all mails from Boban when in the maildir full of mailboxes and print only short headers without bodies: + + $ grepmail -H -B -Y ‘(^TO:|^From:)’ Boban * + +not really a one-lier but will print 256 colors in a bash: + + for i in {0..255} ; do + printf "\x1b[48;5;%sm%3d\e[0m " "$i" "$i" + if (( i == 15 )) || (( i > 15 )) && (( (i-15) % 6 == 0 )); then + printf "\n"; + fi + done + +Some Tools of Choice +-------------------- + +### Systems + +* joomla +* redaxo +* typo3 +* wordpress +* mediawiki + +* oscommerce +* opencart + +* owncloud +* alfresco +* mantis + +* piwik / matomo +* loganalyzer +* goaccess +* nagios / icinga + +### Servers + +* apache +* nginx + +* mariadb / mysql +* postfix +* postgis + +* geoserver + + + +Compilation Notes +----------------- + +### build your own webkit + + March 14, 2018 + +Let’s compile a release with debug info and install to /usr/local + +~~~~~~ {.bash} +wget https://webkitgtk.org/releases/webkitgtk-2.20.0.tar.xz +tar -xvf webkitgtk-2.20.0.tar.xz +cd webkitgtk-2.20.0 +# install all the libs that will be reported missing in the next step. +# I could not find the woff2 stuff in debian so skipped it... +cmake -DPORT=GTK -DCMAKE_BUILD_TYPE=RelWithDebInfo -DUSE_WOFF2=NO -GNinja +# this takes about 30minutes on my i7-4790K .. zzzzz..zzz +ninja +sudo ninja install +~~~~~~~~~~~ + + pkg-config + + pkg-config uses our new build now: + + [1] https://trac.webkit.org/wiki/BuildingGtk + [2] https://webkitgtk.org/ + +### Build and Install GCC + + April 27, 2015 + +#### Preparations +Read the prequisites at +[https://gcc.gnu.org/install/prerequisites.html](https://gcc.gnu.org/install/prerequisites.html) +and get (most recent versions at time of this writing) the following: + +* gcc (5.2.0) +* binutils (2.25.1) + +#### Configure and Build + +* unpack binutils-x.y.z +* create a new directory binutils-x.y.z-build and inside it run the following commands: + +~~~~~~ {.bash} + $ ../binutils-x.y.z/configure --disable-nls --with-sysroot --enable-targets=all + $ make -j4 + $ make install +~~~~~~~~~~~~ + +* unpack gcc-x.y.z and run the contrib/download_prerequisites script inside. +* create a new directory: gcc-x.y.z-build and inside it run: + +~~~~~~ {.bash} + $ ../gcc-x.y.z/configure --disable-nls --enable-languages=c,c++ --enable-threads + $ make -j4 + $ make install +~~~~~~~~~~~~ + +#### Reference + [1] binutils and gcc README files. + [2] https://gcc.gnu.org/install/ + [3] http://wiki.osdev.org/Building_GCC + [4] http://stackoverflow.com/questions/1726042/recipe-for-compiling-binutils-gcc-together + +monad transformers in action +---------------------------- + January 1,2018 + + *Main Control.Monad.Writer Control.Monad.State> runState (runWriterT (get >>= \a -> tell ["foo"] >> put (a*a) >> tell ["bar"] >> tell [show a])) 5 + +emscripten +---------- + October 1,2017 + + sdl2 port + https://github.com/juj/emsdk + android-ndk-r15c + + * accomplish build sys with: sdl2+input+audio+opengl+SDL_net+SDL_thread @ linux, win, osx, ios, android, win-phone, steam, rasp + +LUKS container over sshfs +------------------------- + July 5, 2017 + +* enable user\_allow\_other in /etc/fuse.conf +* sshfs -o allow\_root user@server:/BACKUPS/ ~/mnt/ +* dd if=/dev/urandom of=~/mnt/megaloman bs=1M count=512 +* sudo cryptsetup -y luksFormat ~/mnt/megaloman +* sudo cryptsetup luksOpen ~/mnt/megaloman vol1 +* sudo mkfs.ext4 /dev/mapper/vol1 +* sudo mount /dev/mapper/vol1 /mnt +* df -h | grep vol1 +* sudo umount /mnt +* sudo cryptsetup luksClose vol1 +* fusermount -u ~/mnt + +NOTE: backup your data example use : rsync -a –info=progress2 source dist + +some areas of interest +---------------------- + December 20, 2014 + +Some General Topics I am reasearching right now (or plan to do it). Or used to reasearch... + +* Neuronal Networks +* Deep Learning +* Random Forrests (and other techniques based on Decision Trees) +* Simmulated Annealing +* (Linear) Integer Programming + + +Inter Process Communication +--------------------------- + March 14, 2018 + +We can attach nicely to same memory segment from 2 different processes: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.c .numberLines} +// ipc via shared mem +// attach to shared memory; +key_t my_ftok = ftok("~/surf-webext-dom-shared-mem",'a'); + +int mem_seg=shmget(my_ftok,1024*1024,IPC_CREAT|0660); +if(mem_seg==-1) +{ +g_print("shmget failed: %s\n",strerror(errno)); +} + +shared_buf=shmat(mem_seg,NULL,0); +if(shared_buf==(void*)-1) +{ +g_print("shmat failed: %s\n",strerror(errno)); +} +g_print("attached to shared memory.\n"); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +SSL Certificate CSR +------------------- + + February 20, 2015 + + for apache ssl mod + + first check your old csr if you like: + $ openssl req -text -noout -verify -in CSR.csr + + 1. generate key + $ openssl genrsa -des3 -out www.yourdomain-example.com.key 2048 + + 2. create CSR + $ openssl req -new -key www.yourdomain-example.com.key -out www.yourdomain-example.com.csr + + refs: + [1] https://search.thawte.com/support/ssl-digital-certificates/index?page=content&id=AR1108&actp=LIST + +Competitive Coding +------------------ + March 17, 2015 + +A small selection of websites, which I visit from time to time, addressing competitive coding. + +* topcoder.com +* codeforces.com +* codility.com +* codersclan.ne +* projecteuler.net +* www.codingame.com (need to check this) +* www.codechef.com (need to check this) +* http://psyho.gg/overview-of-programming-contests/ (and read here) +* https://www.hackerrank.com/ +* http://code.google.com/codejam +* https://www.kaggle.com/ – predicitve modelling +* odesk.com / elance + +Comp Science Literature +----------------------- + March 17, 2015 +This is a list of some books, focusing on topics around computer science, which I recently read or am currently reading or want to read :P + +* Meyers, Effective C++ (Addison-Wesley) C++98 only? +* Meyers, More Effective C++ (Addison-Wesley) C++98 only? +* Meyers, Effective STL. C++98 only? +* Sutter, Exceptional C++ +* Sutter, More Exceptional C++ +* Karlson, Beyond the C++ Standard Library: An Introduction to Boost 1st Edition +* Maybe Something on Multiprocessing (?) +* Donald Knuth. The Art Of Computer Programming +* Algorithms 3rd Edition (by Cormen, Leiserson, Rivest, Stein) +* Jonathan Bartlett. Programming from the Ground Up +* C++ in a Nutshell (O’REILLEY, by Lischner) +* C++ Primer (5th Edition) by Lippman, Lajoie, Moo +* The C++ Programming Language 4th Edition +* Anthony Williams, C++ Concurrency in Action: Practical Multihreading +* Dive into Python (2 and 3) by Mark Pilgrim +* Learn You a Haskell for Great Good by Marian Lipovaca +* Real World Haskell +* Version Control with Git (O’REILLEY, by Loeliger & McCullough) (next: 9(10) ?) +* The Linux Command Line, by William Shotts (http://linuxcommand.org/tlcl.php) +* Debian, The Administrators Handbook (by Hertzog and Mas) +* Absolute FreeBSD by Michael W. Lucas +* Modern Operating Systems, Third Edition (by Andrew S. Tannebaum) +* Linux Device Drivers (O’REILLEY, by Corbert, Rubini, Kroah-Hartman) +* Linux Kernel in a Nutshell (O’REILLEY, Greg Kroah-Hartman) + +* Concrete Math (2nd) +* UPENN cis194 + +* STOC '83 Proceedings of the fifteenth annual ACM symposium on Theory of computing / Primitives for the manipulation of general subdivisions and the computation of Voronoi diagrams + +* http://haskellbook.com/ +* Wadler paper "Monads for Functional Programming" +* simon marlow - book (parallel) +* data 6 - course (Github) +* sedgewick & waynes algorithms +* books from appendix, from programming from ground up? + +VNC +--- + April 2, 2015 + +### Server: + $ apt-get install tightvncserver + $ xtightvncserver -geometry 1900×1100 + $ netstat -tap | grep vnc # remember port (e.g.5901) + +### Client: + $ ssh -L 5901:localhost:5901 you@remote # tunnel + $ xtightvncviewer localhost::5901 # in new terminal + +### Kill Server: + $ vncserver -kill :1 # (or :2 etc..) + +Owncloud Notes +-------------- + +### Mounting Ownclouds DavFS + + April 15, 2015 + + $ apt-get install davfs2 + + * since owncloud seems to have problems with locks, edit /etc/davfs2/davfs2.conf and set use_locks to 0 in order to allow creating files (as well as probably writing) + + $ mount -t davfs https://secure.sf.com/owncloud/remote.php/webdav /mnt/ + +### rescan/rebuild ownlocud files database + + June 22, 2016 + + inside ownlcoud directory run: + sudo -u www-owncloud php console.php files:scan –all + + +LXC +--- + April 28, 2015 + + maybe worth a try: + + apt-get install lxc; lxc create ctname -t download — -d debian -r jessie + -a amd64; lxc-start -d -n ctname, lxc-attach ctname + + similar tools: chroot/ debootsrap + +Add vim Lang +------------ + May 14, 2015 + + $ sudo apt-get install myspell-pl + $ cd /ush/share/hunspell + $ vim + :mkspell pl pl_PL + +What every programmer should know about +--------------------------------------- + November 7, 2015 + + Undefined behaviour: http://blog.llvm.org/2011/05/what-every-c-programmer-should-know.html + Memory: http://lwn.net/Articles/250967/ + Floating point arithmetic: https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html + +IDE Comparison +-------------- + + December 7, 2015 + +While I love working with vim (ctags, taglist, etc..) and the command line, it might be worth to have a look at the following IDE’s for Java and/or C++: + +* IntelliJ IDEA +* Eclipse +* Eclipse CDT +* Codeblocks +* Netbeans +* Codelite +* KDevelop + +Setup Postfix +------------- + +We want to handle different domains on a single postfix server and have virtual users along real unix users. For the virtual users we use uid/gid 5000. + +Relevant config files are: + + /etc/postfix/master.cf + /etc/postfix/main.cf + /etc/postfix/smtpd_sender_login_maps (tells which emails belong to which login) + /etc/postfix/vmailbox (sepcifies our VIRTUAL mailboxes and the names of the spoolfiles) + /etc/postfix/virtual (aliases for our local unix users) + /etc/dovecot/users (specifies the logins, passwords, home directories,..) + /etc/dovecot/conf.d/10-mail (set inbox and mailbox dirs) + +Be careful about the permissions of the different folders, so uid/gid 5000, postfix and dovecot can access as relevant. + +A very nice tutorial on setting up postfixadmin can be found here: + + https://lelutin.ca/posts/installing_postfix_-_clamav_-_spamassassin_-_dovecot_-_postfixadmin_on_debian_squeeze/ + +Windows Specific Notes +---------------------- + +### disable hiberfile.sys + + September 7, 2017 + + run cmd.exe as administrator: + powercfg.exe -h off + +### GTA4 on NVIDIA-GTX 980 + + April 17, 2016 + + Add following flags : -nomemrestrict -norestriction + Otherwise video memory is not identified correctly. + +### Civilization 4 BTS Autosaves + + September 23, 2016 + + In the file: C:\Users\miguel\Documents\My Games\Beyond the Sword\CivilizationIV + + Adjust: + + ; The maximum number of autosaves kept in the directory before being deleted. + MaxAutoSaves = 100 + + ; Specify the number of turns between autoSaves. 0 means no autosave. + AutoSaveInterval = 1 + +Fool’s Wiki Knowledge +===================== + + February 24, 2016 + +Migrated from our former Mediawiki: + +Welcome to the Foolo-Pedia! Foolo-Pedia is a growing collection of interesting, important, ridiculous or useless information gathered and refined by the SoftwareFools team for all Friends of Fools. We decided to mainly keep this Wiki in english to be compatible with all our costumers and friends. Some destinct pages maybe in polish, german or klingon. + +Articles which might be of universal interest, divided by area and topic. + +## Minilinux + + software fools minimal linux + + 1. usb stick + 2. create one big partition (2gb) + 3. mkefs.ext4 /dev/sdx1 + 4. mount /dev/sdx1 /mnt + 5. compile kernel + 6. cp bzImage /mnt + 7. boot + + 8. + grub> search /bzImage + grub> linux /bzImage root=?? + + PROBLEMS WITH kernel config! + +## Kernel Building + + cd linux-source-[xxx] + make mrproper + cp someconfig .config -i + make oldconfig + make menuconfig + make localmodconfig + make localyesconfig + make + (OPT) make modules + su + make install + (OPT) make modules_install + (OPT) update-intiramfs -c -k [kernel-postfix] + + (REMOVE UNWANTED FILES FROM BOOT!) + update-grub + grub-install /dev/sda + reboot + +## GDB + + http://www.cprogramming.com/debuggers.html + + use gcc or clang with : -ggdb -O0 + + h - help + + r - run + c - continue + n - next + s - step + + b - break + p - print + + wa - watch + + bt + frame + list + info locals + + set = + set substitute-path FROM TO + + call + +## clang + + http://llvm.org/releases/3.7.0/docs/CMake.html + http://clang.llvm.org/get_started.html + put MAKEFLAGS="-j8" or similar in front of your CMake invocations. + + extracted llvm to ~/temp/clang/llvm-3.7.0.src/ + extracted clang to ~/temp/clang/llvm-3.7.0.src/tools/clang/ + extracted compiler-rt to ~/temp/clang/llvm-3.7.0.src/projects/compiler-rt + extracted libcxx to ~/temp/clang/llvm-3.7.0.src/projects/libcxx + + $ cd ~/temp/clang/llvm-3.7.0-build + $ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/home/miguel/opt/llvm-3.7.0 ../llvm-3.7.0.src + $ cmake --build . + $ cmake --build . --target install + +## XMPP + +### Idea + +Today I figured out, once again, that there are many open-source and free (as in freedom) alternatives to all those chat clients and their proprietary protocols, which we dislike and want to avoid. Taking it seriously I decided to set up a XMPP Server on our Softwarefools Server (http://www.softwarefools.com) to finally enable secure and comfortable communication between me, myself and my fellow peers. + +### Starting Point + +* We have a Debian Virtual Private Server (VPS) Running wheezy (stable) +* I just found that tutorial: http://wiki.linuxwall.info/doku.php/en:ressources:articles:ejabberd + +### I. get package + + # apt-get install ejabberd + +### II. adapt config + +In /etc/ejabberd/ejabberd.cfg adapt the hosts line as that: (if you wonder this is Erlang) + + %% Hostname + {hosts, ["softwarefools.com"]}. + +### III. setup certificate + + # mkdir /etc/ejabberd/certs + +For now we skip the rest of that step and proceed with the self-signed certificate provided by Debian. (/etc/ejabberd/ejabberd.pem) + +### IV. restart server + + # /etc/init.d/ejabberd restart + +### V. create user + + # ejabberdctl register miguel softwarefools.com 'pass123' + # ejabberdctl register niki softwarefools.com 'pass321' + +### VI. open ports + + # iptables -I INPUT -p tcp --dport 5222 -j ACCEPT + # iptables -I INPUT -p tcp --dport 5269 -j ACCEPT + +TODO: in fact we need more here! + +### VII. connect with client + +* Get Pidgin http://www.pidgin.im/ +* Connect & Enjoy  + +### Further Work +* certificate +* dns configuration – should provide xmpp info (? + + +## Benchmark + +### Tools for Stress Testing your RIG + + May 12, 2017 + + Some nice tools to stress-test your computer: + + CPU: Prime95 + GPU: FurMark + RAM: MemTest86+ + HDD/SSD: S.M.A.R.T + + Ref: http://www.pcworld.com/article/2028882/keep-it-stable-stupid-how-to-stress-test-your-pc-hardware.html + +### Networking + + 1. Connected my [laptop] and [desktop] via 5meter cat5e cable -> 1000mbit full duplex link + 2. created ~1.5G ramdisks with tmpfs on each. + 3. created a 1 giga file with data from /dev/urandom on [desktop] + 4. copied file with scp from [desktop] to [laptop] + 5. copied file with scp from [laptop] to [desktop] + 6. repeated 4 & 5 10 times : average speed ~70+MB/s from desk & 80+MB/s to desk, link stays up all the time. ping around 0.2-0.3ms + 7. repeated 1-6 with my other 3meter ethernet cable. + 8. tried both direction simultanously which gave a total data throughput even over 100MB/s + +### Hard Disk + +To get some information about the disk run: + +Request identification info directly from the drive, which is displayed in a new expanded format with considerably more detail than with the older -i option. + + $ hdparm -I /dev/sda + +Timings + + $ hdparm -tT /dev/sda + +Clear Cache + + $ echo 3 > /proc/sys/vm/drop_caches + +I am using this block-size and count which results in ~2GB: + + $ dd [...] bs=1048576 count=2048 + +READ: + + $ dd if=test of=/dev/null + $ dd if=/dev/sdX of=/dev/null + +WRTIE: + + $ dd if=/dev/zero of=test + $ dd if=/dev/zero of=/dev/sdX + +smartmontools: + + seatage: + Raw_Read_Error_Rate + Seek_Error_Rate + + example: + % python + >>> 200009354607 & 0xFFFFFFFF + 2440858991 <---- total number + >>> (200009354607 & 0xFFFF00000000) >> 32 + 46 <--- number of errors + +## Fixing HDD after Free Falling + +So you also dropped your hard-disk and some of your secotrs got damaged, +probably by the head hitting the platter? The following short text outlines, +how I approached fixing my disk after it hit the floor. Of course I would +not rely on this disk for mission critical data anymore, but it +might serve as a scratch/temporarily/redundant space. + +Backup all your data in advance because the disk will almost certainly +require reformatting and repartitoning after follwing this procedure! + +Some Tools/Programms I used: + +* smartctl +* hdparm +* grep + +### smartctl + +Try from fastest to slowest to find faulty sector: replace LBAi\_START,LBA\_END with meaningful values. + + smartctl -t [long|conveyence|short|select,LBA_START-LBA_END] -C /dev/sda + +The following did not work for me. Resulted in ‘interrupted by host’ for some reason. +Probably the disks goes to sleep or something. Issueing some read operations every minute might fix this(?) + + -C to run test in foreground mode! + +### hdparm + +You can bi-search via –read-sector if complete ranges are affected (As in my case) and then fix them in one step: + + for i in {36312851..36312886}; do hdparm --write-sector $i /dev/sda; done + +### Example + +Exemplary session fixing one sector: + +**WARNING: this will destroy your data !** + + 1) # smartctl -a /dev/sda | egrep 'Pend|Real|Offline_Unc' + + 5 Reallocated_Sector_Ct 0x0033 100 100 036 Pre-fail Always - 4 + 197 Current_Pending_Sector 0x0012 098 098 000 Old_age Always - 47 + 198 Offline_Uncorrectable 0x0010 098 098 000 Old_age Offline - 47 + + 2) # smartctl -t short /dev/sda + + 3) # smartctl -l selftest /dev/sda + + [...] 1 Short offline Completed: read failure 90% 10632 152076520 + + 4) # hdparm --read-sector 152076520 /dev/sda # verification + + [...] reading sector 152076520: FAILED: Input/output error + + 5) # hdparm --write-sector 152076520 /dev/sda + + 6) # smartctl -a /dev/sda | egrep 'Pend|Real|Offline_Unc' + + 5 Reallocated_Sector_Ct 0x0033 100 100 036 Pre-fail Always - 4 + 197 Current_Pending_Sector 0x0012 098 098 000 Old_age Always - 46 + 198 Offline_Uncorrectable 0x0010 098 098 000 Old_age Offline - 46 + +## Raid and LVM + + + Also refer to: http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/foreward.html + + Here I will write down some of my considarations about setting up a RAID + and LVM. + + We want to get a performance boost and minimize the ssd wear-out. + Also we will not put there any mission-critical files, because the content + of the ssd will not be mirrored. beside regular backups of course. + We also need to take the limited diskspace into account. + while our hdd’s are 2*2TB we only have a single 250MB sdd. + + So we will be looking at files that are: + + * not updated very often + * read often + * not critical if they get lost. + * not too huge + + So I consider for my usecase + * /bin + * /sbin + * /boot + * /lib{,32,64} + + * /usr (without /usr/local) + + That directories will reside on our raid1 since they contain important files: + * /home/miguel + * /root + * /opt + * /usr/local + + Finally we will mount the following things in ram for superfast and temporary space: + + * /tmp + * /var/log (unless you care about logs) + + What about that directories? + consider speed vs. security vs. drive wear-out + + * /etc + * /var + + Never mount swap on your ssd! + + == extending logical volume and fs == + * https://wiki.archlinux.org/index.php/LVM + + # lvextend -L +20G VolGroup00/lvolhome + + resize fs (ext2, ext3 or ext4) + for ext4 this can be done even without unmounting the device + + # resize2fs /dev// + +## Some RAID Problems on my old Desktop + + https://www.thomas-krenn.com/en/wiki/Mdadm_checkarray + https://plone.lucidsolutions.co.nz/linux/io/ssd-on-nvidia-sata-port-generates-error-eh-in-swncq-mode-and-failed-command-read-fpdma-queued/view + https://www.howtoforge.com/replacing_hard_disks_in_a_raid1_array + + Kernel options: sata_nv.swncq=0 + + [ 8625.896029] ata5.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen + [ 8625.896035] ata5.00: failed command: WRITE DMA EXT + [ 8625.896040] ata5.00: cmd 35/00:08:50:06:b0/00:00:13:00:00/e0 tag 0 dma 4096 out + res 40/00:00:00:4f:c2/00:00:00:00:00/40 Emask 0x4 (timeout) + [ 8625.896043] ata5.00: status: { DRDY } + [ 8625.896048] ata5: hard resetting link + [ 8625.896050] ata5: nv: skipping hardreset on occupied port + [ 8626.364038] ata5: SATA link up 3.0 Gbps (SStatus 123 SControl 300) + [ 8631.372026] ata5.00: qc timeout (cmd 0x27) + [ 8631.372031] ata5.00: failed to read native max address (err_mask=0x4) + [ 8631.372033] ata5.00: HPA support seems broken, skipping HPA handling + [ 8631.372035] ata5.00: revalidation failed (errno=-5) + [ 8631.372042] ata5: hard resetting link + [ 8631.372044] ata5: nv: skipping hardreset on occupied port + [ 8631.840045] ata5: SATA link up 3.0 Gbps (SStatus 123 SControl 300) + [ 8631.864140] ata5.00: configured for UDMA/133 + [ 8631.864146] ata5.00: device reported invalid CHS sector 0 + [ 8631.864154] ata5: EH complete + [ 8662.888029] ata5.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen + [ 8662.888036] ata5.00: failed command: WRITE DMA EXT + [ 8662.888041] ata5.00: cmd 35/00:08:50:06:b0/00:00:13:00:00/e0 tag 0 dma 4096 out + res 40/00:00:00:4f:c2/00:00:00:00:00/40 Emask 0x4 (timeout) + [ 8662.888043] ata5.00: status: { DRDY } + [ 8662.888049] ata5: hard resetting link + [ 8662.888051] ata5: nv: skipping hardreset on occupied port + [ 8663.356038] ata5: SATA link up 3.0 Gbps (SStatus 123 SControl 300) + [ 8663.396135] ata5.00: configured for UDMA/133 + [ 8663.396141] ata5.00: device reported invalid CHS sector 0 + [ 8663.396151] ata5: EH complete + [ 8693.864031] ata5.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen + [ 8693.864038] ata5.00: failed command: WRITE DMA EXT + [ 8693.864043] ata5.00: cmd 35/00:08:50:06:b0/00:00:13:00:00/e0 tag 0 dma 4096 out + res 40/00:00:00:4f:c2/00:00:00:00:00/40 Emask 0x4 (timeout) + [ 8693.864045] ata5.00: status: { DRDY } + [ 8693.864051] ata5: hard resetting link + [ 8693.864052] ata5: nv: skipping hardreset on occupied port + [ 8694.332036] ata5: SATA link up 3.0 Gbps (SStatus 123 SControl 300) + [ 8694.356134] ata5.00: configured for UDMA/133 + [ 8694.356141] ata5.00: device reported invalid CHS sector 0 + [ 8694.356150] ata5: EH complete + [ 8724.840030] ata5: limiting SATA link speed to 1.5 Gbps + + + diff --git a/080_blog/00015_Admin/00010_Various-Cheat-Sheets/00105_GNU-Screen-Multiplexer-Keyboard-Shortcuts/index.md b/080_blog/00015_Admin/00010_Various-Cheat-Sheets/00105_GNU-Screen-Multiplexer-Keyboard-Shortcuts/index.md new file mode 100644 index 0000000..80b24b1 --- /dev/null +++ b/080_blog/00015_Admin/00010_Various-Cheat-Sheets/00105_GNU-Screen-Multiplexer-Keyboard-Shortcuts/index.md @@ -0,0 +1,43 @@ +GNU Screen - Keyboard Shortcuts +============================================= + +Invocation +---------- + $ screen [-S session_name] # simply start new session + $ screen -ls # lists sessions + $ screen -r session_name # resume detached session + $ screen -d -R session_name # resume session (also detach or create) + $ screen -d -RR #resume first session + +Shortcuts +--------- + ctrl-a c NEW WINDOW + ctrl-a n / ctrl-a p NEXT/PREVIOUS + ctrl-a d DETACH + ctrl-a D D DETACH and LOGOUT + + ctrl-a S SPLIT HORIZ. + ctrl-a | SPLIT VERTICAL + ctrl-a tab NEXT REGION + ctrl-x REMOVE REGION + ctrl-a q REMOVE ALL OTHER REGIONS + ctrl-a F FIT WINDOW + + ctrl-a c CLEAR SCREEN + ctrl-a k KILL WINDOW + ctrl-a \ QUIT + + ctrl-a esc COPY/SCROLLBACK MODE + +Layout Commands +--------------- + ctrl-a : #enter command mode + :layout new [title] + :layout remove [n|title] + :layout next + :layout prev + :layout show #list layouts + +Reference +--------- + [1] $ man screen diff --git a/080_blog/00015_Admin/00010_Various-Cheat-Sheets/00110_Midnight-Commander-Cheatsheet/index.md b/080_blog/00015_Admin/00010_Various-Cheat-Sheets/00110_Midnight-Commander-Cheatsheet/index.md new file mode 100644 index 0000000..eedc66a --- /dev/null +++ b/080_blog/00015_Admin/00010_Various-Cheat-Sheets/00110_Midnight-Commander-Cheatsheet/index.md @@ -0,0 +1,61 @@ +###>>>KWD midnight commander cheatsheet, mc cheatsheet, mc shortcuts, midnight commander shortcuts +###>>>DSC Cheatsheet for Midnight Commander summarizing the most useful shortcuts. +Midnight Commander Cheatsheet +============================= + +A short cheat-sheet summarizing midnight commander's most useful shortcut keys. + +Basic Navigation +---------------- + tab switch active panel + up/down select previous/next rown + return open selected directory + alt-o open selected directory on other panel + +View +---- + alt-. toggle hidden files + ctrl-o toggle console + alt-t toggle listing mode + alt-i sync with other panel + ctrl-u swap panels + +Miscellaneous +------------- + shift-f6 rename, filling in the current filename + insert/ctrl-t/+/\/* selections + esc-tab auto complete + ctrl-enter / alt-enter copy currently selected filename to console + Ctrl + Shift + Enter copy full path + + alt-shift-h show dir history + alt-y/alt-u navigate history + + alt+?/alt-s/ctrl-s searches + + ctrl-space calculte size + ctrl - x c chmod + ctrl - x o chown + +Troubleshooting / Extras +------------------------ +Adding this to your _.bashrc_ will let _mc_ stay in the current directory after exiting: + + alias mc='. /usr/libexec/mc/mc-wrapper.sh' + +I run _midgnight commander_ inside _tmux_ and the shifted function keys did not work as +expected. Use midnight commanders _Learn Keys_ dialog to fix this. + +Set default viewer for pdf: + + xdg-mime default evince.desktop application/pdf + +Set default editor: + + alias mc='EDITOR=vim' + +Reference +--------- + +* http://klimer.eu/2015/05/01/use-midnight-commander-like-a-pro/ +* man mc diff --git a/080_blog/00015_Admin/00010_Various-Cheat-Sheets/index.md b/080_blog/00015_Admin/00010_Various-Cheat-Sheets/index.md new file mode 100644 index 0000000..ee779fa --- /dev/null +++ b/080_blog/00015_Admin/00010_Various-Cheat-Sheets/index.md @@ -0,0 +1,3 @@ +Cheat Sheets +============ +A growing collection of some of my cheat sheets. diff --git a/080_blog/00015_Admin/00070_Password-Management-on-the-Command-Line/index.md b/080_blog/00015_Admin/00070_Password-Management-on-the-Command-Line/index.md new file mode 100644 index 0000000..1b45b02 --- /dev/null +++ b/080_blog/00015_Admin/00070_Password-Management-on-the-Command-Line/index.md @@ -0,0 +1,89 @@ +# Passoword Managemet from the Command Line + + February 8, 2018 + +Today we will look at some simple, portable yet effective ways to manage +your passwords from the command line. You will need nothing more than +**apg** and one of **gnugpg** or **openssl** along with your favorite +text editor. + +~~~~~~~~~~ {.bash} +apt install apg gnupg openssl +~~~~~~~~~~ + +## Generate your Password + +Before you can manage your passwords, you will obviously first have to +generate them. Since your brain might be a very poor random number +generator you can use `/dev/random` here. + +A few examples for generating random passwords with **apg** follow: + +~~~~~~~~~~ {.bash} +# generate a few random passwords with default settings using /dev/random +apg -c /dev/random + +# set password length to 20-30 characters and generate 10 passwords +apg -m20 -x30 -n10 -c /dev/random + +Example output: + gootCoHuecJarItOojBouFrag + OignisholWulfisOdPearshed + fekfedsornUgbacyoimyab + ... + +# Other useful flags: +#- a0 pronouncable +# -a1 random + +# If you use -a1 you can specify the symbolset with -M +# You can combine multiple -M options as in: -MCnS + +# -MC / -Mc must/can use small leters set +# -MC / -Mc must/can use capital symbol set +# -MN / -Mn must/can use numeral symbol set +# -MS / -Ms must/can use special symbol set + + +# Finally we can exclude specific characters from the symbol set with -E +apg -a1 -m10 -MN -E 02345678 -c /dev/random + +Example output: + 9119191199 + 9919119919 + 1199999911 + ... +~~~~~~~~~~ + +## Managing your Password Safe + +Just put the passwords in a plaintext file (named mypasswords in the examples below), +along with related data and encrypt them symmetrically via **gnupg**. +Decrypt them as needed. You will be prompted for a passphrase in each case. + +Note that **gnupg** might cache your password for a few minutes, +so don’t worry if you can decrypt them without beeing prompted. + +~~~~~~~~~~ {.bash} +#encrypyt. Don't forget to delete the source file +gpg -c mypasswords + +#decrypt and write to STDOUT +gpg -d mypasswords.gpg +~~~~~~~~~~ + +You might prefer openssl, which some claim to be even more portable + +~~~~~~~~~~ {.bash} +#encrypyt. Don't forget to delete the source file +openssl aes-256-cbc -salt -in mypasswords > mypasswords.aes + +#decrypt and write to STDOUT +openssl aes-256-cbc -d -in mypasswords.aes +~~~~~~~~~~ + +Adding, Editing or Deleting a password constitutes simply of the three steps: + +* decrypt your password file and save it in a safe place +* edit the passwordfile as needed with your favorite text editor +* encrypt the password flie back again diff --git a/080_blog/00015_Admin/00090_Miguels-KVM-Adventures/index.md b/080_blog/00015_Admin/00090_Miguels-KVM-Adventures/index.md new file mode 100644 index 0000000..f69989b --- /dev/null +++ b/080_blog/00015_Admin/00090_Miguels-KVM-Adventures/index.md @@ -0,0 +1,212 @@ +Miguel’s KVM Adventures +======================= + +February 7, 2018 + +Some notes about my explorations of the World of KVM virtualization. + +## Abstract +In my never ending pursuit of abstraction and encapsulation I recently started integrating all of my services into docker containers and deploying them inside virtual kvm guests. This article presents my continues effort to summarize the findings of this ongoing journey, which implies that the following material might be subject to change anytime without notice. This collection of notes and sentimental thoughts comes without any warranty or implication of fitness for any purpose. You have been warned! Now feel free to make use of it.  + +## Libvirt +This are the most common virsh commands I use to manage the kvm guests, where _domain_ is simply the name of the targeted guest and _FILE_ the name of a XML file. Remember that libvirt supports other virtualization infrastructure as well (Xen, VMware, QEMU). Most of the options are self-explanatory. With ‘virsh create’ starting a transient domain, that will disappear after shutdown, and the define/start combo resulting in a persistent domain that will even survive host restarts + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.bash} + virsh create _FILE_ # create domain from xml file + virsh destroy _domain_ # forcefully remove domain + + virsh define _FILE_ # define domain from xml file + virsh undefine _domain_ # undefine domain + + virsh suspend _domain_ # stop all scheduling + virsh resume _domain_ # start scheduling + + virsh start _domain_ # power on domain + virsh shutdown _domain_ # send corresponding ACPI signal to guest + + virsh edit _domain_ # edit xml config in place + + virsh autostart _domain_ # set autostart flag + virsh autostart _domain_ --disable # unset autostart flag + virsh list [--all] [--autostart] # list defined/active/autostart domains +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +## Disk Image +Most of the guest systems will require some sort of storage. Creating a fresh qcow2 image, to back our virtual disk, is as simple as running: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.bash} + qemu-img create -f qcow2 milky.img 200G +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Do not worry, the image will only take a fraction of the declared space, and will not grow larger than necessary, due to trimming, which will be explained later. + + +## Domain Definition +Domains, this is how libvirt calls our ‘guests’, can be defined in XML formatted files. This is my minimalistic defintion of the domain ‘milkman’ carrying 8GB RAM and 4 CPUs: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.xml .numberLines} + + + milkman + 504d80ee-1427-11e8-9861-0708f4830f96 + + 8388608 + 8388608 + 4 + + + hvm + + + + + + + + + destroy + restart + destroy + + + + /usr/bin/kvm + + + + + + + + + + + + + + + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Beside the obvious RAM size and CPU count w specify the underlying qcow2 image, to be used for our emulated hard disk. We also want to specify discard=’unmap’ and make use of a virtio-scsi controller, both to allow trimming. Trimming will be covered in more detail later. + +Our virtual machine relies on a virtual bridge virbr1. It is very important to use type=’virtio’ here. The defaults resulted in extremely poor network performance, at least in some of my particular use cases. The setup of the bridge with accompanying parameters is described in the next section about networking. + +At the very last we tell the vnc-server to listen on ::1 at port 5555. This values can be also adjusted during run-time as explained later on. + +In order to install an operating system we can add a virtual cd-rom along with an iso-image by augmenting the devices section in our XML defintion with the following lines: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.xml .numberLines} + + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Make sure to adapt the boot order in the os section by adding an appropriate line, so you end up with this: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.xml .numberLines} + + hvm + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +## Networking +Since my primary interface to the virtual machines is SSH, reliable network connectivity is one of the primary foci. IPv4 addresses became scarse so we will not waste any for the host systems virbr1 or eth0. The following diagram illustrates my IPv4 setup of a simple arp proxy utilizing ipv4 forwarding. The guests use their public ipv4 addreses and the ips of the hosts gateway. + +![](ipv4.png){.img-fluid} + +There is no need to save address space in case of IPv6 since we have a complete /64 IPv6 subnet at our disposal. While only a few guests are accessible by their IPv4 public addresses directly, we have virtually an infinite number of IPv6 addresses. Sidenote: One single /64 IPv6 subnet consists of 2^64 different addresses, which is over four billion times more than there are IPv4 addresses in the whole world! I use just the lower /65 half of our /64 subnet for the guests while the IPv6 address of the hosts NIC lies in the upper half. + +My IPv6 setup in /etc/network/interface goes along this lines: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.numberLines} + #/etc/network/interfaces + + iface eth0 inet6 static + address2a01:6a8:122:5622:8000::88/128 + gateway fe80::1 + + iface virbr1 inet6 static + pre-up brctl addbr virbr1 + address 2a01:6a8:122:5622::3/65 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +All we need to do is activate IPv6 forwarding on the host to let our guests communicate with the world outside. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.bash} + sysctl -w net.ipv6.conf.all.forwarding=1 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +And this is how the IPv6 config of a particular guest looks like: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.numberLines} + iface ens3 inet6 static + address 2a01:6a8:122:5622::13/65 + gateway 2a01:6a8:122:5622::3 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Things could be improved further by running a DHCP server, like dnsmasq, to assign the guest addresses, but for now I want to keep it simple. + +## VNC + +While ssh is perfectly sufficient for most of the time, you sometimes might need to have a look at the frame-buffer console. You can start/stop listening on a specific port or interface with: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.bash} + sudo virsh qemu-monitor-command --hmp change vnc : + sudo virsh qemu-monitor-command --hmp change vnc none +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Interestingly the port is offset by 5900 meaning that e.g. :87 will let the vnc-server listen on port 5987! +Check it with netstat -tulpn to be sure. + +## Backup Running KVM + +One of the beautiful things about using virtual machines is the level of control we have over them. We can for instance backup our running machines with almost no downtime using the following approach: + +dump config to xml file +save kvm state (RAM etc.) and stop the guest. +create an overlay on the underlying qcow2 disk image. +restore the kvm on the overlay. +backup the original disk image. +commit deltas from overlay to the image. +switch to the image with merged changes and delete deltas. + +A downtime will be experienced only between the save and restore steps, while the most time consuming part of the process, backing up the disk, can be delayed. The XML, RAM state and HDD snapshot contain all the data required to re-spawn an identical consistent copy of our virtual machine, as at the time of the backup. NOTE: the clock might cause problems if not adjusted, if some applications rely on it. Ntp can take care of that. A fast and dirty implementation of this technique, for my particular setup, can be found on our gitweb [2]. A more complete but complex solution is Daniel Berteaud’s perl script [3], which I frankly did _not_ test myself. + +## Docker Containers +A common use case is to run docker inside the virtual guests, which makes it an integral part of my ‘KVM Adventures’. I prefer to remap docker’s root user to a non-privileged user of my host, as well as utilize syslog instead of the default json-file driver. This is reflected by the following config: + +/etc/docker/daemon.json: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.json .numberLines} + { + "userns-remap": "miguel", + "log-driver": "syslog" + } +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Optionally you can tell rsyslog to log deamon.* entries into a separate file and adjust logrotation as outlined here [5]. + +## Miscellaneous + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.bash} + virt-host-validate # validate host virtualization setup +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +## References + + [1] https://libvirt.org/formatdomain.html + [2] https://gitweb.softwarefools.com/?p=miguel/kvm_tools.git + [3] http://repo.firewall-services.com/misc/virt/virt-backup.pl + [4] https://www.linux-kvm.org/page/Tuning_KVM + [5] https://www.wolfe.id.au/2015/05/03/syslog-logging-driver-for-docker/ + diff --git a/080_blog/00015_Admin/00090_Miguels-KVM-Adventures/ipv4.png b/080_blog/00015_Admin/00090_Miguels-KVM-Adventures/ipv4.png new file mode 100644 index 0000000..3dac4ed Binary files /dev/null and b/080_blog/00015_Admin/00090_Miguels-KVM-Adventures/ipv4.png differ diff --git a/080_blog/00015_Admin/index.md b/080_blog/00015_Admin/index.md new file mode 100644 index 0000000..fe5bd15 --- /dev/null +++ b/080_blog/00015_Admin/index.md @@ -0,0 +1,2 @@ +Admin Stuff +=========== diff --git a/080_blog/00015_Miscellanous/index.md b/080_blog/00015_Miscellanous/index.md deleted file mode 100644 index eaaba3a..0000000 --- a/080_blog/00015_Miscellanous/index.md +++ /dev/null @@ -1,475 +0,0 @@ -Miscellanous Notes -================== - -A collection of short notes on things I wish to remember. Many topics are heavily outdated. - -Backing up and Restoring Docker Volumes ---------------------------------------- - - July 3, 2017 - -One of my first questions, when starting my docker experience was -how to backup and restore docker volumes. - -### On the source host - -First of all identify your volumes: - - $ docker ps - $ docker inspect my_container_name | grep -C 1 -i Source - -Now you can backup the directory to a tar on your host machine: - - $ docker run –rm –volumes-from my_container_name -v $(pwd):/backup ubuntu tar cvf /backup/backup_db.tar /var/lib/mysql - -### On the target host - -In order to securely copy and restore the volume on the target host one can run: - - $ scp source_host:~/backup_db.tar . - $ docker run –rm –volumes-frommy_container_name -v $(pwd):/backup ubuntu bash -c “cd /var/lib/mysql && tar xvf /backup/backup_db.tar –strip 1″ - -A Growing Collection of Linux Command Line One-Liners ------------------------------------------------------- - -Please believe me... this collection was really supposed to grow over time... - -inside a direcotry show disk usage of all hidden files and directories and sort by size: - - $ du $(ls .* -d | tail -n +3) -hs |sort -h - -inside a direcotry show disk usage of all files and directories (also hidden) and sort by size. -Exclude ./DATA file. - - $ du . -a -d 1 -h –exclude=’./DATA’ | sort -h - -Tar all files in current directory, excluding ./DATA and ./.cache - - $ tar –exclude=’./.cache’ –exclude=’./DATA’ -cvf home_miguel_20180216.tar . - -Find files in ./ARCHIVE NOT belonging to a specific user: miguel - - $ find ARCHIVE/ \! -user miguel - -set folder/ permissions to Read/Browse only for owner recursively - - $ sudo chmod -R u=r,g=,o= folder/ - $ chmod -R u=rX,g=,o= folder/ - -find all mails from Boban when in the maildir full of mailboxes and print only short headers without bodies: - - $ grepmail -H -B -Y ‘(^TO:|^From:)’ Boban * - -not really a one-lier but will print 256 colors in a bash: - - for i in {0..255} ; do - printf "\x1b[48;5;%sm%3d\e[0m " "$i" "$i" - if (( i == 15 )) || (( i > 15 )) && (( (i-15) % 6 == 0 )); then - printf "\n"; - fi - done - -Some Tools of Choice --------------------- - -### Systems - -* joomla -* redaxo -* typo3 -* wordpress -* mediawiki - -* oscommerce -* opencart - -* owncloud -* alfresco -* mantis - -* piwik / matomo -* loganalyzer -* goaccess -* nagios / icinga - -### Servers - -* apache -* nginx - -* mariadb / mysql -* postfix -* postgis - -* geoserver - - - -Compilation Notes ------------------ - -### build your own webkit - - March 14, 2018 - -Let’s compile a release with debug info and install to /usr/local - -~~~~~~ {.bash} -wget https://webkitgtk.org/releases/webkitgtk-2.20.0.tar.xz -tar -xvf webkitgtk-2.20.0.tar.xz -cd webkitgtk-2.20.0 -# install all the libs that will be reported missing in the next step. -# I could not find the woff2 stuff in debian so skipped it... -cmake -DPORT=GTK -DCMAKE_BUILD_TYPE=RelWithDebInfo -DUSE_WOFF2=NO -GNinja -# this takes about 30minutes on my i7-4790K .. zzzzz..zzz -ninja -sudo ninja install -~~~~~~~~~~~ - - pkg-config - - pkg-config uses our new build now: - - [1] https://trac.webkit.org/wiki/BuildingGtk - [2] https://webkitgtk.org/ - -### Build and Install GCC - - April 27, 2015 - -#### Preparations -Read the prequisites at -[https://gcc.gnu.org/install/prerequisites.html](https://gcc.gnu.org/install/prerequisites.html) -and get (most recent versions at time of this writing) the following: - -* gcc (5.2.0) -* binutils (2.25.1) - -#### Configure and Build - -* unpack binutils-x.y.z -* create a new directory binutils-x.y.z-build and inside it run the following commands: - -~~~~~~ {.bash} - $ ../binutils-x.y.z/configure --disable-nls --with-sysroot --enable-targets=all - $ make -j4 - $ make install -~~~~~~~~~~~~ - -* unpack gcc-x.y.z and run the contrib/download_prerequisites script inside. -* create a new directory: gcc-x.y.z-build and inside it run: - -~~~~~~ {.bash} - $ ../gcc-x.y.z/configure --disable-nls --enable-languages=c,c++ --enable-threads - $ make -j4 - $ make install -~~~~~~~~~~~~ - -#### Reference - [1] binutils and gcc README files. - [2] https://gcc.gnu.org/install/ - [3] http://wiki.osdev.org/Building_GCC - [4] http://stackoverflow.com/questions/1726042/recipe-for-compiling-binutils-gcc-together - -monad transformers in action ----------------------------- - January 1,2018 - - *Main Control.Monad.Writer Control.Monad.State> runState (runWriterT (get >>= \a -> tell ["foo"] >> put (a*a) >> tell ["bar"] >> tell [show a])) 5 - -emscripten ----------- - October 1,2017 - - sdl2 port - https://github.com/juj/emsdk - android-ndk-r15c - - * accomplish build sys with: sdl2+input+audio+opengl+SDL_net+SDL_thread @ linux, win, osx, ios, android, win-phone, steam, rasp - -LUKS container over sshfs -------------------------- - July 5, 2017 - -* enable user\_allow\_other in /etc/fuse.conf -* sshfs -o allow\_root user@server:/BACKUPS/ ~/mnt/ -* dd if=/dev/urandom of=~/mnt/megaloman bs=1M count=512 -* sudo cryptsetup -y luksFormat ~/mnt/megaloman -* sudo cryptsetup luksOpen ~/mnt/megaloman vol1 -* sudo mkfs.ext4 /dev/mapper/vol1 -* sudo mount /dev/mapper/vol1 /mnt -* df -h | grep vol1 -* sudo umount /mnt -* sudo cryptsetup luksClose vol1 -* fusermount -u ~/mnt - -NOTE: backup your data example use : rsync -a –info=progress2 source dist - -some areas of interest ----------------------- - December 20, 2014 - -Some General Topics I am reasearching right now (or plan to do it). Or used to reasearch... - -* Neuronal Networks -* Deep Learning -* Random Forrests (and other techniques based on Decision Trees) -* Simmulated Annealing -* (Linear) Integer Programming - - -Inter Process Communication ---------------------------- - March 14, 2018 - -We can attach nicely to same memory segment from 2 different processes: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.c .numberLines} -// ipc via shared mem -// attach to shared memory; -key_t my_ftok = ftok("~/surf-webext-dom-shared-mem",'a'); - -int mem_seg=shmget(my_ftok,1024*1024,IPC_CREAT|0660); -if(mem_seg==-1) -{ -g_print("shmget failed: %s\n",strerror(errno)); -} - -shared_buf=shmat(mem_seg,NULL,0); -if(shared_buf==(void*)-1) -{ -g_print("shmat failed: %s\n",strerror(errno)); -} -g_print("attached to shared memory.\n"); -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -SSL Certificate CSR -------------------- - - February 20, 2015 - - for apache ssl mod - - first check your old csr if you like: - $ openssl req -text -noout -verify -in CSR.csr - - 1. generate key - $ openssl genrsa -des3 -out www.yourdomain-example.com.key 2048 - - 2. create CSR - $ openssl req -new -key www.yourdomain-example.com.key -out www.yourdomain-example.com.csr - - refs: - [1] https://search.thawte.com/support/ssl-digital-certificates/index?page=content&id=AR1108&actp=LIST - -Competitive Coding ------------------- - March 17, 2015 - -A small selection of websites, which I visit from time to time, addressing competitive coding. - -* topcoder.com -* codeforces.com -* codility.com -* codersclan.ne -* projecteuler.net -* www.codingame.com (need to check this) -* www.codechef.com (need to check this) -* http://psyho.gg/overview-of-programming-contests/ (and read here) -* https://www.hackerrank.com/ -* http://code.google.com/codejam -* https://www.kaggle.com/ – predicitve modelling -* odesk.com / elance - -Comp Science Literature ------------------------ - March 17, 2015 -This is a list of some books, focusing on topics around computer science, which I recently read or am currently reading or want to read :P - -* Meyers, Effective C++ (Addison-Wesley) C++98 only? -* Meyers, More Effective C++ (Addison-Wesley) C++98 only? -* Meyers, Effective STL. C++98 only? -* Sutter, Exceptional C++ -* Sutter, More Exceptional C++ -* Karlson, Beyond the C++ Standard Library: An Introduction to Boost 1st Edition -* Maybe Something on Multiprocessing (?) -* Donald Knuth. The Art Of Computer Programming -* Algorithms 3rd Edition (by Cormen, Leiserson, Rivest, Stein) -* Jonathan Bartlett. Programming from the Ground Up -* C++ in a Nutshell (O’REILLEY, by Lischner) -* C++ Primer (5th Edition) by Lippman, Lajoie, Moo -* The C++ Programming Language 4th Edition -* Anthony Williams, C++ Concurrency in Action: Practical Multihreading -* Dive into Python (2 and 3) by Mark Pilgrim -* Learn You a Haskell for Great Good by Marian Lipovaca -* Real World Haskell -* Version Control with Git (O’REILLEY, by Loeliger & McCullough) (next: 9(10) ?) -* The Linux Command Line, by William Shotts (http://linuxcommand.org/tlcl.php) -* Debian, The Administrators Handbook (by Hertzog and Mas) -* Absolute FreeBSD by Michael W. Lucas -* Modern Operating Systems, Third Edition (by Andrew S. Tannebaum) -* Linux Device Drivers (O’REILLEY, by Corbert, Rubini, Kroah-Hartman) -* Linux Kernel in a Nutshell (O’REILLEY, Greg Kroah-Hartman) - -* Concrete Math (2nd) -* UPENN cis194 - -* STOC '83 Proceedings of the fifteenth annual ACM symposium on Theory of computing / Primitives for the manipulation of general subdivisions and the computation of Voronoi diagrams - -* http://haskellbook.com/ -* Wadler paper "Monads for Functional Programming" -* simon marlow - book (parallel) -* data 6 - course (Github) -* sedgewick & waynes algorithms -* books from appendix, from programming from ground up? - -VNC ---- - April 2, 2015 - -### Server: - $ apt-get install tightvncserver - $ xtightvncserver -geometry 1900×1100 - $ netstat -tap | grep vnc # remember port (e.g.5901) - -### Client: - $ ssh -L 5901:localhost:5901 you@remote # tunnel - $ xtightvncviewer localhost::5901 # in new terminal - -### Kill Server: - $ vncserver -kill :1 # (or :2 etc..) - -Owncloud Notes --------------- - -### Mounting Ownclouds DavFS - - April 15, 2015 - - $ apt-get install davfs2 - - * since owncloud seems to have problems with locks, edit /etc/davfs2/davfs2.conf and set use_locks to 0 in order to allow creating files (as well as probably writing) - - $ mount -t davfs https://secure.sf.com/owncloud/remote.php/webdav /mnt/ - -### rescan/rebuild ownlocud files database - - June 22, 2016 - - inside ownlcoud directory run: - sudo -u www-owncloud php console.php files:scan –all - - -LXC ---- - April 28, 2015 - - maybe worth a try: - - apt-get install lxc; lxc create ctname -t download — -d debian -r jessie - -a amd64; lxc-start -d -n ctname, lxc-attach ctname - - similar tools: chroot/ debootsrap - -Add vim Lang ------------- - May 14, 2015 - - $ sudo apt-get install myspell-pl - $ cd /ush/share/hunspell - $ vim - :mkspell pl pl_PL - -What every programmer should know about ---------------------------------------- - November 7, 2015 - - Undefined behaviour: http://blog.llvm.org/2011/05/what-every-c-programmer-should-know.html - Memory: http://lwn.net/Articles/250967/ - Floating point arithmetic: https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html - -IDE Comparison --------------- - - December 7, 2015 - -While I love working with vim (ctags, taglist, etc..) and the command line, it might be worth to have a look at the following IDE’s for Java and/or C++: - -* IntelliJ IDEA -* Eclipse -* Eclipse CDT -* Codeblocks -* Netbeans -* Codelite -* KDevelop - -Setup Postfix -------------- - -We want to handle different domains on a single postfix server and have virtual users along real unix users. For the virtual users we use uid/gid 5000. - -Relevant config files are: - - /etc/postfix/master.cf - /etc/postfix/main.cf - /etc/postfix/smtpd_sender_login_maps (tells which emails belong to which login) - /etc/postfix/vmailbox (sepcifies our VIRTUAL mailboxes and the names of the spoolfiles) - /etc/postfix/virtual (aliases for our local unix users) - /etc/dovecot/users (specifies the logins, passwords, home directories,..) - /etc/dovecot/conf.d/10-mail (set inbox and mailbox dirs) - -Be careful about the permissions of the different folders, so uid/gid 5000, postfix and dovecot can access as relevant. - -A very nice tutorial on setting up postfixadmin can be found here: - - https://lelutin.ca/posts/installing_postfix_-_clamav_-_spamassassin_-_dovecot_-_postfixadmin_on_debian_squeeze/ - -Windows Specific Notes ----------------------- - -### disable hiberfile.sys - - September 7, 2017 - - run cmd.exe as administrator: - powercfg.exe -h off - -### GTA4 on NVIDIA-GTX 980 - - April 17, 2016 - - Add following flags : -nomemrestrict -norestriction - Otherwise video memory is not identified correctly. - -### Civilization 4 BTS Autosaves - - September 23, 2016 - - In the file: C:\Users\miguel\Documents\My Games\Beyond the Sword\CivilizationIV - - Adjust: - - ; The maximum number of autosaves kept in the directory before being deleted. - MaxAutoSaves = 100 - - ; Specify the number of turns between autoSaves. 0 means no autosave. - AutoSaveInterval = 1 - diff --git a/080_blog/00020_WWW-Projects-and-Apps/aquarelle.jpg b/080_blog/00020_WWW-Projects-and-Apps/aquarelle.jpg new file mode 100644 index 0000000..be593be Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/aquarelle.jpg differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/atenefunds.png b/080_blog/00020_WWW-Projects-and-Apps/atenefunds.png new file mode 100644 index 0000000..c3086b2 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/atenefunds.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/atenefunds2.jpg b/080_blog/00020_WWW-Projects-and-Apps/atenefunds2.jpg new file mode 100644 index 0000000..802410b Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/atenefunds2.jpg differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/atenefunds3.jpg b/080_blog/00020_WWW-Projects-and-Apps/atenefunds3.jpg new file mode 100644 index 0000000..de42e2c Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/atenefunds3.jpg differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/atenefunds4.jpg b/080_blog/00020_WWW-Projects-and-Apps/atenefunds4.jpg new file mode 100644 index 0000000..c4cb241 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/atenefunds4.jpg differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/atenekom.jpg b/080_blog/00020_WWW-Projects-and-Apps/atenekom.jpg new file mode 100644 index 0000000..1ad56c7 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/atenekom.jpg differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/aufbau.jpg b/080_blog/00020_WWW-Projects-and-Apps/aufbau.jpg new file mode 100644 index 0000000..28dc716 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/aufbau.jpg differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/austria-org-pl-old.png b/080_blog/00020_WWW-Projects-and-Apps/austria-org-pl-old.png new file mode 100644 index 0000000..22437e5 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/austria-org-pl-old.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/austria-org-pl.png b/080_blog/00020_WWW-Projects-and-Apps/austria-org-pl.png new file mode 100644 index 0000000..1aae36a Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/austria-org-pl.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/austrian-wine.png b/080_blog/00020_WWW-Projects-and-Apps/austrian-wine.png new file mode 100644 index 0000000..4f71c98 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/austrian-wine.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/balbuza.png b/080_blog/00020_WWW-Projects-and-Apps/balbuza.png new file mode 100644 index 0000000..7716c40 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/balbuza.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/bildershopping.jpg b/080_blog/00020_WWW-Projects-and-Apps/bildershopping.jpg new file mode 100644 index 0000000..4967066 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/bildershopping.jpg differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/bildershopping.png b/080_blog/00020_WWW-Projects-and-Apps/bildershopping.png new file mode 100644 index 0000000..b020599 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/bildershopping.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/bildershopping2.png b/080_blog/00020_WWW-Projects-and-Apps/bildershopping2.png new file mode 100644 index 0000000..6492d85 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/bildershopping2.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/breitbandausschreibungen1.png b/080_blog/00020_WWW-Projects-and-Apps/breitbandausschreibungen1.png new file mode 100644 index 0000000..6dff0b7 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/breitbandausschreibungen1.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/breitbandausschreibungen2.png b/080_blog/00020_WWW-Projects-and-Apps/breitbandausschreibungen2.png new file mode 100644 index 0000000..eae90d5 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/breitbandausschreibungen2.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/brlr1.png b/080_blog/00020_WWW-Projects-and-Apps/brlr1.png new file mode 100644 index 0000000..f1396ad Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/brlr1.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/bunzlauer.png b/080_blog/00020_WWW-Projects-and-Apps/bunzlauer.png new file mode 100644 index 0000000..e3b1d70 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/bunzlauer.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/bunzlauershop.png b/080_blog/00020_WWW-Projects-and-Apps/bunzlauershop.png new file mode 100644 index 0000000..7bac117 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/bunzlauershop.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/captainsdinner.png b/080_blog/00020_WWW-Projects-and-Apps/captainsdinner.png new file mode 100644 index 0000000..b7e9143 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/captainsdinner.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/casamila.png b/080_blog/00020_WWW-Projects-and-Apps/casamila.png new file mode 100644 index 0000000..969a0d8 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/casamila.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/condition-red.png b/080_blog/00020_WWW-Projects-and-Apps/condition-red.png new file mode 100644 index 0000000..8e0b5df Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/condition-red.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/copterwerk.png b/080_blog/00020_WWW-Projects-and-Apps/copterwerk.png new file mode 100644 index 0000000..ca71d3a Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/copterwerk.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/cornea.jpg b/080_blog/00020_WWW-Projects-and-Apps/cornea.jpg new file mode 100644 index 0000000..47fe6b1 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/cornea.jpg differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/cornea.png b/080_blog/00020_WWW-Projects-and-Apps/cornea.png new file mode 100644 index 0000000..77c1c1d Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/cornea.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/cqs.jpg b/080_blog/00020_WWW-Projects-and-Apps/cqs.jpg new file mode 100644 index 0000000..9d87742 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/cqs.jpg differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/cuadro.png b/080_blog/00020_WWW-Projects-and-Apps/cuadro.png new file mode 100644 index 0000000..ceac93d Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/cuadro.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/flipper.jpg b/080_blog/00020_WWW-Projects-and-Apps/flipper.jpg new file mode 100644 index 0000000..b1caa57 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/flipper.jpg differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/flipper2.jpg b/080_blog/00020_WWW-Projects-and-Apps/flipper2.jpg new file mode 100644 index 0000000..34e908d Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/flipper2.jpg differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/foto-pschill.png b/080_blog/00020_WWW-Projects-and-Apps/foto-pschill.png new file mode 100644 index 0000000..e624ac1 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/foto-pschill.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/ikm.jpg b/080_blog/00020_WWW-Projects-and-Apps/ikm.jpg new file mode 100644 index 0000000..06539ca Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/ikm.jpg differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/immoconnect.png b/080_blog/00020_WWW-Projects-and-Apps/immoconnect.png new file mode 100644 index 0000000..ad49532 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/immoconnect.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/index.md b/080_blog/00020_WWW-Projects-and-Apps/index.md new file mode 100644 index 0000000..fff14bc --- /dev/null +++ b/080_blog/00020_WWW-Projects-and-Apps/index.md @@ -0,0 +1,541 @@ +WWW and Apps +============ + +A random selection of Web-sites, Web-shops, Web-portals and Mobile Apps. +Most of this constitute contracted work. + + + +
+ +{BEGIN:CARD} +casamila.png +Casamila - Architects +casamila.pl +2018 +-badge-secondary online soon +-badge-primary new +-badge-info wordpress + +Complete redesign of the Casamila Architects Website. +Extensive Template customization according to client requirements. +{END:CARD} + +{BEGIN:CARD} +bunzlauershop.png +Web Shop - Bunzlauer +bunzlauer.shop +2018 +-badge-success online +-badge-primary new +-badge-info OpenCart + +Customized and Optimized OpenCart Webshop specializing in international +shipping of beautiful handcrafted polish pottery. +{END:CARD} + +{BEGIN:CARD} +aquarelle.jpg +G. Mueller Watercolors +gerhard-mueller-aquarelle.de +2018 +-badge-success online +-badge-primary new +-badge-info wordpress + +Website of Gerhard Müller hosting his watarcolour paintings. Relaunched 2018. Former TYPO3. +{END:CARD} + +{BEGIN:CARD} +mmtour.png +Mille Miglia - Blog +mmtour.krzysztofidziorek.pl +2017 +-badge-success online +-badge-primary new +-badge-info wordpress + +Krzysztof's Blog about his adventures, traveling the Italian +roads of the historic Mille Miglia race in Fall 2017. +{END:CARD} + +{BEGIN:CARD} +atenefunds.png +AteneKOM Funds +GooglePlay / AppStore +2018 +-badge-success online +-badge-primary new +-badge-info iOS +-badge-info Android +-badge-info Symfony + +Overview of the funding possibilities on EU-, national and regional levels. +Entries are continually updated and expanded and can be filtered by topics. +{END:CARD} + +{BEGIN:CARD} +mazury.png +Ratuj Mazury +ratuj-mazury.pl +2016 +-badge-success online +-badge-info wordpress + +This Website was launched 2016 and promotes ecological acitivites in the +Masurian area. Template was designed from scratch. +{END:CARD} + + +{BEGIN:CARD} +wekkaprojekt.png +Wekka Projekt - Architects +wekka-projekt.pl +2016 +-badge-success online +-badge-info wordpress + +Launched 2016 for an Architectural Office operating in Warsaw, Poland. +Template was designed from scratch. +{END:CARD} + + +{BEGIN:CARD} +norti.png +Norton Motorcycles Fan Club +nortonmotorcycles.co.uk +2018 +-badge-success online +-badge-primary new +-badge-info wordpress + +Relaunched 2018 on Wordpress. Fomer TYPO3. +{END:CARD} + + +{BEGIN:CARD} +bunzlauer.png +Bunzlauer Keramik +bunzlauerkeramik.at +2018 +-badge-success online +-badge-primary new +-badge-info wordpress + +Austrian Website about Polish Pottery. +Relaunched 2018 on Wordpress. Fomer TYPO3. +{END:CARD} + +{BEGIN:CARD} +cornea.png +Cornea Franz +GooglePlay / AppStore +2013 +-badge-secondary offline +-badge-info iOS +-badge-info Android +-badge-info PHP + +Mobile App with a simple Backend porviding legal News. +{END:CARD} + + +{BEGIN:CARD} +link-all.png +Link-All Software +link-all.eu +2013 +-badge-success online +-badge-info OsCommerce + +Webshop offering custom Alfresco hosting in vairous tiers. +Customized OsCommerce. +{END:CARD} + + +{BEGIN:CARD} +bildershopping.png +Bilder Shop - Art Prints +bildershopping.at +2010 +-badge-secondary offline +-badge-info OsCommerce + +Custom OsCommerce Webshop selling various Art Prints +{END:CARD} + + +{BEGIN:CARD} +nadler.png +Nadler - Wine Shop +nadler-hanny.at +2007 +-badge-success online +-badge-info PHP + +In 2007 coded the super-light custom PHP Shop for the Website of this Austrian Winemaker. +{END:CARD} + + +{BEGIN:CARD} +panner.jpg +Panner - Stamp Shop +panner.net +2006 +-badge-secondary offline +-badge-info PHP + +Custom PHP shop specializing in Postal Stamps. Featuring a very extensive +backend for user management and analysis. +{END:CARD} + +{BEGIN:CARD} +panner-admin.png +Stamp Shop Backend +panner.net/admin +2006 +-badge-secondary offline +-badge-info PHP + +Custom extensiv backend for the panner.net stamps webshop with complex user management and analytic possibilites. +{END:CARD} + +{BEGIN:CARD} +maiden.jpg +Maiden Entertainment +maidenentertainment.com +2005 +-badge-secondary offline +-badge-info PHP + +Website of an independent Music and Video Producer. +{END:CARD} + +{BEGIN:CARD} +flipper2.jpg +Flipper Grafik +flipper-grafik.at +2004 +-badge-secondary offline +-badge-info PHP + +Advertising Agency in Vienna, Austria. +{END:CARD} + +{BEGIN:CARD} +cqs.jpg +Complex Quantum Systems +coqus.at +2006 +-badge-secondary offline +-badge-info PHP + +Website of the Doctoral Program on Complex Quantum Systems of the University Vienna. +{END:CARD} + + +{BEGIN:CARD} +ikm.jpg +Institut fuer Kulturmanagement +mdw.ac.at/ikm/ +2003 +-badge-secondary offline +-badge-info Perl + +Website of the IKM Insistute of the University of Music and Performing Arts, Vienna. +Advanced book-browsing tools for the Insitutes library. +{END:CARD} + + +{BEGIN:CARD} +preschl.jpg +Claudia Preschl +personal.mdw.ac.at/preschl/ +2004 +-badge-success online + +Website of Prof. Claudia Preschl of the University of Music and Performing Arts, Vienna. +{END:CARD} + + +{BEGIN:CARD} +textlabor.jpg +Textlabor +textlabor.at +2006 +-badge-success online +-badge-info PHP + +Website of Jolande Peck-Himmel, PR Consultant specializing in Print and Online Media. +{END:CARD} + + +{BEGIN:CARD} +lev.jpg +LEV Wien +levwien.at +2006 +-badge-secondary offline +-badge-info PHP + +Website of the Parents Council of Music Shools of Vienna. +{END:CARD} + + +{BEGIN:CARD} +meersalzgrotte.png +Saliseum +meersalzgrotte.at +2008 +-badge-secondary offline +-badge-info PHP + +Very light custom PHP Website of the Sea-Salt-Cave Saliseum in Vienna. +{END:CARD} + + +{BEGIN:CARD} +telenetprofi.png +Telenet Profi +telenetprofi.at +2011 +-badge-success online + +Website of a Cell Phone Store in Vienna. +{END:CARD} + + +{BEGIN:CARD} +breitbandausschreibungen1.png +Broadband Tenders Germany +breitbandausschreibungen.de +2014 +-badge-success online +-badge-info Symfony + +Platform for Coorindation of German Broadband Tender Programmes. +(_involved until 2014_) + +{END:CARD} + +{BEGIN:CARD} +maiden2.png +Maiden Reloaded +maidenenterteinmanet.com +2010 +-badge-secondary offline +-badge-info TYPO3 + +Reloaded version of the Website of the indy Video and Music producer Maiden Enterteinmant +{END:CARD} + +{BEGIN:CARD} +brlr1.png +BRLR Monitoring +breitbandbuero.de/monitoring/ +2011 +-badge-success online +-badge-info PHP + +Monitoring of Broadband projects according to the "Bundesrahmenregeleung Leerrorhre" + +{END:CARD} + + +{BEGIN:CARD} +atenekom.jpg +AteneKOM Website +atenekom.eu +2012 +-badge-secondary offline +-badge-info TYPO3 + +Former Website of the atene KOM Agency. +{END:CARD} + + +{BEGIN:CARD} +todoapp.png +Online Task Management +Intranet +2013 +-badge-info Symfony + +Browser-based tool for Assignment and Monitoring of Tasks within the Company. +{END:CARD} + + +{BEGIN:CARD} +sensor.png +Sensor for GIS +Intranet +2013 +-badge-info GeoServer +-badge-info PostGIS +-badge-info OpenLayers + +Tool for spatial Analysis of Broadband related Customer Data. +{END:CARD} + + +{BEGIN:CARD} +ringy.png +ZT Ringsmuth +zt-ringsmuth.at +2015 +-badge-secondary offline +-badge-info Joomla + +Website of Civil Engineer Ernst Ringsmuth. +{END:CARD} + +{BEGIN:CARD} +platin.png +Platin - Billard & Darts +platin-billard.at +2009 +-badge-secondary offline +-badge-info PHP + +Platin Bar. Works included taking Photographs for this Website as well. +{END:CARD} + +{BEGIN:CARD} +balbuza.png +Broetchenstube +broetchenstube-baden.at +2007 +-badge-secondary offline +-badge-info Joomla + +Website of a Catering Company located in Baden, Austria. +{END:CARD} + +{BEGIN:CARD} +aufbau.jpg +Cultural Administration Studies +mdw.ac.at/ikm/kulturmanagement/ +2007 +-badge-secondary offline +-badge-info PHP + +Lightweight Website of postgradual studies at the University of Music and Performing Arts, Vienna. +{END:CARD} + +{BEGIN:CARD} +kunst-stuecke.png +Kunst-Stuecke Art Gallery +kunst-stuecke.at +2007 +-badge-secondary offline +-badge-info Redaxo + +Light CMS driven Website for an art gallery in Vienna. +{END:CARD} + + +{BEGIN:CARD} +cuadro.png +Cuadro Architects +cuadro.com.pl +2006 +-badge-secondary offline +-badge-info PHP + +Architecture Website for Cuadro +{END:CARD} + +{BEGIN:CARD} +foto-pschill.png +Gallery for Fotografie Pschill +fotografie-pschill.at +2006 +-badge-secondary offline +-badge-info PHP + +Create a PHP Gallery for this Photographers website. +{END:CARD} + +{BEGIN:CARD} +werbereich.png +Werbereich Creative Agency +werbereich.at +2006 +-badge-secondary offline +-badge-info PHP + +Technical implementation of the Website of this Creative Agency +{END:CARD} + +{BEGIN:CARD} +immoconnect.png +Immoconnect Real Estate +immoconnect.net +2006 +-badge-secondary offline + +Light single-page Website for an Austrian Real Estate Agency. +{END:CARD} + +{BEGIN:CARD} +austria-org-pl.png +Austrian Cultural Forum +austria.org.pl +2007 +-badge-secondary offline +-badge-info PHP + +Impleneted the news archive for the Austrian Cultural Forum located in Warsaw. +{END:CARD} + +{BEGIN:CARD} +condition-red.png +Condition Red - Band +condition-red.com +2005 +-badge-secondary offline +-badge-info Flash + +Flash driven Website of the Rock and Metal Band: Condition RED. +{END:CARD} + +{BEGIN:CARD} +austrian-wine.png +Austrian Wine +austrian-wine.at +2005 +-badge-secondary offline + +Website for an exporter of Austrian Wines. +{END:CARD} + +{BEGIN:CARD} +copterwerk.png +Copterwerk - Drone Services +copterwerk.com +2011 +-badge-secondary offline + +Web presence of a company offering Aerial photography and photogrammetry services. +{END:CARD} + +
+ diff --git a/080_blog/00020_WWW-Projects-and-Apps/kulturmanag.jpg b/080_blog/00020_WWW-Projects-and-Apps/kulturmanag.jpg new file mode 100644 index 0000000..72dd403 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/kulturmanag.jpg differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/kunst-stuecke.png b/080_blog/00020_WWW-Projects-and-Apps/kunst-stuecke.png new file mode 100644 index 0000000..9c18cbc Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/kunst-stuecke.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/lev.jpg b/080_blog/00020_WWW-Projects-and-Apps/lev.jpg new file mode 100644 index 0000000..f593824 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/lev.jpg differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/link-all.png b/080_blog/00020_WWW-Projects-and-Apps/link-all.png new file mode 100644 index 0000000..9c91285 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/link-all.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/maiden.jpg b/080_blog/00020_WWW-Projects-and-Apps/maiden.jpg new file mode 100644 index 0000000..0763489 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/maiden.jpg differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/maiden2.png b/080_blog/00020_WWW-Projects-and-Apps/maiden2.png new file mode 100644 index 0000000..fa8d565 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/maiden2.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/mazury.png b/080_blog/00020_WWW-Projects-and-Apps/mazury.png new file mode 100644 index 0000000..1698950 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/mazury.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/meersalzgrotte.png b/080_blog/00020_WWW-Projects-and-Apps/meersalzgrotte.png new file mode 100644 index 0000000..4fca764 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/meersalzgrotte.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/mmtour.png b/080_blog/00020_WWW-Projects-and-Apps/mmtour.png new file mode 100644 index 0000000..3d8d953 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/mmtour.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/nadler.png b/080_blog/00020_WWW-Projects-and-Apps/nadler.png new file mode 100644 index 0000000..884e3e9 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/nadler.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/nadler2.png b/080_blog/00020_WWW-Projects-and-Apps/nadler2.png new file mode 100644 index 0000000..d362a5d Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/nadler2.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/norti.png b/080_blog/00020_WWW-Projects-and-Apps/norti.png new file mode 100644 index 0000000..23e2b3d Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/norti.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/panner-admin.png b/080_blog/00020_WWW-Projects-and-Apps/panner-admin.png new file mode 100644 index 0000000..168dc5c Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/panner-admin.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/panner.jpg b/080_blog/00020_WWW-Projects-and-Apps/panner.jpg new file mode 100644 index 0000000..164308b Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/panner.jpg differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/platin.png b/080_blog/00020_WWW-Projects-and-Apps/platin.png new file mode 100644 index 0000000..e245f8c Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/platin.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/preschl.jpg b/080_blog/00020_WWW-Projects-and-Apps/preschl.jpg new file mode 100644 index 0000000..34585ed Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/preschl.jpg differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/ringy.png b/080_blog/00020_WWW-Projects-and-Apps/ringy.png new file mode 100644 index 0000000..684d41e Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/ringy.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/sensor.png b/080_blog/00020_WWW-Projects-and-Apps/sensor.png new file mode 100644 index 0000000..1846c46 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/sensor.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/telenetprofi.png b/080_blog/00020_WWW-Projects-and-Apps/telenetprofi.png new file mode 100644 index 0000000..776a503 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/telenetprofi.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/textlabor.jpg b/080_blog/00020_WWW-Projects-and-Apps/textlabor.jpg new file mode 100644 index 0000000..ad47518 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/textlabor.jpg differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/todoapp.png b/080_blog/00020_WWW-Projects-and-Apps/todoapp.png new file mode 100644 index 0000000..8753f35 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/todoapp.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/wekkaprojekt.png b/080_blog/00020_WWW-Projects-and-Apps/wekkaprojekt.png new file mode 100644 index 0000000..faa19c7 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/wekkaprojekt.png differ diff --git a/080_blog/00020_WWW-Projects-and-Apps/werbereich.png b/080_blog/00020_WWW-Projects-and-Apps/werbereich.png new file mode 100644 index 0000000..47e5838 Binary files /dev/null and b/080_blog/00020_WWW-Projects-and-Apps/werbereich.png differ diff --git a/080_blog/00040_Haskell-Projects/00040_Graham-Scan-(Haskell)/index.md b/080_blog/00040_Haskell-Projects/00040_Graham-Scan-(Haskell)/index.md deleted file mode 100644 index 195dbe1..0000000 --- a/080_blog/00040_Haskell-Projects/00040_Graham-Scan-(Haskell)/index.md +++ /dev/null @@ -1,128 +0,0 @@ -Haskell – Convex Hull – Graham Scan -=================================== - -December 16, 2017 - -Playing with Convex Hulls (via Graham Scan) and SVG Export in Haskell: - -This is an embedded SVG generated by the Haskell programm below: - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.haskell .numberLines} ---------------------------------------------------------------------------------------------- --- --- GRAHAM SCAN IMPLEMENTATION --- --- This little haskell programm calulates the Convex Hull for a set of 2D points. --- It ships wit a main function that feeds the Graham Scan algorithm with some --- random points and generates a simple SVG of the input points and resulting envelope. --- A simple SVG encoder is included. --- --- Alogrithm used: https://en.wikipedia.org/wiki/Graham_scan --- --- CREDITS -- --- --- Michal Idziorek --- 16 December 2017 --- ---------------------------------------------------------------------------------------------- - -import Data.List -import System.Random - ---------------------------------------------------------------------------------------------- - --- GRAHAM SCAN -- - --- Three points are clockwise if ccw < 0. -ccw (p1x,p1y) (p2x,p2y) (p3x,p3y) = (p2x - p1x)*(p3y - p1y) - (p2y - p1y)*(p3x - p1x) - --- Calculate the slope defined by 2 points. (return Infinity, if points are identical). -slope (ax,ay) (bx,by) | (ax,ay ) == (bx,by) = 1/0 -- Infinity - | otherwise = (bx-ax)/(by-ay) - --- Comparison function to sort points counterclockwise (given a reference point). -slope_cmp a b c = compare (slope a c) (slope a b) - --- Comparison function using the y and x coordinates for ordering. -graham_cmp (ax,ay) (bx,by) | ay /= by = compare ay by - | otherwise = compare ax bx - --- Graham scan on prepared data. this will calculate the convex hull. -graham_calc [] hs = hs -graham_calc (x1:xs) hh | length(hh) < 2 = graham_calc xs (x1:hh) -graham_calc xx@(x1:xs) hh@(h1:h2:hs) | ccw x1 h1 h2 < 0 = graham_calc xs (x1:hh) - | otherwise = graham_calc xx (h2:hs) - --- Find the starting point, sort all points counterclockwise and perform the graham scan. -graham xs = graham_calc sortedPoints [] - where minPoint = minimumBy graham_cmp xs - sortedPoints = sortBy (slope_cmp minPoint) xs - ---------------------------------------------------------------------------------------------- - --- XML ENCODING-- - -xml_attr (x:xs) = x++"=\""++(head xs)++"\" " -xml_enc tag attrs body = "<"++tag++" "++xml_attrs++">"++body++"" - where xml_attrs = unlines $ map xml_attr attrs - --- SVG ENCODING -- - --- hardcoded scaling and panning function -svg_transf x = x*30+5 - -line_to_svg ((x1,y1),(x2,y2)) = xml_enc "line" [["x1",show lx1],["y1",show ly1], - ["x2",show lx2],["y2",show ly2], - ["style", "stroke:rgb(255,0,0);stroke-width:2"]] "" - where lx1=svg_transf x1 - lx2=svg_transf x2 - ly1=svg_transf y1 - ly2=svg_transf y2 - -point_to_svg (x,y) = xml_enc "circle" [["cx",show cx],["cy",show cy],["r","5"], - ["fill","rgb(30,150,"++(show (floor dist))++")"]] "" - where cx=svg_transf x - cy=svg_transf y - dist= (sqrt ((x-5)*(x-5) + (y-5)*(y-5)))*255/8 - - - --- draws SVG points and lines (in hardcoded sizes and colors) -svg_draw p l = xml_enc "svg" [style,["width","330"],["height","330"]] body - where style = ["style", - "background-color:black;border:3px solid green;margin:2px;"] - body = (unlines (map point_to_svg p )) ++ - (unlines (map line_to_svg l )) - --- calculate convex hull and generate svg -svg_graham xs = svg_draw xs (zip hull hull_open) - where hull_open = graham xs - hull = (last hull_open) : hull_open - --- RANDOMIZING -- - -randomPoints g cnt = take cnt (zip r10a r10b) - where r5 = randomRs (0,5) g :: [Double] - r10a =zipWith (+) r5 (drop cnt r5) - r10b =zipWith (+) (drop (2*cnt) r5) (drop (3*cnt) r5) - ---------------------------------------------------------------------------------------------- - --- MAIN -- - --- Note that this is the only place of impurity in this source-file. --- Is is subject to side effects due to I/O (we are writng to stdout) --- and the random number generator. -main = do - g <- newStdGen - putStr (svg_graham (randomPoints g 25)) - putStr (svg_graham (randomPoints g 50)) - putStr (svg_graham (randomPoints g 100)) - putStr (svg_graham (randomPoints g 250)) - putStr (svg_graham (randomPoints g 500)) - putStr (svg_graham (randomPoints g 1500)) - ---------------------------------------------------------------------------------------------- -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/080_blog/00040_Haskell-Projects/00040_Graham-Scan/index.md b/080_blog/00040_Haskell-Projects/00040_Graham-Scan/index.md new file mode 100644 index 0000000..195dbe1 --- /dev/null +++ b/080_blog/00040_Haskell-Projects/00040_Graham-Scan/index.md @@ -0,0 +1,128 @@ +Haskell – Convex Hull – Graham Scan +=================================== + +December 16, 2017 + +Playing with Convex Hulls (via Graham Scan) and SVG Export in Haskell: + +This is an embedded SVG generated by the Haskell programm below: + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.haskell .numberLines} +--------------------------------------------------------------------------------------------- +-- +-- GRAHAM SCAN IMPLEMENTATION +-- +-- This little haskell programm calulates the Convex Hull for a set of 2D points. +-- It ships wit a main function that feeds the Graham Scan algorithm with some +-- random points and generates a simple SVG of the input points and resulting envelope. +-- A simple SVG encoder is included. +-- +-- Alogrithm used: https://en.wikipedia.org/wiki/Graham_scan +-- +-- CREDITS -- +-- +-- Michal Idziorek +-- 16 December 2017 +-- +--------------------------------------------------------------------------------------------- + +import Data.List +import System.Random + +--------------------------------------------------------------------------------------------- + +-- GRAHAM SCAN -- + +-- Three points are clockwise if ccw < 0. +ccw (p1x,p1y) (p2x,p2y) (p3x,p3y) = (p2x - p1x)*(p3y - p1y) - (p2y - p1y)*(p3x - p1x) + +-- Calculate the slope defined by 2 points. (return Infinity, if points are identical). +slope (ax,ay) (bx,by) | (ax,ay ) == (bx,by) = 1/0 -- Infinity + | otherwise = (bx-ax)/(by-ay) + +-- Comparison function to sort points counterclockwise (given a reference point). +slope_cmp a b c = compare (slope a c) (slope a b) + +-- Comparison function using the y and x coordinates for ordering. +graham_cmp (ax,ay) (bx,by) | ay /= by = compare ay by + | otherwise = compare ax bx + +-- Graham scan on prepared data. this will calculate the convex hull. +graham_calc [] hs = hs +graham_calc (x1:xs) hh | length(hh) < 2 = graham_calc xs (x1:hh) +graham_calc xx@(x1:xs) hh@(h1:h2:hs) | ccw x1 h1 h2 < 0 = graham_calc xs (x1:hh) + | otherwise = graham_calc xx (h2:hs) + +-- Find the starting point, sort all points counterclockwise and perform the graham scan. +graham xs = graham_calc sortedPoints [] + where minPoint = minimumBy graham_cmp xs + sortedPoints = sortBy (slope_cmp minPoint) xs + +--------------------------------------------------------------------------------------------- + +-- XML ENCODING-- + +xml_attr (x:xs) = x++"=\""++(head xs)++"\" " +xml_enc tag attrs body = "<"++tag++" "++xml_attrs++">"++body++"" + where xml_attrs = unlines $ map xml_attr attrs + +-- SVG ENCODING -- + +-- hardcoded scaling and panning function +svg_transf x = x*30+5 + +line_to_svg ((x1,y1),(x2,y2)) = xml_enc "line" [["x1",show lx1],["y1",show ly1], + ["x2",show lx2],["y2",show ly2], + ["style", "stroke:rgb(255,0,0);stroke-width:2"]] "" + where lx1=svg_transf x1 + lx2=svg_transf x2 + ly1=svg_transf y1 + ly2=svg_transf y2 + +point_to_svg (x,y) = xml_enc "circle" [["cx",show cx],["cy",show cy],["r","5"], + ["fill","rgb(30,150,"++(show (floor dist))++")"]] "" + where cx=svg_transf x + cy=svg_transf y + dist= (sqrt ((x-5)*(x-5) + (y-5)*(y-5)))*255/8 + + + +-- draws SVG points and lines (in hardcoded sizes and colors) +svg_draw p l = xml_enc "svg" [style,["width","330"],["height","330"]] body + where style = ["style", + "background-color:black;border:3px solid green;margin:2px;"] + body = (unlines (map point_to_svg p )) ++ + (unlines (map line_to_svg l )) + +-- calculate convex hull and generate svg +svg_graham xs = svg_draw xs (zip hull hull_open) + where hull_open = graham xs + hull = (last hull_open) : hull_open + +-- RANDOMIZING -- + +randomPoints g cnt = take cnt (zip r10a r10b) + where r5 = randomRs (0,5) g :: [Double] + r10a =zipWith (+) r5 (drop cnt r5) + r10b =zipWith (+) (drop (2*cnt) r5) (drop (3*cnt) r5) + +--------------------------------------------------------------------------------------------- + +-- MAIN -- + +-- Note that this is the only place of impurity in this source-file. +-- Is is subject to side effects due to I/O (we are writng to stdout) +-- and the random number generator. +main = do + g <- newStdGen + putStr (svg_graham (randomPoints g 25)) + putStr (svg_graham (randomPoints g 50)) + putStr (svg_graham (randomPoints g 100)) + putStr (svg_graham (randomPoints g 250)) + putStr (svg_graham (randomPoints g 500)) + putStr (svg_graham (randomPoints g 1500)) + +--------------------------------------------------------------------------------------------- +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/080_blog/00040_Haskell-Projects/00065_Base64-Encoder-(Haskell)/index.md b/080_blog/00040_Haskell-Projects/00065_Base64-Encoder-(Haskell)/index.md deleted file mode 100644 index 830ed8d..0000000 --- a/080_blog/00040_Haskell-Projects/00065_Base64-Encoder-(Haskell)/index.md +++ /dev/null @@ -1,51 +0,0 @@ -Miguel's Naive Base64 Encoder -============================== - February 19, 2018 - -Coded on a winter afterfnoon on 19th Feb 2018 A.D. to fully understand -base64 encoding and play with haskell, which is always an indisputable -pleasure. - -The following lines were written in full awareness that 'libraries' for -this very purpose, which perform way better, are in existence. - -Coded in big anger due to nick's stories about saving his binary format, -encrypted passwords in an ascii config file, featuring -strange letters and characters. - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.haskell .numberLines} --- File: base64.hs -- - -import Data.Char -import Text.Printf -import qualified Data.List as L -import qualified Data.List.Split as T - -toBase64 x = maskBase64 x . toBase64core . asciiToBin . binFill $ x -toBase64core = map base64toDigit . map binToDec . T.chunksOf 6 - -base64toDigit x = (['A'..'Z']++['a'..'z']++['0'..'9']++['+','/']) !! x -binToDec = sum . map (2^) . L.findIndices (=='1') . reverse -asciiToBin = concat . map (\y -> printf "%08b" y) . map ord -binFill x = x ++ (take (fill64length x) $ cycle "\000") - -maskBase64 o x = take (length x - l ) x ++ (take l $ cycle "=") - where l = (fill64length o) - -fill64length x | m==0 = 0 - | otherwise = 3-m - where m=mod (length x) 3 - -main = do - line <- getLine - putStrLn $ toBase64 line -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Example usage, with decoding via `base64 -d` - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.bash} -miguel@megaloman:~$ echo -n "secret haskell" | runghc base64.hs -c2VjcmV0IGhhc2tlbGw= -miguel@megaloman:~$ echo -n "c2VjcmV0IGhhc2tlbGw=" | base64 -d # decode to check -secret haskell -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/080_blog/00040_Haskell-Projects/00065_Base64-Encoder/index.md b/080_blog/00040_Haskell-Projects/00065_Base64-Encoder/index.md new file mode 100644 index 0000000..830ed8d --- /dev/null +++ b/080_blog/00040_Haskell-Projects/00065_Base64-Encoder/index.md @@ -0,0 +1,51 @@ +Miguel's Naive Base64 Encoder +============================== + February 19, 2018 + +Coded on a winter afterfnoon on 19th Feb 2018 A.D. to fully understand +base64 encoding and play with haskell, which is always an indisputable +pleasure. + +The following lines were written in full awareness that 'libraries' for +this very purpose, which perform way better, are in existence. + +Coded in big anger due to nick's stories about saving his binary format, +encrypted passwords in an ascii config file, featuring +strange letters and characters. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.haskell .numberLines} +-- File: base64.hs -- + +import Data.Char +import Text.Printf +import qualified Data.List as L +import qualified Data.List.Split as T + +toBase64 x = maskBase64 x . toBase64core . asciiToBin . binFill $ x +toBase64core = map base64toDigit . map binToDec . T.chunksOf 6 + +base64toDigit x = (['A'..'Z']++['a'..'z']++['0'..'9']++['+','/']) !! x +binToDec = sum . map (2^) . L.findIndices (=='1') . reverse +asciiToBin = concat . map (\y -> printf "%08b" y) . map ord +binFill x = x ++ (take (fill64length x) $ cycle "\000") + +maskBase64 o x = take (length x - l ) x ++ (take l $ cycle "=") + where l = (fill64length o) + +fill64length x | m==0 = 0 + | otherwise = 3-m + where m=mod (length x) 3 + +main = do + line <- getLine + putStrLn $ toBase64 line +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Example usage, with decoding via `base64 -d` + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.bash} +miguel@megaloman:~$ echo -n "secret haskell" | runghc base64.hs +c2VjcmV0IGhhc2tlbGw= +miguel@megaloman:~$ echo -n "c2VjcmV0IGhhc2tlbGw=" | base64 -d # decode to check +secret haskell +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/080_blog/00040_Haskell-Projects/00120_Lambda-Calculus-(Haskell)/index.md b/080_blog/00040_Haskell-Projects/00120_Lambda-Calculus-(Haskell)/index.md deleted file mode 100644 index 25c6b83..0000000 --- a/080_blog/00040_Haskell-Projects/00120_Lambda-Calculus-(Haskell)/index.md +++ /dev/null @@ -1,38 +0,0 @@ -Lambda Calculus -=============== - - May 2, 2018 - -Playing with Type Quantifiers and Haskell's Rank 2 Type Polymorphsim, -implementing Boolean logic from scratch. We use the conventional -definitions for `True` an `False` also known as Church booleans, after Alonzo Church, who -intruced them along Lambda Calculus in the 1930s [1]. - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.haskell .numberLines} -{-# LANGUAGE Rank2Types #-} - -fTrue :: forall a. a->a->a -fTrue x y = x - -fFalse :: forall a. a->a->a -fFalse x y = y - -fAnd :: (forall a. a->a->a)->(forall a. a->a->a)->(forall a. a->a->a) -fAnd p q = p q p - -fOr :: (forall a. a->a->a)->(forall a. a->a->a)->(forall a. a->a->a) -fOr p q = p p q - -fNot :: (forall a. a->a->a)->(forall a. a->a->a) -fNot p = p fFalse fTrue - -ifThenElse :: (forall a. a->a->a)->(forall a. a->a->a) - ->(forall a. a->a->a)->(forall a. a->a->a) -ifThenElse p a b = p a b - --- Example -- - -main = print $ (ifThenElse fFalse fFalse $ fAnd fTrue $ fNot fFalse) "T" "F" -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - [1] https://en.wikipedia.org/wiki/Lambda_calculus diff --git a/080_blog/00040_Haskell-Projects/00120_Lambda-Calculus/index.md b/080_blog/00040_Haskell-Projects/00120_Lambda-Calculus/index.md new file mode 100644 index 0000000..25c6b83 --- /dev/null +++ b/080_blog/00040_Haskell-Projects/00120_Lambda-Calculus/index.md @@ -0,0 +1,38 @@ +Lambda Calculus +=============== + + May 2, 2018 + +Playing with Type Quantifiers and Haskell's Rank 2 Type Polymorphsim, +implementing Boolean logic from scratch. We use the conventional +definitions for `True` an `False` also known as Church booleans, after Alonzo Church, who +intruced them along Lambda Calculus in the 1930s [1]. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.haskell .numberLines} +{-# LANGUAGE Rank2Types #-} + +fTrue :: forall a. a->a->a +fTrue x y = x + +fFalse :: forall a. a->a->a +fFalse x y = y + +fAnd :: (forall a. a->a->a)->(forall a. a->a->a)->(forall a. a->a->a) +fAnd p q = p q p + +fOr :: (forall a. a->a->a)->(forall a. a->a->a)->(forall a. a->a->a) +fOr p q = p p q + +fNot :: (forall a. a->a->a)->(forall a. a->a->a) +fNot p = p fFalse fTrue + +ifThenElse :: (forall a. a->a->a)->(forall a. a->a->a) + ->(forall a. a->a->a)->(forall a. a->a->a) +ifThenElse p a b = p a b + +-- Example -- + +main = print $ (ifThenElse fFalse fFalse $ fAnd fTrue $ fNot fFalse) "T" "F" +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + [1] https://en.wikipedia.org/wiki/Lambda_calculus diff --git a/080_blog/00040_Haskell-Projects/00130_Calculator-on-Parsec-and-GTK-(Haskell)/index.md b/080_blog/00040_Haskell-Projects/00130_Calculator-on-Parsec-and-GTK-(Haskell)/index.md deleted file mode 100644 index 9701481..0000000 --- a/080_blog/00040_Haskell-Projects/00130_Calculator-on-Parsec-and-GTK-(Haskell)/index.md +++ /dev/null @@ -1,29 +0,0 @@ -Simple Calculator on Parsec and GTK -=================================== - - May 3, 2018 - -![](/DATA/haskell/calc/calc.png){.img-fluid .border} - -Today I implemented this simple stupid calulator as a side effect of playing -around with parsec [1] and haskells gtk3 [2] bindings, as well as glade [3] - -an interactive user interface designer. - -Source Files ------------- - -* [calc.hs](/DATA/haskell/calc/calc.hs) -* [calc.glade](/DATA/haskell/calc/calc.glade) - -calc.hs Listing ---------------- - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.haskell .numberLines} -{BEGIN:SOURCE} -./DATA/haskell/calc/calc.hs -{END:SOURCE} -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - [1] https://hackage.haskell.org/package/parsec - [2] https://hackage.haskell.org/package/gtk3 - [3] https://glade.gnome.org/ diff --git a/080_blog/00040_Haskell-Projects/00130_Calculator-on-Parsec-and-GTK/calc.glade b/080_blog/00040_Haskell-Projects/00130_Calculator-on-Parsec-and-GTK/calc.glade new file mode 100644 index 0000000..db09761 --- /dev/null +++ b/080_blog/00040_Haskell-Projects/00130_Calculator-on-Parsec-and-GTK/calc.glade @@ -0,0 +1,312 @@ + + + + + + False + + + True + False + vertical + True + + + True + False + vertical + + + True + True + in + + + True + True + + + + + True + True + 0 + + + + + True + True + False + False + + + True + True + 1 + + + + + False + True + 0 + + + + + True + False + True + True + + + 1 + True + True + True + + + 0 + 2 + + + + + 2 + True + True + True + + + 1 + 2 + + + + + 3 + True + True + True + + + 2 + 2 + + + + + 4 + True + True + True + + + 0 + 1 + + + + + 5 + True + True + True + + + 1 + 1 + + + + + 6 + True + True + True + + + 2 + 1 + + + + + 7 + True + True + True + + + 0 + 0 + + + + + 8 + True + True + True + + + 1 + 0 + + + + + 9 + True + True + True + + + 2 + 0 + + + + + 0 + True + True + True + + + 0 + 3 + + + + + . + True + True + True + + + 1 + 3 + + + + + = + True + True + True + + + 3 + 0 + + + + + ( + True + True + True + + + 2 + 3 + + + + + + + True + True + True + + + 0 + 4 + + + + + - + True + True + True + + + 1 + 4 + + + + + * + True + True + True + + + 2 + 4 + + + + + / + True + True + True + + + 3 + 4 + + + + + CLR + True + True + True + + + 3 + 1 + + + + + DEL + True + True + True + + + 3 + 2 + + + + + ) + True + True + True + + + 3 + 3 + + + + + True + True + 1 + + + + + + diff --git a/080_blog/00040_Haskell-Projects/00130_Calculator-on-Parsec-and-GTK/calc.hs b/080_blog/00040_Haskell-Projects/00130_Calculator-on-Parsec-and-GTK/calc.hs new file mode 100644 index 0000000..ec47e05 --- /dev/null +++ b/080_blog/00040_Haskell-Projects/00130_Calculator-on-Parsec-and-GTK/calc.hs @@ -0,0 +1,74 @@ +-- Simple Stupid Calculator demonstrating basic gtk/glade and parsec parser usage -- +-- Hacked togeter by Miguel on May 3, 2018 + +{-# LANGUAGE PackageImports #-} +import "gtk3" Graphics.UI.Gtk +import Control.Monad.IO.Class +import Data.ByteString.Char8 (pack,unpack) +import Numeric +import Text.Parsec +import Text.Parsec.Expr +import Text.Parsec.Language +import Text.Parsec.Number (fractional2) +import Text.Parsec.Token + +-- parse calculation -- +calc s = case parse expr "" s of Right x -> showFFloat Nothing x "" + _ -> "?" + +table = [ [binary "*" (*) AssocLeft, binary "/" (/) AssocLeft ] + , [binary "+" (+) AssocLeft, binary "-" (-) AssocLeft ] ] + +lexer = makeTokenParser haskellDef +expr = buildExpressionParser table term "expression" +term = parens lexer expr <|> fractional2 False "simple expression" + +binary name fun assoc = Infix (do{ reservedOp lexer name; return fun }) assoc + +-- gui for the calculator -- +main = do initGUI + builder <- builderNew + builderAddFromFile builder "calc.glade" + window <- builderGetObject builder castToWindow "mainWindow" + output <- builderGetObject builder castToTextView "output" + outputBuff <- textViewGetBuffer output + hist <- builderGetObject builder castToTextView "hist" + histBuff <- textViewGetBuffer hist + end<-textBufferGetEndIter histBuff + histMark <- textBufferCreateMark histBuff Nothing end True + + let conn = connBtn builder outputBuff + connA = connBtnAct builder outputBuff + + -- connecting buttons -- + sequence_ $ conn <$> map show [0..9] ++ ["+","-","/","*","(",")","."] + + connA "CLR" $ textBufferSetByteString outputBuff (pack "") + connA "DEL" $ manipTextBuff outputBuff (\x -> case x of [] -> []; xs -> init xs) + connA "=" $ do txt<-getTextBuff outputBuff + manipTextBuff outputBuff calc + res<-getTextBuff outputBuff + manipTextBuff histBuff (\x -> x++txt++" = "++res++"\n") + end<-textBufferGetEndIter histBuff + textBufferMoveMark histBuff histMark end + textViewScrollToMark hist histMark 0 $ Just (0,1) + return () + + -- handler to run on window destruction + window `on` deleteEvent $ do liftIO mainQuit + return False + widgetShowAll window + mainGUI + +getTextBuff outputBuff = do start<-textBufferGetStartIter outputBuff + end<-textBufferGetEndIter outputBuff + unpack <$> textBufferGetByteString outputBuff start end True + +manipTextBuff outputBuff action = do txt<-getTextBuff outputBuff + textBufferSetByteString outputBuff (pack $ action $ txt) + +connBtn builder buff label = connBtnAct builder buff label $ + textBufferInsertByteStringAtCursor buff (pack label) + +connBtnAct builder buff label act = do btn <- builderGetObject builder castToButton label + btn `on` buttonActivated $ act diff --git a/080_blog/00040_Haskell-Projects/00130_Calculator-on-Parsec-and-GTK/calc.png b/080_blog/00040_Haskell-Projects/00130_Calculator-on-Parsec-and-GTK/calc.png new file mode 100644 index 0000000..7cb35c3 Binary files /dev/null and b/080_blog/00040_Haskell-Projects/00130_Calculator-on-Parsec-and-GTK/calc.png differ diff --git a/080_blog/00040_Haskell-Projects/00130_Calculator-on-Parsec-and-GTK/index.md b/080_blog/00040_Haskell-Projects/00130_Calculator-on-Parsec-and-GTK/index.md new file mode 100644 index 0000000..381b017 --- /dev/null +++ b/080_blog/00040_Haskell-Projects/00130_Calculator-on-Parsec-and-GTK/index.md @@ -0,0 +1,23 @@ +Simple Calculator on Parsec and GTK +=================================== + + May 3, 2018 + +![](calc.png){.img-fluid .border} + +Today I implemented this simple stupid calulator as a side effect of playing +around with parsec [1] and haskells gtk3 [2] bindings, as well as glade [3] - +an interactive user interface designer. + +Source Files +------------ + +* [calc.hs](calc.hs) +* [calc.glade](calc.glade) + +Ref +--- + + [1] https://hackage.haskell.org/package/parsec + [2] https://hackage.haskell.org/package/gtk3 + [3] https://glade.gnome.org/ diff --git a/080_blog/00040_Haskell-Projects/00140_Minimalistic-SVG-Generator-(Haskell)/SimpleSvg.hs b/080_blog/00040_Haskell-Projects/00140_Minimalistic-SVG-Generator-(Haskell)/SimpleSvg.hs deleted file mode 100644 index 7b44557..0000000 --- a/080_blog/00040_Haskell-Projects/00140_Minimalistic-SVG-Generator-(Haskell)/SimpleSvg.hs +++ /dev/null @@ -1,179 +0,0 @@ --- --- Miguel's Simple SVG Generator --- --- Author: Michal Idziorek --- Last Update: May 11th, 2018 --- - -{-# LANGUAGE ExistentialQuantification #-} - -module SimpleSvg ( - - svgExample1 -- predefined example canvas - -- you can generate the output string via: - -- putStr $ svgGenerate svgExample1 - - ,svgGenerate -- canvas to svg - - ,svgEmpty -- empty canvas - ,svgAdd -- add to canvas (single) - ,svgAddList -- add to canvas (list) - - ,svgCircle -- circle - ,svgLine -- line - ,svgTriangle -- trianvle - - ,svgFilledCircle -- filled circle - ,svgFilledLine -- filled line - ,svgFilledTriangle -- filled trianvle - - ,svgColor -- colors and shades of gray - ,svgRed - ,svgGreen - ,svgBlue - ,svgWhite - ,svgBlack - ,svgShGray - - - ,svgRedLine -- red line - ,svgBluePoint -- small blue circle - ,svgGreenTriangle -- green triangle - - - ) where - --- CONFIG -- - -svgStrokeWidth = 2 - --- EXAMPLE CANVAS -- - --- Demonstrating how to add a few objects to a light gray 300x200 canvas - -svgExample1 = svgAddList (svgEmpty (svgShGray 200) 300 200) $ - [ svgRedLine (0,0) (200,200) - ,svgRedLine (300,0) (100,200) - ,svgBluePoint (33,133) - ,svgBluePoint (33,22) - ,svgBluePoint (66,25) - ,svgFilledTriangle svgBlack svgWhite (20,20) (100,100) (10,90) - ,svgFilledCircle svgWhite svgGreen (150,120) 30 - ]++ - map (svgBluePoint . (,) 250) [50,60..150] - - --- SHAPES -- - --- A few predefined shapes easing a quickstart as well as serving as an --- example, for how to define them in your own code. - -svgRedLine = svgLine svgRed -svgBluePoint pos = svgCircle svgBlue pos 2 -svgGreenTriangle = svgTriangle svgGreen - - --- Shape construction - -svgLine c (x1,y1) (x2,y2) = - svgShape c (SvgLine (svgCoord x1 y1) (svgCoord x2 y2)) - -svgCircle c (x,y) r = - svgShape c (SvgCircle (svgCoord x y) r) - -svgTriangle c (x1,y1) (x2,y2) (x3,y3)= - svgShape c (SvgTriangle (svgCoord x1 y1) (svgCoord x2 y2) (svgCoord x3 y3)) - -svgFilledLine c1 c2 (x1,y1) (x2,y2) = - svgFilledShape c1 c2 (SvgLine (svgCoord x1 y1) (svgCoord x2 y2)) - -svgFilledCircle c1 c2 (x,y) r = - svgFilledShape c1 c2 (SvgCircle (svgCoord x y) r) - -svgFilledTriangle c1 c2 (x1,y1) (x2,y2) (x3,y3)= - svgFilledShape c1 c2 (SvgTriangle (svgCoord x1 y1) (svgCoord x2 y2) (svgCoord x3 y3)) - -svgShape c1 = SvgPrim c1 (svgNoFill) -svgFilledShape c1 c2 = SvgPrim c1 (svgFill c2) - --- CANVAS -- - -data SvgCanvas = SvgCanvas SvgColor Int Int [SvgPrim] - -svgEmpty c w h = SvgCanvas c w h [] -svgAdd (SvgCanvas c w h xs) x = SvgCanvas c w h (x:xs) -svgAddList (SvgCanvas c w h xs) ys = SvgCanvas c w h (reverse ys++xs) - -svgGenerate (SvgCanvas col width height prims) = - xml_enc "svg" [("height",show height),("width", show width), - ("style","background-color:"++svgGenColor col)] - body - where body = foldl f "" prims - f a x = primToSvg x++a - --- COLORS -- - --- color type along with a few predefined colors to work with - -newtype SvgColor = SvgColor (Int,Int,Int) -svgColor r g b = SvgColor (r,g,b) -svgRed = svgColor 255 0 0 -svgBlue = svgColor 0 0 255 -svgGreen = svgColor 0 255 0 -svgShGray v = svgColor v v v -svgBlack = svgShGray 0 -svgWhite = svgShGray 255 - -svgGenColor (SvgColor (r,g,b)) = "rgb("++show r++","++show g++","++show b++")" - --- the fill color is wrapped inside a Maybe type, since it is optional - -newtype SvgFill = SvgFill (Maybe SvgColor) -svgFill col = SvgFill (Just col) -svgNoFill = SvgFill Nothing - --- SHAPES -- - --- A class for shapes that we want to transform into SVG --- We define instances for circle, line and triangle --- The 2D coordinates are wrapped inside a newtype SvgCoord - -newtype SvgCoord = SvgCoord (Double,Double) -svgCoord x y = SvgCoord (x,y) - -data SvgPrim = forall a.SvgPrimClass a => SvgPrim SvgColor SvgFill a - -class SvgPrimClass a where - getSvg :: a->(String,[(String,String)]) - -data SvgCircle = SvgCircle SvgCoord Double -instance SvgPrimClass SvgCircle where - getSvg (SvgCircle (SvgCoord (x,y)) r) = - ("circle", [("cx",show x),("cy",show y),("r",show r)]) - -data SvgLine = SvgLine SvgCoord SvgCoord -instance SvgPrimClass SvgLine where - getSvg (SvgLine (SvgCoord (x1,y1)) (SvgCoord (x2,y2))) = - ("line", [("x1",show x1),("y1",show y1), - ("x2",show x2),("y2",show y2)]) - -data SvgTriangle = SvgTriangle SvgCoord SvgCoord SvgCoord -instance SvgPrimClass SvgTriangle where - getSvg (SvgTriangle (SvgCoord (x1,y1)) (SvgCoord (x2,y2)) (SvgCoord (x3,y3))) = - ("polygon", [("points",pts)]) - where pts=show x1++","++show y1++" "++ - show x2++","++show y2++" "++ - show x3++","++show y3 - --- transform single primitve to SVG -primToSvg (SvgPrim col (SvgFill fill) prim) = xml_enc tag (attrs++attrs2) "" - where (tag, attrs)=getSvg prim - attrs2=[ ("fill",maybe "none" svgGenColor fill) - ,("stroke",svgGenColor col) - ,("stroke-width",show svgStrokeWidth)] - --- XML ENCODER -- - -xml_enc tag attrs body = "<"++tag++" "++xml_attrs++">"++body++"" - where xml_attrs = unlines $ map xml_attr attrs - xml_attr (a,v) = a++"=\""++v++"\" " diff --git a/080_blog/00040_Haskell-Projects/00140_Minimalistic-SVG-Generator-(Haskell)/index.md b/080_blog/00040_Haskell-Projects/00140_Minimalistic-SVG-Generator-(Haskell)/index.md deleted file mode 100644 index 8211ba2..0000000 --- a/080_blog/00040_Haskell-Projects/00140_Minimalistic-SVG-Generator-(Haskell)/index.md +++ /dev/null @@ -1,31 +0,0 @@ -A Minimalistic SVG Generator -============================ - - May 11, 2018 - - -A minimalistic SVG generator for my humble requirements. -They might grow someday however... - -The SVG in the following screenshot was generated from the following code -to demonstrate a simple use case. - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.haskell .numberLines} -svgExample1 = svgAddList (svgEmpty (svgShGray 200) 300 200) $ - [ svgRedLine (0,0) (200,200) - ,svgRedLine (300,0) (100,200) - ,svgBluePoint (33,133) - ,svgBluePoint (33,22) - ,svgBluePoint (66,25) - ,svgFilledTriangle svgBlack svgWhite (20,20) (100,100) (10,90) - ,svgFilledCircle svgWhite svgGreen (150,120) 30 - ]++ - map (svgBluePoint . (,) 250) [50,60..150] -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -![](svg.png){.img-fluid .border} - -Source Files ------------- - -* [SimpleSvg.hs](SimpleSvg.hs) diff --git a/080_blog/00040_Haskell-Projects/00140_Minimalistic-SVG-Generator-(Haskell)/svg.png b/080_blog/00040_Haskell-Projects/00140_Minimalistic-SVG-Generator-(Haskell)/svg.png deleted file mode 100644 index d679fad..0000000 Binary files a/080_blog/00040_Haskell-Projects/00140_Minimalistic-SVG-Generator-(Haskell)/svg.png and /dev/null differ diff --git a/080_blog/00040_Haskell-Projects/00140_Minimalistic-SVG-Generator/SimpleSvg.hs b/080_blog/00040_Haskell-Projects/00140_Minimalistic-SVG-Generator/SimpleSvg.hs new file mode 100644 index 0000000..7b44557 --- /dev/null +++ b/080_blog/00040_Haskell-Projects/00140_Minimalistic-SVG-Generator/SimpleSvg.hs @@ -0,0 +1,179 @@ +-- +-- Miguel's Simple SVG Generator +-- +-- Author: Michal Idziorek +-- Last Update: May 11th, 2018 +-- + +{-# LANGUAGE ExistentialQuantification #-} + +module SimpleSvg ( + + svgExample1 -- predefined example canvas + -- you can generate the output string via: + -- putStr $ svgGenerate svgExample1 + + ,svgGenerate -- canvas to svg + + ,svgEmpty -- empty canvas + ,svgAdd -- add to canvas (single) + ,svgAddList -- add to canvas (list) + + ,svgCircle -- circle + ,svgLine -- line + ,svgTriangle -- trianvle + + ,svgFilledCircle -- filled circle + ,svgFilledLine -- filled line + ,svgFilledTriangle -- filled trianvle + + ,svgColor -- colors and shades of gray + ,svgRed + ,svgGreen + ,svgBlue + ,svgWhite + ,svgBlack + ,svgShGray + + + ,svgRedLine -- red line + ,svgBluePoint -- small blue circle + ,svgGreenTriangle -- green triangle + + + ) where + +-- CONFIG -- + +svgStrokeWidth = 2 + +-- EXAMPLE CANVAS -- + +-- Demonstrating how to add a few objects to a light gray 300x200 canvas + +svgExample1 = svgAddList (svgEmpty (svgShGray 200) 300 200) $ + [ svgRedLine (0,0) (200,200) + ,svgRedLine (300,0) (100,200) + ,svgBluePoint (33,133) + ,svgBluePoint (33,22) + ,svgBluePoint (66,25) + ,svgFilledTriangle svgBlack svgWhite (20,20) (100,100) (10,90) + ,svgFilledCircle svgWhite svgGreen (150,120) 30 + ]++ + map (svgBluePoint . (,) 250) [50,60..150] + + +-- SHAPES -- + +-- A few predefined shapes easing a quickstart as well as serving as an +-- example, for how to define them in your own code. + +svgRedLine = svgLine svgRed +svgBluePoint pos = svgCircle svgBlue pos 2 +svgGreenTriangle = svgTriangle svgGreen + + +-- Shape construction + +svgLine c (x1,y1) (x2,y2) = + svgShape c (SvgLine (svgCoord x1 y1) (svgCoord x2 y2)) + +svgCircle c (x,y) r = + svgShape c (SvgCircle (svgCoord x y) r) + +svgTriangle c (x1,y1) (x2,y2) (x3,y3)= + svgShape c (SvgTriangle (svgCoord x1 y1) (svgCoord x2 y2) (svgCoord x3 y3)) + +svgFilledLine c1 c2 (x1,y1) (x2,y2) = + svgFilledShape c1 c2 (SvgLine (svgCoord x1 y1) (svgCoord x2 y2)) + +svgFilledCircle c1 c2 (x,y) r = + svgFilledShape c1 c2 (SvgCircle (svgCoord x y) r) + +svgFilledTriangle c1 c2 (x1,y1) (x2,y2) (x3,y3)= + svgFilledShape c1 c2 (SvgTriangle (svgCoord x1 y1) (svgCoord x2 y2) (svgCoord x3 y3)) + +svgShape c1 = SvgPrim c1 (svgNoFill) +svgFilledShape c1 c2 = SvgPrim c1 (svgFill c2) + +-- CANVAS -- + +data SvgCanvas = SvgCanvas SvgColor Int Int [SvgPrim] + +svgEmpty c w h = SvgCanvas c w h [] +svgAdd (SvgCanvas c w h xs) x = SvgCanvas c w h (x:xs) +svgAddList (SvgCanvas c w h xs) ys = SvgCanvas c w h (reverse ys++xs) + +svgGenerate (SvgCanvas col width height prims) = + xml_enc "svg" [("height",show height),("width", show width), + ("style","background-color:"++svgGenColor col)] + body + where body = foldl f "" prims + f a x = primToSvg x++a + +-- COLORS -- + +-- color type along with a few predefined colors to work with + +newtype SvgColor = SvgColor (Int,Int,Int) +svgColor r g b = SvgColor (r,g,b) +svgRed = svgColor 255 0 0 +svgBlue = svgColor 0 0 255 +svgGreen = svgColor 0 255 0 +svgShGray v = svgColor v v v +svgBlack = svgShGray 0 +svgWhite = svgShGray 255 + +svgGenColor (SvgColor (r,g,b)) = "rgb("++show r++","++show g++","++show b++")" + +-- the fill color is wrapped inside a Maybe type, since it is optional + +newtype SvgFill = SvgFill (Maybe SvgColor) +svgFill col = SvgFill (Just col) +svgNoFill = SvgFill Nothing + +-- SHAPES -- + +-- A class for shapes that we want to transform into SVG +-- We define instances for circle, line and triangle +-- The 2D coordinates are wrapped inside a newtype SvgCoord + +newtype SvgCoord = SvgCoord (Double,Double) +svgCoord x y = SvgCoord (x,y) + +data SvgPrim = forall a.SvgPrimClass a => SvgPrim SvgColor SvgFill a + +class SvgPrimClass a where + getSvg :: a->(String,[(String,String)]) + +data SvgCircle = SvgCircle SvgCoord Double +instance SvgPrimClass SvgCircle where + getSvg (SvgCircle (SvgCoord (x,y)) r) = + ("circle", [("cx",show x),("cy",show y),("r",show r)]) + +data SvgLine = SvgLine SvgCoord SvgCoord +instance SvgPrimClass SvgLine where + getSvg (SvgLine (SvgCoord (x1,y1)) (SvgCoord (x2,y2))) = + ("line", [("x1",show x1),("y1",show y1), + ("x2",show x2),("y2",show y2)]) + +data SvgTriangle = SvgTriangle SvgCoord SvgCoord SvgCoord +instance SvgPrimClass SvgTriangle where + getSvg (SvgTriangle (SvgCoord (x1,y1)) (SvgCoord (x2,y2)) (SvgCoord (x3,y3))) = + ("polygon", [("points",pts)]) + where pts=show x1++","++show y1++" "++ + show x2++","++show y2++" "++ + show x3++","++show y3 + +-- transform single primitve to SVG +primToSvg (SvgPrim col (SvgFill fill) prim) = xml_enc tag (attrs++attrs2) "" + where (tag, attrs)=getSvg prim + attrs2=[ ("fill",maybe "none" svgGenColor fill) + ,("stroke",svgGenColor col) + ,("stroke-width",show svgStrokeWidth)] + +-- XML ENCODER -- + +xml_enc tag attrs body = "<"++tag++" "++xml_attrs++">"++body++"" + where xml_attrs = unlines $ map xml_attr attrs + xml_attr (a,v) = a++"=\""++v++"\" " diff --git a/080_blog/00040_Haskell-Projects/00140_Minimalistic-SVG-Generator/index.md b/080_blog/00040_Haskell-Projects/00140_Minimalistic-SVG-Generator/index.md new file mode 100644 index 0000000..8211ba2 --- /dev/null +++ b/080_blog/00040_Haskell-Projects/00140_Minimalistic-SVG-Generator/index.md @@ -0,0 +1,31 @@ +A Minimalistic SVG Generator +============================ + + May 11, 2018 + + +A minimalistic SVG generator for my humble requirements. +They might grow someday however... + +The SVG in the following screenshot was generated from the following code +to demonstrate a simple use case. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.haskell .numberLines} +svgExample1 = svgAddList (svgEmpty (svgShGray 200) 300 200) $ + [ svgRedLine (0,0) (200,200) + ,svgRedLine (300,0) (100,200) + ,svgBluePoint (33,133) + ,svgBluePoint (33,22) + ,svgBluePoint (66,25) + ,svgFilledTriangle svgBlack svgWhite (20,20) (100,100) (10,90) + ,svgFilledCircle svgWhite svgGreen (150,120) 30 + ]++ + map (svgBluePoint . (,) 250) [50,60..150] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +![](svg.png){.img-fluid .border} + +Source Files +------------ + +* [SimpleSvg.hs](SimpleSvg.hs) diff --git a/080_blog/00040_Haskell-Projects/00140_Minimalistic-SVG-Generator/svg.png b/080_blog/00040_Haskell-Projects/00140_Minimalistic-SVG-Generator/svg.png new file mode 100644 index 0000000..d679fad Binary files /dev/null and b/080_blog/00040_Haskell-Projects/00140_Minimalistic-SVG-Generator/svg.png differ diff --git a/080_blog/00040_Haskell-Projects/100_Estatico-Page-Maker/index.md b/080_blog/00040_Haskell-Projects/100_Estatico-Page-Maker/index.md new file mode 100644 index 0000000..04bb46a --- /dev/null +++ b/080_blog/00040_Haskell-Projects/100_Estatico-Page-Maker/index.md @@ -0,0 +1,35 @@ +# Estático - A Static Website Genertor coded in Haskell + + April 12, 2018 + +About two weeks ago, for personal reasons, I decided to switch my website +from a well known PHP driven CMS solution, to a light and static set +of html pages. + +I used this fact to write my own simple static website generator. +And, Yes... I know there are already hundereds of such genertors +out there, but I wanted to practice Haskell and my masturbatory solution +fits in about 200 lines of code, including comments and type signatures. + +I use pandoc for all the heavy work, as syntax highlighting and parsing +of the markdown files, anyway. + +## Features + +* No Database +* Static Content +* Sitemap derived from Directory Tree +* Simple Markdown Files + +## Try It +You can find the most recent version here and build it with _stack_. + +* [https://gitweb.softwarefools.com/?p=miguel/staticuswww.git](https://gitweb.softwarefools.com/?p=miguel/staticuswww.git) + +__Do not forget to adapt the Makefile to your requirements__ + +## Examples +The only example I know of, is this very page: _idziorek.net_ +You can find it's sources here: + +* [https://gitweb.softwarefools.com/?p=miguel/idziorek\_net.git](https://gitweb.softwarefools.com/?p=miguel/idziorek_net.git) diff --git a/080_blog/00040_Haskell-Projects/100_Static-Page-Maker-in-Haskell/index.md b/080_blog/00040_Haskell-Projects/100_Static-Page-Maker-in-Haskell/index.md deleted file mode 100644 index 0619078..0000000 --- a/080_blog/00040_Haskell-Projects/100_Static-Page-Maker-in-Haskell/index.md +++ /dev/null @@ -1,121 +0,0 @@ -# Static Haskell Website Creator - Miguel's Lair - - April 12, 2018 - -About two weeks ago, for personal reasons, I decided to switch my homepage -from a well known PHP driven CMS solution, to a light and static set -of html pages. - -I used this fact as a pretence to write my own simple static website -generator. And, Yes.. I know there are already hundereds of such genertors -out there, but I wanted to practice haskell and my masturbatory solution -fits in under 100 lines of code. (Including comments and type signatures) - -I use pandoc for all the heavy work, as syntax highlighting and conversion of -markdown to html, anyway. - -## Features - -* No Documentation -* No Database -* Sitemap derived from Directory Tree -* Simple Markdown Files for Content - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.haskell .numberLines} --- --- Staticus WWW - A minimalistic yet undocumented static website generator --- coded in April 2018 by Michal Idziorek --- - -module StaticusWWW where - -import Control.Exception -import Control.Monad.Reader -import Data.List -import Data.List.Split -import Data.List.Utils -import Data.Maybe -import Data.Text(pack,unpack) -import Data.Tree -import System.Directory -import Text.Pandoc - --- generate a HTML link from a href & title -htmlLink :: String -> String -> String -htmlLink href title=""++replace "_" " " title++"" - --- generate HTML breadcrumbs from a list of page titles -genBrc :: [String] -> String -genBrc b | length b < 2 = "" - | otherwise = fst $ foldl lnk ("",0) b - where lnk (a,c) v = (a++" / "++html c v,c+1) - html c = htmlLink (concat (replicate (length b-c-1) "../")) - --- pure function that generates a single HTML page from: --- a html template, description, keywords, breadcrumbs, topMenue & submenue -genPage :: String->String->String->[String]->[String]->[String]->String->String -genPage tmpl dsc kw brc top chld md = - foldr rplc tmpl (replacers content (menu "/" top) (menu "./" chld) (genBrc brc) title dsc kw) - where content = either (const "error") unpack res - where res = runPure $ do doc <- readMarkdown def{readerExtensions=(enableExtension Ext_raw_html pandocExtensions )} $ pack md - writeHtml5String def doc - rplc v = replace ("##" ++ fst v ++ "##") (snd v) - title = if null brc then "Home" else replace "_" " " $ last brc - menu p = foldr (fm p) "" - fm p s a = "
  • "++htmlLink (p++s) s ++"
  • "++a - replacers c m m2 b t d k= - [("CONTENT", c) - ,("LOGO", "/DATA/logo.png") - ,("STYLESHEET", "/DATA/style.css") - ,("SITE_TITLE", "Miguel's Lair") - ,("SITE_SUBTITLE", "
    where information sleepzzZZZzz ...") - ,("TITLE", t) - ,("DESCRIPTION", d) - ,("KEYWORDS", k) - ,("AUTHOR", "Michal Idziorek") - ,("MENU", m) - ,("SUB_MENU", m2) - ,("BREADCRUMBS", b) - ,("FOOTER", "(c) by Miguel 2018")] - --- get list of subdirectories in given directory, with full relative path -getDirList :: FilePath -> IO [FilePath] -getDirList d = map ((d++"/")++) <$> listDirectory d - >>= filterM doesDirectoryExist - --- sequence IO Action 'f' for each subdirectory of 'fp' recursively -trvDirTree :: FilePath -> (FilePath -> [FilePath] -> IO()) -> IO () -trvDirTree fp f = unfoldTreeM unf fp >>= sequence_ - where unf p = getDirList p >>= \s -> f p s >>= \l -> - return (return l, s) - --- write the HTML page generated from current diectory by 'genPage' -wrtPage :: FilePath -> FilePath -> String -> [FilePath] -> FilePath -> [FilePath] -> IO () -wrtPage idx out tmpl top p chld = do - - when (not home) (createDirectory outdir) - - md <- readFile $ p ++ "/index.md" - cfg <- (map ((\(x:xs) -> (x,unwords xs)).words).lines) - <$> catch (readFile $ p++"/config") - ((\_ -> return "") :: IOException -> IO String) - - writeFile (outdir++"/index.html") - (genPage tmpl (lkp cfg "dsc") (lkp cfg "kwd") - brc (menu top) (if home then [] else menu chld) md) - - where home = outdir==out++"/" - remUnder = filter (not.null) . map (dropWhile(=='_').dropWhile(/='_')) - lkp cfg k = fromMaybe "" (lookup k cfg) - menu = remUnder . filter (not . isPrefixOf "00_") . map (last.splitOn "/") . sort - outdir = out ++ "/" ++ intercalate "/" brc - brc = remUnder $ splitOn "/" (drop (length idx) p) - --- Main IO action: traverses index recursively and calls wrtPage in each --- subdir, which in turn generates the output directories and html pages -main :: IO () -main = do tmpl <- readFile "./DATA/template.html" - top <- getDirList "./INDEX" - trvDirTree "./INDEX" (wrtPage "./INDEX" "./OUT" tmpl top) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - diff --git a/080_blog/00070_Password-Management-on-the-Command-Line/index.md b/080_blog/00070_Password-Management-on-the-Command-Line/index.md deleted file mode 100644 index 1b45b02..0000000 --- a/080_blog/00070_Password-Management-on-the-Command-Line/index.md +++ /dev/null @@ -1,89 +0,0 @@ -# Passoword Managemet from the Command Line - - February 8, 2018 - -Today we will look at some simple, portable yet effective ways to manage -your passwords from the command line. You will need nothing more than -**apg** and one of **gnugpg** or **openssl** along with your favorite -text editor. - -~~~~~~~~~~ {.bash} -apt install apg gnupg openssl -~~~~~~~~~~ - -## Generate your Password - -Before you can manage your passwords, you will obviously first have to -generate them. Since your brain might be a very poor random number -generator you can use `/dev/random` here. - -A few examples for generating random passwords with **apg** follow: - -~~~~~~~~~~ {.bash} -# generate a few random passwords with default settings using /dev/random -apg -c /dev/random - -# set password length to 20-30 characters and generate 10 passwords -apg -m20 -x30 -n10 -c /dev/random - -Example output: - gootCoHuecJarItOojBouFrag - OignisholWulfisOdPearshed - fekfedsornUgbacyoimyab - ... - -# Other useful flags: -#- a0 pronouncable -# -a1 random - -# If you use -a1 you can specify the symbolset with -M -# You can combine multiple -M options as in: -MCnS - -# -MC / -Mc must/can use small leters set -# -MC / -Mc must/can use capital symbol set -# -MN / -Mn must/can use numeral symbol set -# -MS / -Ms must/can use special symbol set - - -# Finally we can exclude specific characters from the symbol set with -E -apg -a1 -m10 -MN -E 02345678 -c /dev/random - -Example output: - 9119191199 - 9919119919 - 1199999911 - ... -~~~~~~~~~~ - -## Managing your Password Safe - -Just put the passwords in a plaintext file (named mypasswords in the examples below), -along with related data and encrypt them symmetrically via **gnupg**. -Decrypt them as needed. You will be prompted for a passphrase in each case. - -Note that **gnupg** might cache your password for a few minutes, -so don’t worry if you can decrypt them without beeing prompted. - -~~~~~~~~~~ {.bash} -#encrypyt. Don't forget to delete the source file -gpg -c mypasswords - -#decrypt and write to STDOUT -gpg -d mypasswords.gpg -~~~~~~~~~~ - -You might prefer openssl, which some claim to be even more portable - -~~~~~~~~~~ {.bash} -#encrypyt. Don't forget to delete the source file -openssl aes-256-cbc -salt -in mypasswords > mypasswords.aes - -#decrypt and write to STDOUT -openssl aes-256-cbc -d -in mypasswords.aes -~~~~~~~~~~ - -Adding, Editing or Deleting a password constitutes simply of the three steps: - -* decrypt your password file and save it in a safe place -* edit the passwordfile as needed with your favorite text editor -* encrypt the password flie back again diff --git a/080_blog/00090_Miguels-KVM-Adventures/index.md b/080_blog/00090_Miguels-KVM-Adventures/index.md deleted file mode 100644 index f69989b..0000000 --- a/080_blog/00090_Miguels-KVM-Adventures/index.md +++ /dev/null @@ -1,212 +0,0 @@ -Miguel’s KVM Adventures -======================= - -February 7, 2018 - -Some notes about my explorations of the World of KVM virtualization. - -## Abstract -In my never ending pursuit of abstraction and encapsulation I recently started integrating all of my services into docker containers and deploying them inside virtual kvm guests. This article presents my continues effort to summarize the findings of this ongoing journey, which implies that the following material might be subject to change anytime without notice. This collection of notes and sentimental thoughts comes without any warranty or implication of fitness for any purpose. You have been warned! Now feel free to make use of it.  - -## Libvirt -This are the most common virsh commands I use to manage the kvm guests, where _domain_ is simply the name of the targeted guest and _FILE_ the name of a XML file. Remember that libvirt supports other virtualization infrastructure as well (Xen, VMware, QEMU). Most of the options are self-explanatory. With ‘virsh create’ starting a transient domain, that will disappear after shutdown, and the define/start combo resulting in a persistent domain that will even survive host restarts - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.bash} - virsh create _FILE_ # create domain from xml file - virsh destroy _domain_ # forcefully remove domain - - virsh define _FILE_ # define domain from xml file - virsh undefine _domain_ # undefine domain - - virsh suspend _domain_ # stop all scheduling - virsh resume _domain_ # start scheduling - - virsh start _domain_ # power on domain - virsh shutdown _domain_ # send corresponding ACPI signal to guest - - virsh edit _domain_ # edit xml config in place - - virsh autostart _domain_ # set autostart flag - virsh autostart _domain_ --disable # unset autostart flag - virsh list [--all] [--autostart] # list defined/active/autostart domains -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -## Disk Image -Most of the guest systems will require some sort of storage. Creating a fresh qcow2 image, to back our virtual disk, is as simple as running: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.bash} - qemu-img create -f qcow2 milky.img 200G -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Do not worry, the image will only take a fraction of the declared space, and will not grow larger than necessary, due to trimming, which will be explained later. - - -## Domain Definition -Domains, this is how libvirt calls our ‘guests’, can be defined in XML formatted files. This is my minimalistic defintion of the domain ‘milkman’ carrying 8GB RAM and 4 CPUs: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.xml .numberLines} - - - milkman - 504d80ee-1427-11e8-9861-0708f4830f96 - - 8388608 - 8388608 - 4 - - - hvm - - - - - - - - - destroy - restart - destroy - - - - /usr/bin/kvm - - - - - - - - - - - - - - - - - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Beside the obvious RAM size and CPU count w specify the underlying qcow2 image, to be used for our emulated hard disk. We also want to specify discard=’unmap’ and make use of a virtio-scsi controller, both to allow trimming. Trimming will be covered in more detail later. - -Our virtual machine relies on a virtual bridge virbr1. It is very important to use type=’virtio’ here. The defaults resulted in extremely poor network performance, at least in some of my particular use cases. The setup of the bridge with accompanying parameters is described in the next section about networking. - -At the very last we tell the vnc-server to listen on ::1 at port 5555. This values can be also adjusted during run-time as explained later on. - -In order to install an operating system we can add a virtual cd-rom along with an iso-image by augmenting the devices section in our XML defintion with the following lines: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.xml .numberLines} - - - - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Make sure to adapt the boot order in the os section by adding an appropriate line, so you end up with this: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.xml .numberLines} - - hvm - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -## Networking -Since my primary interface to the virtual machines is SSH, reliable network connectivity is one of the primary foci. IPv4 addresses became scarse so we will not waste any for the host systems virbr1 or eth0. The following diagram illustrates my IPv4 setup of a simple arp proxy utilizing ipv4 forwarding. The guests use their public ipv4 addreses and the ips of the hosts gateway. - -![](ipv4.png){.img-fluid} - -There is no need to save address space in case of IPv6 since we have a complete /64 IPv6 subnet at our disposal. While only a few guests are accessible by their IPv4 public addresses directly, we have virtually an infinite number of IPv6 addresses. Sidenote: One single /64 IPv6 subnet consists of 2^64 different addresses, which is over four billion times more than there are IPv4 addresses in the whole world! I use just the lower /65 half of our /64 subnet for the guests while the IPv6 address of the hosts NIC lies in the upper half. - -My IPv6 setup in /etc/network/interface goes along this lines: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.numberLines} - #/etc/network/interfaces - - iface eth0 inet6 static - address2a01:6a8:122:5622:8000::88/128 - gateway fe80::1 - - iface virbr1 inet6 static - pre-up brctl addbr virbr1 - address 2a01:6a8:122:5622::3/65 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -All we need to do is activate IPv6 forwarding on the host to let our guests communicate with the world outside. - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.bash} - sysctl -w net.ipv6.conf.all.forwarding=1 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -And this is how the IPv6 config of a particular guest looks like: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.numberLines} - iface ens3 inet6 static - address 2a01:6a8:122:5622::13/65 - gateway 2a01:6a8:122:5622::3 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Things could be improved further by running a DHCP server, like dnsmasq, to assign the guest addresses, but for now I want to keep it simple. - -## VNC - -While ssh is perfectly sufficient for most of the time, you sometimes might need to have a look at the frame-buffer console. You can start/stop listening on a specific port or interface with: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.bash} - sudo virsh qemu-monitor-command --hmp change vnc : - sudo virsh qemu-monitor-command --hmp change vnc none -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Interestingly the port is offset by 5900 meaning that e.g. :87 will let the vnc-server listen on port 5987! -Check it with netstat -tulpn to be sure. - -## Backup Running KVM - -One of the beautiful things about using virtual machines is the level of control we have over them. We can for instance backup our running machines with almost no downtime using the following approach: - -dump config to xml file -save kvm state (RAM etc.) and stop the guest. -create an overlay on the underlying qcow2 disk image. -restore the kvm on the overlay. -backup the original disk image. -commit deltas from overlay to the image. -switch to the image with merged changes and delete deltas. - -A downtime will be experienced only between the save and restore steps, while the most time consuming part of the process, backing up the disk, can be delayed. The XML, RAM state and HDD snapshot contain all the data required to re-spawn an identical consistent copy of our virtual machine, as at the time of the backup. NOTE: the clock might cause problems if not adjusted, if some applications rely on it. Ntp can take care of that. A fast and dirty implementation of this technique, for my particular setup, can be found on our gitweb [2]. A more complete but complex solution is Daniel Berteaud’s perl script [3], which I frankly did _not_ test myself. - -## Docker Containers -A common use case is to run docker inside the virtual guests, which makes it an integral part of my ‘KVM Adventures’. I prefer to remap docker’s root user to a non-privileged user of my host, as well as utilize syslog instead of the default json-file driver. This is reflected by the following config: - -/etc/docker/daemon.json: - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.json .numberLines} - { - "userns-remap": "miguel", - "log-driver": "syslog" - } -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Optionally you can tell rsyslog to log deamon.* entries into a separate file and adjust logrotation as outlined here [5]. - -## Miscellaneous - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.bash} - virt-host-validate # validate host virtualization setup -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -## References - - [1] https://libvirt.org/formatdomain.html - [2] https://gitweb.softwarefools.com/?p=miguel/kvm_tools.git - [3] http://repo.firewall-services.com/misc/virt/virt-backup.pl - [4] https://www.linux-kvm.org/page/Tuning_KVM - [5] https://www.wolfe.id.au/2015/05/03/syslog-logging-driver-for-docker/ - diff --git a/080_blog/00090_Miguels-KVM-Adventures/ipv4.png b/080_blog/00090_Miguels-KVM-Adventures/ipv4.png deleted file mode 100644 index 3dac4ed..0000000 Binary files a/080_blog/00090_Miguels-KVM-Adventures/ipv4.png and /dev/null differ diff --git a/080_blog/00100_Webkit-Keyboardless-Navigation/index.md b/080_blog/00100_Webkit-Keyboardless-Navigation/index.md new file mode 100644 index 0000000..5299563 --- /dev/null +++ b/080_blog/00100_Webkit-Keyboardless-Navigation/index.md @@ -0,0 +1,30 @@ +Miguel's Surfing Quick Links +============================ + + April 12, 2018 + +Since I do not want to depend on JavaScript all of the time, I tried to +integrate simple keyboard-only navigation directly into the webkit2gtk+, +as a web extension. + +I use simple unix pipes for communication between the +main thread and my webextension. + +__Please note that this is a work in progress!__ + +You can take a look at both branches at my git repo: [https://gitweb.softwarefools.com/?p=miguel/surf-webext-dom.git](https://gitweb.softwarefools.com/?p=miguel/surf-webext-dom.git). + +The DOM is manipulated on the fly by the browser without any JavaScript involved. + +A little video demonstrating what was achieved so far (inside the glorious, webkit2gtk+ based, suckless surf browser): + + + +The browser itself can be found here: [https://surf.suckless.org/](https://surf.suckless.org/). + + diff --git a/080_blog/00100_Webkit-Keyboardless-Navigation/v1.mp4 b/080_blog/00100_Webkit-Keyboardless-Navigation/v1.mp4 new file mode 100644 index 0000000..a7755f4 Binary files /dev/null and b/080_blog/00100_Webkit-Keyboardless-Navigation/v1.mp4 differ diff --git a/080_blog/00100_Webkit-Keyboardless-Navigation/v1.ogv b/080_blog/00100_Webkit-Keyboardless-Navigation/v1.ogv new file mode 100644 index 0000000..a086103 Binary files /dev/null and b/080_blog/00100_Webkit-Keyboardless-Navigation/v1.ogv differ diff --git a/080_blog/00_garbage/00010_Monospace-Font-Bitmap-Generator/index.md b/080_blog/00_garbage/00010_Monospace-Font-Bitmap-Generator/index.md deleted file mode 100644 index 3df7719..0000000 --- a/080_blog/00_garbage/00010_Monospace-Font-Bitmap-Generator/index.md +++ /dev/null @@ -1,64 +0,0 @@ -monospaced font bitmaps -======================= - July 4, 2017 - -Since once in a while I have the need to generate my own simple bitmap fonts, which I might embed directly in my code (as in this little class, for example), today I publish this simple python script that will convert a textfile filled with ‘X’es and spaces into an array of integers - -* space = bit off -* ‘X’ = bit on - -![Example usage of bitmap fonts in my simple experimental FoolOS Operating System, which I might write about some other time.](/DATA/foolos.png){.img-fluid} - - -The script has some severe limitations but easily can be extended: - -* works for 5×5 bitmaps only -* every 6th lines is skipped (used for commenting) -* reads a file called “fonts.txt” from same directory - -~~~~~~~~~~~~~~~~~~~~~ {.bash .numberLines} -# filename: convert.py -f = open('fonts.txt','r'); - -i=0; -value=(2**25)-1; - -for line in f: - if (i % 6 ==0): - c=0; - if(i>0): - print(str(value)+","); - value=0 - else: - for j in range(0,5): - if j Account Settings -* In the Account-Actions Dropdown select New eMail Account -* Enter your full Name, your email address (also aliases work) and your password and click Continue -* Thunderbird will now try out typical mailserver settings, if this processis not succesfull or if you want to configure yourself click Manual Setting -* For the Incoming mailserver select IMAP. As server address Thunderbird will use the domain of the Mail adress entered above, complete it to imap.softwarefools.com (alternativly imap.yourdomain will also work). As Security Method select SSL/TSL at the Standard Port: 993. The Authentification Method should be set to: Password,normal. -* The Outgoing mailserver is of course an SMTP server, just complete the server address to smtp.softwarefools.com (alternativly smtp.yourdomain). As Security Method select STARTTSL at Port: 587. Authentification Method again should be set to: Password,normal -* The Usernames used for both servers are the full email address (e.g. name@domain), aliases will not work. - -#### Android Mail Client - -To add a new mail account to your Android mail client open settings and click on Add Account. Enter your mail-address and password and click Continue. The client will now ask what type of Mail account you would like to set up. Again we emphasize using IMAP.This choice is final in Android Mail Client, if you want to change the method you have to delete the mail account and create a new one. Android will now propose some settings for the Incoming Mailserver (the serveraddress will be composed of your method and the mails domain, the username will be the mailname,etc.), yet these are not yet correct. Complete the usernameto your full email address and select Securitytype SSL (accept all certificates) (on port 993). When clicking Continue the client will try out the settings and if correct continue to the outgoing mailserver settings. Again the client will propose some settings such as using the same username and password and again precompose the serveraddress. The only thing left to do is selecting the securitymethod: TLS (accept all certificates) (Port should be 587). On some newer Android Systems (5+) its possible to get repeated “Server not responding” messages if you try SSL (accept all certificates) on the incoming server directly. This can be fixed by using strict SSL once to get a “Certificate not valid” note and Then select SSL (accept all certificates). Same applies for TSL on the outgoing server. - -As accessing your mails with your mobile can be data intensive android mail client offers some additional settings on the next page of the configurator. You can select in what frame of time the mails should be synced with your phone and how often this synchronisation take place (ordinarily and in rush hours). The starting and ending time of your rush hours can be set for all your accounts in the clent properties. On the last page of the configurator you can name the mail account on your phone to better recognize it, and you have to enter the name displayed to an recipient of your mails. - -#### iPhone Mail Client - -Setting up a new Mail account on your iPhone works pretty much like on android device. Visit [1] for more information. - -#### Claws Mail - -The following was tested on my debian-wheezy system with Claws Mail version 3.8.1. - -* Configuration -> Create new account -* Basic: Name of Account: whatever -* Basic: Full name: whatever -* Basic: Mail address: user@domain.com -* Basic: Protocol: IMAP4 -* Basic: Server for receiving: mail.softwarefools.com -* Basic: SMTP server (send): mail.softwarefools.com -* Basic: User ID: user@domain.com -* Basic: Password: secret_password -* Receive: Authentication method: LOGIN -* Send: SMTP Authentication (SMTP AUTH): LOGIN -* SSL: IMAP4: Use SSL for IMAP4 connection -* SSL: Send (SMTP): Use STARTTLS command to start SSL session - -It might be necessery to rebuild your folder-tree: proceed as follows: - -* Right mouse-click on account main-folder -> -* Rebuild folder tree -> -* YES - -#### Mutt - -Ideally mutt will serve only the purpose of a MUA, outsourcing the retrieval of emails to a MRA (e.g. fechmail) and the relaying of emails to a MTA (e.g. postfix). Configuration is trivial in that case. Adapt your .muttrc as follows: - - set spoolfile=/var/mai/username - -You can also access your imap mails directly from within mutt: - - set imap_user=user@domain.com - set imap_pass=secret_password - set spoolfile=imaps://mail.softwarefools.com/INBOX - -#### Fetchmail - -For the simplest configuration of fetchmail as your MRA, add the following line to your .fetchmailrc (adapt user@domain.com, secret_password and local_username): - - poll mail.softwarefools.com protocol IMAP user "user@domain.com" there with password "secret_password" is local_username here ssl sslfingerprint '02:B0:72:78:F7:F1:28:40:C4:DB:37:3F:18:BB:E1:AF' fetchall - -#### Postfix - -In many scenarios it is recommended to use a seperate MTA (e.g. postfix) to relay your outgoing emails to remote hosts. If you decide to use postfix read on here: http://www.postfix.org/ - - diff --git a/080_blog/00_garbage/00025_Open-Source-Gaming-on-Linux/index.md b/080_blog/00_garbage/00025_Open-Source-Gaming-on-Linux/index.md deleted file mode 100644 index 38a6311..0000000 --- a/080_blog/00_garbage/00025_Open-Source-Gaming-on-Linux/index.md +++ /dev/null @@ -1,33 +0,0 @@ -Open Source Linux Games -======================= - -May 22, 2015 - -Some of my favourite games from the 90ies are reimplemented as open-source software and work natively on Linux. - -## OpenTTD (Transport Tycoon Deluxe) -My beloved Transport Tycoon with many extra features and high resolution graphics. - -![](/DATA/linuxgames/ttd.png){style="width:50%"} - - -## Jagged Alliance 2 (ja2-straciatella) -“No cops, no courts, no jails, no law. You can count me in!” - -![](/DATA/linuxgames/ja2.jpg){style="width:50%"} - -## ScummVM -Script Creation Utility for Maniac Mansion! This supports a multitude of Lucas Arts (and not only) games. - -![](/DATA/linuxgames/sammax.png){style="width:50%"} - -## OpenRA -Supports a variety of the classical Westwood real-time strategy games. - -![](/DATA/linuxgames/ra.png){style="width:50%"} - -## More -Check out this external pages for even more games: - - [1] https://wiki.debian.org/Games/ - [2] http://osgameclones.com/ diff --git a/080_blog/00_garbage/index.md b/080_blog/00_garbage/index.md deleted file mode 100644 index 3055918..0000000 --- a/080_blog/00_garbage/index.md +++ /dev/null @@ -1,5 +0,0 @@ -Old and Outdated -================ - -Here you can find some some old and outdtdated articles, please do not read them. -They are kept here only for historical reference reasons. diff --git a/080_blog/0100_Webkit-Keyboardless-Navigation/index.md b/080_blog/0100_Webkit-Keyboardless-Navigation/index.md deleted file mode 100644 index 5299563..0000000 --- a/080_blog/0100_Webkit-Keyboardless-Navigation/index.md +++ /dev/null @@ -1,30 +0,0 @@ -Miguel's Surfing Quick Links -============================ - - April 12, 2018 - -Since I do not want to depend on JavaScript all of the time, I tried to -integrate simple keyboard-only navigation directly into the webkit2gtk+, -as a web extension. - -I use simple unix pipes for communication between the -main thread and my webextension. - -__Please note that this is a work in progress!__ - -You can take a look at both branches at my git repo: [https://gitweb.softwarefools.com/?p=miguel/surf-webext-dom.git](https://gitweb.softwarefools.com/?p=miguel/surf-webext-dom.git). - -The DOM is manipulated on the fly by the browser without any JavaScript involved. - -A little video demonstrating what was achieved so far (inside the glorious, webkit2gtk+ based, suckless surf browser): - - - -The browser itself can be found here: [https://surf.suckless.org/](https://surf.suckless.org/). - - diff --git a/080_blog/0100_Webkit-Keyboardless-Navigation/v1.mp4 b/080_blog/0100_Webkit-Keyboardless-Navigation/v1.mp4 deleted file mode 100644 index a7755f4..0000000 Binary files a/080_blog/0100_Webkit-Keyboardless-Navigation/v1.mp4 and /dev/null differ diff --git a/080_blog/0100_Webkit-Keyboardless-Navigation/v1.ogv b/080_blog/0100_Webkit-Keyboardless-Navigation/v1.ogv deleted file mode 100644 index a086103..0000000 Binary files a/080_blog/0100_Webkit-Keyboardless-Navigation/v1.ogv and /dev/null differ diff --git a/080_blog/020_WWW-Projects/index.md b/080_blog/020_WWW-Projects/index.md deleted file mode 100644 index 7264d62..0000000 --- a/080_blog/020_WWW-Projects/index.md +++ /dev/null @@ -1,536 +0,0 @@ -Portfolio -========= - -A random selection of Web-sites, Web-shops, Web-portals and Mobile Apps. - - - -
    - -{BEGIN:CARD} -/DATA/GEN/www/casamila.png -Casamila - Architects -casamila.pl -2018 --badge-secondary online soon --badge-primary new --badge-info wordpress - -Complete redesign of the Casamila Architects Website. -Extensive Template customization according to client requirements. -{END:CARD} - -{BEGIN:CARD} -/DATA/GEN/www/shop/bunzlauer.png -Web Shop - Bunzlauer -bunzlauer.shop -2018 --badge-success online --badge-primary new --badge-info OpenCart - -Customized and Optimized OpenCart Webshop specializing in international -shipping of beautiful handcrafted polish pottery. -{END:CARD} - -{BEGIN:CARD} -/DATA/GEN/www/aquarelle.jpg -G. Mueller Watercolors -gerhard-mueller-aquarelle.de -2018 --badge-success online --badge-primary new --badge-info wordpress - -Website of Gerhard Müller hosting his watarcolour paintings. Relaunched 2018. Former TYPO3. -{END:CARD} - -{BEGIN:CARD} -/DATA/GEN/www/mmtour.png -Mille Miglia - Blog -mmtour.krzysztofidziorek.pl -2017 --badge-success online --badge-primary new --badge-info wordpress - -Krzysztof's Blog about his adventures, traveling the Italian -roads of the historic Mille Miglia race in Fall 2017. -{END:CARD} - -{BEGIN:CARD} -/DATA/GEN/apps/atenefunds.png -AteneKOM Funds -GooglePlay / AppStore -2018 --badge-success online --badge-primary new --badge-info iOS --badge-info Android --badge-info Symfony - -Overview of the funding possibilities on EU-, national and regional levels. -Entries are continually updated and expanded and can be filtered by topics. -{END:CARD} - -{BEGIN:CARD} -/DATA/GEN/www/mazury.png -Ratuj Mazury -ratuj-mazury.pl -2016 --badge-success online --badge-info wordpress - -This Website was launched 2016 and promotes ecological acitivites in the -Masurian area. Template was designed from scratch. -{END:CARD} - - -{BEGIN:CARD} -/DATA/GEN/www/wekkaprojekt.png -Wekka Projekt - Architects -wekka-projekt.pl -2016 --badge-success online --badge-info wordpress - -Launched 2016 for an Architectural Office operating in Warsaw, Poland. -Template was designed from scratch. -{END:CARD} - - -{BEGIN:CARD} -/DATA/GEN/www/norti.png -Norton Motorcycles Fan Club -nortonmotorcycles.co.uk -2018 --badge-success online --badge-primary new --badge-info wordpress - -Relaunched 2018 on Wordpress. Fomer TYPO3. -{END:CARD} - - -{BEGIN:CARD} -/DATA/GEN/www/bunzlauer.png -Bunzlauer Keramik -bunzlauerkeramik.at -2018 --badge-success online --badge-primary new --badge-info wordpress - -Austrian Website about Polish Pottery. -Relaunched 2018 on Wordpress. Fomer TYPO3. -{END:CARD} - -{BEGIN:CARD} -/DATA/GEN/apps/cornea.png -Cornea Franz -GooglePlay / AppStore -2013 --badge-secondary offline --badge-info iOS --badge-info Android --badge-info PHP - -Mobile App with a simple Backend porviding legal News. -{END:CARD} - - -{BEGIN:CARD} -/DATA/GEN/www/shop/link-all.png -Link-All Software -link-all.eu -2013 --badge-success online --badge-info OsCommerce - -Webshop offering custom Alfresco hosting in vairous tiers. -Customized OsCommerce. -{END:CARD} - - -{BEGIN:CARD} -/DATA/GEN/www/shop/bildershopping.png -Bilder Shop - Art Prints -bildershopping.at -2010 --badge-secondary offline --badge-info OsCommerce - -Custom OsCommerce Webshop selling various Art Prints -{END:CARD} - - -{BEGIN:CARD} -/DATA/GEN/www/shop/nadler.png -Nadler - Wine Shop -nadler-hanny.at -2007 --badge-success online --badge-info PHP - -In 2007 coded the super-light custom PHP Shop for the Website of this Austrian Winemaker. -{END:CARD} - - -{BEGIN:CARD} -/DATA/GEN/www/shop/panner.jpg -Panner - Stamp Shop -panner.net -2006 --badge-secondary offline --badge-info PHP - -Custom PHP shop specializing in Postal Stamps. Featuring a very extensive -backend for user management and analysis. -{END:CARD} - -{BEGIN:CARD} -/DATA/GEN/www/shop/panner-admin.png -Stamp Shop Backend -panner.net/admin -2006 --badge-secondary offline --badge-info PHP - -Custom extensiv backend for the panner.net stamps webshop with complex user management and analytic possibilites. -{END:CARD} - -{BEGIN:CARD} -/DATA/GEN/www/maiden.jpg -Maiden Entertainment -maidenentertainment.com -2005 --badge-secondary offline --badge-info PHP - -Website of an independent Music and Video Producer. -{END:CARD} - -{BEGIN:CARD} -/DATA/GEN/www/flipper2.jpg -Flipper Grafik -flipper-grafik.at -2004 --badge-secondary offline --badge-info PHP - -Advertising Agency in Vienna, Austria. -{END:CARD} - - - -{BEGIN:CARD} -/DATA/GEN/www/cqs.jpg -Complex Quantum Systems -coqus.at -2006 --badge-secondary offline --badge-info PHP - -Website of the Doctoral Program on Complex Quantum Systems of the University Vienna. -{END:CARD} - - -{BEGIN:CARD} -/DATA/GEN/www/ikm.jpg -Institut fuer Kulturmanagement -mdw.ac.at/ikm/ -2003 --badge-secondary offline --badge-info Perl - -Website of the IKM Insistute of the University of Music and Performing Arts, Vienna. -Advanced book-browsing tools for the Insitutes library. -{END:CARD} - - -{BEGIN:CARD} -/DATA/GEN/www/preschl.jpg -Claudia Preschl -personal.mdw.ac.at/preschl/ -2004 --badge-success online - -Website of Prof. Claudia Preschl of the University of Music and Performing Arts, Vienna. -{END:CARD} - - -{BEGIN:CARD} -/DATA/GEN/www/textlabor.jpg -Textlabor -textlabor.at -2006 --badge-success online --badge-info PHP - -Website of Jolande Peck-Himmel, PR Consultant specializing in Print and Online Media. -{END:CARD} - - -{BEGIN:CARD} -/DATA/GEN/www/lev.jpg -LEV Wien -levwien.at -2006 --badge-secondary offline --badge-info PHP - -Website of the Parents Council of Music Shools of Vienna. -{END:CARD} - - -{BEGIN:CARD} -/DATA/GEN/www/meersalzgrotte.png -Saliseum -meersalzgrotte.at -2008 --badge-secondary offline --badge-info PHP - -Very light custom PHP Website of the Sea-Salt-Cave Saliseum in Vienna. -{END:CARD} - - -{BEGIN:CARD} -/DATA/GEN/www/telenetprofi.png -Telenet Profi -telenetprofi.at -2011 --badge-success online - -Website of a Cell Phone Store in Vienna. -{END:CARD} - - -{BEGIN:CARD} -/DATA/GEN/www/breitbandausschreibungen1.png -Broadband Tenders Germany -breitbandausschreibungen.de -2014 --badge-success online --badge-info Symfony - -Platform for Coorindation of German Broadband Tender Programmes. -(_involved until 2014_) - -{END:CARD} - -{BEGIN:CARD} -/DATA/GEN/www/maiden2.png -Maiden Reloaded -maidenenterteinmanet.com -2010 --badge-secondary offline --badge-info TYPO3 - -Reloaded version of the Website of the indy Video and Music producer Maiden Enterteinmant -{END:CARD} - -{BEGIN:CARD} -/DATA/GEN/www/brlr1.png -BRLR Monitoring -breitbandbuero.de/monitoring/ -2011 --badge-success online --badge-info PHP - -Monitoring of Broadband projects according to the "Bundesrahmenregeleung Leerrorhre" - -{END:CARD} - - -{BEGIN:CARD} -/DATA/GEN/www/atenekom.jpg -AteneKOM Website -atenekom.eu -2012 --badge-secondary offline --badge-info TYPO3 - -Former Website of the atene KOM Agency. -{END:CARD} - - -{BEGIN:CARD} -/DATA/GEN/www/todoapp.png -Online Task Management -Intranet -2013 --badge-info Symfony - -Browser-based tool for Assignment and Monitoring of Tasks within the Company. -{END:CARD} - - -{BEGIN:CARD} -/DATA/GEN/www/sensor.png -Sensor for GIS -Intranet -2013 --badge-info GeoServer --badge-info PostGIS --badge-info OpenLayers - -Tool for spatial Analysis of Broadband related Customer Data. -{END:CARD} - - -{BEGIN:CARD} -/DATA/GEN/www/ringy.png -ZT Ringsmuth -zt-ringsmuth.at -2015 --badge-secondary offline --badge-info Joomla - -Website of Civil Engineer Ernst Ringsmuth. -{END:CARD} - -{BEGIN:CARD} -/DATA/GEN/www/platin.png -Platin - Billard & Darts -platin-billard.at -2009 --badge-secondary offline --badge-info PHP - -Platin Bar. Works included taking Photographs for this Website as well. -{END:CARD} - -{BEGIN:CARD} -/DATA/GEN/www/balbuza.png -Broetchenstube -broetchenstube-baden.at -2007 --badge-secondary offline --badge-info Joomla - -Website of a Catering Company located in Baden, Austria. -{END:CARD} - -{BEGIN:CARD} -/DATA/GEN/www/aufbau.jpg -Cultural Administration Studies -mdw.ac.at/ikm/kulturmanagement/ -2007 --badge-secondary offline --badge-info PHP - -Lightweight Website of postgradual studies at the University of Music and Performing Arts, Vienna. -{END:CARD} - -{BEGIN:CARD} -/DATA/GEN/www/kunst-stuecke.png -Kunst-Stuecke Art Gallery -kunst-stuecke.at -2007 --badge-secondary offline --badge-info Redaxo - -Light CMS driven Website for an art gallery in Vienna. -{END:CARD} - - -{BEGIN:CARD} -/DATA/GEN/www/cuadro.png -Cuadro Architects -cuadro.com.pl -2006 --badge-secondary offline --badge-info PHP - -Architecture Website for Cuadro -{END:CARD} - -{BEGIN:CARD} -/DATA/GEN/www/foto-pschill.png -Gallery for Fotografie Pschill -fotografie-pschill.at -2006 --badge-secondary offline --badge-info PHP - -Create a PHP Gallery for this Photographers website. -{END:CARD} - -{BEGIN:CARD} -/DATA/GEN/www/werbereich.png -Werbereich Creative Agency -werbereich.at -2006 --badge-secondary offline --badge-info PHP - -Technical implementation of the Website of this Creative Agency -{END:CARD} - -{BEGIN:CARD} -/DATA/GEN/www/immoconnect.png -Immoconnect Real Estate -immoconnect.net -2006 --badge-secondary offline - -Light single-page Website for an Austrian Real Estate Agency. -{END:CARD} - -{BEGIN:CARD} -/DATA/GEN/www/austria-org-pl.png -Austrian Cultural Forum -austria.org.pl -2007 --badge-secondary offline --badge-info PHP - -Impleneted the news archive for the Austrian Cultural Forum located in Warsaw. -{END:CARD} - -{BEGIN:CARD} -/DATA/GEN/www/condition-red.png -Condition Red - Band -condition-red.com -2005 --badge-secondary offline --badge-info Flash - -Flash driven Website of the Rock and Metal Band: Condition RED. -{END:CARD} - -{BEGIN:CARD} -/DATA/GEN/www/austrian-wine.png -Austrian Wine -austrian-wine.at -2005 --badge-secondary offline - -Website for an exporter of Austrian Wines. -{END:CARD} - -{BEGIN:CARD} -/DATA/GEN/www/copterwerk.png -Copterwerk - Drone Services -copterwerk.com -2011 --badge-secondary offline - -Web presence of a company offering Aerial photography and photogrammetry services. -{END:CARD} - -
    - diff --git a/080_blog/index.md b/080_blog/index.md index f4aee65..fad3ef7 100644 --- a/080_blog/index.md +++ b/080_blog/index.md @@ -1,2 +1,5 @@ # Miguel's Blog +While this is not strictly a chronological blog, you can find here a loose +collection of some random articles, thoughts and projects of mine... + diff --git a/Michal-Idziorek.jpg b/Michal-Idziorek.jpg new file mode 100644 index 0000000..ddb3640 Binary files /dev/null and b/Michal-Idziorek.jpg differ diff --git a/Michal_Idziorek_CV.pdf b/Michal_Idziorek_CV.pdf new file mode 100644 index 0000000..f73fe30 Binary files /dev/null and b/Michal_Idziorek_CV.pdf differ diff --git a/index.md b/index.md index e69de29..ec17625 100644 --- a/index.md +++ b/index.md @@ -0,0 +1,53 @@ +###>>>KWD Michal Idziorek, Michał Idziorek, Michael Idziorek, Idziorek +###>>>DSC Everything you ever wanted to know about Michal Idziorek. This Website acts as a central Hub hosting his notes, projects, achievements as well as utter failiures. +###>>>TITLE Michal Idziorek +Michal Idziorek +=============== + +
    +Hello and Welcome to the virtual home of Michal Idziorek, +known as Miguel the Red Scorpio, a +developer, software engineer, scientist, philosopher, +as well as self-proclaimed artist and culinarian. +Michal Idziorek graduated from the _Vienna University of Technology_ +and holds a _Master of Science_ degree in _Media and Computer Science_. + +Over the years Michal professionally engaged in multidisciplinary +academic, corporate and freelance activities, acquiring a broad toolkit of +skills, he is continuously and passionately extending. + +
    +
    +![](Michal-Idziorek.jpg){itemprop="contentUrl" .img-fluid alt="Michal Idziorek smiling in front of green grass" title="~~ But youth smiles without any reason. It is one of its chiefest charms. ~~"} +
    _Michal Idziorek smiling_
    +
    +
    + +What is this Website About? +=========================== + +This website serves as shelter for some of my [notes](/blog) on a variety +of subjects and hosts a somehow random selection of my works and projects. +Please keep in mind, that this website is essentially under sustained +construction and more content is scheduled to follow. + +Contact +======= + +You can Contact me in English, German, Polish or Klingon via any of the following channels: + +* email: [m.i@gmx.at](mailto:m.i@gmx.at) +* XMPP: miguel (on the softwarefools.com server) +* IRC: oo\_miguel (on freenode or oftc) + +Feel free to send questions or suggestions. + +CV +== + +Download a PDF version of my Curriculum Vitae: + +[Michal\_Idziorek\_CV.pdf](/DATA/Michal_Idziorek_CV.pdf) + +It is likely out of date, sorry. + diff --git a/template.html b/template.html index bd66b91..418945c 100644 --- a/template.html +++ b/template.html @@ -53,7 +53,7 @@
    -- cgit v1.2.3