Compare commits
2 Commits
0ac70566cd
...
books
Author | SHA1 | Date | |
---|---|---|---|
2e9a9155f8 | |||
1ab9c3af46 |
2
attributions.md
Normal file
2
attributions.md
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
- Book by rivercon from the Noun Project
|
||||||
|
- [Git logo](https://git-scm.com/downloads/logos) by Jason Long
|
7
books.xml
Normal file
7
books.xml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<books>
|
||||||
|
<book>
|
||||||
|
<date>2019-05-28</date>
|
||||||
|
<title>Uppo-Nallen talviturkki</title>
|
||||||
|
<status>read</status>
|
||||||
|
</book>
|
||||||
|
</books>
|
5
books/2014-07-10-pandoras-star.md
Normal file
5
books/2014-07-10-pandoras-star.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
title: Uppo-Nalle ja Nukku-Ukko
|
||||||
|
status: reading
|
||||||
|
---
|
||||||
|
|
4
books/2016-11-04-the-fractal-prince.md
Normal file
4
books/2016-11-04-the-fractal-prince.md
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
title: The Fractal Prince
|
||||||
|
status: reading
|
||||||
|
---
|
4
books/2019-05-28-nukku-ukko.md
Normal file
4
books/2019-05-28-nukku-ukko.md
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
title: Uppo-Nalle ja Nukku-Ukko
|
||||||
|
status: reading
|
||||||
|
---
|
5
books/2019-05-28-upponallen-talviturkki.md
Normal file
5
books/2019-05-28-upponallen-talviturkki.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
title: Uppo-Nallen talviturkki
|
||||||
|
status: read
|
||||||
|
---
|
||||||
|
|
@ -8,4 +8,3 @@ I live in Espoo Finland. You can contact me on any of the following services.
|
|||||||
- **Slack**: masser@functionalprogramming.slack.com
|
- **Slack**: masser@functionalprogramming.slack.com
|
||||||
- **IRC**: MasseR@freenode
|
- **IRC**: MasseR@freenode
|
||||||
- **Mastodon**: MasseR@mastodon.social
|
- **Mastodon**: MasseR@mastodon.social
|
||||||
- **Keybase**: [https://keybase.io/MasseR](https://keybase.io/MasseR)
|
|
||||||
|
@ -51,6 +51,15 @@ article .header {
|
|||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
width: 2.4rem;
|
||||||
|
height: 2.4rem;
|
||||||
|
display: inline-flex;
|
||||||
|
align-self: center;
|
||||||
|
top: .40em;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
@media (max-width: 319px) {
|
@media (max-width: 319px) {
|
||||||
body {
|
body {
|
||||||
width: 90%;
|
width: 90%;
|
||||||
|
1
images/book_read.svg
Normal file
1
images/book_read.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg id="read" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" viewBox="0 0 56 70" style="enable-background:new 0 0 56 56;" xml:space="preserve"><path d="M48.2026367,4.003418c0-0.5522461-0.4477539-1-1-1H17.7766724C17.7706909,3.0032959,17.7657471,3,17.7597656,3 s-0.0109253,0.0032959-0.0169067,0.003418h-4.8380737c-2.8188477,0-5.1118164,2.4799805-5.1118164,5.5288086v38.4257812 c0,0.0093994,0.005127,0.0172119,0.0053711,0.0265503C7.8088379,50.3031616,10.303833,53,13.3701172,53h33.8369141 c0.3862305,0,0.737793-0.2226562,0.9033203-0.5712891c0.1655273-0.3491211,0.1152344-0.762207-0.1289062-1.0615234 c-2.0512695-2.5102539-2.0512695-6.296875,0-8.8071289c0.2003784-0.2456665,0.262085-0.5665894,0.1891479-0.8672485 c0.0089111-0.053772,0.0320435-0.102356,0.0320435-0.1586304V4.003418z M46.2026367,40.9272461H18.7597656V5.003418h27.4428711 V40.9272461z M12.9047852,5.003418h3.8549805v35.9238281h-3.3896484c-1.3610229,0-2.6083374,0.5328979-3.5771484,1.4140625 V8.5322266C9.7929688,6.5864258,11.1889648,5.003418,12.9047852,5.003418z M45.3833008,51H13.3701172 c-1.9702148,0-3.5727539-1.8105469-3.5727539-4.0361328s1.6025391-4.0366211,3.5727539-4.0366211h32.0131836 C44.1420898,45.4414062,44.1420898,48.4858398,45.3833008,51z"/></svg>
|
After Width: | Height: | Size: 1.3 KiB |
1
images/book_reading.svg
Normal file
1
images/book_reading.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 6.8 KiB |
Binary file not shown.
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 10 KiB |
@ -19,8 +19,8 @@ My [GPG key](./resources/2104943D6033C.txt)
|
|||||||
- Working on an internal Haskell based tool at Relex Oy
|
- Working on an internal Haskell based tool at Relex Oy
|
||||||
- Some contributions to [darcshub](https://hub.darcs.net/)
|
- Some contributions to [darcshub](https://hub.darcs.net/)
|
||||||
- Some contributions to [xmonad](https://github.com/xmonad)
|
- Some contributions to [xmonad](https://github.com/xmonad)
|
||||||
- Dozens of personal projects, most of which ended up being just tests for
|
- My [Github profile](https://github.com/MasseR)
|
||||||
different libraries, techniques or algorithms.
|
- My [Gitea profile](https://git.rauhala.info/MasseR)
|
||||||
- **Systems integrations**
|
- **Systems integrations**
|
||||||
- Working as a consultant from Avoltus Oy to different companies using
|
- Working as a consultant from Avoltus Oy to different companies using
|
||||||
[Mulesoft](https://developer.mulesoft.com/). Systems include webshops,
|
[Mulesoft](https://developer.mulesoft.com/). Systems include webshops,
|
||||||
|
@ -1,7 +0,0 @@
|
|||||||
{
|
|
||||||
"url": "https://github.com/NixOS/nixpkgs",
|
|
||||||
"rev": "7e1f60dfbba67b975d1a77d710a6f1437fd9709c",
|
|
||||||
"date": "2020-02-01T09:20:37-05:00",
|
|
||||||
"sha256": "0vk55459iljr5dzwnr5661l44b0wdc15952lk2rjcmxr1620yr5v",
|
|
||||||
"fetchSubmodules": false
|
|
||||||
}
|
|
38
release.nix
38
release.nix
@ -1,44 +1,22 @@
|
|||||||
let
|
{ pkgs ? import <nixpkgs> {} }:
|
||||||
pin = builtins.fromJSON (builtins.readFile ./nixpkgs.json);
|
|
||||||
pinnedPkgs = with pin; import (builtins.fetchTarball {
|
|
||||||
url = "https://github.com/NixOS/nixpkgs/archive/${rev}.tar.gz";
|
|
||||||
inherit sha256;
|
|
||||||
}) {};
|
|
||||||
|
|
||||||
in
|
|
||||||
|
|
||||||
{ pkgs ? pinnedPkgs }:
|
|
||||||
|
|
||||||
let
|
let
|
||||||
haskellPackages = pkgs.haskellPackages;
|
haskellPackages = pkgs.haskellPackages;
|
||||||
site = pkgs.callPackage ./default.nix {};
|
site = pkgs.callPackage ./default.nix {};
|
||||||
website = with pkgs; stdenv.mkDerivation {
|
|
||||||
pname = "rauhala.info";
|
|
||||||
version = "0.1.0";
|
|
||||||
src = lib.cleanSource ./.;
|
|
||||||
LANG = "en_US.UTF-8";
|
|
||||||
LOCALE_ARCHIVE = lib.optionalString stdenv.isLinux "${glibcLocales}/lib/locale/locale-archive";
|
|
||||||
buildPhase = ''
|
|
||||||
${site}/bin/site clean
|
|
||||||
${site}/bin/site build
|
|
||||||
'';
|
|
||||||
installPhase = ''
|
|
||||||
mkdir -p $out/share/
|
|
||||||
mv _site $out/share/html
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
shell = pkgs.buildEnv {
|
shell = pkgs.buildEnv {
|
||||||
name = "site-shell";
|
name = "site-shell";
|
||||||
paths = [];
|
paths = [];
|
||||||
buildInputs = [
|
buildInputs = with haskellPackages; [
|
||||||
haskellPackages.ghcid
|
ghcid
|
||||||
haskellPackages.hasktags
|
hasktags
|
||||||
(haskellPackages.ghcWithHoogle (h: site.buildInputs ++ site.propagatedBuildInputs))
|
cabal-install
|
||||||
|
(ghcWithHoogle (h: site.buildInputs ++ site.propagatedBuildInputs))
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
in
|
in
|
||||||
|
|
||||||
{
|
{
|
||||||
inherit site shell website;
|
site = site;
|
||||||
|
shell = shell;
|
||||||
}
|
}
|
||||||
|
@ -12,5 +12,8 @@ executable site
|
|||||||
build-depends: base == 4.*
|
build-depends: base == 4.*
|
||||||
, hakyll >= 4.10
|
, hakyll >= 4.10
|
||||||
, time
|
, time
|
||||||
|
, xml-conduit
|
||||||
|
, xml-lens
|
||||||
|
, lens
|
||||||
ghc-options: -threaded
|
ghc-options: -threaded
|
||||||
default-language: Haskell2010
|
default-language: Haskell2010
|
||||||
|
66
site.hs
66
site.hs
@ -5,14 +5,14 @@ import Hakyll
|
|||||||
import Data.List (sortBy, sortOn)
|
import Data.List (sortBy, sortOn)
|
||||||
import Data.Time (formatTime, defaultTimeLocale)
|
import Data.Time (formatTime, defaultTimeLocale)
|
||||||
|
|
||||||
|
data Book =
|
||||||
|
Book { title :: String
|
||||||
|
, date :: Day
|
||||||
|
, status :: String }
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
main = hakyllWith defaultConfiguration $ do
|
main = hakyllWith defaultConfiguration{ deployCommand = "ipfs add -Q -r _site" } $do
|
||||||
match "well-known/*" $ do
|
|
||||||
route (customRoute (prepend '.'. toFilePath))
|
|
||||||
compile copyFileCompiler
|
|
||||||
|
|
||||||
match "images/*" $ do
|
match "images/*" $ do
|
||||||
route idRoute
|
route idRoute
|
||||||
compile copyFileCompiler
|
compile copyFileCompiler
|
||||||
@ -35,6 +35,59 @@ main = hakyllWith defaultConfiguration $ do
|
|||||||
>>= loadAndApplyTemplate "templates/default.html" defaultContext
|
>>= loadAndApplyTemplate "templates/default.html" defaultContext
|
||||||
>>= relativizeUrls
|
>>= relativizeUrls
|
||||||
|
|
||||||
|
match "books/*" $ do
|
||||||
|
route $ setExtension "html"
|
||||||
|
compile $ pandocCompiler
|
||||||
|
>>= loadAndApplyTemplate "templates/post.html" postCtx
|
||||||
|
>>= loadAndApplyTemplate "templates/default.html" postCtx
|
||||||
|
>>= relativizeUrls
|
||||||
|
|
||||||
|
match "posts/incomplete/*" $ do
|
||||||
|
route $ setExtension "html"
|
||||||
|
compile $ pandocCompiler
|
||||||
|
>>= loadAndApplyTemplate "templates/post.html" postCtx
|
||||||
|
>>= loadAndApplyTemplate "templates/default.html" postCtx
|
||||||
|
>>= relativizeUrls
|
||||||
|
|
||||||
|
match "posts/guides/*" $ do
|
||||||
|
route $ setExtension "html"
|
||||||
|
compile $ pandocCompiler
|
||||||
|
>>= loadAndApplyTemplate "templates/post.html" postCtx
|
||||||
|
>>= loadAndApplyTemplate "templates/default.html" postCtx
|
||||||
|
>>= relativizeUrls
|
||||||
|
|
||||||
|
match "posts/brainstorming/*" $ do
|
||||||
|
route $ setExtension "html"
|
||||||
|
compile $ pandocCompiler
|
||||||
|
>>= loadAndApplyTemplate "templates/post.html" postCtx
|
||||||
|
>>= loadAndApplyTemplate "templates/default.html" postCtx
|
||||||
|
>>= relativizeUrls
|
||||||
|
|
||||||
|
create ["books.html"] $ do
|
||||||
|
route idRoute
|
||||||
|
compile $ do
|
||||||
|
books <- reverse <$> loadAll "books/*"
|
||||||
|
let ctx = listField "books" postCtx (pure books) <>
|
||||||
|
constField "title" "Books" <>
|
||||||
|
defaultContext
|
||||||
|
makeItem ""
|
||||||
|
>>= loadAndApplyTemplate "templates/books.html" ctx
|
||||||
|
>>= loadAndApplyTemplate "templates/default.html" ctx
|
||||||
|
>>= relativizeUrls
|
||||||
|
|
||||||
|
create ["guides.html"] $ do
|
||||||
|
route idRoute
|
||||||
|
compile $ do
|
||||||
|
posts <- modFirst =<< loadAll "posts/guides/*"
|
||||||
|
let archiveCtx =
|
||||||
|
listField "posts" postCtx (return posts) `mappend`
|
||||||
|
constField "title" "Guides" `mappend`
|
||||||
|
defaultContext
|
||||||
|
|
||||||
|
makeItem ""
|
||||||
|
>>= loadAndApplyTemplate "templates/guides.html" archiveCtx
|
||||||
|
>>= loadAndApplyTemplate "templates/default.html" archiveCtx
|
||||||
|
>>= relativizeUrls
|
||||||
|
|
||||||
|
|
||||||
match "templates/*" $ compile templateBodyCompiler
|
match "templates/*" $ compile templateBodyCompiler
|
||||||
@ -55,6 +108,3 @@ postCtx =
|
|||||||
modifiedField key format = field key $ \i -> do
|
modifiedField key format = field key $ \i -> do
|
||||||
time <- getItemModificationTime $ itemIdentifier i
|
time <- getItemModificationTime $ itemIdentifier i
|
||||||
return $ formatTime defaultTimeLocale format time
|
return $ formatTime defaultTimeLocale format time
|
||||||
|
|
||||||
prepend :: a -> [a] -> [a]
|
|
||||||
prepend = (:)
|
|
||||||
|
9
templates/books.html
Normal file
9
templates/books.html
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
A collection of books I have read lately.
|
||||||
|
|
||||||
|
<ul class="books">
|
||||||
|
$for(books)$
|
||||||
|
<li>
|
||||||
|
<img src="/images/book_$status$.svg" class="icon" /><a href="$url$">$title$</a> - $date$
|
||||||
|
</li>
|
||||||
|
$endfor$
|
||||||
|
</ul>
|
@ -10,9 +10,9 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<header>
|
<header>
|
||||||
<!-- <div class="logo"> -->
|
<div class="logo">
|
||||||
<!-- <a href="/">rauhala.info</a> -->
|
<a href="/">rauhala.info</a>
|
||||||
<!-- </div> -->
|
</div>
|
||||||
<nav>
|
<nav>
|
||||||
<!-- Git logo from https://git-scm.com/downloads/logos -->
|
<!-- Git logo from https://git-scm.com/downloads/logos -->
|
||||||
<!-- Logo by Jason Long -->
|
<!-- Logo by Jason Long -->
|
||||||
@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
Site proudly generated by
|
Site proudly generated by
|
||||||
<a href="http://jaspervdj.be/hakyll">Hakyll</a>
|
<a href="http://jaspervdj.be/hakyll">Hakyll</a><br />
|
||||||
</footer>
|
</footer>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -1,56 +0,0 @@
|
|||||||
==================================================================
|
|
||||||
https://keybase.io/masser
|
|
||||||
--------------------------------------------------------------------
|
|
||||||
|
|
||||||
I hereby claim:
|
|
||||||
|
|
||||||
* I am an admin of https://masser.keybase.pub
|
|
||||||
* I am masser (https://keybase.io/masser) on keybase.
|
|
||||||
* I have a public key ASD7WFMicMJhoArgnvPuR7Dc92WStIUWWXcyngnsTE_IaQo
|
|
||||||
|
|
||||||
To do so, I am signing this object:
|
|
||||||
|
|
||||||
{
|
|
||||||
"body": {
|
|
||||||
"key": {
|
|
||||||
"eldest_kid": "01202eb5d3b8d2fc63e4bc9c6edefb3a38f1043dfdc44a7268393951fe0ea5214cf00a",
|
|
||||||
"host": "keybase.io",
|
|
||||||
"kid": "0120fb58532270c261a00ae09ef3ee47b0dcf76592b485165977329e09ec4c4fc8690a",
|
|
||||||
"uid": "b01557931e13482e9e646593a64e9119",
|
|
||||||
"username": "masser"
|
|
||||||
},
|
|
||||||
"merkle_root": {
|
|
||||||
"ctime": 1580587604,
|
|
||||||
"hash": "890506579950548b2aa6fd0f35850b9fdb1d064786714f18515d0e3089cdc2458c5fe847d40ca71c2e021ca11677de055ac97804c53d1bef89432f88b57599d4",
|
|
||||||
"hash_meta": "104419595abc52918530f85495417faf35c7a5a608d6730bf53152dfa7288970",
|
|
||||||
"seqno": 14451686
|
|
||||||
},
|
|
||||||
"service": {
|
|
||||||
"entropy": "QIvRp0qNOIZFplyzXERiwp75",
|
|
||||||
"hostname": "masser.keybase.pub",
|
|
||||||
"protocol": "https:"
|
|
||||||
},
|
|
||||||
"type": "web_service_binding",
|
|
||||||
"version": 2
|
|
||||||
},
|
|
||||||
"client": {
|
|
||||||
"name": "keybase.io go client",
|
|
||||||
"version": "4.3.1"
|
|
||||||
},
|
|
||||||
"ctime": 1580587641,
|
|
||||||
"expire_in": 504576000,
|
|
||||||
"prev": "c99f66ba0bfa7ff6be736e24691c8007b0db41b6036b7f1e5f9335ab7f3550f4",
|
|
||||||
"seqno": 34,
|
|
||||||
"tag": "signature"
|
|
||||||
}
|
|
||||||
|
|
||||||
which yields the signature:
|
|
||||||
|
|
||||||
hKRib2R5hqhkZXRhY2hlZMOpaGFzaF90eXBlCqNrZXnEIwEg+1hTInDCYaAK4J7z7kew3PdlkrSFFll3Mp4J7ExPyGkKp3BheWxvYWTESpcCIsQgyZ9mugv6f/a+c24kaRyAB7DbQbYDa38eX5M1q381UPTEIH8FtgpzXt/JJxrhAYknW7xL4+K57JBJnbhFpXWAfEH5AgHCo3NpZ8RApEnmCcZApdOTf+XAHRbbgoysAZHfyTHamWC/BEHKuqEf/BlUFSxo6ASa/YC+Y2sMJfW2iRFlP2bs822TyJTBA6hzaWdfdHlwZSCkaGFzaIKkdHlwZQildmFsdWXEINm3yJdAbmbGJd03EnpuKVh2JzkI8WkngbWbAxbbR0MMo3RhZ80CAqd2ZXJzaW9uAQ==
|
|
||||||
|
|
||||||
And finally, I am proving ownership of this host by posting or
|
|
||||||
appending to this document.
|
|
||||||
|
|
||||||
View my publicly-auditable identity here: https://keybase.io/masser
|
|
||||||
|
|
||||||
==================================================================
|
|
Reference in New Issue
Block a user