chriswarbo-net: 9eb425d55cf496df1937d89cac1f76cf974ed683

     1: ---
     2: title: Git Repo Pages
     3: ---
     4: 
     5: I've revamped the way I'm generating and storing [Web pages](/projects/repos)
     6: relating to [my git repositories](/projects/repos).
     7: 
     8: Previously, these were in the `projects/repos` subdirectory of [this site](/),
     9: generated by [active code](/projects/activecode) during rendering. This had a
    10: few downsides:
    11: 
    12:  - The whole site needs to be regenerated whenever a repo gets pushed, since the
    13:    content is based on the repo's files (e.g. a `README`). The build system's
    14:    caching ensures that only the necessary pages would change, but it's still a
    15:    pain, e.g. if pushing to a repo while halfway through some refactor that
    16:    makes the site build fail.
    17:  - Mirroring [this site on IPFS](http://ipfs.io/ipns/chriswarbo.net) requires an
    18:    entirely new hash, and hence IPNS update, even for these small changes.
    19: 
    20: The solution is to split off each git repo to its own "site", which these old
    21: URLs now redirect to. Links to these separate sites can be found on [the repos
    22: page](/projects/repos), and they all live in
    23: [the /git directory](/git/chriswarbo-net) (those directories without `.git` at
    24: the end), which have previously been used for the auto-generated
    25: [`git2html`](/git/git2html) pages. Those `git2html` pages are still there, along
    26: with any issues tracked by `artemis` (rendered using `mhonarc`). It's all a bit
    27: bare-bones at the moment, but I plan to clean it up a little, and also include
    28: any `asv` benchmarks defined in the repo.
    29: 
    30: Each git repo site is also hosted on IPFS, with an IPNS name to track the latest
    31: version. IPNS still seems rather hacky (e.g. entries seem to expire after 1 day)
    32: but for the moment the repos are available at the following addresses:
    33: 
    34: ```{pipe="cat > keys"}
    35: QmP457RvBiHTq9TBWa817b7KPYTTEso82y1WySR9NeQSuJ annotatedb
    36: QmcjQ62nY6B4bV5rMpBK45HcU4i3Mtmfma8PbGLHC5gmEq ant-colony
    37: QmVhEKuMn2wyRQ81H6g3DAKXWz1yi3KSec8SagR8WDFCz2 apt-repo-tools
    38: QmUGC7srZZEc3L8nPcSgsLUkgTkw2VB4b5uzQ5NCgau2Nr arbitrary-haskell
    39: QmRymc8NwuGiNHPJhzHNdJFNYcjy7Kcuygbmhrvf64Hc8Q arduino-json-client
    40: Qma91V7cxCXu6Sk5jVAoVCCiZUytXdwtP7FirHKChyRU9E arrowlets-for-nodejs
    41: QmcfHJnKAirXaFhp8aMTkLEmJBqbvBbkKGmVE7zGEDx4EY ast-plugin
    42: QmNg5kznLkpzo5xu2FTnr4ujCbAqkJD4roui5kot6hX1K8 asv-nix
    43: QmXnGYKBEGEUrPLR2TQACe7PW2y9y6PHSytWcf6LavCr5S bitbitjump-maude
    44: QmUC2RN5DGwRmhkVP81oDq3JgwScaRuvBgQK9vBicZ4kMk bugseverywhere
    45: QmNgGmCzapHKZQmnfLZJKPTXRzVAjMRqgqNMHA1CkbfW2s cabal2db
    46: QmVYPCRGtF5AJSkg1hrcTujFTsBAXLbcobFJMTtbiZCCPQ chriswarbo-net
    47: Qma9uZKJETxd98QB6CMXg6L1HCv5pz46FbTdhi3hXXaT4M chrome-duplicate-tab-detector
    48: QmWA4jVoPwjWYdZQxqt1XEj1KpdhRFmcLQjZGBqgqmSd3R clutter-file-browser
    49: QmSTPvggjk7o4Vo3VMFfJxY65qwVf8sT1xJ2bL4HpFkczx dependent-types-talk
    50: QmSXTNvPdNw9fbnqewqQX5YU8Jx3q9mgz9vfAyDJpuKmZg explore-theories
    51: QmTbfXJtE7gcgehaJ9xHcAe4eHjs7FEDoqRYd3JuT6geR8 feed2maildir
    52: QmY6sidbzkGjngyxFXBkgQWaeQwS4QNWqciLG6ZRGU2VPg general-tests
    53: QmcE82MsPYKL27GRxXHZXSENov1xgsc6oc8F9nPdBcUKrS genetic-turing-machines
    54: QmNtf9V1MLALrQfPEQdCtSYrAp7nKXuc9N9cikVyvG8SEe genifunctors
    55: QmZDbMAaarYeWEe61EYRKPTGnLFRBm41792Ew7GwVYUbBY get-deps
    56: QmdFJgH4fnKzGfC6HCuPJ1h4QJzJ7RN4KxS38yGpNR5MJe ghc-dup
    57: Qme5gpqq4m6Se71i3yKLbf5vWbof9i4qVguTPcYnZZitp8 git2html
    58: QmVYxkZKRtLmqTtdmAiEPAovw6nJzFZBBtSKhPvVbAkqnc gnucleon
    59: QmUzN7kajUhkfamBKjtEt9nZ9ydd2cWv69YGfzV4NCQLN2 gnucleon-clutter
    60: Qmbg5PLQcD4nuLLkoRuJZh7hR9uVg2qcsYFr8nCGTqtixx gpu-simulations
    61: QmXdgABqxQmZFyQb29qcJ1af7VLosHDKTRruWV4v7mYXcf gravity-spiral
    62: QmWv958VzBJQchGjYKiSaxLC9ugrjvXkqMpVrmjp9AonXq haskell-te
    63: QmW74ox79okYt24GEct2yvroPWPnbLbrwXcaYoHZcPCHsP hipspec
    64: QmXQLfXsmXsGVPagfvojVXB51LP6ipeMQMnXAkXQxJw77y hs2ast
    65: QmRGQBVuf7C6WRgFRWBjNBWe7ebr8MyAkFQcLMmHw2H6yf hs2ast-tests
    66: Qmcia7HHUZt7xVLqdGsfdkQKuBnSfrnqm77C8SNaeMEvhw iddish
    67: QmVcADUGcpJLroJUTQr1XJvJDbhjkdm9fcxHbqynWWnBxa ifcxt
    68: QmNV2SX34kJ8uhZzTTPGhhbZBYjiePsrftLpwdLNYzWd6U iron
    69: QmZ2ox1kQt9kVs1kTZSjxurTZyvrHkEzR2ApVFHHx54D23 isahipster
    70: QmSds955qLwpfnc8yW9obwDN2gQWqv8gpqiMyc19YS5V2i isaplanner-tip
    71: QmRfUKRxgQTzYtD681uUwStJ9KTPduhHCaDabp9KRvEhbX java-gnucleon
    72: QmQcmrsLpDLymgv5KV5xpv8URD8tQDu3pSue7GAcWL7Nuk java-maxint
    73: QmNoh1MGo54WAfkf7ostsejEjr1ESQK1CrftNeYaZ3ibfM java-package-installer
    74: QmcvYQWUvr8i2ehej7BomYfJUBKyfUhVcSg7o5fHkCyPGd java-spider
    75: Qmc3aQTDcCaWNMHjjopwnfnjN1w6R3wVYdGUBXan9U8Cxr javascript-base64
    76: QmPGVbrRZRVWAjysW9w8JUsyAY9nnB7EvA9fV7KG3VTJ8A js-plumb
    77: QmTmYB2pij68531QxwTc5Ez9NCQFhZABafFHNx6oaQQTKz k-means
    78: QmRVrPdBJjG53DMZZZX7xwKouneEfTC8bFpFy6NfzMu2ev lazy-lambda-calculus
    79: QmP114ziNJjrTWBVTwUzvZ9s5VL7W5Fz4MMciS7miZP9jH lazy-smallcheck-2012
    80: QmdMR4YvwVFGwSwZRZ8FYbWDr89CJnoAB65xZi552zzi23 mc-aixi-ctw
    81: QmduVnJtqLubZXvEsMpazz7sN9vg6T2R4LJftG5kh7xhMx md2pdf
    82: QmezKEcCgVbKPr8xRSBtTiJzo1BeYuoGRPPDrbdtexukHZ ml4hs
    83: QmdTML9eoHFxzrWJyCR8W7ao9uH4wkcyzM5UmTf5pfX5dv ml4hs-helper
    84: QmTCpScDd8etRDB8i2RbmkDbinE5tayNFdz3sN1SL6M5fa ml4hsfe
    85: QmbfxT2rA8HZapDg7nQF3x7iWtmpMsuKcbVt5HLY9F6bvy ml4pg
    86: QmUjBpovgUc6uQVfGmg3S2nJsLGe6ieg8VDd7MzCkR44VU mlspec
    87: QmbbdkGTuHcaNQ7Azhsk3K6zEJCt6ZGVY1KkF2ygFh8zYu mlspec-bench
    88: QmeAiHeArhxZBouSPgi8ZbzbYgXeoCARvNvgLPPLoTWAPJ mlspec-helper
    89: QmRD1idh3NzZ6ibd2wgdg5dt2anKTYq3zNiCT2j7jQdX3H nix-config
    90: QmWwsCYvphXnA8eCqeSPgpWsBqMTiFQz2ho8YbFx1y2S5a nix-eval
    91: QmZ9i76XFSoWzy6ari9ny8mBCN7cepNCxoT7CTu4rFXjvY ocportal-salmon
    92: QmNPBJULUDbQfwHxZhoN8A5Mxhsv2zQmMZBJE4AD2P9GSG order-deps
    93: Qme31Nkufz2LdGwVvHg2HsN7VcfF6C9nzrsaWTTxptUK4a panhandle
    94: QmVRbryXSDKZDRAodEGoczcLyMoWWPJY4TmAxar6kgSAYp panpipe
    95: QmVFBWUkrroj1JeCYkHTUVNryJrRYvAqFs6bhx4YCzs2nF particle-storage-ring-simulation
    96: QmQZhq79gXN192td7tTpAKwy2gNoVfZGg54e4a177D9HiN php-core
    97: QmQBRb6Q3nx2MxUSdAEg2ZZ83xxywYoFP6ttebpUdiB3Gc php-easycheck
    98: QmXfnhNow7J4GLvPh9paLZiQT9fdErxyesGqoL7XQSscF5 php-plumb
    99: QmXAJsc3e58iTGRoodaceKfu7bxFZSTC47Bn9c7887kTzQ php-prelude
   100: QmV5MbzWZQHjRjHsQ9XDTYP8M6VYcgDtYoewfCkJR9ndQP powerplay
   101: QmRdc5CGgaVpjy5NYVANS6BDVrzCCgj2YfGrRfudp6sZrY pubsubclient
   102: Qmb681ot89DnJ62H7RWWT3K1dfCPxk7km2ACBezsSU3VBz purely-functional-self-modifying-code
   103: QmX4zoJS1qiM2tPXbihUaMRjXX1y4SaW7Y7b7kMf9qnz18 python-app-prefs
   104: QmP3dSXgWjpPG8oQUDzGHpZij54o8U3uFhxbgY54qVxHWg python-clutter-experiments
   105: QmP9cftyPNDt7CUfCornxjhjRco3XLEcXFckCMA9GwPTRg python-decompiler
   106: QmR64iFzkfaL8njQ5xrXVWVe123YgZ8JYUajxkvvUySaeb python-examples
   107: QmeeejPEe15x6ZC3H5EgHsnoyqi7imdWYDvdgDtpyM1Ekc python-graphics-tests
   108: QmWtMVRp36ro3sCqvdo28y7N77y7VM69N5fnytMNYkaFBZ python-pipes-simulation
   109: QmeCt1v2gCX1BpL6XC5Ba6xSSUwaVh3W9BuM6QoY3t34fi python-plumb
   110: QmSrQcg22TQEtbzhrLBD68XqXT4g7gK92CUijduV3AfiHz python-random-walks
   111: QmaHxE731gq6FBRSaS8G4EBykyHttuQvZ2S7JtmE6Zfnot python-visualiser
   112: QmVFUN7iymmYwyXniGtbAjfvKL899e2itvE4uzfnLeNgGC quickspec
   113: QmRLeYAas1MyZo7ZekkSsmvgYMKuTWizdP4a83LoJV15dw quickspec-measure
   114: QmWEAhKpfRcUvp5attkuL9rNkWLR34vPAsMwuNqtWNURTY recurrent-clustering
   115: QmR2n3hboVPc9xyXwuyYdQ56DMj6nYgUJ3n5TWJoeEpkRT reduce-equations
   116: QmfHmpZMSNDjMR3mNDdVrS2JMYLxvkPod6PNc6xQKXiT47 run-weka
   117: QmZ8Z2Zz53obTJhmN3vuE9itKC68JcZWPhm1jLnDK3m3tZ runtime-arbitrary
   118: Qmevuvcx5WTLHXcLsHCPyQBJU5WbnNnUhQiLhbT4jUKaTm runtime-arbitrary-tests
   119: QmUCPXLTvkMxyfBCLLLUutaF9YSwVjhSNm8Stp9ZRg1oiL sample-bench
   120: QmfD84i6RhwFBRo1iaTs57F283YpmNyGjVkbwGR7vnNFpZ search-optimisation-streams
   121: QmaKX5rSANxPMrcjWzYyunRVBJ27ZSRLYUhCjDggc1zTP6 service-packs
   122: Qmea8j3P1pNaDy73KtAinCbcX5jmK4FKNRvHLkM8Sb2eTM spoon
   123: QmaBjPeZ1Sytq9VMGwQdLF5W82ShWWZ7jcjfWCMj2b9v14 stp-sites
   124: QmUWfrFrZCTKPU5ErHQi7MJorPRz494TPcYzJPSaR3QEwD theory-exploration-benchmarks
   125: QmSCbE5HJaxWCAD6FoMSqi8rpti4nL4Y6ARd547LqBWm1J tinc
   126: QmNXBN6a36qtxRjRT7qNgMEfXoCbGyQNG2MUX6T561YiCx tip-benchmarks
   127: QmXFuyhxQDe9zB4sULZvmvejHnCwHcKanQYp4VdtyW3Fpw tree-features
   128: QmR36tKJDS6avjozwBALirWf7GwvdQN8bP7ER3iee7aGhR turtleviewer
   129: QmcgyG3kMcbq6YsynZuLLVY9s3ZTzZujSt8tNn9eUHHv83 type-parser
   130: QmU663KSfLzHMpSC4CkyWXfbcLwAzsDTswPHZP9s4W9cTR warbo-dotfiles
   131: QmRRXFBRaPdBSp1ahKKAgSSzBqjN9e9TKpZHqTBx1xKmvB warbo-emacs-d
   132: Qme6nrk3sMbfia1dwnqDBZ1aDtjohYxUSXfdDoj3Svh4VX warbo-utilities
   133: QmZZumTbK5AXRzi564KfD3axMnrrVbJ4rzEeewnHYyMghC writing
   134: QmS8fH5Wm8vdPTriAEVtdRKpsawjcTo94wZjSst2HRWqS6 wtk
   135: ```
   136: 
   137: ```{.unwrap pipe="sh | pandoc -f markdown -t json"}
   138: while read -r LINE
   139: do
   140:    KEY=$(echo "$LINE" | cut -d' ' -f1)
   141:   NAME=$(echo "$LINE" | cut -d' ' -f2)
   142:   echo " - [$NAME](/git/$NAME) is available at [$KEY](http://ipfs.io/ipns/$KEY)"
   143: done < keys
   144: ```

Generated by git2html.