mirror of
https://github.com/alanorth/cgspace-notes.git
synced 2024-11-22 06:35:03 +01:00
403 lines
20 KiB
HTML
403 lines
20 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en" >
|
|
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
|
|
|
|
<meta property="og:title" content="May, 2023" />
|
|
<meta property="og:description" content="2023-05-03
|
|
|
|
Alliance’s TIP team emailed me to ask about issues authenticating on CGSpace
|
|
|
|
It seems their password expired, which is annoying
|
|
|
|
|
|
I continued looking at the CGSpace subjects for the FAO / AGROVOC exercise that I started last week
|
|
|
|
There are many of our subjects that would match if they added a “-” like “high yielding varieties” or used singular…
|
|
Also I found at least two spelling mistakes, for example “decison support systems”, which would match if it was spelled correctly
|
|
|
|
|
|
Work on cleaning, proofing, and uploading twenty-seven records for IFPRI to CGSpace
|
|
" />
|
|
<meta property="og:type" content="article" />
|
|
<meta property="og:url" content="https://alanorth.github.io/cgspace-notes/2023-05/" />
|
|
<meta property="article:published_time" content="2023-05-03T08:53:36+03:00" />
|
|
<meta property="article:modified_time" content="2023-05-20T11:10:05+03:00" />
|
|
|
|
|
|
|
|
<meta name="twitter:card" content="summary"/>
|
|
<meta name="twitter:title" content="May, 2023"/>
|
|
<meta name="twitter:description" content="2023-05-03
|
|
|
|
Alliance’s TIP team emailed me to ask about issues authenticating on CGSpace
|
|
|
|
It seems their password expired, which is annoying
|
|
|
|
|
|
I continued looking at the CGSpace subjects for the FAO / AGROVOC exercise that I started last week
|
|
|
|
There are many of our subjects that would match if they added a “-” like “high yielding varieties” or used singular…
|
|
Also I found at least two spelling mistakes, for example “decison support systems”, which would match if it was spelled correctly
|
|
|
|
|
|
Work on cleaning, proofing, and uploading twenty-seven records for IFPRI to CGSpace
|
|
"/>
|
|
<meta name="generator" content="Hugo 0.111.3">
|
|
|
|
|
|
|
|
<script type="application/ld+json">
|
|
{
|
|
"@context": "http://schema.org",
|
|
"@type": "BlogPosting",
|
|
"headline": "May, 2023",
|
|
"url": "https://alanorth.github.io/cgspace-notes/2023-05/",
|
|
"wordCount": "1121",
|
|
"datePublished": "2023-05-03T08:53:36+03:00",
|
|
"dateModified": "2023-05-20T11:10:05+03:00",
|
|
"author": {
|
|
"@type": "Person",
|
|
"name": "Alan Orth"
|
|
},
|
|
"keywords": "Notes"
|
|
}
|
|
</script>
|
|
|
|
|
|
|
|
<link rel="canonical" href="https://alanorth.github.io/cgspace-notes/2023-05/">
|
|
|
|
<title>May, 2023 | CGSpace Notes</title>
|
|
|
|
|
|
<!-- combined, minified CSS -->
|
|
|
|
<link href="https://alanorth.github.io/cgspace-notes/css/style.c6ba80bc50669557645abe05f86b73cc5af84408ed20f1551a267bc19ece8228.css" rel="stylesheet" integrity="sha256-xrqAvFBmlVdkWr4F+GtzzFr4RAjtIPFVGiZ7wZ7Ogig=" crossorigin="anonymous">
|
|
|
|
|
|
<!-- minified Font Awesome for SVG icons -->
|
|
|
|
<script defer src="https://alanorth.github.io/cgspace-notes/js/fontawesome.min.f5072c55a0721857184db93a50561d7dc13975b4de2e19db7f81eb5f3fa57270.js" integrity="sha256-9QcsVaByGFcYTbk6UFYdfcE5dbTeLhnbf4HrXz+lcnA=" crossorigin="anonymous"></script>
|
|
|
|
<!-- RSS 2.0 feed -->
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
<body>
|
|
|
|
|
|
<div class="blog-masthead">
|
|
<div class="container">
|
|
<nav class="nav blog-nav">
|
|
<a class="nav-link " href="https://alanorth.github.io/cgspace-notes/">Home</a>
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<header class="blog-header">
|
|
<div class="container">
|
|
<h1 class="blog-title" dir="auto"><a href="https://alanorth.github.io/cgspace-notes/" rel="home">CGSpace Notes</a></h1>
|
|
<p class="lead blog-description" dir="auto">Documenting day-to-day work on the <a href="https://cgspace.cgiar.org">CGSpace</a> repository.</p>
|
|
</div>
|
|
</header>
|
|
|
|
|
|
|
|
|
|
<div class="container">
|
|
<div class="row">
|
|
<div class="col-sm-8 blog-main">
|
|
|
|
|
|
|
|
|
|
<article class="blog-post">
|
|
<header>
|
|
<h2 class="blog-post-title" dir="auto"><a href="https://alanorth.github.io/cgspace-notes/2023-05/">May, 2023</a></h2>
|
|
<p class="blog-post-meta">
|
|
<time datetime="2023-05-03T08:53:36+03:00">Wed May 03, 2023</time>
|
|
in
|
|
<span class="fas fa-folder" aria-hidden="true"></span> <a href="/categories/notes/" rel="category tag">Notes</a>
|
|
|
|
|
|
</p>
|
|
</header>
|
|
<h2 id="2023-05-03">2023-05-03</h2>
|
|
<ul>
|
|
<li>Alliance’s TIP team emailed me to ask about issues authenticating on CGSpace
|
|
<ul>
|
|
<li>It seems their password expired, which is annoying</li>
|
|
</ul>
|
|
</li>
|
|
<li>I continued looking at the CGSpace subjects for the FAO / AGROVOC exercise that I started last week
|
|
<ul>
|
|
<li>There are many of our subjects that would match if they added a “-” like “high yielding varieties” or used singular…</li>
|
|
<li>Also I found at least two spelling mistakes, for example “decison support systems”, which would match if it was spelled correctly</li>
|
|
</ul>
|
|
</li>
|
|
<li>Work on cleaning, proofing, and uploading twenty-seven records for IFPRI to CGSpace</li>
|
|
</ul>
|
|
<ul>
|
|
<li>I notice there are a few dozen locks from the <code>dspaceWeb</code> pool that are five days old on CGSpace so I killed them</li>
|
|
</ul>
|
|
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span>$ psql < locks-age.sql | grep <span style="color:#e6db74">" days "</span> | awk -F<span style="color:#e6db74">"|"</span> <span style="color:#e6db74">'{print $10}'</span> | sort -u | xargs kill
|
|
</span></span></code></pre></div><h2 id="2023-05-04">2023-05-04</h2>
|
|
<ul>
|
|
<li>Sync DSpace Test with CGSpace</li>
|
|
<li>I replaced one item’s thumbnail with a WebP version and XMLUI displays it fine</li>
|
|
<li>I spent some time checking the CMYK issue with Arch’s ImageMagick 7 and the Docker container and I think ImageMagick 7 just handles CMYK wrong…
|
|
<ul>
|
|
<li>libvips does it correctly automatically and looks closer to the PDF</li>
|
|
</ul>
|
|
</li>
|
|
<li>Meeting about CG Core types</li>
|
|
</ul>
|
|
<h2 id="2023-05-10">2023-05-10</h2>
|
|
<ul>
|
|
<li>Write a script to find the <code>metadata_field_id</code> values associated with the non-AGROVOC subjects I am working on for Sara
|
|
<ul>
|
|
<li>This is useful because we want to know who to contact for a definition</li>
|
|
<li>The script was:</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#66d9ef">while</span> read -r subject; <span style="color:#66d9ef">do</span>
|
|
</span></span><span style="display:flex;"><span> metadata_field_id<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>psql -h localhost -U postgres -d dspacetest -qtAX <span style="color:#e6db74"><<SQL
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74"> SELECT DISTINCT(metadata_field_id) FROM metadatavalue WHERE LOWER(text_value)='$subject'
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">SQL</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">)</span>
|
|
</span></span><span style="display:flex;"><span> metadata_field_id<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>echo $metadata_field_id | sed <span style="color:#e6db74">'s/[[:space:]]/||/g'</span><span style="color:#66d9ef">)</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> echo <span style="color:#e6db74">"</span>$subject<span style="color:#e6db74">,</span>$metadata_field_id<span style="color:#e6db74">"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">done</span> < <<span style="color:#f92672">(</span>csvcut -c <span style="color:#ae81ff">1</span> ~/Downloads/2023-04-26<span style="color:#ae81ff">\ </span>CGIAR<span style="color:#ae81ff">\ </span>non-AGROVOC<span style="color:#ae81ff">\ </span>subjects.csv | sed 1d<span style="color:#f92672">)</span>
|
|
</span></span></code></pre></div><ul>
|
|
<li>I also realized that Bernard Bett didn’t have any items on CGSpace tagged with his ORCID identifier, so I tagged 230!</li>
|
|
</ul>
|
|
<h2 id="2023-05-11">2023-05-11</h2>
|
|
<ul>
|
|
<li>CG Core meeting</li>
|
|
<li>Finalize looking at the CGSpace non-AGROVOC subjects for FAO</li>
|
|
</ul>
|
|
<h2 id="2023-05-12">2023-05-12</h2>
|
|
<ul>
|
|
<li>Export the Alliance community to do some country/region fixes
|
|
<ul>
|
|
<li>I also sent Maria and Francesca the export because they want to add more regions and subregions</li>
|
|
</ul>
|
|
</li>
|
|
<li>Export the entire CGSpace to check for missing Initiative collection mappings
|
|
<ul>
|
|
<li>I also adding missing regions</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<h2 id="2023-05-16">2023-05-16</h2>
|
|
<ul>
|
|
<li>I finally cleaned up and published my latest evaluation of <a href="https://alanorth.github.io/improved-dspace-thumbnails/evaluating-jpeg-webp-avif.html">JPEG, WebP, and AVIF</a>
|
|
<ul>
|
|
<li>I <a href="https://github.com/DSpace/DSpace/issues/8849">filed an issue on DSpace</a> to track this</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<h2 id="2023-05-17">2023-05-17</h2>
|
|
<ul>
|
|
<li>Re-sync CGSpace to DSpace 7 Test</li>
|
|
<li>I came up with a naive patch to use WebP instead of JPEG in the DSpace ImageMagick filter, and it works, but doesn’t replace existing JPEGs… hmmm
|
|
<ul>
|
|
<li>Also, it does PDF to WebP to WebP haha</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<h2 id="2023-05-18">2023-05-18</h2>
|
|
<ul>
|
|
<li>I created a <a href="https://github.com/DSpace/DSpace/pull/8850">pull request</a> to improve some minor documentation, typo, and logic issues in the DSpace ImageMagick thumbnail filters</li>
|
|
<li>I realized that there is a quick win to the generation loss issue with ImageMagickThumbnailFilter
|
|
<ul>
|
|
<li>We can use ImageMagick’s internal MIFF instead of JPEG when writing the intermediate image</li>
|
|
<li>According to the <a href="https://github.com/libvips/libvips/issues/571">libvips author PNG is very slow</a>!</li>
|
|
<li>I re-ran my <code>generation-loss.sh</code> script using MIFF and found that it had essentially the same results as PNG, which is about 1.1 points higher on the ssimulacra2 (v2.1) scoring scale</li>
|
|
<li>Also, according to my tests with the cosmo rusage.com utility, I see that MIFF is indeed much faster than PNG</li>
|
|
<li>I updated my pull request to add this quick win</li>
|
|
</ul>
|
|
</li>
|
|
<li>Weekly CG Core types meeting
|
|
<ul>
|
|
<li>Low attendance so I just kept working on the spreadsheet</li>
|
|
<li>We are at the stage of voting on definitions</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<h2 id="2023-05-19">2023-05-19</h2>
|
|
<ul>
|
|
<li>I ported a few of the minor ImageMagick Thumbnail Filter improvements to our <code>6_x-prod</code> branch</li>
|
|
</ul>
|
|
<h2 id="2023-05-20">2023-05-20</h2>
|
|
<ul>
|
|
<li>I deployed the latest thumbnail changes on CGSpace, ran all updates, and rebooted it</li>
|
|
<li>I exported CGSpace to check for missing Initiative mappings</li>
|
|
<li>Then I started a harvest on AReS</li>
|
|
</ul>
|
|
<h2 id="2023-05-23">2023-05-23</h2>
|
|
<ul>
|
|
<li>Help Francesca with an import of a journal article with a few hundred authors
|
|
<ul>
|
|
<li>I used the DSpace 7 live import from PubMed</li>
|
|
</ul>
|
|
</li>
|
|
<li>I also noticed a bug in the CrossRef live import if you change the DOI field, so I <a href="https://github.com/DSpace/DSpace/issues/8865">filed an issue</a></li>
|
|
</ul>
|
|
<h2 id="2023-05-25">2023-05-25</h2>
|
|
<ul>
|
|
<li>Meeting on output types</li>
|
|
<li>Make a <a href="https://github.com/DSpace/DSpace/pull/8866">pull request on DSpace to capture publisher during live import from Crossref</a></li>
|
|
</ul>
|
|
<h2 id="2023-05-26">2023-05-26</h2>
|
|
<ul>
|
|
<li>Make a <a href="https://github.com/DSpace/DSpace/pull/8868">pull request on DSpace to update checkstyle</a></li>
|
|
<li>Make a <a href="https://github.com/DSpace/dspace-angular/pull/2274">pull request on DSpace-angular to fix an incorrect i18n UI string</a></li>
|
|
<li>I’m experimenting with replacing old thumbnails
|
|
<ul>
|
|
<li>In the past we used to upload thumbnails for journal covers, but those were low quality and look horrible now</li>
|
|
<li>Using the provenance field I want to identify items with 1 bitstream of type gif or jpg, then extract the item IDs along with DOIs:</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sql" data-lang="sql"><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">\</span><span style="color:#66d9ef">COPY</span> (<span style="color:#66d9ef">SELECT</span>
|
|
</span></span><span style="display:flex;"><span> text_value,
|
|
</span></span><span style="display:flex;"><span> dspace_object_id
|
|
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">FROM</span>
|
|
</span></span><span style="display:flex;"><span> metadatavalue
|
|
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">WHERE</span>
|
|
</span></span><span style="display:flex;"><span> dspace_object_id <span style="color:#66d9ef">IN</span> (
|
|
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">SELECT</span>
|
|
</span></span><span style="display:flex;"><span> dspace_object_id
|
|
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">FROM</span>
|
|
</span></span><span style="display:flex;"><span> metadatavalue
|
|
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">WHERE</span>
|
|
</span></span><span style="display:flex;"><span> metadata_field_id <span style="color:#f92672">=</span> <span style="color:#ae81ff">28</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">AND</span> place <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">AND</span> (text_value <span style="color:#66d9ef">LIKE</span> <span style="color:#e6db74">'%No. of bitstreams: 1%'</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">AND</span> text_value <span style="color:#66d9ef">SIMILAR</span> <span style="color:#66d9ef">TO</span> <span style="color:#e6db74">'%.(gif|jpg|jpeg)%'</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">AND</span> metadata_field_id <span style="color:#f92672">=</span> <span style="color:#ae81ff">220</span>) <span style="color:#66d9ef">TO</span> <span style="color:#f92672">/</span>tmp<span style="color:#f92672">/</span>items<span style="color:#f92672">-</span><span style="color:#66d9ef">with</span><span style="color:#f92672">-</span><span style="color:#66d9ef">old</span><span style="color:#f92672">-</span>bitstreams.csv <span style="color:#66d9ef">WITH</span> CSV HEADER;
|
|
</span></span></code></pre></div><ul>
|
|
<li>I extract the DOIs and look them up on CrossRef to see which are CC-BY, then extract those:</li>
|
|
</ul>
|
|
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span>$ csvcut -c text_value /tmp/items-with-old-bitstreams.csv | sed 1d > /tmp/dois.txt
|
|
</span></span><span style="display:flex;"><span>$ ./ilri/crossref_doi_lookup.py -i /tmp/dois.txt -e fuuu@example.com -o /tmp/dois-resolved.csv
|
|
</span></span><span style="display:flex;"><span>$ csvgrep -c license -m <span style="color:#e6db74">'creativecommons'</span> /tmp/dois-resolved.csv <span style="color:#ae81ff">\
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span> | csvgrep -c license -m 'by-nc-nd' --invert-match \
|
|
</span></span><span style="display:flex;"><span> | csvcut -c doi \
|
|
</span></span><span style="display:flex;"><span> | sed '2,$s_^\(.*\)$_https://doi.org/\1_' \
|
|
</span></span><span style="display:flex;"><span> | sed 1d > /tmp/dois-for-cc-items-with-old-bitstreams.txt
|
|
</span></span></code></pre></div><ul>
|
|
<li>This results in 262 items that have DOIs that are CC-BY (but not ND)
|
|
<ul>
|
|
<li>This is a good starting point, but misses some that had low-quality thumbnails uploaded after they were added (ie, there’s no record of a bitstream in the provenance field)</li>
|
|
</ul>
|
|
</li>
|
|
<li>I ran the list through my Sci-Hub download script and filtered out a few that downloaded invalid PDFs (manually), then generated thumbnails for all of them:</li>
|
|
</ul>
|
|
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span>$ ~/src/git/DSpace/ilri/get_scihub_pdfs.py -i /tmp/dois-for-cc-items-with-old-bitstreams.txt -o bitstreams.csv
|
|
</span></span><span style="display:flex;"><span>$ chrt -b <span style="color:#ae81ff">0</span> vipsthumbnail *.pdf --export-profile srgb -s 600x600 -o <span style="color:#e6db74">'./%s.pdf.jpg[Q=02,optimize_coding,strip]'</span>
|
|
</span></span></code></pre></div><ul>
|
|
<li>Then I joined the CSVs on the DOI column, filtered out any that we didn’t find PDFs for, and formatted the resulting CSV with an id, filename, and bundle column:</li>
|
|
</ul>
|
|
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span>$ csvjoin -c doi bitstreams.csv /tmp/items-with-old-bitstreams.csv <span style="color:#ae81ff">\
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span> | csvgrep -c filename --invert-match -r '^$' \
|
|
</span></span><span style="display:flex;"><span> | sed '1s/dspace_object_id/id/' \
|
|
</span></span><span style="display:flex;"><span> | csvcut -c id,filename \
|
|
</span></span><span style="display:flex;"><span> | sed -e '1s/^\(.*\)$/\1,bundle/' -e '2,$s/^\(.*\)$/\1.jpg__description:libvips thumbnail,THUMBNAIL/' > new-thumbnails.csv
|
|
</span></span></code></pre></div><ul>
|
|
<li>I did a dry run with <code>ilri/post_bitstreams.py</code> and it seems that most (all?) already have thumbnails from the last time I did a massive Sci-Hub check
|
|
<ul>
|
|
<li>So relying on the provenance field is not very reliable it seems, and that was a waste of two hours…</li>
|
|
<li>I did discover, while originally posting WebP thumbnails, that the format doesn’t seem to be set correctly when uploading WebP via the REST API, but it does work when uploading via XMLUI—the format is set to Unknown</li>
|
|
<li>POSTing a JPG to the THUMBNAIL bundle sets the format to JPEG…</li>
|
|
<li>I am guessing that is a bug that I won’t bother troubleshooting since the DSpace 6.x REST API is deprecated</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<!-- raw HTML omitted -->
|
|
|
|
|
|
|
|
|
|
|
|
</article>
|
|
|
|
|
|
|
|
</div> <!-- /.blog-main -->
|
|
|
|
<aside class="col-sm-3 ml-auto blog-sidebar">
|
|
|
|
|
|
|
|
<section class="sidebar-module">
|
|
<h4>Recent Posts</h4>
|
|
<ol class="list-unstyled">
|
|
|
|
|
|
<li><a href="/cgspace-notes/2023-05/">May, 2023</a></li>
|
|
|
|
<li><a href="/cgspace-notes/2023-04/">April, 2023</a></li>
|
|
|
|
<li><a href="/cgspace-notes/2023-03/">March, 2023</a></li>
|
|
|
|
<li><a href="/cgspace-notes/2023-02/">February, 2023</a></li>
|
|
|
|
<li><a href="/cgspace-notes/2023-01/">January, 2023</a></li>
|
|
|
|
</ol>
|
|
</section>
|
|
|
|
|
|
|
|
|
|
<section class="sidebar-module">
|
|
<h4>Links</h4>
|
|
<ol class="list-unstyled">
|
|
|
|
<li><a href="https://cgspace.cgiar.org">CGSpace</a></li>
|
|
|
|
<li><a href="https://dspacetest.cgiar.org">DSpace Test</a></li>
|
|
|
|
<li><a href="https://github.com/ilri/DSpace">CGSpace @ GitHub</a></li>
|
|
|
|
</ol>
|
|
</section>
|
|
|
|
</aside>
|
|
|
|
|
|
</div> <!-- /.row -->
|
|
</div> <!-- /.container -->
|
|
|
|
|
|
|
|
<footer class="blog-footer">
|
|
<p dir="auto">
|
|
|
|
Blog template created by <a href="https://twitter.com/mdo">@mdo</a>, ported to Hugo by <a href='https://twitter.com/mralanorth'>@mralanorth</a>.
|
|
|
|
</p>
|
|
<p>
|
|
<a href="#">Back to top</a>
|
|
</p>
|
|
</footer>
|
|
|
|
|
|
</body>
|
|
|
|
</html>
|