commit d5c54f826725a539503953c30eca50f1fcc3d130 Author: nek0 Date: Tue Mar 1 08:03:27 2016 +0100 initial commit. diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5731bbf --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.stack-work/ +_cache/ +_site/ diff --git a/404.md b/404.md new file mode 100644 index 0000000..3f833f3 --- /dev/null +++ b/404.md @@ -0,0 +1,8 @@ +----- +title: Error 404 +author: nek0 +----- + +## the site you wanted does not exist. + +Oops. Unfortunately there was an error. try [going back home](/). diff --git a/D7665688.txt b/D7665688.txt new file mode 100644 index 0000000..bf78f03 --- /dev/null +++ b/D7665688.txt @@ -0,0 +1,52 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1 + +mQINBFYEdjIBEAC6cLTlqJcZyMjKgEtzIAW4FkqMmxXHSuR4QdIQXvKhlA7iX4DB +SUV0STZK155696P4975GQNBadDT95dLOID49DCEFkZwh6icEhK+36HrBk9lUz/ZW +DTVbmkocNkQxWZAHee2fTWWzu901VbUOSwrxiBd3Lk2ZQm13mS6jAIqnXHyWtteg +Pn/4AbWA9udhpxqCJLqw9pnWTZ2q/Z+mMYooQS+55gwbNsWc+OSfk8Un1LW4DgO8 +Smh8leisfmh1+sK+Ends4mj1yG7FGJ7meovWpSI/3ETuKW6HEHLp+g9QHKZxyRuC +FSca+LN8yhaImMvGCSzyJrW490is+ZFZCLjOiY49TJ8nve6UgcgWQSvQhKicQRKq ++N4rs6l6Lts0wwDSMARxxW2B/DnxHjryg1Qmsm7nGNhUjdMV8k6N//8A+1z5KshM +LDKGGdjLfhlBfrmqduZoI7AszW8p8VtkyvSq/SSJWMnX67j6B984mdpikV6Spql7 +XMosCO22uMheS9+q3tDhozJv/tZr54pz6uiMmr2rJc6N16Ww2hXeTc/MgJTiCWST +ilpe543AITZbN5fLLSGnEGwNAP4FZfcOU1+aICdEruCnZQPdMB/Fgf7WRZ9wi/um +89tnqiS3mZz5qhHD6OXIp4cIUWXAyE0whK0xTw/IhV6wdR2xGYKlw2JLaQARAQAB +tCJSeXMgT3N0cm92aWQgKG1lb3cpIDxuZWswQG5lazAuZXU+iQI4BBMBAgAiBQJW +BHYyAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRD7ktlj12ZWiHxmD/oD +f//VZMiDqs/sXdz7DuuCGflpEQsgHrpbl0khQ6kRlyDrrU9N2RPS/MsI1zFzG5a1 +XVdm4MIB++E6aDk9o7qIOvNrriAnKSqCsFrM5E19CJ1GTKATl8blhXWyejXrA7tb +AGfiVbNqv8iXiH4BqsVqPMJjMEJcSqA5DXbmoAd1Vi0oI07I12uVrc1kof6Dcv9e +VeYSUP2UVD1TJaCvegarsX8MNr3R/097E4cL/8lNrT5o8MtwkTobGLYyqQj9fPfM +l1XHZyB9q6mN3uA/Byj5QAOYIIbxiOo3/9vsqTgtPEsZKD14fGRldLxjDIAfmPBl +G0lOkeA68tAXrGb15KoaFkLKl0b7bEYfZ0iVap0hgfGQg5hI1lIFVJTwS7hjPgth +pN4zwAkpOub1RnmjUd9PhuOVAFyRZU+Gf2h6JRKTdXWzFFKTyrIKcQBfgB+huY5T +13rzbxK4JYc3ykcUeVndNUrfp2tBetK68PHLnNP7cJuWQHzorwM8ux/5t0IzXbuL +jwIr9Ymi3JVlxH8qbU+TxvS2mzBnysVOXU8dT0zGAhuaGcrThWoyR1nBFzo0WKrt +gHyYJ/sa6QgKj9H/+ZIR4Y04Qt7Zcav868WPpLmuz1kEuC3HW4Vva3wdQ1seguW5 ++tjjWDfBYnK4e8pMs4PrnCQxizOEiA/KyI72rhrhrrkCDQRWBHYyARAA23uXrJMD +r68D2v61S2yTWb88ojOxUhG3TSzBAjissja4NoKJSLnUhz6ZP68vY6WEBuUXhgCH +WEaj0FHuigAPfjbpnmj8RriT5DbgczgOMsmuG9zKBWTrZ3YX0O+YS+35DnxY34MK +9mjEEo1jywiALksnpvqJotgvpxyBA0+noBIz/HcD0YvX29KgmLwepSKyPD1u95s0 +1xlqIPFUuzWWaSsYy0RsNLJDJb0araYyH81ZalpRP9lBCAeUVO0Ub+HQxa3qxiz5 +hmtKm/Ji1piq9p4tnZOtB31+COxqNmReKVOUoGyTvcp8Hknmx6qeZfH0sCOS/Y6b +IUS8G9QAR4WPfVGPfKFni+E+JRKcetAiQjy3ApnIybP3l7VxPDXbURkrOuOBRDg0 +c0Ae/tNobqN925jX3ImuF1KW7KccGaY2zyCG4nMR5UxG8ruL5VKrscntwxbYoAET +wrH9WH8A/KEbfylRMmMyJ6/c9lBawknW2bodEDnK0VppwjeX5rm6KSwpV+xhIMMu +w8HJLML1oo6oqIlvjHC/ul11KZGFTN24qVjzAOJMFEvEqN9VzH8kOJTY2qY7HzrQ +Ut6u5ErSwdoceqr6AUtJ0Xi0ZR0XZZOF78FP3Mvi8WanJXgd2kws5rEn+mJ825J3 +URmuvQ3FaJkkn5zDM3g9HkTyQXdr8LywnckAEQEAAYkCHwQYAQIACQUCVgR2MgIb +DAAKCRD7ktlj12ZWiEnMD/9i7ECRWPqn2kna367bFP5Ocp38LFuqS/R/Aw7kl8KJ +Z08SYaEnozu5XAFYORgzl3GaBsvQ0z9N/nR+jUF9IZ2YuNO4WxyB8ysjfzdGNtKd +XVJvd4PvSy0KQaT0uVCF6zzTfRw6CNHppa6ZYZd8ekcr1k5fPc6Qx4+xmWpsbmU8 +2yOn7T5FfxAEOJ8LwvppiJf4JXErY1cFhU4qK7wkyX7vGMcL8PNKJwnixd7Ev5tU +L8ecCMCABX+2phmkOr8nsSg3NAHd6D0MIbzdNdviwQ6en4a/0VbQk9xCxFp45E2p +2kz8VSW40oA2JP8vKuioDF5lSmZyIDnUFrRFdkrhcyMlCKdS50a6/l3HKvNUoSaL +0YR52c8gA4FWDWs/DiwzkG8QrvXOdChhqLN6sIBS/I/3GTgKSe7d75dl1oX+9acx +lJGmuCjbF+5P62/tRB5EDzev8CYyK5W52yiNU7c3lemcxI5agrAua/EwpvSqiSfN +qvIuZt6frWGxAotsP6egmLuhcTWIvxmakw4zZyaOVCr2VHPZBW1AQl+EAbrU/n9u +V8xvnciSWM0NPoyYkl4a57GuC5dyy5ZzWZQkV1VyMGNKzLkbWAV/WcsF4PxHe6Ud +MUPuEGXd29obogzVYxL+bFVblyz4LZbVoDAbfVlvJavOhbB3epCpIrSCJIL9T4nf +XQ== +=pASe +-----END PGP PUBLIC KEY BLOCK----- diff --git a/Setup.hs b/Setup.hs new file mode 100644 index 0000000..9a994af --- /dev/null +++ b/Setup.hs @@ -0,0 +1,2 @@ +import Distribution.Simple +main = defaultMain diff --git a/about.md b/about.md new file mode 100644 index 0000000..df0b9e7 --- /dev/null +++ b/about.md @@ -0,0 +1,28 @@ +--- +title: About +author: nek0 +--- + +##Hi there! + +You found your way to my little spot in the internet and you want to know more. + +So be it! + +###About me + +Sorry about disappointing you at this point, but there is not much to say about me and even less I want to disclose. + +The name I identify with is nek0. This is of course a nickname. I live in Central Europe as a university student and in my free time I like to code, play piano, sing and read books. I have a very broad taste in music and a great deal of understanding. + +###About this site + +Haskell logo +This site came to existence as a byproduct of an experiment. I am trying to configure and maintain my own server. +This blog is generated with the static site generator [Hakyll][h], which is written in Haskell, my favourite programming language so far. I myself am not very skilled in that language yet, but i find it very fascinating. + +As you can see I have been successful so far. + +Due to this experimental state it is very likely that the appearance of this site will change over time. + +[h]: http://jaspervdj.be/hakyll diff --git a/blog.cabal b/blog.cabal new file mode 100644 index 0000000..8dda8ae --- /dev/null +++ b/blog.cabal @@ -0,0 +1,28 @@ +-- Initial blog.cabal generated by cabal init. For further documentation, +-- see http://haskell.org/cabal/users-guide/ + +name: blog +version: 0.1.0.0 +synopsis: My blog +-- description: +homepage: https://nek0.eu +-- license: +-- license-file: LICENSE +author: nek0 +maintainer: nek0@chelnok.de +-- copyright: +category: Web +build-type: Simple +-- extra-source-files: +cabal-version: >=1.10 + +executable blog + main-is: Main.hs + hs-source-dirs: src + default-language: Haskell2010 + ghc-options: -Wall + -- other-modules: + -- other-extensions: + build-depends: base + , hakyll + , directory diff --git a/contact.md b/contact.md new file mode 100644 index 0000000..48578a1 --- /dev/null +++ b/contact.md @@ -0,0 +1,13 @@ +--- +title: Contact +--- + +If you have any comments on posts, this site or anything else, feel free to contact me at: +****. The associated PGP-Key has the ID [0xD7665688][key]. +I will gladly reply to your mails as soon as possible. + +Furthermore You can contact me via [Jabber/XMPP][jabber] at the address +**nek0@jabber.chelnok.de**. + +[key]: /D7665688.txt +[jabber]: https://en.wikipedia.org/wiki/XMPP diff --git a/css/comments.css b/css/comments.css new file mode 100644 index 0000000..e95fee9 --- /dev/null +++ b/css/comments.css @@ -0,0 +1,5 @@ +object { + width: 100%; + height: 500px; + border: none; +} diff --git a/css/default.css b/css/default.css new file mode 100644 index 0000000..eadde81 --- /dev/null +++ b/css/default.css @@ -0,0 +1,276 @@ +body { + color: black; + font-size: 16px; + font-family: 'Didact Gothic'; + font-weight: normal; + font-style: normal; + -webkit-font-smoothing: antialiased; + margin: 0; +} + +a{ + text-decoration: none; +} +a:link { + color: green; +} +a:visited { + color: darkgreen; +} + +img { + float: right; + margin: 10px; + width: 66%; + max-width: 500px; +} + +hr { + color: black; + border: 0; + background-color: black; + height: 2px; +} + +header { + padding: 20px; +} + +header a { + color: darkgreen; + font-size: 18px; + font-weight: bold; +} + +header a:visited { + color: darkgreen; +} + +article { + text-align: left; + padding: 20px; + margin-left: 200px; + overflow: auto; +} + +article a:hover{ + text-decoration: underline; +} + +article ul{ + list-style: none; +} + +article li:before { + display: inline-block; + background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xMzYzIDg3N2wtNzQyIDc0MnEtMTkgMTktNDUgMTl0LTQ1LTE5bC0xNjYtMTY2cS0xOS0xOS0xOS00NXQxOS00NWw1MzEtNTMxLTUzMS01MzFxLTE5LTE5LTE5LTQ1dDE5LTQ1bDE2Ni0xNjZxMTktMTkgNDUtMTl0NDUgMTlsNzQyIDc0MnExOSAxOSAxOSA0NXQtMTkgNDV6Ii8+PC9zdmc+); + background-repeat: no-repeat; + background-size: contain; + content: ""; + width: 1.5ex; + height: 1.5ex; +} + +article li { + text-indent: -2ex; + margin-left: 1.5ex; +} + +nav { + position: fixed; + width: 200px; +} + +.navigation, .tagcloud { + background-color: rgba(0,0,0,0.1); + background: rgba(0,0,0,0.1); + border-radius: 5px; + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; + padding-top: 20px; + padding-bottom: 20px; +} + +.tagcloud { + text-align: right; + padding-right: 20px; + padding-left: 20px; +} + +.navigation { + padding-right: 10px; +} + +/*nav .tagcloud a:visited { + color:darkgreen; +} + +nav .tagcloud a:link { + color:green; +}*/ + +nav ul{ + text-align:right; + list-style: none; + margin-left: 0px; +} + +nav li a:link { + color: darkgreen; + font-size: 18px; + font-weight: bold; + margin-right: 10px; + text-decoration: none; + text-transform: uppercase; +} + +nav li a:visited { + color: darkgreen; +} + +footer { + position: relative; + color: #555; + font-size: 12px; + text-align: right; + clear: both; + left: 0; + bottom: 0; + padding: 20px; + padding-top: 0px; + padding-bottom: 0px; + margin-top: 2em; + margin-bottom: 0.5em; +} + +footer span { + padding-left: 40px; +} + +footer span img { + vertical-align: bottom; +} + +footer img { + float: none; + margin: 0; + width: 16px; +} + +pre { + border: dashed 1px #000000; + border-radius: 5px; + background-color: rgba(0, 0, 0, 0.05); + background: rgba(0, 0, 0, 0.05); + padding: 10px; +} + +pre code { + border: none; + font-size: 14px; + background: transparent; + background-color: transparent; +} + +pre code:before { + content: attr(class); + position: relative; + float: right; + display: block; + color: white; + font-weight: bolder; + text-shadow: 0px 0px 3px black; +} + +code { + font-size: 14px; + background: rgba(0, 0, 0, 0.05); + background-color: rgba(0, 0, 0, 0.05); + border: dashed 1px #000000; + border-radius: 5px; +} + +h1 { + font-size: 24px; +} + +h2 { + font-size: 20px; +} + +.bitcoin { + display: inline-block; + margin-bottom: -2px; + fill: currentColor; +} + +.pagination { + display: inline-block; + width: 100%; +} + +.left, .right { + float: left; + margin-left: 25%; + display: inline-block; + fill: currentColor; +} + +.left svg, .right svg { + margin-bottom: -3px; +} + +.info { + color: #555; + font-size: 14px; + font-style: italic; +} + +.site { + display: flex; + min-height: 100vh; + flex-direction: column; +} + +.wrapper { + flex: 1; +} + +.hidden a:link{ + color: gray; +} + +.hidden a:visited{ + color: gray; +} + +.feed{ + display: inline-block; + margin-bottom: -2px; + fill: currentColor; +} + +@media screen and (max-width: 600px){ + nav{ + position: relative; + width: auto; + height: auto; + text-align: center; + } + nav ul{ + text-align: center; + padding-left: 0; + } + nav li{ + display: inline-block; + } + article { + margin: 0; + } + img { + float: right; + margin: 10px; + padding-left: 100%; + width: 230px; + } +} diff --git a/css/font.css b/css/font.css new file mode 100644 index 0000000..445e3d2 --- /dev/null +++ b/css/font.css @@ -0,0 +1,6 @@ +@font-face { + font-family: 'Didact Gothic'; + src: url('/font/DidactGothicMedium.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} diff --git a/css/synlight.css b/css/synlight.css new file mode 100644 index 0000000..367835c --- /dev/null +++ b/css/synlight.css @@ -0,0 +1,13 @@ +code.sourceCode span.kw { color: #007020; font-weight: bold; } +code.sourceCode span.dt { color: #902000; } +code.sourceCode span.dv { color: #40a070; } +code.sourceCode span.bn { color: #40a070; } +code.sourceCode span.fl { color: #40a070; } +code.sourceCode span.ch { color: #4070a0; } +code.sourceCode span.st { color: #4070a0; } +code.sourceCode span.co { color: #60a0b0; font-style: italic; } +code.sourceCode span.ot { color: #007020; } +code.sourceCode span.al { color: red; font-weight: bold; } +code.sourceCode span.fu { color: #06287e; } +code.sourceCode span.re { } +code.sourceCode span.er { color: red; font-weight: bold; } diff --git a/font/DidactGothic.ttf b/font/DidactGothic.ttf new file mode 100644 index 0000000..e4ff947 Binary files /dev/null and b/font/DidactGothic.ttf differ diff --git a/font/DidactGothicMedium.ttf b/font/DidactGothicMedium.ttf new file mode 100644 index 0000000..e4ff947 Binary files /dev/null and b/font/DidactGothicMedium.ttf differ diff --git a/humans.txt b/humans.txt new file mode 100644 index 0000000..bf7d9e0 --- /dev/null +++ b/humans.txt @@ -0,0 +1,13 @@ +/* TEAM */ +Me: nek0 +Email: nek0@nek0.eu +Location: Germany + +/* THANKS */ +Jasper van der Jeugt: jaspervdj.be + +/* SITE */ +Standards: HTML5, CSS3, +Components: plain old Html +Software: Hakyll, nginx +IDE: vim diff --git a/images/2013-09-02-typewriter.jpg b/images/2013-09-02-typewriter.jpg new file mode 100644 index 0000000..24bb17a Binary files /dev/null and b/images/2013-09-02-typewriter.jpg differ diff --git a/images/2013-09-02-typewriter_preview.jpg b/images/2013-09-02-typewriter_preview.jpg new file mode 100644 index 0000000..a8e6600 Binary files /dev/null and b/images/2013-09-02-typewriter_preview.jpg differ diff --git a/images/2014-10-01-01.jpg b/images/2014-10-01-01.jpg new file mode 100644 index 0000000..2daf06e Binary files /dev/null and b/images/2014-10-01-01.jpg differ diff --git a/images/2014-10-01-01_preview.jpg b/images/2014-10-01-01_preview.jpg new file mode 100644 index 0000000..7f8b6c6 Binary files /dev/null and b/images/2014-10-01-01_preview.jpg differ diff --git a/images/2014-10-01-02.jpg b/images/2014-10-01-02.jpg new file mode 100644 index 0000000..c82c7d8 Binary files /dev/null and b/images/2014-10-01-02.jpg differ diff --git a/images/2014-10-01-02_preview.jpg b/images/2014-10-01-02_preview.jpg new file mode 100644 index 0000000..05aa2b9 Binary files /dev/null and b/images/2014-10-01-02_preview.jpg differ diff --git a/images/2014-10-01-03.jpg b/images/2014-10-01-03.jpg new file mode 100644 index 0000000..dd71ebb Binary files /dev/null and b/images/2014-10-01-03.jpg differ diff --git a/images/2014-10-01-03_preview.jpg b/images/2014-10-01-03_preview.jpg new file mode 100644 index 0000000..0312025 Binary files /dev/null and b/images/2014-10-01-03_preview.jpg differ diff --git a/images/2014-10-01-04.jpg b/images/2014-10-01-04.jpg new file mode 100644 index 0000000..d61c90d Binary files /dev/null and b/images/2014-10-01-04.jpg differ diff --git a/images/2014-10-01-04_preview.jpg b/images/2014-10-01-04_preview.jpg new file mode 100644 index 0000000..d72a7a7 Binary files /dev/null and b/images/2014-10-01-04_preview.jpg differ diff --git a/images/2014-10-01-05.jpg b/images/2014-10-01-05.jpg new file mode 100644 index 0000000..f1a4899 Binary files /dev/null and b/images/2014-10-01-05.jpg differ diff --git a/images/2014-10-01-05_preview.jpg b/images/2014-10-01-05_preview.jpg new file mode 100644 index 0000000..551ea6e Binary files /dev/null and b/images/2014-10-01-05_preview.jpg differ diff --git a/images/2014-10-01-06.jpg b/images/2014-10-01-06.jpg new file mode 100644 index 0000000..05fec1c Binary files /dev/null and b/images/2014-10-01-06.jpg differ diff --git a/images/2014-10-01-06_preview.jpg b/images/2014-10-01-06_preview.jpg new file mode 100644 index 0000000..89638c7 Binary files /dev/null and b/images/2014-10-01-06_preview.jpg differ diff --git a/images/2014-10-01-07.jpg b/images/2014-10-01-07.jpg new file mode 100644 index 0000000..eb62616 Binary files /dev/null and b/images/2014-10-01-07.jpg differ diff --git a/images/2014-10-01-07_preview.jpg b/images/2014-10-01-07_preview.jpg new file mode 100644 index 0000000..1ebd74e Binary files /dev/null and b/images/2014-10-01-07_preview.jpg differ diff --git a/images/HTML5_Badge.svg b/images/HTML5_Badge.svg new file mode 100644 index 0000000..872e08f --- /dev/null +++ b/images/HTML5_Badge.svg @@ -0,0 +1,7 @@ + + HTML5 Logo Badge + + + + + diff --git a/images/haskell-logo.png b/images/haskell-logo.png new file mode 100644 index 0000000..97c0937 Binary files /dev/null and b/images/haskell-logo.png differ diff --git a/images/nekonet.ico b/images/nekonet.ico new file mode 100644 index 0000000..baf3d1c Binary files /dev/null and b/images/nekonet.ico differ diff --git a/images/nekonet.svg b/images/nekonet.svg new file mode 100644 index 0000000..51bfa4d --- /dev/null +++ b/images/nekonet.svg @@ -0,0 +1,79 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/imprint.md b/imprint.md new file mode 100644 index 0000000..38659fc --- /dev/null +++ b/imprint.md @@ -0,0 +1,83 @@ +--- +title: Impressum +--- + +Angaben gemäß § 5 TMG: + +## Kontakt: + +Amedeo Molnár +Hochschulstraße 20 +01069 Dresden + +Telefon: +0176-77239874 + +E-Mail: + +## Haftungsausschluss: + +### Haftung für Inhalte + +Die Inhalte meiner Seiten wurden mit größter Sorgfalt erstellt. Für die Richtigkeit, Vollständigkeit und +Aktualität der Inhalte kann ich jedoch keine Gewähr übernehmen. Als Diensteanbieter bin ich gemäß +§ 7 Abs.1 TMG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach +§§ 8 bis 10 TMG bin ich als Diensteanbieter jedoch nicht verpflichtet, übermittelte oder gespeicherte +fremde Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit +hinweisen. Verpflichtungen zur Entfernung oder Sperrung der Nutzung von Informationen nach den allgemeinen +Gesetzen bleiben hiervon unberührt. Eine diesbezügliche Haftung ist jedoch erst ab dem Zeitpunkt der +Kenntnis einer konkreten Rechtsverletzung möglich. Bei Bekanntwerden von entsprechenden Rechtsverletzungen +werde ich diese Inhalte umgehend entfernen. + +### Haftung für Links + +Unser Angebot enthält Links zu externen Webseiten Dritter, auf deren Inhalte ich keinen Einfluss habe. +Deshalb kann ich für diese fremden Inhalte auch keine Gewähr übernehmen. Für die Inhalte der verlinkten +Seiten ist stets der jeweilige Anbieter oder Betreiber der Seiten verantwortlich. Die verlinkten Seiten +wurden zum Zeitpunkt der Verlinkung auf mögliche Rechtsverstöße überprüft. Rechtswidrige Inhalte waren zum +Zeitpunkt der Verlinkung nicht erkennbar. Eine permanente inhaltliche Kontrolle der verlinkten Seiten ist +jedoch ohne konkrete Anhaltspunkte einer Rechtsverletzung nicht zumutbar. Bei Bekanntwerden von +Rechtsverletzungen werde ich derartige Links umgehend entfernen. + +### Urheberrecht + +Die durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten unterliegen dem deutschen +Urheberrecht und, soweit nicht anders vermerkt, einer Creative-Commons-Lizenz CC BY-SA 4.0 (Namensnennung +– Weitergabe unter gleichen Bedingungen 4.0). Unter den in der Lizenz angegebenen Bedingungen können Sie +die lizenzierten Inhalte und Werke vervielfältigen, verbreiten und öffentlich zugänglich machen, und Sie +können Abwandlungen und Bearbeitungen anfertigen. Zu den Nutzungsbedingungen gehören unter anderem die +Namensnennung des Rechteinhabers und die Weitergabe der Inhalte und Werke bzw. Ihrer Abwandlungen davon zu +identischen oder vergleichbaren Lizenzbedingungen. + +Soweit die Inhalte auf dieser Seite nicht vom Betreiber erstellt wurden, werden die Urheberrechte Dritter +beachtet. Insbesondere werden Inhalte Dritter als solche gekennzeichnet. Sollten Sie trotzdem auf eine +Urheberrechtsverletzung aufmerksam werden, bitte ich um einen entsprechenden Hinweis. Bei Bekanntwerden +von Rechtsverletzungen werde ich derartige Inhalte umgehend entfernen. +## Datenschutz + +### Cookies + +Die Internetseiten verwenden teilweise so genannte Cookies. Cookies richten auf Ihrem Rechner keinen +Schaden an und enthalten keine Viren. Cookies dienen dazu, mein Angebot nutzerfreundlicher, effektiver +und sicherer zu machen. Cookies sind kleine Textdateien, die auf Ihrem Rechner abgelegt werden und die Ihr +Browser speichert. + +Sie können Ihren Browser so einstellen, dass Sie über das Setzen von Cookies informiert werden und Cookies +nur im Einzelfall erlauben, die Annahme von Cookies für bestimmte Fälle oder generell ausschließen sowie +das automatische Löschen der Cookies beim Schließen des Browser aktivieren. Bei der Deaktivierung von +Cookies kann die Funktionalität dieser Website eingeschränkt sein. + +### Server-Log-Files + +Der Provider der Seiten erhebt und speichert automatisch Informationen in so genannten Server-Log Files, +die Ihr Browser automatisch an mich übermittelt. Dies sind: + +* Browsertyp/ Browserversion +* verwendetes Betriebssystem +* Referrer URL +* Hostname des zugreifenden Rechners +* Uhrzeit der Serveranfrage + +Diese Daten sind nicht bestimmten Personen zuordenbar. Eine Zusammenführung dieser Daten mit anderen +Datenquellen wird nicht vorgenommen. Ich behalte mir vor, diese Daten nachträglich zu prüfen, wenn mir +konkrete Anhaltspunkte für eine rechtswidrige Nutzung bekannt werden. diff --git a/index.html b/index.html new file mode 100644 index 0000000..64d56f6 --- /dev/null +++ b/index.html @@ -0,0 +1,23 @@ +--- +title: Home +--- + +

