7 Commits

Author SHA1 Message Date
c407728f3b Start working on the draft post 2022-08-18 23:37:56 +03:00
29deb31729 Get rid of keybase 2022-08-18 11:33:07 +03:00
a1be811d95 Update my profile 2022-08-18 11:31:46 +03:00
bd41cf2f64 Update deps 2022-08-18 11:26:12 +03:00
e48ec6ce3d Simplify the build setup 2022-08-18 11:24:36 +03:00
b46cf0bf15 Less overlays 2022-08-18 10:57:08 +03:00
3bc2738ef6 Replace easy-hls with haskell-language-server 2022-08-18 10:37:28 +03:00
8 changed files with 61 additions and 183 deletions

1
cabal.project Normal file
View File

@ -0,0 +1 @@
packages: */*.cabal

33
flake.lock generated
View File

@ -1,32 +1,12 @@
{ {
"nodes": { "nodes": {
"easy-hls": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1637250802,
"narHash": "sha256-/crlHEVB148PGQLZCsHOR9L5qgvCAfRSocIoKgmMAhA=",
"owner": "jkachmar",
"repo": "easy-hls-nix",
"rev": "7c123399ef8a67dc0e505d9cf7f2c7f64f1cd847",
"type": "github"
},
"original": {
"owner": "jkachmar",
"repo": "easy-hls-nix",
"type": "github"
}
},
"flake-utils": { "flake-utils": {
"locked": { "locked": {
"lastModified": 1637014545, "lastModified": 1659877975,
"narHash": "sha256-26IZAc5yzlD9FlDT54io1oqG/bBoyka+FJk5guaX4x4=", "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
"owner": "numtide", "owner": "numtide",
"repo": "flake-utils", "repo": "flake-utils",
"rev": "bba5dcc8e0b20ab664967ad83d24d64cb64ec4f4", "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -37,11 +17,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1637841632, "lastModified": 1660646295,
"narHash": "sha256-QYqiKHdda0EOnLGQCHE+GluD/Lq2EJj4hVTooPM55Ic=", "narHash": "sha256-V4G+egGRc3elXPTr7QLJ7r7yrYed0areIKDiIAlMLC8=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "73369f8d0864854d1acfa7f1e6217f7d6b6e3fa1", "rev": "762b003329510ea855b4097a37511eb19c7077f0",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -53,7 +33,6 @@
}, },
"root": { "root": {
"inputs": { "inputs": {
"easy-hls": "easy-hls",
"flake-utils": "flake-utils", "flake-utils": "flake-utils",
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs"
} }

View File

@ -4,54 +4,24 @@
inputs = { inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils"; flake-utils.url = "github:numtide/flake-utils";
easy-hls = {
url = "github:jkachmar/easy-hls-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
}; };
outputs = { self, nixpkgs, flake-utils, easy-hls }: outputs = { self, nixpkgs, flake-utils }:
{ {
overlay = final: prev: {
deploy-rauhala-info = with final; runCommand "deploy-rauhala-info.sh" { inherit bash ipfs; }
''
mkdir -p $out/bin/
substituteAll ${./support/deploy-rauhala-info.sh} $out/bin/deploy-rauhala-info.sh
chmod u+x $out/bin/deploy-rauhala-info.sh
'';
build-rauhala-info = final.runCommand "site" { buildInputs = [final.makeWrapper]; }
''
mkdir -p $out/bin/
cp ${final.haskellPackages.build-rauhala-info}/bin/site $out/bin/
wrapProgram $out/bin/site --prefix PATH : ${ final.lib.makeBinPath [ final.ipfs ] }
'';
rauhala-info = final.callPackage ./rauhala.info { site = final.build-rauhala-info; };
haskellPackages = prev.haskellPackages.override ( old: {
overrides = final.lib.composeExtensions ( old.overrides or (_: _: {})) (f: p: {
build-rauhala-info = f.callPackage ./site {};
});
} );
};
} }
// //
flake-utils.lib.eachDefaultSystem (system: flake-utils.lib.eachDefaultSystem (system:
let let
pkgs = import nixpkgs { inherit system; overlays = [ self.overlay ]; }; pkgs = nixpkgs.legacyPackages.${system};
hp = pkgs.haskellPackages; hp = pkgs.haskellPackages.override ( old: {
hls = easy-hls.defaultPackage.${system}; overrides = pkgs.lib.composeExtensions ( old.overrides or (_: _: {})) (f: p: {
build-rauhala-info = f.callPackage ./site {};
});
} );
in in
rec { rec {
packages = { inherit (pkgs) build-rauhala-info rauhala-info deploy-rauhala-info; }; packages.rauhala-info = pkgs.callPackage ./rauhala.info { site = hp.build-rauhala-info; };
applications.build-rauhala-info = flake-utils.lib.mkApp {
drv = packages.build-rauhala-info;
exePath = "/bin/site";
};
applications.deploy-rauhala-info = flake-utils.lib.mkApp {
drv = packages.deploy-rauhala-info;
exePath = "/bin/deploy-rauhala-info.sh";
};
defaultPackage = packages.rauhala-info; defaultPackage = packages.rauhala-info;
defaultApp = applications.build-rauhala-info;
devShell = hp.shellFor { devShell = hp.shellFor {
packages = h: [h.build-rauhala-info]; packages = h: [h.build-rauhala-info];
buildInputs = with pkgs; [ buildInputs = with pkgs; [
@ -59,7 +29,7 @@
cabal-install cabal-install
stylish-haskell stylish-haskell
entr entr
hls haskell-language-server
ipfs ipfs
]; ];
}; };

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

View File

@ -5,18 +5,16 @@ title: Mats Rauhala
![](./images/profile.jpg) ![](./images/profile.jpg)
I'm a software developer from southern Finland. I'm currently working as a I'm a software developer from southern Finland. I'm currently working as a
Haskell developer at Relex Oy involved in an internal tool. I also have Haskell developer at Relex Oy. I also have experience with systems integrations
experience with systems integrations and backend web development. and backend web development.
I'm also an aviation enthusiast. I have a glider pilots license and a touring
motor glider pilots license (LAPL(S)+TMG).
My [GPG key](./resources/0x9DE6E04ED1918118.txt) My [GPG key](./resources/0x9DE6E04ED1918118.txt)
### Notable experience and interests ### Notable experience and interests
- **Relex Oy** - **Relex Oy**
- Working as a Senior Software Developer at Relex Oy - Working as a Lead Software Developer at Relex Oy
- Transitioned from day to day code to a role more close to an architect
- Three distinct products, all of which written in Haskell - Three distinct products, all of which written in Haskell
- Internal integration tool - Internal integration tool
- Relex Deploy 1, a tool for deploying the core product to hosts - Relex Deploy 1, a tool for deploying the core product to hosts

View File

@ -0,0 +1,41 @@
---
title: Design Documents
tags: design
---
We had a problem at work some time ago, with implementing features faster than
we could refine new items. The roadmap was a mile long, but the quality of our
work items left a lot to desire. The solution was to have more concerted effort
into the act of designing and refining. One part of this effort was the
introduction of design documents to our workflow.
[Design Documents at Google](https://www.industrialempathy.com/posts/design-docs-at-google/)
![](/images/sample-designdoc.png)
We have been experimenting on using design documents for a little over half a
year now and have been able to refine them to suit our processes quite nicely.
Feel free to read the article above, it's a concise explanation on how they're
using design documents, and what I'm going to write is going to focus on a
subset of the article, on the aspects that I have found to be important.
## What are design documents
![stakeholder-architect-design-loop](/images/stakeholder-architect-design.png)
When designing a new feature, the stakeholders have a set of requirements they
need fulfilled. The product owner collects the requirements and provides them
to the architect to be solved. It's this solution, that needs to be portrayed
by the design document. The design document should portrey the high-level view
of the design, without implementation details, in a way that the developers can
take the design and implement a concrete solution.
### What should the design document contain
> A feature to add items to a shopping cart. The items needs to be reserved in
the backend so that the reservation is synced across different users.
The design document should be written on a high level, it should explain the
problem and it should explain the solution for it, but it should not be the
implementation guide. The design document should not contain any code or
pseudocode in it.

View File

@ -1,111 +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
===================================================================
https://keybase.io/masser
--------------------------------------------------------------------
I hereby claim:
* I am an admin of https://rauhala.info
* 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": 1580591326,
"hash": "2b1b8c5e3de98e3e80ec4b4c28270066744d5d0982c23e4c13ec97d9311e32996b0cc39ab07f51a2418f833d3f03c0219c7ebd8cdc9c99ac09d3f88d0b6129d1",
"hash_meta": "0e85fd563e1159d6c5b32f5c424d4c97101c3a11346a0dad77bdbf043ca4f287",
"seqno": 14452336
},
"service": {
"entropy": "7UNm+4us1fZE3TRssgGatBC2",
"hostname": "rauhala.info",
"protocol": "https:"
},
"type": "web_service_binding",
"version": 2
},
"client": {
"name": "keybase.io go client",
"version": "4.3.1"
},
"ctime": 1580591336,
"expire_in": 504576000,
"prev": "ed5dd9b2571746743f37dd55f59235bd46d7f7de01a2bafba14b9c0929751aee",
"seqno": 35,
"tag": "signature"
}
which yields the signature:
hKRib2R5hqhkZXRhY2hlZMOpaGFzaF90eXBlCqNrZXnEIwEg+1hTInDCYaAK4J7z7kew3PdlkrSFFll3Mp4J7ExPyGkKp3BheWxvYWTESpcCI8Qg7V3ZslcXRnQ/N91V9ZI1vUbX994Borr7oUucCSl1Gu7EIJld9Pai+YxhSvZUIA+ZyzwEEbpy98uEqp975YKAEdz9AgHCo3NpZ8RAtksa9w0UQrwg8dPGEzahht+hY4QKQthbZ/yWuOSmfA3C5E1/KorbIEi+tcy5lkSJqNbZRSqBgpl9zerYw5bbAahzaWdfdHlwZSCkaGFzaIKkdHlwZQildmFsdWXEICy29OKKJc5LUELFLo8kW15N3zex43ussKLFeGLhTDapo3RhZ80CAqd2ZXJzaW9uAQ==
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
===================================================================================================================================