Welcome

+ + + + +

Welcome to my blog!

+ +

This blog is about everything and anything I want to share with the world. +
+It is mostly technical stuff about coding and software configuration, but also about photography, music, tea and everything else I find noteworthy or important enough to tell.
+Here are my latest Posts: +

+ + +$partial("templates/post-list.html")$ + +

...and there are even more in the archive.

+ + diff --git a/newpost.lua b/newpost.lua new file mode 100755 index 0000000..d891232 --- /dev/null +++ b/newpost.lua @@ -0,0 +1,39 @@ +#! /usr/bin/env lua + +date = io.popen("date --rfc-3339=date"):read() +title = "null" +author = nil + + +function input() + print("Enter post title:") + title = io.read() + + print("Enter author name:") + author = io.read() +end + +function confirmation() + print("Is the following correct?") + print("title:",title) + print("author:",author) + print("y/n") +end + +function main() + repeat + input() + confirmation() + until io.read() == "y" + local postname = "./posts/" .. date .. "-" .. title:gsub(" ", "-") .. ".md" + local metatab ="---\ntitle: " .. title .. "\nauthor: " .. author .. "\ntags: \ndescription: \n---" + if os.execute("touch " .. postname) then + os.execute("echo '" .. metatab .. "' >> ".. postname) + os.execute("vim " .. postname) + else + print("some error occured. exiting") + os.exit(1) + end +end + +main() diff --git a/posts/2013-07-17-post-for-testing-purposes.md b/posts/2013-07-17-post-for-testing-purposes.md new file mode 100644 index 0000000..10f1799 --- /dev/null +++ b/posts/2013-07-17-post-for-testing-purposes.md @@ -0,0 +1,17 @@ +--- +title: Post for testing purposes +author: nek0 +description: test +tags: english, meta +--- + +##Hello World! + +This is a post in which I try to use the markdown language for writing my own posts. + +Markdown is very useful for this purpose since it does not clutter the sourcefile with tags, which need to be opened and closed and thus making it hard to read. Most of the topology +of the outcoming texts like headlines, paragraphs or even more like links to different sites can be managed in a more easier and convenient way. + +If you have become interested in learning how to use markdown you can look at [Wikipedia's page on markdown](http://en.wikipedia.org/wiki/Markdown "Markdown at Wikipedia"). + +Have fun! diff --git a/posts/2013-08-11-Language-problems.md b/posts/2013-08-11-Language-problems.md new file mode 100644 index 0000000..1c49fce --- /dev/null +++ b/posts/2013-08-11-Language-problems.md @@ -0,0 +1,12 @@ +--- +title: Language problems +author: nek0 +tags: english, meta +description: Problem with language choice in the blog +--- + +Because I am capable of fluently communicating in three languages, I now have a Problem with the decision, in which one of them i will write this blog. For now I am using english because it's the most widely used language in the world that I can communicate in. + +In the future I might write posts that only matter in one country or one city. Maybe i will even comment on the politics in the country i live in, but that's not an english speaking country. + +Maybe I will write the posts in any language I see fit at the Moment and tag it with its language. That should do it. diff --git a/posts/2013-09-02-Just-a-random-thought.md b/posts/2013-09-02-Just-a-random-thought.md new file mode 100644 index 0000000..8416d22 --- /dev/null +++ b/posts/2013-09-02-Just-a-random-thought.md @@ -0,0 +1,15 @@ +--- +title: Just a radom thought +author: nek0 +tags: english, projects, hardware +description: one of my crazier projects +--- + +There is a project of mine now progressing pretty good at the moment. +I am trying to convert an old typewriter into a full-fledged computer using a cubieboard or something similar. +Now I am looking for a way to get printer output from the typewriter using its own types. I was thinking of magnetic force pushing down the levers inside the machine and so simulating typepresses. +Maybe I am just crazy and nobody shoud listen to me closely, but I think, that should be bossible, if I could get my hands on the right magnetic coils and some neodymium magnets. + + +[![](/images/2013-09-02-typewriter_preview.jpg)](/images/2013-09-02-typewriter.jpg "The Typewriter") +This is the Typewriter I will be working with: An old Continental typewriter from Germany, built in the early 20eth Century. It might seem a bit abusive using such an old machine for it, but if I wouldn't use it, it would just rust in some place never to be touched again. I have the intention to bring it to new life. diff --git a/posts/2013-09-16-constant-change.md b/posts/2013-09-16-constant-change.md new file mode 100644 index 0000000..7095d46 --- /dev/null +++ b/posts/2013-09-16-constant-change.md @@ -0,0 +1,11 @@ +--- +title: Constant change +author: nek0 +tags: english, meta +description: newest changes of the site +--- + +As promised in the about-page, i have made some improvements to this blog. I am now officially using html5. +I have introduced nav, article, header and footer tags where necessary. +Additionally, for those with mobile devices, all screens with a width of 600px and lesser get a more declutterized version of the site with no navigation sidebar but as a line above the article. +I hope you enjoy it. diff --git a/posts/2013-09-20-Wahlkampf.md b/posts/2013-09-20-Wahlkampf.md new file mode 100644 index 0000000..cd2025c --- /dev/null +++ b/posts/2013-09-20-Wahlkampf.md @@ -0,0 +1,12 @@ +--- +title: Wahlkampf +author: nek0 +tags: deutsch, misc +description: Meine Meinung zum Wahlkampf +--- + +##Es ist Wahl!## + +In den deutschen Landen ist Wahl, der wahlkampf ist auf Hochtouren. +Doch wem können wir vertrauen? Alle, die sie ihre Namen auf den Plakaten haben stehen aus schlechter Erfahrung im Verdacht ihre Versprechen doch nciht zu erfüllen. +Aus diesem Grund gebe ich meine Stimme an Cthulhu, den Herrn von R'lyeh. Warum sich mir dem kleineren Übel zu frieden geben? diff --git a/posts/2013-10-01-Moodswing.md b/posts/2013-10-01-Moodswing.md new file mode 100644 index 0000000..48b16b5 --- /dev/null +++ b/posts/2013-10-01-Moodswing.md @@ -0,0 +1,13 @@ +--- +title: Moodswing +author: nek0 +tags: english, misc +description: happy face! +--- + +Today I have a very strange and very rare Moodswing. I'm in a good mood, which is great. + +I know I am sick and will be for some time in the future, but today I see a better future. It's not an easy time for me, not knowing exactly, why I am sick or even what exactly it is I suffer from. +My doctors do their best to treat me and my friends are a great support. I wish to thank them all for keeping up with me. + +This moment is very precious to me and I hope that once in a while everybody has a similar feeling. diff --git a/posts/2013-10-21-Construction-underway.md b/posts/2013-10-21-Construction-underway.md new file mode 100644 index 0000000..3c1c8d2 --- /dev/null +++ b/posts/2013-10-21-Construction-underway.md @@ -0,0 +1,9 @@ +--- +title: Construction underway +author: A.M +tags: english, misc +description: some news to share +--- + +The Hackerspace I am affiliated with, the [c3d2](http://c3d2.de), is currently moving. It is very fascinating seeing this project evolve and helping with it. +We hope that this move will bring us forward and that we will grow from it. diff --git a/posts/2013-11-20-Code-Experiment.md b/posts/2013-11-20-Code-Experiment.md new file mode 100644 index 0000000..e8cd216 --- /dev/null +++ b/posts/2013-11-20-Code-Experiment.md @@ -0,0 +1,8 @@ +--- +title: Code Experiment +author: nek0 +tags: english, programming, projects +description: a small program i made +--- + +Today I made some effort to learn a bit more in Haskell and finished a working implementation of the unix utility ddate. It is nothing much, but it means a alot to me that I start to understand how to think in the paradigm of the language. If you are curious about my code, have a look at [my github account](https://github.com/nek0/n-ddate). diff --git a/posts/2013-12-20-Merry-Christmas.md b/posts/2013-12-20-Merry-Christmas.md new file mode 100644 index 0000000..71a273f --- /dev/null +++ b/posts/2013-12-20-Merry-Christmas.md @@ -0,0 +1,10 @@ +--- +title: Merry Christmas +author: nek0 +tags: english, misc +description: and a happy neyear! +--- + +#Happy Holidays + +I wish you all out there happy holidays, merry christmas and a happy new year. Spend the time with people dear to you. diff --git a/posts/2014-01-03-New-changes.md b/posts/2014-01-03-New-changes.md new file mode 100644 index 0000000..7a02612 --- /dev/null +++ b/posts/2014-01-03-New-changes.md @@ -0,0 +1,11 @@ +--- +title: New changes +author: nek0 +tags: english, meta +description: more changes +--- + +Hi there. +Firstly, I am deeply sorry for not updating for a while, but I have been sick. +Meanwhile I figured out (thanks to ripping code from other good Hakyll blogs) how to implement post tags. +So in conclusion you can browse all posts by tags. a tag cloud should follow shortly. diff --git a/posts/2014-01-09-Newest-changes.md b/posts/2014-01-09-Newest-changes.md new file mode 100644 index 0000000..f9ee123 --- /dev/null +++ b/posts/2014-01-09-Newest-changes.md @@ -0,0 +1,9 @@ +--- +title: Newest changes +author: nek0 +tags: english, meta +description: even more changes +--- + +Now after tinkering with this site again I managed to tag all posts appropriatelty. unfortunately i was not able to create a tag cloud, because i don't know how. It is somehow possible with Hakyll. +Additionally I made a sticky footer for this page. How it actually works is in another post. diff --git a/posts/2014-01-09-Sticky-footer.md b/posts/2014-01-09-Sticky-footer.md new file mode 100644 index 0000000..196644d --- /dev/null +++ b/posts/2014-01-09-Sticky-footer.md @@ -0,0 +1,51 @@ +--- +title: Sticky footer +author: nek0 +tags: english, programming, meta +description: code snippet +--- + +Here is a simple recipe for the sticky footer that is used on this site. As this site runs on HTML5 it might not work on all browsers (Sorry, Microsoft). + +first you need to define in your css or add to your existing rules: + +```css +html { + height: 100%; +} +body { + height: 100%; +} +``` + +additionally you need a wrapper class for your content. You need to adjust the negative margin value to your footer height. The value given here is only an example. Actually this will require some tinkering. + +```css +.wrapper { + min-height: 100%; + height: auto !important; + height: 100%; + margin: 0 -65px; +} +``` + +now you need to wrap your site content in a div with the wrapper class. + +If something is messed up, it is most likely because of paddings or margins. Take special care, that `body` and `html` have none of them. + +The according html file might look something like this: + +```html + + some info + +
+
your header here
+
content here
+
+
your awesome sticky footer
+ + +``` + +I hope this is helpful for your website, if you were looking for a solution. diff --git a/posts/2014-01-10-Tagcloud!.md b/posts/2014-01-10-Tagcloud!.md new file mode 100644 index 0000000..c7ff641 --- /dev/null +++ b/posts/2014-01-10-Tagcloud!.md @@ -0,0 +1,8 @@ +--- +title: Tagcloud! +author: nek0 +tags: english, meta, programming +description: New tagcloud added +--- + +I dived in to Hakyll configuration unexpectedly deep and found a solution for my tagcloud problem. From now on you have the tagcloud in the navigation bar. diff --git a/posts/2014-01-14-Impressum.md b/posts/2014-01-14-Impressum.md new file mode 100644 index 0000000..ddca8aa --- /dev/null +++ b/posts/2014-01-14-Impressum.md @@ -0,0 +1,8 @@ +--- +title: Impressum eingefügt +author: nek0 +tags: deutsch, meta +description: und jetzt neu mit impressum +--- + +Aufgrund der Rechtslage in unserem deutschen Land habe ich nun ein Impressum zu meiner Seite hinzugefügt, bevor ich noch größerem Publikum entgegentrete. Es ist nervig und unschön, aber was soll's. Ich komme letztendlich nicht drum herum so etwas anzulegen, also besser früher als später. diff --git a/posts/2014-01-14-Now-new:-Syntax-highlighting!.md b/posts/2014-01-14-Now-new:-Syntax-highlighting!.md new file mode 100644 index 0000000..c013cf4 --- /dev/null +++ b/posts/2014-01-14-Now-new:-Syntax-highlighting!.md @@ -0,0 +1,9 @@ +--- +title: Now new: Syntax highlighting! +author: nek0 +tags: meta, programming, english, meta +description: Syntax highlighting in code bubbles is the new feature. +--- + +Hey folks! +I have been tinkering again with this site and i found out that my markdown compiler pandoc supports syntax highlighting, so from now on all code bubbles will have proper syntax highlighting. Additionally I played with the navbar and the code bubbles themselves, so they show the proper language. diff --git a/posts/2014-02-08-Cryptoparty.md b/posts/2014-02-08-Cryptoparty.md new file mode 100644 index 0000000..2a1c99c --- /dev/null +++ b/posts/2014-02-08-Cryptoparty.md @@ -0,0 +1,12 @@ +--- +title: Cryptoparty +author: nek0 +tags: english, crypto +description: encrypt everything +--- + +I am just attending a cryptoparty, where we sign each other's pgp-keys. + +It is my first time doing so, but I think it is very important to know your possibilities, especially in the light of recent events and revelations. This is also one of the reasons I run my own mailserver. Other reasons are just to see if I can. + +On this occasion I stumbled upon the debian package "signing-party" and the tool in it called `sig2dot`, which creates a nice graph out of your key signatures. Although dot has its flaws, I think this is a wonderful way to visualize your chains of trust. diff --git a/posts/2014-02-25-Mailserver.md b/posts/2014-02-25-Mailserver.md new file mode 100644 index 0000000..246f872 --- /dev/null +++ b/posts/2014-02-25-Mailserver.md @@ -0,0 +1,12 @@ +--- +title: Mailserver +author: nek0 +tags: english, programming +description: My own mailserver +--- + +Some time ago a few friends and I rented a root server, each of us maintaining one or more services on it. Since i gathered some experience in the field my part is to maintain the mailserver. This way we have a decentralized mail service at our hand, that is not so easily spied upon. + +For running the mailservice I chose the combination of Postfix and Dovecot with SASL managed by Dovecot. To configure everything i really recommend the [Dovecot wiki](http://wiki2.dovecot.org/StartSeite) as well as the [Postfix documentation](http://www.postfix.org/documentation.html). When installing from Debian repositories you get a simple working configuration out if the box. + +If you want to learn to do this by yourself, just install these services and tinker with them. Thats the best approach I can recommend, though maybe not the simplest. diff --git a/posts/2014-03-20-Certificate-problems.md b/posts/2014-03-20-Certificate-problems.md new file mode 100644 index 0000000..ed50e0c --- /dev/null +++ b/posts/2014-03-20-Certificate-problems.md @@ -0,0 +1,14 @@ +--- +title: Certificate problems +author: nek0 +tags: meta, projects +description: oncoming problems with ssl certification +--- + +Hi folks. + +As I just recently learned the debian maintainers want to discntinue the distribution of the [CACert](http://cacert.org) root certificate with their package `ca-certificates`. More details [here](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=718434). + +This is particularly bad for me, as my certificates are all from CACert, for example even the certificate for the https connection. So when you come from a Debian-based system and see a certificate issue while you connect to my site, please trust this certificate, it will be the same as it ever was. + +I really hope that CACert passes its oncoming audit so that the Debian maintainers will trust the root certificate of CACert again diff --git a/posts/2014-03-28-Alternate-Dropbox-service.md b/posts/2014-03-28-Alternate-Dropbox-service.md new file mode 100644 index 0000000..b33b3e8 --- /dev/null +++ b/posts/2014-03-28-Alternate-Dropbox-service.md @@ -0,0 +1,14 @@ +--- +title: Alternate Dropbox service +author: nek0 +tags: english, projects +description: My personal recommendation for a dropbox alternative +--- + +Are you looking for a Dropbox alternative? An open spurce alternative hosted on your own server? I may have found an answer. + +The Answer is [seafile](http://seafile.com), a pretty powerful piece of software written in C and Python. I started my own seafile service on this server and am pretty happy with it. There's only one drawback I have found out: the upload rates are pretty low, which could be caused by crappy ISPs or the encryption of seafile itself. But even Dropbox doesn't have the best upload rates, so what. + +Additionally there are clients for most platforms and even the source code is available, so you can build it yourself, if it's not available for your platform. + +The installation itself is pretty straightforward if you follow the wiki, even if you want some specialties like nginx as your webserver. diff --git a/posts/2014-04-10-New-domain.md b/posts/2014-04-10-New-domain.md new file mode 100644 index 0000000..b08819b --- /dev/null +++ b/posts/2014-04-10-New-domain.md @@ -0,0 +1,10 @@ +--- +title: New domain +author: nek0 +tags: english, meta +description: Website now hosted under new domain +--- + +I now have a new (and real) domain. Now you can find my blog at [nek0.eu](https://nek0.eu). + +Now I am deciding wether to put comments on my website and what service to use. Under all circumstances it will be a selfhosted service. diff --git a/posts/2014-05-17-Comment-service.md b/posts/2014-05-17-Comment-service.md new file mode 100644 index 0000000..0933e9c --- /dev/null +++ b/posts/2014-05-17-Comment-service.md @@ -0,0 +1,12 @@ +--- +title: Comment service +author: nek0 +tags: programming, projects +description: I am writing my own commenting service +--- + +As I stated earlier, I want to add a commenting service to my blog. I could use already existing Software, like [Disqus](http://disqus.com/) or as self hosted service the [Isso](http://posativ.org/isso/) commenting service. But lastly I decided to write my own commenting service. + +I chose to do so, because my blog is generated by [Hakyll](http://jaspervdj.be/hakyll/), a static site generator written in [Haskell](http://www.haskell.org/haskellwiki/Haskell), I wanted my site to stay in the realm of this programming language. + +Since there is no such commenting service implemented in Haskell yet, I have to write my own. I chose the [Yesod](http://www.yesodweb.com/) web framework as foundation for my project. It already has basic functionality, but because I have not implemented spam protection and moderation yet, I do not recommend using it outside of testing purposes. You can check it out at my git repository at Github [here](https://github.com/nek0/yacs). diff --git a/posts/2014-06-13-Crypto-broken.md b/posts/2014-06-13-Crypto-broken.md new file mode 100644 index 0000000..d6b29bc --- /dev/null +++ b/posts/2014-06-13-Crypto-broken.md @@ -0,0 +1,18 @@ +--- +title: Crypto broken? +author: nek0 +tags: crypto, english +description: Problems facing the possible end of truecrypt. +--- + +Ever since the strange breakup of the [truecrypt project](http://truecrypt.sourceforge.net/) I am unsure wether I can still trust the software. This is bad for me, because I rely on it in several cases. + +Because of the non-standard license of truecrypt there has not formed a forked project yet which I could rely on. I am looking for alternatives, but have not found anything suiting my needs. + +For example there is [GnuPG](https://www.gnupg.org/), which can encrypt single files and also folders, but you have to do it manually every time you change something. Furthermore you can not mount it like you could do with a truecrypt container. + +Then there is [LUKS](https://code.google.com/p/cryptsetup/), which can encrypt whole filesystems, but not singular containers. + +For now i will remain using truecrypt and trust the [outcome](https://opencryptoaudit.org/reports/) of the first stage of the source code audit of truecrypt. + +I know I don't present any solutions here, but I will be looking into that matter in the future and hopefully I come out with something better than keep using truecrypt. diff --git a/posts/2014-07-25-Comment-system-slowly-emerging.md b/posts/2014-07-25-Comment-system-slowly-emerging.md new file mode 100644 index 0000000..aedf18b --- /dev/null +++ b/posts/2014-07-25-Comment-system-slowly-emerging.md @@ -0,0 +1,18 @@ +--- +title: Comment system slowly emerging +author: nek0 +tags: english, programming, projects +description: The promised commenting system is slowly coming to life. +--- + +Hey folks, long time no see. + +I have been busy in the past month studying. Exam season is coming rapidly nearer. + +Aside from learning and the general procrastination I have worked on my own implementation of a commenting service, which is now ready to be doployed for testing. It is called "yacs" for now, which stands for "yet another commenting service". It is written in Haskell as a Yesod web-app. Check it out on [Github][yacs github]. + +I decided to use this approach, because I wanted to know the language Haskell better. It was really challenging wrapping the logic of a commenting service aroud the possibilities I had with Haskell, since I am still very new to this language. + +Right now I am still stuck in some kind of dependency hell and my project does not build on the server. As soon as I resolve this problem, the newly added iframes, which you may have noticed on the bottom of every blogpost, will come to life. After that i will write a Documentation for the whole project. + +[yacs github]: https://github.com/nek0/yacs/ diff --git a/posts/2014-09-11-Finally.md b/posts/2014-09-11-Finally.md new file mode 100644 index 0000000..b80e1ec --- /dev/null +++ b/posts/2014-09-11-Finally.md @@ -0,0 +1,14 @@ +--- +title: Finally +author: nek0 +tags: english, programming, projects +description: Commenting System is ready for testing +--- + +Finally I made it. The commenting system I have been working on for the past few months is deployed for testing. + +Also the blog was moved to another server, as I give up my own little sandbox of virtual server, which has become increasingly unreliable. Hence the outage from last month, for which I am very sorry. Soon I will also have set up my domain here. + +As you can see, the iframes have come to life with the promised commenting system. feel free to comment anything you want under any blog post. Knock yourselves out. Unfortunately, I can't guarantee, that your comments will stay, as this is just a test deployment and I will still work heavily on the code. + +When you encounter any problems, errors, bugs or have feature requests, drop an issue at the [GitHub project page](https://github.com/nek0/yacs). diff --git a/posts/2014-10-01-Visit-at-home.md b/posts/2014-10-01-Visit-at-home.md new file mode 100644 index 0000000..f90fa8e --- /dev/null +++ b/posts/2014-10-01-Visit-at-home.md @@ -0,0 +1,30 @@ +--- +title: Visit at home +author: nek0 +tags: english, misc +description: After a long time i have visited my birthplace +--- + + +After a long time I decided to visit my old birthplace, the city of Prague. I have spent there a week with my grandmother, visiting concerts and the theatre. It has been the best time I have had in a while. + +[![](/images/2014-10-01-02_preview.jpg)](/images/2014-10-01-02.jpg "Karel IV") +I also took the opportunity to take out my trusty old camera on the journey to take some photos. The ones I consider the best are here in this post. + +Prague is a beautyful city with lots of history and legends and you need more than one visit to see everything of it. There is always something to discover and to learn. + +[![](/images/2014-10-01-03_preview.jpg)](/images/2014-10-01-03.jpg "Prague castle with Carl's bridge") +For instance: the castle of Prague is centuries old with lots of legends. Numberless historical figures have visited this place, not only the city itself, but also the castle. The cathedral is a wonderful piece of architecture and artisanship. + +[![](/images/2014-10-01-04_preview.jpg)](/images/2014-10-01-04.jpg "Carl's bridge entrance") +Another masterpiece is Carl's bridge, the oldest bridge of the city. according to a legend the sword of the legendary national hero Brunclík is buried in the foundation of the Bridge. On the bridge there are also statues depicting various historical and mythical events of czech history. + +[![](/images/2014-10-01-05_preview.jpg)](/images/2014-10-01-05.jpg "Old townhall") +This is the old townhall of Prague with its famous astronomical clock. every 15 minutes the small blue doors on the top open and you can see a small procession of saints, while the clock rings the time. This is one of the greatest tourist magnets in the whole city. Regardless of weather or temperature, there is always a giant crowd in front of this building. + +[![](/images/2014-10-01-06_preview.jpg)](/images/2014-10-01-06.jpg "brmlab") +While I was in the city, I also took the opportunity to visit the local hackerspace [brmlab][brmlab]. +[![](/images/2014-10-01-07_preview.jpg)](/images/2014-10-01-07.jpg "brmlab") +It is way bigger than I first imagined. These photos were taken only in their main room, but they have seperate labs for chemistry, biology and high voltage alectricity in the basement, which they gladly showed me. It is a great place to be, so if you are in Prague, be sure to pay them a visit. + +[brmlab]: https://brmlab.cz/ diff --git a/posts/2014-10-06-Feed-chaos.md b/posts/2014-10-06-Feed-chaos.md new file mode 100644 index 0000000..7dd3018 --- /dev/null +++ b/posts/2014-10-06-Feed-chaos.md @@ -0,0 +1,10 @@ +--- +title: Feed chaos +author: nek0 +tags: english, programming, meta +description: fixed an error with the RSS- and Atom-Feeds +--- + +First I have to apologise, that I haven't found the error earlier, it was literally a single line of code. + +For all those relying on my feeds, you may have encountered problems with links going still to the old server. After I moved my server to a new location I forgot to change the feed settings accordingly. Now I fixed it. diff --git a/posts/2014-10-23-Daemonize-a-yesod-app.md b/posts/2014-10-23-Daemonize-a-yesod-app.md new file mode 100644 index 0000000..5c59546 --- /dev/null +++ b/posts/2014-10-23-Daemonize-a-yesod-app.md @@ -0,0 +1,75 @@ +--- +title: Daemonize a Yesod application +author: nek0 +tags: english, meta, programming +description: Found a way to daemonize my commenting service +--- + +**If you want to create a systemd service file, look [here][systemd]** + +As you might know I have written my own commenting service, which up until recently I had to start manually in a [screen](https://www.gnu.org/software/screen/) session. Then I decided to write my own init-script. + +I have to admit, that I am no experienced sysadmin or something like that, but just a random guy with a strange love (or addiction) to computers. So this is my first time doing this. + +For managing the starting and stopping of the service I chose to use the start-stop-daemon shipped with the system on my server. Additionally I used the skeleton file for init-scripts, which you can find in `/etc/init.d/skeleton`. + +After consulting the manpage of start-stop-daemon I came up with the following command for starting the commenting service: + +```bash +start-stop-daemon --start -b -u nek0 --chuid nek0 --name yacs --exec ./yacs -d /home/nek0/www/yacs-run/ \ +-- config/settings.yml > /var/log/yacs.log + +``` + +What this actually means: The first option ist pretty self explanatory. `-b` starts the service in the background. `-u` and `--chuid` ensure, that the service runs as a user, not as root. I chose my own user here, but you can also use `nobody` if you like. The name of the service is specified by `--name`. `-d` specifies the working directory of the service you want to start and finally `--exec` is the path to the executable, in this case relative to the working directory. Everything after the final double-dashes are arguments passed to the executable itself. + +for stopping the whole thing I use the following command: + +```bash +start-stop-daemon --stop -u nek0 --name yacs +``` + +This is even simpler than the above and is really self explanatory after all the information you got above. + +the whole init-script looks like this: + +```bash +#! /bin/sh +### BEGIN INIT INFO +# Provides: yacs +# Required-Start: $nginx +# Required-Stop: +# Default-Start: 2 3 4 5 +# Default-Stop: +# Short-Description: Start YACS commenting service +# Description: start YACS commenting service +### END INIT INFO + +case "$1" in + start) + logger starting YACS + start-stop-daemon --start -b -u nek0 --chuid nek0 --name yacs --exec ./yacs -d /home/nek0/www/yacs-run/ \ + -- config/settings.yml > /var/log/yacs.log + ;; + stop) + logger stopping YACS + start-stop-daemon --stop -u nek0 --name yacs + ;; + restart) + logger restarting YACS + start-stop-daemon --stop -u nek0 --name yacs + start-stop-daemon --start -b -u nek0 --chuid nek0 --name yacs --exec ./yacs -d /home/nek0/www/yacs-run/ \ + -- conifg/settings.yml > /var/log/yacs.log + ;; + status) + # No-op + ;; + *) + echo "Usage: yacs {start|stop|restart}" >&2 + exit 3 + ;; +esac +``` +I hope this is helpful for others. If something is unclear, you can always leave a comment now ^^ + +[systemd]:https://nek0.eu/posts/2015-08-28-Damonize-a-Yesod-application-systemd-style.html diff --git a/posts/2014-10-25-Desktop-forwarding-via-X-using-Xephyr.md b/posts/2014-10-25-Desktop-forwarding-via-X-using-Xephyr.md new file mode 100644 index 0000000..b0a406a --- /dev/null +++ b/posts/2014-10-25-Desktop-forwarding-via-X-using-Xephyr.md @@ -0,0 +1,40 @@ +--- +title: Desktop forwarding via X using Xephyr +author: nek0 +tags: english, administration +description: This is a Tutorial hos to forward a whole Desktop system via X using Xephyr. +--- + +Hello again folks. Tonight I was in an adventurous mood and wanted to see, if I can forward a desktop session from my home computer to my laptop. I had distinct interest in OpenGL applications, since my laptop is only minimally capable of it. + +Before I dive into the more technical depths I would like to conclude my findings here: Generally it is possible to forward a desktop session including a window manager, but not GL applications (yet). In general this method is a possible replacement for classical [VNC](http://de.wikipedia.org/wiki/Virtual_Network_Computing) setups. + +Before you can start, there are some prerequisites that must be met: + +First you need the software [Xephyr](http://www.freedesktop.org/wiki/Software/Xephyr/) on your client system (which is the System, where you want to receive your session and work on it). To install it grab the package `xserver-xephyr` with the package manager of your choice. I am assuming a [Debian](https://www.debian.org/) system here, so it might be possible, that the configuration files are located elsewhere on other GNU/Linux flavours. + +Secondly there are some configurations to be made on the host system (the system you want to access remotely). You need to enable X forwarding in your SSH server in `/etc/ssh/sshd_config` by stating: + +```bash +X11Forwarding yes +``` + +After that you are ready to give it a first shot. Fire up a terminal of your choice on your client and start up Xephyr like this: + +```bash +Xephyr :1 -screen 800x600 -resizeable & +``` + +Mark the capital X at the beginning. This command means: start Xephyr as display `:1`, `-screen` sets the resolution and thus the size of the emerging window. Finally `-resizeable` makes the window resizeable in contrast to its normal behaviour. The last `&` puts the process in the background. + +After completing this you should see a new window, which is completely black. This means everything is, as it is meant to be. You have just created a new blank display within your existing X session. + +Now it's time to make the connection to your host system. This is done by: + +```bash +DISPLAY=:1 ssh -Y @ +``` + +Translation: set the display environment variable to `:1` and start a ssh connection with the host. The `-Y` opens a trusted X forwarding connection. Due to the setting of the display variable the X forwarding connects to your Xephyr session, which is what we want. + +Now you can start up any window manager in the ssh console, preferably something lighweight like [awesome](http://awesome.naquadah.org/). diff --git a/posts/2014-11-18-New-DIY-Watch-project.md b/posts/2014-11-18-New-DIY-Watch-project.md new file mode 100644 index 0000000..dc271d9 --- /dev/null +++ b/posts/2014-11-18-New-DIY-Watch-project.md @@ -0,0 +1,14 @@ +--- +title: New DIY Watch project +author: nek0 +tags: english, projects, hardware +description: Another crazy project by me +--- + +After long hours of browsing in the depths of the internet I stumbeled upon the ["Chronode VFD"](http://www.johngineer.com/blog/?p=1595) watch. + +The first time I saw it I was completely baffled. I immediately wanted one of my own, but with some alterations. Problem is: I have absolutely no experience in hardware hacking. Luckily as a frequent visitor of my local hackerspace I know some people who have experience. + +First I want to build a simplified version without that gorgeous vacuum fluorescence tube using LED-Modules as display and thus give it a longer battery life. + +For now I am creating a bill of materials and looking for parts. you can check the progress at the [github project](https://github.com/nek0/pentawatch) I created and occasionally I will post the progress here. diff --git a/posts/2014-12-19-Frohes-Fest.md b/posts/2014-12-19-Frohes-Fest.md new file mode 100644 index 0000000..595ccef --- /dev/null +++ b/posts/2014-12-19-Frohes-Fest.md @@ -0,0 +1,16 @@ +--- +title: Frohes Fest? +author: nek0 +tags: deutsch +description: +--- + +##oder: was im Moment ziemlich schief läuft. + +Zuallererst: Frohe Weihnachten. Es gibt ja Menschen die auf so etwas Wert legen. Ich komme um Weihnachten herum nie wirklich in Feierstimmung, aber das heißt nicht, dass ich die Laune jedem verderben möchte. + +Warum ich heute eigentlich schreibe ist, dass in den letzten Wochen eine nette Vereinigung brauner und bräunlich gesinnter Menschen in meiner Umgebung ihr Unwesen treibt. Die Rede ist konkret von der Vereinigung "PEGIDA", aufgeschlüsselt heißt das "Patriotische Europäer gegen die Islamisierung des Abendlandes", wobei ich stark bezweifle, dass die dort Teilnehmenden das Akronym überhaupt aufschlüsseln können. Das würde auch erklären, warum sich dort auch Menschen wiederfinden, die gegen die GEZ demonstrieren. Oder gegen die grenzenlose Bankenrettung. Da fragt min sich schon, ob diese Menschen wissen, wo sie sich gerade befinden. + +Das die Menschen unzufrieden sind, ist verständlich. Ich bin es auch. Aber die PEGIDA ist keine Plattform für den Normalbürger, um seine Wut über die Politik zum Ausdruck zu bringen. Das zum einen. Zum anderen braucht das Abendland gegen eine Islamisierung nicht verteidigt werden. und schon gar nicht in Sachsen, wo es eh nur 2% Ausländische Menschen gibt. + +Eigentlich wollte ich meinen Blog unpolitisch belassen, aber bei derartig grobem Unfug der da gerade passiert bin ich der Meinung, auch etwas sagen zu müssen. Am Ende würde ich aber durch mein Stillschweigen derartige Aktionen billigen. diff --git a/posts/2014-12-20-Eidolon.md b/posts/2014-12-20-Eidolon.md new file mode 100644 index 0000000..d63ce7e --- /dev/null +++ b/posts/2014-12-20-Eidolon.md @@ -0,0 +1,22 @@ +--- +title: Eidolon +author: nek0 +tags: english, projects, programming +description: introducing my very own gallery service +--- + +Those who follow my actions on [GitHub](https://github.com/nek0) may know it already, but for those who don't it's new, that I was working on a gallery system called [Eidolon](https://github.com/nek0/eidolon) for some time. It is a project which I started in the late phase of my commentary system [Yacs](https://github.com/nek0/yacs) due to my growing discomfort with [Mediagoblin](http://mediagoblin.org/), which is currently in use at our hackerspace. + +The name derives from the same greek word which means something like mirage or illusion. I can't really say, why I named it like that, but I'm quite happy with the name. + +The gallery system is almost complete and I will start stress testing it in the next year. The images in the gallery are organized in albums, which themselves belong to certain users. Additional features include at the moment: + +* Commenting pictures +* Tagging pictures +* sharing albums with other users +* Atom and RSS feeds of the whole gallery, users, albums and picture comments. +* HMAC-SHA user authentication + +The whole system is set up as a [Yesod](http://www.yesodweb.com/) webapp and is written mostly in Haskell. + +I have been working with Yesod for quite some time now, mostly for learning Haskell, but I found it also entertaining to make some web-development. I would really recommend using this framework. The static typing of Haskell might be a bit of a pain in the butt at first, but it also grants your applications level of security, which I haven't observed anywhere else. diff --git a/posts/2014-12-29-Pending-data-loss.md b/posts/2014-12-29-Pending-data-loss.md new file mode 100644 index 0000000..3d8ea7b --- /dev/null +++ b/posts/2014-12-29-Pending-data-loss.md @@ -0,0 +1,14 @@ +--- +title: Pending data loss +author: nek0 +tags: english, meta +description: Due to a software upgrade the commenting system will lose all comments +--- + +I have an unfortunate announcement to make. Due to a software upgrade the commenting system will lose all comments. This has to do something with the upgrade of the package dependency on `persistent` to a version greater than 2.0. + +I will wait until my issues with other dependencies are closed for pushing some dependency boundaries, so it will build on the server without dependency hell. + +***EDIT from 30.12.2014:*** + +After looking deeper into that matter, I have fund out, that I will be able to migrate the data. So no dataloss will happen. Sorry for the hassle. diff --git a/posts/2015-01-06-Gallery-is-now-online!.md b/posts/2015-01-06-Gallery-is-now-online!.md new file mode 100644 index 0000000..7e9e9fd --- /dev/null +++ b/posts/2015-01-06-Gallery-is-now-online!.md @@ -0,0 +1,12 @@ +--- +title: Gallery is now online! +author: nek0 +tags: english, projects, programming +description: Eidolon is now active +--- + +As I promised by the end of last year, I am happy tp announce, that the gallery system "Eidolon" is now up for testing. + +You can reach it over [eidolon.nek0.eu](http://eidolon.nek0.eu) or [nek0.zeigt.photos](http://nek0.zeigt.photos). Feel free to sign up and test it out. It may look a bit barren at first, but I haven't worked much on the appearance yet. + +Should you encounter any errors or miss some features, I would be glad receiving an issue at the [github project page](https://github.com/nek0/eidolon) diff --git a/posts/2015-01-07-Sicherheitsprobleme-in-Sachsen.md b/posts/2015-01-07-Sicherheitsprobleme-in-Sachsen.md new file mode 100644 index 0000000..e78be1d --- /dev/null +++ b/posts/2015-01-07-Sicherheitsprobleme-in-Sachsen.md @@ -0,0 +1,20 @@ +--- +title: Sicherheitsprobleme in Sachsen +author: nek0 +tags: deutsch, crypto, misc +description: +--- + +Ich betreibe ja schon seit einiger Zeit mit Freunden einen Server, auf welchem ich mich vornehmlich für die Email-Infrastruktur verantwortlich fühle. + +Neulich wurde ich auf ein Problem aufmerksam gemacht, dass der Emailverkehr mit den Hochschulen zum Erliegen gekommen ist. Zuerst vermutete ich einen Fehler in unserer Konfiguration, doch die Wahrheit war schlimmer. Die Hochschulen und Universitäten können kein TLS. + +Warum dieser Fehler erst jetzt aufgekommen ist, ist schnell erklärt. Aus Kompatibilitätsgründen hatten wir Unterstützung für SSLv3 aktiv gehabt. Kurz nach dem bekannt werden der [Poodle Attacke][Poodle], welche auch die letzten Stückchen Sicherheit im SSL-Protokol aushebelt, habe ich bei unserem Server die Unterstützung für das Protokoll abgeschaltet, in dem Vertrauen, dass andere Betreiber von Mailservern zeitgemäße Sicherheitsstandards bei sich durchsetzen. + +Leider werde ich im Moment von den Einrichtungen, welche eigentlich für Innovation und technologische Vorreiter stehen enttäuscht. Nicht nur dass diese immer noch das veraltete SSL-Protokoll unterstützen. Sie unterstützen gar kein TLS im Mailverkehr. Überhaupt nicht. Auch die hochgelobte Exzellenz-Universität in Dresden nicht. + +Es kann doch nicht sein, dass die Rechenzentren an Hochschulen keine zeitgemäße Sicherheit anbieten. Nicht nur das, sie arbeiten technisch wörtlich auf dem Stand des letzten Jahrtausends, denn immerhin stammt TLS aus dem Jahre 1999. Es ist also zwischendurch genug Zeit gewesen die Konfigurationen anzupassen. + +</rant> + +[Poodle]: http://de.wikipedia.org/wiki/Poodle diff --git a/posts/2015-03-05-Long-time-no-see.md b/posts/2015-03-05-Long-time-no-see.md new file mode 100644 index 0000000..acd83fe --- /dev/null +++ b/posts/2015-03-05-Long-time-no-see.md @@ -0,0 +1,18 @@ +--- +title: Long time no see +author: nek0 +tags: english, meta +description: It's been a while +--- + +Hi folks, it has been a while since my last entry here. For that I want to apologize. + +The last two months have been tough, but I was able to manage it. First of all I moved to a new flat and my job as student assistant demands more performance from me. I don't see that negatively since I have the feeling of being trusted by my boss and colleagues. + +Because of all the other action, my leisure time coding went down, but I still make progress. I have added the feature of pagination on the front page to my gallery system [Eidolon][Eidolon] and worked with the medium site so now all mozilla-based browsers now correctly switch the background image. This was up until now only possible with webkit browsers. + +Just recently while browsing through my older posts I realized that this blog exists now for far more than a year. I recall myself wondering at the beginning, whether I would be able to update this blog regularly and I'm glad I could. So thanks to you all out there bearing with me. + +(Well I at least hope, that there are some people out there reading this. I have no clue because I don't have any form of user tracking.) + +[Eidolon]: https://github.com/nek0/eidolon diff --git a/posts/2015-03-13-Bitcoin-stuff.md b/posts/2015-03-13-Bitcoin-stuff.md new file mode 100644 index 0000000..8b36845 --- /dev/null +++ b/posts/2015-03-13-Bitcoin-stuff.md @@ -0,0 +1,16 @@ +--- +title: Bitcoin stuff +author: nek0 +tags: bitcoin, meta +description: some thoughts about bitcoin. +--- + +After poking around in my files on my computer I found something interesting. Something I thought I had lost it. my trusty old [Bitcoin][wikibit] wallet. + +I am far from being an early adopter, but there was a time in 2012 where I was mining a little bit on my graphics card. It was not very effective, but it still has its worth (especially nowadays, where almost everybody is speculating with them). + +I personally dislike the idea of speculating mith my bitcoins like in a stock exchange. The case of Mt. Gox has shown how badly things can end. That's why I'm keeping my Bitcoins only on my own devices. + +With the reappearence of my wallet and my newly emerged interest in the Bitcoin matter I decided to implement an address for Bitcoin donations. I don't think it will come to great use, but feel free to surprise me. + +[wikibit]: http://en.wikipedia.org/wiki/Bitcoin diff --git a/posts/2015-03-31-DN42.md b/posts/2015-03-31-DN42.md new file mode 100644 index 0000000..d2e5b0c --- /dev/null +++ b/posts/2015-03-31-DN42.md @@ -0,0 +1,18 @@ +--- +title: DN42 +author: nek0 +tags: english, meta +description: Now serving my site in DN42 +--- + +Good news everyone! ^^ + +The server I maintain with a few friends is Member of the [DN42][DN42] network and we decided to make some of our services also available there. + +This means, when you come from within DN42 you can resolve the address [nek0.dn42][here] and will be led here to my blog. I also pushed my gallery into DN42, so it is now available on [eidolon.nek0.dn42][eidolon]. + +There is not much to say on other news. I'm still working, so my free time is a bit limited. + +[DN42]: https://dn42.net/Home +[here]: http://nek0.dn42 +[eidolon]: http://eidolon.nek0.dn42 diff --git a/posts/2015-05-11-Back-again.md b/posts/2015-05-11-Back-again.md new file mode 100644 index 0000000..4703e17 --- /dev/null +++ b/posts/2015-05-11-Back-again.md @@ -0,0 +1,12 @@ +--- +title: Back again +author: nek0 +tags: english, meta +description: Back online after some Domain related problems. +--- + +Hi folks. You might have wondered where my blog has gone in the past few days. + +The truth is: It hasn't gone anywhere. It was still there, but the domain name was no longer resolved due to the fact, that i forgot to renew it in time. I'll do my best not to let that happen again. + +On the personal side I haven't been at all well. I don't want to go into more detail, but mental illness is no fun at all. diff --git a/posts/2015-05-28-New-sticky-footer.md b/posts/2015-05-28-New-sticky-footer.md new file mode 100644 index 0000000..d07a641 --- /dev/null +++ b/posts/2015-05-28-New-sticky-footer.md @@ -0,0 +1,55 @@ +--- +title: New sticky footer +author: nek0 +tags: english, programming, meta +description: new method for sticky footer +--- + +Hello again. + +A friend of mine, who is active in web-development, pointed out, that my method for creating a sticky foooter is a bit obsolete and showed me the proper CSS3 way to do it, which I would like to share. + +First you need to prepare your site for the footer, which in the simplest terms may look like this: + +```html + + some info + +
+
Your header here
+
Content here
+
+
Your awesome sticky footer
+ + +``` + +You simply wrap your entire content apart from your footer inside a `div`. + +Next we're going to look on your css rules. + +The `site` class needs a little setup: + +```css +.site { + display: flex; + min-height: 100vh; + flex-direction: column; +} +``` + +This rules put your whole site in a so called flexbox, which in our case expands vertically by setting the `flex-direction`. By doing so, wee need to specify the height of the flexbox, in our case `100vh`, which is the complete height of the viewport. + +Next is the setup of the wrapper: + +```css +.wrapper { + flex: 1; +} +``` + +This is it! + +Now your wrapper should be docked always on the bottom of your page or at the bottom of your content, when your content gets longer than your viewport. + +The great advantage of this method over my old setup is, that you don't need to know the height of your footer, it will fit in automagically. diff --git a/posts/2015-05-31-Version-bump.md b/posts/2015-05-31-Version-bump.md new file mode 100644 index 0000000..3597f98 --- /dev/null +++ b/posts/2015-05-31-Version-bump.md @@ -0,0 +1,17 @@ +--- +title: Version bump +author: nek0 +tags: english, meta +description: Transition to new version of Hakyll and a resulting new feature. +--- + +After roaming around on the internet checking out some of my favourite software projects I realised, that my blog is running on an outdated version of Hakyll, so I bumped it to the newest available version. + +This upgrade made it possible to implement Hakyll's relatively new pagination feature into my blog. After tinkering around on it for about a day I finally succeeded. + +This means in conclusion, that you can skip from one blogpost to its two chronological neighbours with just one click. Pretty neat. + +The next thing I would like to do ist transitioning my markup language for authoring my posts from Markdown to [AsciiDoc][wiki1]. It has some interesting features, which I would like to use. Unfortunately the [Pandoc][wiki2] project does not support reading Asciidoc yet, so I will have to wait. + +[wiki1]: http://en.wikipedia.org/wiki/AsciiDoc +[wiki2]: http://en.wikipedia.org/wiki/Pandoc diff --git a/posts/2015-06-09-We-have-SSL-again.md b/posts/2015-06-09-We-have-SSL-again.md new file mode 100644 index 0000000..df8936a --- /dev/null +++ b/posts/2015-06-09-We-have-SSL-again.md @@ -0,0 +1,10 @@ +--- +title: We have SSL again +author: nek0 +tags: english, meta +description: Site now under SSL again +--- + +I bid you all a well-encrypted welcome. + +After a configuration marathon I managed to create a working configuration for my new web server. This means that all my websites are now served via SSL. Additionally the community I share the server with has an easy way to configure their certificates now, too. diff --git a/posts/2015-07-02-Über-das-Schreiben.md b/posts/2015-07-02-Über-das-Schreiben.md new file mode 100644 index 0000000..7f1ebf5 --- /dev/null +++ b/posts/2015-07-02-Über-das-Schreiben.md @@ -0,0 +1,24 @@ +--- +title: Über das Schreiben +author: nek0 +tags: deutsch, writing +description: +--- + +OK. Hier mal etwas anderes. Etwas, was es hier bisher noch nicht gab. + +Einige, die mich persönlich kennen, wissen, dass ich an einem Buch schreibe. Das mache ich schon seit etwa drei Jahren und bin immer noch nicht sehr weit. Jedenfalls, wenn man das fertige geschriebene betrachtet. Von der Entwicklung her mit Geschichte und Personen ist es fertig und dass das so ist hat bisher die meiste Zeit beansprucht. + +Ich werde in Zukunft ein wenig über den Fortschritt meines wohl größten und am längsten dauernden Projektes berichten und auch meine Erfahrungen die ich auf dem Weg sammle teilen. + +Was die Erfahrungen angeht, so kann ich natürlich nicht garantieren, dass sie für jeden genauso gut funktionieren, wie für mich. Jeder ist individuell anders und was dem Einen hilft behindert den anderen eher beim Schreiben. Dem geneigten Leser ist überlassen selber zu experimentieren. + +Eine sehr wichtige Lektion, die ich gleich zu Anfang meiner Bestrebungen lernte, ist, dass man nicht anfangen sollte zu schreiben, bevor man nicht genau weiß, wie und wohin sich die geschichte entwickeln wird. Zm anderen sollte man auch genau wissen, wie die Welt, in der man seine geschichte platziert, funktioniert. Beides habe ich zu Anfang nicht gewusst und habe mich sehr schnell in Widersprüche verstrickt. Ich hatte zwar eine Grobe Ahnung, aber das hat bei Weitem nicht ausgereicht. + +Damit begann meine lange Planungsphase, in der ich mir Gedanken um die Geschichte, die Welt und die Personen in der Geschichte lange und gründlich Gedanken gemacht habe. Man muss nicht alles Haarklein durchplanen, damit erschlägt man nur seine Phantasie, aber es sollte alles wichtige erkennbar sein. Den Rest kann man spontan beim Schreiben entscheiden, sollte das dann aber natürlich nachträglich in seiner Planungsübersicht notieren, damit man es nicht vergisst. + +Vergessen ist ein großes Problem beim Schreiben, weswegen man alles, was man sich an Gedanken gemacht hat in irgendeiner Form niederschreiben sollte. Nicht zwingend in Form von Fließtext. Ich bin beispielsweise ein großer Freund von [Mind Maps][wiki MM] für diesen Zweck. + +Ich meine, dass das fürs erste reicht. Speziellere Artikel werden folgen, wobei ich gerne Themenvorschläge aus den Kommentaren berücksichtigen werde. + +[wiki MM]: https://de.wikipedia.org/wiki/Mind-Map diff --git a/posts/2015-08-28-Daemonize-a-Yesod-application-systemd-style.md b/posts/2015-08-28-Daemonize-a-Yesod-application-systemd-style.md new file mode 100644 index 0000000..1c64912 --- /dev/null +++ b/posts/2015-08-28-Daemonize-a-Yesod-application-systemd-style.md @@ -0,0 +1,61 @@ +--- +title: Daemonize a Yesod application systemd style +author: nek0 +tags: english, meta, programming +description: How to daemonize a Yesod web application in systemd +--- + +Hello again. With exam season finally over I finally managed to upgrade my server system and thus ending up with systemd. + +I wasn't convinced initially, that it was for the better, but after handling the matter, I found the whole systemd ecosystem quite helpful. Creating your own service files is something really nice. + +Since I'm surely not the only one using systemd for running Yesod applications I want to reiterate my previous tutorial on daemonizing a Yesod application, but this time with systemd. + +So let's create the file `my-yesod-app.service` in the directory `/etc/systemd/service` + +The typical systemd unit or service file is divided into three sections called `[Unit]`, `[Install]` and `[Service]`. The first section contains basic information about the service for the system and the user, notably the description of the service and the conditions of startup. Basically this section could look like this: + +``` +[Unit] +Description=My Yesod webapp +After=nginx.service +``` + +In this example I am assuming, that you use nginx as reverse proxy to your webapp. +This would be also the place to define your dependency on a certain database service. + +The `[Install]` section contains information about the installation of the service. In our case it contains only one line, which defines, that our service will be a dependency of `multi-user.target`, which means that the service will be started when the server gets into the multi-user stage. + +``` +[Install] +WantedBy=multi-user.target +``` + +The last section contains information about the executable itself and the environment it shall run in. in our case we define the working directory and the user, which shall run the service and finally define the exact command for starting your webapp. + +``` +[Service] +WorkingDirectory=/absolute/path/to/directory +User=user +ExecStart=/absolute/path/to/executable config/settings.yml +``` + +Note that the paths **must** be absolute. + +After finishing the file, you need to reload the Systemd daemon with `systemctl daemon-reload`, enable the automatic startup of your webapp service with `systemctl enable my-yesod-app` and finally start it with `systemctl start my-yesod-app`. + +So much for the explanation. I hope this turns out to be helpful for others. At the end you will find the complete service file for delicious copypasta. + +``` +[Unit] +Description=My Yesod webapp +After=nginx.service + +[Install] +WantedBy=multi-user.target + +[Service] +WorkingDirectory=/absolute/path/to/directory +User=user +ExecStart=/absolute/path/to/executable config/settings.yml +``` diff --git a/posts/2015-09-05-Namensfindung.md b/posts/2015-09-05-Namensfindung.md new file mode 100644 index 0000000..60a3157 --- /dev/null +++ b/posts/2015-09-05-Namensfindung.md @@ -0,0 +1,24 @@ +--- +title: Namensfindung +author: nek0 +tags: deutsch, writing +description: Ein schwieriges Thema, wie ich finde. +--- + +Wie versprochen führe ich hier meine Posts pber das Schreiben weiter. Diesmal mit einem Schwierigerem Thema. + +Ich tue mich schwer mit der Namensfindung von Chrakteren in meinen Geschichten. Sehr lange überlege ich hin und her, wie er am besten zu klingen hätte und welche Bedeutung er tragen sollte. Außerdem sollte er individuell zum Charakter passen. Um alle diese Anforderungen erfüllen zu können bedarf es eines großen Repertoires an Namen. Wie ich meines fülle möchte ich einmal darlegen. + +Es gibt jede Menge Literatur über und für die Benennung von Menschen. Sie sind Betitelt mit "Die besten Babynamen" oder ähnlich. Mag kitschig klingen und auch seltsam wirken, wenn ich im Buchhandel in der tiefsten Frauenabteilung in derartiger Literatur blättere, aber beim Streifen durch diese Bücher kann einem, wenn auch selten, ein Kleinod an Namen auffallen. + +Eine andere, wenn auch makabre Namensquelle sind Sterbeanzeigen. Auch dort bin ich schon häufiger fündig geworden und benutze Vor- oder Nachnamen verstorbener Leute. Genauso wie Sterbeanzeigen ist auch ein aufmerksamer Gang über den Friedhof geradezu erhellend. Insbesondere die älteren Friedhöfe. Die Namen, welche aus der Mode gekommen sind oder einfach seit einem knappen Jahrhundert nicht mehr vorkommen haben es mir besonders angetan. + +Schließlich ist auch das Internet eine hervorragende Quelle für alle Aten von Namen. Es gibt ein reichhaltiges Bouquet an Ratgebern, wie man sein Kleinkind benennen sollte. Auch hier gilt: reinschauen schadet nicht, aber vertiefen sollte man sich darin nicht. Es gibt auch sehr schöne Seiten, die einem ohne viel Werbung die Wortherkunft und damit die Bedeutung der Namen verraten. Meine beliebteste Seite ist [behindthename.com][behindthename], welche auch gute Filterfunktionen hat und auch Namen zu verschiedenen Themengebieten anbietet. + +So viel zu den Namensquellen. Was einem niemand abnehmen kann ist die Entscheidung für einen Namen zu treffen. Da hat wahrscheinlich jeder seine eigene Methode. Ich versuche im Namen ein wichtiges Merkmal der Person, die ich benennen möchte, einzufangen. Mal ist es eine Äußerlichkeit, häufiger aber ein Charakterzug. Nur selten vergebe ich einen namen nur rein zufällig. + +Was meiner Meinung nach nicht geht, sind Namen, die entweder durch grobes draufschlagen auf die Tastatur entstanden sind oder indem man eine Meute Katzen über selbige gejagt hat. Das ist scheinbar insbesondere im Fantasy-Genre sehr beliebt und soll wohl den Anschein erwecken, dass da tatsächlich eine Sprache vom autor entwickelt wurde. Wenn diese allerdings sonst nirgendwo in größeren Mengen auftaucht, außer in Namen und ein paar Redewendungen, dann kann man es getrost sein lassen. Da rate ich eher dazu den Bereich der Namensherkunft exotisch zu wählen. Beispielsweise sind Namen für Zwerge "klassischerweise" aus dem Altnordischen entlehnt. Dadurch ist dann Namen dieser herkunft für Zwerge reserviert. + +Natürlich will ich niemanden davon abhalten, sein Buch zu schreiben wie er es möchte. Wie immer gebe ich nur meine Meinung kund und versuche Ratschläge zu geben. + +[behindthename]: http://www.behindthename.com/ diff --git a/posts/2015-09-24-Goodbye-mining-pool.md b/posts/2015-09-24-Goodbye-mining-pool.md new file mode 100644 index 0000000..c2239ff --- /dev/null +++ b/posts/2015-09-24-Goodbye-mining-pool.md @@ -0,0 +1,18 @@ +--- +title: Goodbye mining pool +author: nek0 +tags: english, bitcoin +description: I am leaving my bitcoin pool +--- + +This is it. After some years (most of them spent in inactivity) I decided to leave my Buitcoin pool at [mining.bitcoin.cz][pool]. + +The reasons for leaving are mostly because I don't see me mining profitably in the foreseeable future. I was mining once with my graphics card three years ago, but I never had the funds to get an FPGA miner or even an ASIC miner, so i stopped mining alltogether. + +I don't hold any grudges against this pool, moreover I would like to recommend it to anyone. They are very open ybout their share policy and have been always fair and secure from my point of view. They even kept an amount of rewarded bitcoins for three years for me, which I have just recently withdrawn. + +My future Bitcoin income will have to depend on Donations I receive through this blog, so please give and give generously. Every little amount will be highly appreciated. + +And as always I am very grateful for any advice or comments through my commenting service or via Email found in the [contact section](https://nek0.eu/contact.html). + +[pool]: https://mining.bitcoin.cz/home/ diff --git a/posts/2015-09-25-Timing-after-Cron.md b/posts/2015-09-25-Timing-after-Cron.md new file mode 100644 index 0000000..c0f8998 --- /dev/null +++ b/posts/2015-09-25-Timing-after-Cron.md @@ -0,0 +1,57 @@ +--- +title: Timing after Cron +author: nek0 +tags: english, administration +description: Cron replacement for avantgardists +--- + +Suddenly my Cron stopped working. It was simply gone. Without warning. + +With Cron simply disappearing my daily report about the visitors of my blog was gone. + +I had two options: + +* tedious debugging of Cron +* finding an alternative + +After trying the first with no success at all, I tried to find an alternative. A friend showed me that Systemd had timer capabilities, which i could use for my problem. After some experimentation I would like to make a tutorial for Systemd timers. + +Some explanation aforehand: Systemd timers are more complex than a cronjob but don't cover all functionalities, that Cron has. For Example: You have to write two files to create one Systemd timer opposed to a single line in the crontab. + +To create a Systemd timer, You need a serivce file and a timer file. I already covered how to write a service file in my [Yesod Systemd tutorial][tut], but I will cover it here again, since the service files needed for timers are simpler. + +Let's assume you want to create a timer for a job called … `job`. First you create as root the file `job.service` in `/etc/systemd/service` with the content: + +``` +[Unit] +Description=MyScript + +[Service] +Type=oneshot +ExecStart=/full/path/to/script +User=user + +[Install] +WantedBy=timers.target +``` + +The `[Unit]` section is pretty self-explanatory, so I will skip it. The `[Service]` section defines how to run our timed service. Don't be confused about the term "service". Systemd has a very broad definition of a "service". In this example we define, that your service will run just once and stop after running. in `ExecStart` is the absolute path to our executable script. `User` defines the user, whoch will run the script. This is optional, but if not given, the user will be root. The last section, the `[Install]` section just defines, that we want to start our service when all other timers get ready. + +After creating the service file, we create a timer file called `job.timer` in the same directory as the service file. But first, we need to determine, what kind of timer you need. There are two kinds. First, there is the "monotonic timer", which determines its time to execute from how long the system is running. Then there is the "realtime timer", which determines its time to run from the system clock. The sekond kind is the one more similar to the behaviour of Cron, so we will generate one. The content of the file is as follows: + +``` +[Unit] +Description=Runs script every hour + +[Timer] +OnCalendar=hourly +Persistent=true +``` + +I will skip again the `[Unit]` part. The `[Timer]` part is the most interesting one. in `OnCalendar` You define when to start your service. for example: a daily execution on 0:20 would be `*-*-* 00:20:00`. For more information on the time codes call `man systemd.time`. Finally the `Persistent` flag sets, what should happen, when the service *should have* run,but the system was offline. When true, the timer will run at the next possible occasion. + +To start the timer, you need to call `systemctl enable job.timer` and `systemctl start job.timer`. Do not forget the `.timer` suffix. + +This should be it. If I have forgotten something, please tell me in the comments. + +[tut]: https://nek0.eu/posts/2015-08-28-Daemonize-a-Yesod-application-systemd-style.html diff --git a/posts/2015-10-03-Goodbye-Truecrypt.md b/posts/2015-10-03-Goodbye-Truecrypt.md new file mode 100644 index 0000000..1866ed9 --- /dev/null +++ b/posts/2015-10-03-Goodbye-Truecrypt.md @@ -0,0 +1,17 @@ +--- +title: Goodbye Truecrypt +author: nek0 +tags: english, crypto +description: After long search I finally found an alternative +--- + +Maybe som of you will remember, that I once [mourned the parting of the truecrypt project][0]. It was the best tool at hand i had to generate encrypted file containers. + +I continued to use the software even after the death of its underlying project. Even the audit didn't reveal any critical vulnerabilities. But albeit the thorough search the auditors overlooked two major security bugs in the software, which became buplic just recently. + +This sparked another attempt to find an alternative for truecrypt, which I gladly found in [veracrypt][1]. Veracrypt is based on the original code of truecrypt, but under the apache license. They fixed the vulenrabilities pretty quickly after they became public. + +The whole user interface reminds me strongly of truecrypt, but they overhauled the encryption and hash functions and the container generations. This means, that veracrypt containers are not compatible with truecrypt, but truecrypt containers can still be mounted in veracrypt, because of a builtin "legacy mode". + +[0]: https://nek0.eu/posts/2014-06-13-Crypto-broken.html +[1]: https://veracrypt.codeplex.com/ diff --git a/posts/2016-01-04-Back-again.md b/posts/2016-01-04-Back-again.md new file mode 100644 index 0000000..9ee637c --- /dev/null +++ b/posts/2016-01-04-Back-again.md @@ -0,0 +1,20 @@ +--- +title: Back again +author: nek0 +tags: english, meta, administration +description: sorry for the recent outage +--- + +First of all I wish you all a pleasant new year 2016 or YOLD 3182. + +I'm terribly sorry for the long outage. There were some Problems with the server my services run on. The lesson learned: Reboot your servers regularly. At least after every new kernel upgrade. + +As the server was completely down and had to be reinstalled, I took the chance to make some changes to my configuration. From now on this site supports the HTTP/2.0 protocol. It is still a little shaky, but i think I will figure it out. + +Another change I made was the change of my certificate issuer. I switched to [letsencrypt][le], so you, the visitors, don't need to bother with certificate imports or exceptions. This was no easy decision to make, because I personally like [CACert][cc] more and I haven't heard too good things about the letsencrypt client. So I generated my certificates manually through [gethttpsforfree][get]. + +Unfortunately my image gallery eidolon could not be resurrected yet, because the database has not been resurrected yet. You have to hang in there a little longer. sorry. + +[le]: https://letsencrypt.org/ +[cc]: http://www.cacert.org/ +[get]: https://gethttpsforfree.com/ diff --git a/posts/2016-01-06-Gallery-back-online.md b/posts/2016-01-06-Gallery-back-online.md new file mode 100644 index 0000000..a8dda1b --- /dev/null +++ b/posts/2016-01-06-Gallery-back-online.md @@ -0,0 +1,8 @@ +--- +title: Gallery back online +author: nek0 +tags: english, meta +description: Gallery up and running again +--- + +Just a small heads-up. Your favourite repository of cat pictures, my gallery is online again. Come visit [eidolon.nek0.eu](https://eidolon.nek0.eu)! diff --git a/posts/2016-01-16-Bitcoin-crisis.md b/posts/2016-01-16-Bitcoin-crisis.md new file mode 100644 index 0000000..419c143 --- /dev/null +++ b/posts/2016-01-16-Bitcoin-crisis.md @@ -0,0 +1,19 @@ +--- +title: Bitcoin crisis +author: nek0 +tags: english, bitcoin +description: Loks like the Bitcoin network is about to break +--- + +It has been a while, since I posted something on the topic of Bitcoin, since I am only an uninvolved bystander in the whole matter. From what I could perceive, the Bitcoin network was groing and doing rather well. + +It naturally struck me with surprise, when I learned, that the Bitcoin network is in grave danger. I have read [this][bt] article by a former Bitcoin developer, which describes the current Situation rather clearly and with great detail. I will try to summarize it as good as I can, because the article is rather lengthy. + +The underlying technical problem the network currently has, is the blocksize limit enforced by the protocol. But it's not the limit itself causing the problems, but rather the setting of this limit in the implementation. When Bitcoin emerged for the first time, the block size limit was arbitrarily set to 1MB and has not been changed ever since. + +This does not mean, that there have not been attempts to increase this limit, most notably by the [Bitcoin XT][xt] client and the developers behind it. But the technical and philosophical divergence from the original bitcoin client was and still is not well accepted from certein influential members of the bitcoin community and a wide scale deployment of this client is now strongly discouraged because of the DDoS attacks on larger operators of this cleint in the past, which even led to the downbreak of a whole ISP network. + +I hope very much, that the community as well as the developers keep in mind, what the whole Bitcoin experiment is about: The creation of a currency, which can not be controlled by a small possibly malevolent but surely selfish minority. + +[bt]: https://medium.com/@octskyward/the-resolution-of-the-bitcoin-experiment-dabb30201f7 +[xt]: https://en.wikipedia.org/wiki/Bitcoin_XT diff --git a/posts/2016-01-31-The-decline-of-roleplay.md b/posts/2016-01-31-The-decline-of-roleplay.md new file mode 100644 index 0000000..bb25a3b --- /dev/null +++ b/posts/2016-01-31-The-decline-of-roleplay.md @@ -0,0 +1,60 @@ +--- +title: The decline of role play +author: nek0 +tags: english, misc +description: +--- + +In my life, I have spent ample amounts of time with role playing games. The first games I have +ever encountered in this genre was was Square Enix's, at that time called Squaresoft, +"Final Fantasy VIII". This game left a permanent impression and up to today I still find myself +seriously comparing other games with it even on technical aspects. + +This doesn't mean that I view this game as the pinnacle of role playing games, but it was the first +game, that "sucked me in". I got engaged in the story, identified myself with characters and sometimes +even started making up stories of my own in this setting. This were things I experienced only with books +up to this point. + +When I started studying I already had played some good role playing games, but I already missed more +intelligent interaction with other characters in the games and I missed the opportunity the express +myself and the character I was playing freely. Since I haven't had an internet connection for my free use +at home, so I have never played MMORPGs, apart from a few days when I visited my brother and was allowed +to play a little "World of Warcraft" on his account. + +At that time I got first involved with two concepts of role playing at the same time. Role play as +propagated by MMORPGs and role play as experienced with pen & paper RPGs. + +I started playing "Guild Wars 2" with some friends at the time and we tried to play "in character" as it +is called, but we gave up on it pretty quickly, because the surroundings did not support it. We couldn't +indulge in our role play without being distracted by other individuals conversing on broken 1337speak out +of the context or aggressively advertising shady markets to buy in-game currency. It was impossible to +maintain an atmosphere under these circumstances. We kept on playing, but I gradually lost interest. + +At the same time I got to know some people looking for a new member for their pen & paper role playing +group and they convinced me to give it a shot. All I had to lose would be some hours on an evening and I +was willing to take the risk. So we set out to play "Opus Anima", a german role play system with an +intriguing steampunk setting. What I encountered was something I already had wished for: I could freely +decide my characters reactions to certain events compliant to the world he or she lived in. I had not to +follow a predefined plot. And I could let my character express him- or herself I found fitting for the +character in that situation and was not limited to a small number of arbitrarily chosen reactions. +We were fortunate having an experienced game master who could easily adapt to our reactions and change +the plot on the fly. + +We kept playing for a longer period of time, eventually we changed the world to "Shadowrun", a cyberpunk +setting in the 2070s. Some people left the group and others joined, but in the second half of last year +our play came to a sudden halt as the group broke up with rather unpleasant circumstances. I have not +been able to join another group ever since, because I can't find any. + +Having enjoyed this kind of role play, I sought to pursue it further, without being limited to the people +in my geographical surrounding. With my abilities I naturally sought to find role play on the internet +outside of MMORPGs. Much to my surprise I found out, that role playing was relatively closely associated +to hacker culture. I learned of play-by-email RPGs in different settings and joined one, only to find out +that this particular game was quite dead, as well as other games played this way. I learned of MUDs, +MUCKS, MUSHes and their denizens and set to explore them, only to find out, that most of them adapted to +modern MMORPGs, with mostly hack and slay gameplay, and no role play even encouraged. + +So I come to the conclusion, that classical role playing, as it is played in pen & paper or those rather +ancient forms of multiplayer RPGs is on the decline. I find it saddening, that young people seemingly +throw their imagination out and accept what they are spoon-fed as role play. This could in the end lead +to an even greater decline of artistic expression in the future. Mainstream art today is rarely worth a +damn to me, but the prospect of it getting even worse is unbearable. diff --git a/posts/transition.lua b/posts/transition.lua new file mode 100755 index 0000000..647db6c --- /dev/null +++ b/posts/transition.lua @@ -0,0 +1,27 @@ +#!/usr/bin/env lua + +files = io.popen("ls *.md"):lines() + + +function main() + for file in files do + lines = io.lines(file) + header = {} + for i=1, 6 do + header[i]=lines() + end + newfile = file:gsub(".md", ".adoc") + file2 = io.open(newfile, "r") + content = file2:read("*a") + file2:close() + head = table.concat(header, "\n") + full = head .. "\n" .. content + file2 = io.open(newfile, "w") + file2:write(full) + file2:flush() + file2:close() + print(newfile, " done!") + end +end + +main() diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..e1ea59e --- /dev/null +++ b/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: /imprint.html diff --git a/src/Main.hs b/src/Main.hs new file mode 100644 index 0000000..d0733f9 --- /dev/null +++ b/src/Main.hs @@ -0,0 +1,181 @@ +-------------------------------------------------------------------------------- +{-# LANGUAGE OverloadedStrings #-} +import Data.Monoid (mappend) +import Hakyll +import Data.Monoid ((<>), mconcat) +import Data.List (sort, delete) +import System.Directory + +-------------------------------------------------------------------------------- +main :: IO () +main = do + + fs <- getDirectoryContents "./posts" + is <- return $ map (fromFilePath . ("posts/" ++)) $ sort $ delete "." $ delete ".." fs + + hakyllWith config $ do + + --copy fonts, images etc. + match ("font/*" .||. "images/*" .||. "humans.txt" .||. "D7665688.txt" .||. "robots.txt") $ do + route idRoute + compile copyFileCompiler + + match "css/*" $ do + route idRoute + compile compressCssCompiler + + -- Build tags + tags <- buildTags "posts/*.md" (fromCapture "tags/*.html") + + --build tagcloud + let baseCtx = tagCloudField "tagcloud" 80.0 200.0 tags <> + defaultContext + + match "about.md" $ do + route $ setExtension "html" + compile $ pandocCompiler + >>= loadAndApplyTemplate "templates/default.html" baseCtx + >>= relativizeUrls + + match "404.md" $ do + route $ setExtension "html" + compile $ pandocCompiler + >>= loadAndApplyTemplate "templates/default.html" baseCtx + + match "imprint.md" $ do + route $ setExtension "html" + compile $ pandocCompiler + >>= loadAndApplyTemplate "templates/default.html" baseCtx + >>= relativizeUrls + + match "contact.md" $ do + route $ setExtension "html" + compile $ pandocCompiler + >>= loadAndApplyTemplate "templates/default.html" baseCtx + >>= relativizeUrls + + pages <- buildPaginateWith + (return . map return . sort) + "posts/*.md" + (\n -> is !! (n - 1)) + + paginateRules pages $ \num _ -> do + route $ setExtension "html" + compile $ do + compiled <- getResourceBody >>= myPandoc + let pageCtx = paginateContext pages num + let ctx = (postCtx tags) <> pageCtx + full <- loadAndApplyTemplate "templates/post.html" ctx compiled + _ <- saveSnapshot "content" compiled + loadAndApplyTemplate "templates/default.html" baseCtx full + >>= relativizeUrls + + -- match "posts/*.md" $ do + -- route $ setExtension "html" + -- compile $ pandocCompiler $ do + -- saveSnapshot "content" + -- loadAndApplyTemplate "templates/post.html" (postCtx tags) + -- loadAndApplyTemplate "templates/default.html" baseCtx + -- relativizeUrls + + -- Post tags + tagsRules tags $ \tag pattern -> do + let title = "Posts tagged " ++ tag ++ ":" + + -- Copied from posts, need to refactor + route idRoute + compile $ do + posts <- recentFirst =<< loadAll pattern + let ctx = constField "title" title <> + listField "posts" (postCtx tags) (return posts) <> + baseCtx + makeItem "" + >>= loadAndApplyTemplate "templates/posts.html" ctx + >>= loadAndApplyTemplate "templates/default.html" ctx + >>= relativizeUrls + + create ["archive.html"] $ do + route idRoute + compile $ do + posts <- recentFirst =<< loadAll "posts/*" + let archiveCtx = listField "posts" (postCtx tags) (return posts) <> + constField "title" "Archives" <> + baseCtx + + makeItem "" + >>= loadAndApplyTemplate "templates/archive.html" archiveCtx + >>= loadAndApplyTemplate "templates/default.html" archiveCtx + >>= relativizeUrls + + + match "index.html" $ do + route idRoute + compile $ do + posts <- fmap (take 5) . recentFirst =<< loadAll "posts/*" + let indexCtx = listField "posts" (postCtx tags) (return posts) <> + constField "title" "Home" <> + field "tags" (\_ -> renderTagCloud 85.0 300.0 tags) <> + defaultContext + + getResourceBody + >>= applyAsTemplate indexCtx + >>= loadAndApplyTemplate "templates/default.html" baseCtx + >>= relativizeUrls + + match "templates/*" $ compile templateCompiler + + -- feeds + + create ["atom.xml"] $ do + route idRoute + compile $ do + loadAllSnapshots "posts/*" "content" + >>= fmap (take 10) . recentFirst + >>= renderAtom feedConf feedCtx + + create ["rss.xml"] $ do + route idRoute + compile $ do + loadAllSnapshots "posts/*" "content" + >>= fmap (take 10) . recentFirst + >>= renderRss feedConf feedCtx + +-------------------------------------------------------------------------------- +postCtx :: Tags -> Context String +postCtx tags = mconcat + [ modificationTimeField "mtime" "%U" + , dateField "date" "%B %e, %Y" + , tagsField "tags" tags + , defaultContext + ] + +-------------------------------------------------------------------------------- +feedCtx :: Context String +feedCtx = mconcat + [ bodyField "description" + , defaultContext + ] + +-------------------------------------------------------------------------------- + +feedConf :: FeedConfiguration +feedConf = FeedConfiguration + { feedTitle = "nek0's blog" + , feedDescription = "Random things" + , feedAuthorName = "nek0" + , feedAuthorEmail = "nek0@nek0.eu" + , feedRoot = "http://nek0.eu" + } + +-------------------------------------------------------------------------------- + +config :: Configuration +config = defaultConfiguration + { deployCommand = "rsync --del --checksum -ave 'ssh -p 5555' \\_site/* nek0@chelnok.de:/home/nek0/www/blog" + } + +-------------------------------------------------------------------------------- + +myPandoc :: Item String -> Compiler (Item String) +myPandoc item = do + renderPandocWith defaultHakyllReaderOptions defaultHakyllWriterOptions item diff --git a/stack.yaml b/stack.yaml new file mode 100644 index 0000000..b1f3b2c --- /dev/null +++ b/stack.yaml @@ -0,0 +1,35 @@ +# For more information, see: http://docs.haskellstack.org/en/stable/yaml_configuration.html + +# Specifies the GHC version and set of packages available (e.g., lts-3.5, nightly-2015-09-21, ghc-7.10.2) +resolver: lts-5.1 + +# Local packages, usually specified by relative directory name +packages: +- '.' + +# Packages to be pulled from upstream that are not in the resolver (e.g., acme-missiles-0.3) +extra-deps: [] + +# Override default flag values for local packages and extra-deps +flags: {} + +# Extra package databases containing global packages +extra-package-dbs: [] + +# Control whether we use the GHC we find on the path +# system-ghc: true + +# Require a specific version of stack, using version ranges +# require-stack-version: -any # Default +# require-stack-version: >= 1.0.0 + +# Override the architecture used by stack, especially useful on Windows +# arch: i386 +# arch: x86_64 + +# Extra directories used by stack for building +# extra-include-dirs: [/path/to/dir] +# extra-lib-dirs: [/path/to/dir] + +# Allow a newer minor version of GHC than the snapshot specifies +# compiler-check: newer-minor diff --git a/templates/archive.html b/templates/archive.html new file mode 100644 index 0000000..b43eeb2 --- /dev/null +++ b/templates/archive.html @@ -0,0 +1,2 @@ +Here you can find all my previous posts: +$partial("templates/post-list.html")$ diff --git a/templates/default.html b/templates/default.html new file mode 100644 index 0000000..95ae9aa --- /dev/null +++ b/templates/default.html @@ -0,0 +1,81 @@ + + + + + My Blog - $title$ + + + + + + + + + + + + + + + + + + + +
+
+ Nek0's Blog +
+
+ +
+

$title$

+ + $body$ +
+
+ + + diff --git a/templates/post-list.html b/templates/post-list.html new file mode 100644 index 0000000..71cf1b9 --- /dev/null +++ b/templates/post-list.html @@ -0,0 +1,7 @@ +
    + $for(posts)$ +
  • + $title$ - $date$ +
  • + $endfor$ +
diff --git a/templates/post.html b/templates/post.html new file mode 100644 index 0000000..eb888ca --- /dev/null +++ b/templates/post.html @@ -0,0 +1,45 @@ +
+ Posted on $date$ + $if(author)$ + by $author$ + $endif$ + $if(tags)$ + in $tags$ + $endif$ +
+ +$body$ + + + +

If you see this, something is wrong

+ + + diff --git a/templates/posts.html b/templates/posts.html new file mode 100644 index 0000000..3ca7f7a --- /dev/null +++ b/templates/posts.html @@ -0,0 +1,2 @@ + +$partial("templates/post-list.html")$