
<rss version="2.0"
    xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Aaron&#39;s Website on azureorange.xyz</title>
        <link>https://azureorange.xyz/</link>
        <description>Recent content in Aaron&#39;s Website on azureorange.xyz</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en-US</language>
        <copyright>This page and all of its contents are – unless marked differently – licensed under CC-BY-SA 4.0</copyright>
        <lastBuildDate>Fri, 12 Aug 2022 22:28:06 +0200</lastBuildDate>
    
        <atom:link href="https://azureorange.xyz/index.xml" rel="self" type="application/rss+xml" />
    
        
    <item>
<title>Sherlock Holmes</title>
<link>https://azureorange.xyz/blog/tidytuesday/2025-11-18/</link>
<pubDate>Tue, 18 Nov 2025 13:09:56 +0100</pubDate>
      
      <guid>https://azureorange.xyz/blog/tidytuesday/2025-11-18/</guid>
<description>&lt;p&gt;This weeks TidyTuesday data explored the complete line-by-line texts of the Sherlock Holmes stories and novels.
The dataset includes the full version of texts, organized by book and line number.&lt;/p&gt;
&lt;p&gt;As this is my first TidyTuesday, I wanted to try something simple. Therefore I evaluated the most common words across all texts and plotted them in a word cloud.&lt;/p&gt;
&lt;p&gt;To make things a little more interesting, I shaped the word cloud in the form of Sherlock&amp;rsquo;s head, which I took from a book cover of &lt;code&gt;The hound of Baskerville&lt;/code&gt;.&lt;/p&gt;


  

  

  



&lt;table  class=&#34;bordered&#34; data-sample=&#34;10&#34; id=&#34;sample&#34;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Word&lt;/th&gt;
&lt;th&gt;n&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;holmes&lt;/td&gt;
&lt;td&gt;2403&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;time&lt;/td&gt;
&lt;td&gt;879&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sir&lt;/td&gt;
&lt;td&gt;846&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;watson&lt;/td&gt;
&lt;td&gt;809&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;house&lt;/td&gt;
&lt;td&gt;773&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;night&lt;/td&gt;
&lt;td&gt;718&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;door&lt;/td&gt;
&lt;td&gt;687&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;hand&lt;/td&gt;
&lt;td&gt;649&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;found&lt;/td&gt;
&lt;td&gt;570&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;eyes&lt;/td&gt;
&lt;td&gt;553&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;


&lt;p&gt;&lt;img alt=&#34;Sherlock Holmes shaped Word Cloud representing the most common words across all stories&#34; src=&#34;https://azureorange.xyz/blog/tidytuesday/2025-11-18/sherlock.png&#34;&gt;&lt;/p&gt;

&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-Rscript&#34; data-lang=&#34;Rscript&#34;&gt;#!/bin/Rscript

#######################
##     LIBRARIES     ##
#######################

# data processing
library(tidyverse)
library(tidytext)

# word cloud
library(ggwordcloud)
library(ggtext)
library(svgtools)

# output
library(patchwork)

##################
##     DATA     ##
##################

holmes &amp;lt;- readr::read_csv(&amp;#39;https://raw.githubusercontent.com/rfordatascience/tidytuesday/main/data/2025/2025-11-18/holmes.csv&amp;#39;)

tokens &amp;lt;- holmes %&amp;gt;%
    unnest_tokens(word, text) %&amp;gt;%
    filter(!is.na(word))

tokens_clean &amp;lt;- tokens %&amp;gt;%
    anti_join(stop_words, by=&amp;#34;word&amp;#34;)

word_count &amp;lt;- tokens_clean %&amp;gt;%
    count(word, sort=TRUE) %&amp;gt;%
    slice(1:150) %&amp;gt;%
    mutate(angle = 90 * sample(c(0, 1), n(), replace = TRUE, prob = c(60, 40)))

####################
##     COLORS     ##
####################

fg_0 &amp;lt;- &amp;#34;bisque1&amp;#34;
fg_1 &amp;lt;- &amp;#34;bisque4&amp;#34;

bg &amp;lt;- &amp;#34;darkslategray&amp;#34;

#########################
##     PLOT PARAMS     ##
#########################

sherlock.png &amp;lt;- &amp;#34;assets/sherlock.png&amp;#34;
sherlock.svg &amp;lt;- &amp;#34;assets/sherlock.svg&amp;#34;

mask &amp;lt;- png::readPNG(sherlock.png)
image &amp;lt;- svgparser::read_svg(sherlock.svg, xoffset = 0, yoffset = 0)

plot_theme &amp;lt;- theme_void() +
    theme(
        plot.margin=unit(c(0,0,0,0), &amp;#39;cm&amp;#39;),
        panel.background = element_rect(fill=&amp;#39;transparent&amp;#39;),
        plot.background = element_rect(fill=&amp;#39;transparent&amp;#39;, color=NA)
    )

pdf_theme &amp;lt;- theme_void() +
    theme(
        plot.margin=unit(c(1,1,1,1), &amp;#39;cm&amp;#39;),
        panel.background = element_rect(fill = bg, color = bg),
        plot.background  = element_rect(fill = bg, color = bg)
    )

###################
##     PLOTS     ##
###################

set.seed(123)

# header and footer
df &amp;lt;- data.frame(x = 1:10, y = 1:10)
header &amp;lt;- ggplot(df, aes(x = x, y = y)) +
  geom_blank() +
  labs(
        title = &amp;#34;Sherlock Holmes&amp;#34;,
        subtitle = &amp;#34;Most common words across all books&amp;#34;
        ) +
  plot_theme +
  theme(
    plot.title    = element_text(color = fg_0, size = 69, face = &amp;#34;bold&amp;#34;),
    plot.subtitle = element_text(color = fg_1, size = 42, face = &amp;#34;bold&amp;#34;)
  )

# Word Cloud
cloud &amp;lt;- ggplot(
        word_count,
        aes(label = word, size = n,
            color = n, angle = angle
        )
    ) +
    geom_text_wordcloud_area(
        mask = mask,
        rm_outside = TRUE
    ) +
    scale_size_area(max_size = 69, trans = power_trans(1/.7)) +
    scale_color_gradient(low = fg_1, high = fg_0) +
    labs(caption = &amp;#34;#TidyTuesday&amp;#34;) +
    plot_theme +
    theme(
        plot.caption  = element_markdown(color = fg_1, size = 25, face = &amp;#34;bold&amp;#34;, lineheight = 1.2)
    )

# Background image
bg_img &amp;lt;- ggplot(df, aes(x = x, y = y)) +
  geom_blank() +
  annotation_custom(image, xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = Inf) +
  plot_theme

###########################
##     OUTPUT PARAMS     ##
###########################

# text_height = 1
text_height = 1
th &amp;lt;- text_height

# bg_x = 0.12
bg_x = 0.11
bg_y = 0.005

layout &amp;lt;- c(
  area(t = 1,      l = 1, b = 2,      r = 6),
  area(t = 1 + th, l = 1, b = 6 + th, r = 6),
  area(t = 1 + th, l = 1, b = 6 + th, r = 6)
)

####################
##     OUTPUT     ##
####################

word_count

pdf(&amp;#34;sherlock-cloud.pdf&amp;#34;, height = 12 + ( 2 * th ), width = 12)

header /
    ( cloud + inset_element(bg_img,
                            left = bg_x, bottom = bg_y, right = 1 + bg_x, top = 1 + bg_y,
                            on_top = FALSE)
    ) /
    plot_layout(design = layout, widths = 6, heights = c(th, 6, 6)) +
    plot_annotation(theme = pdf_theme)

dev.off()&lt;/code&gt;&lt;/pre&gt;
</description>
</item>
    
    <item>
<title>PHP: Theme Switch</title>
<link>https://azureorange.xyz/blog/linux/php-theme-switch/</link>
<pubDate>Fri, 26 Jan 2024 00:00:00 +0000</pubDate>
      
      <guid>https://azureorange.xyz/blog/linux/php-theme-switch/</guid>
<description>&lt;p&gt;On one of my &lt;a href=&#34;https://dingsbox.schoolstuff.ch&#34;&gt;school related websites&lt;/a&gt; I had to implement a theme toggle because some of my collegues did not like my dark theme.&lt;/p&gt;
&lt;p&gt;This toggle allowed for choosing between a dark and a light theme using some javascript running in your browser.&lt;/p&gt;
&lt;p&gt;This week I had the glorious idea to implement a backend theme toggle switch using some php. I mean without anything else running in my backend, I cannot identify any of you guys. That simply means that if you switch the theme, everybody gets it.&lt;/p&gt;
&lt;p&gt;I thought of this being a fun easter egg, so, somewhere on my website there is a button for you to switch everyone&amp;rsquo;s theme from gruvbox to solarized dark.&lt;/p&gt;
&lt;p&gt;Have fun and some patience as well (there is some server side caching going on) when toggling the theme.&lt;/p&gt;
</description>
</item>
    
    <item>
<title>DIY: Tardis 3d-Printing</title>
<link>https://azureorange.xyz/blog/miscellaneous/diy-tardis-3d-printing/</link>
<pubDate>Tue, 16 Jan 2024 14:51:24 +0100</pubDate>
      
      <guid>https://azureorange.xyz/blog/miscellaneous/diy-tardis-3d-printing/</guid>
<description>&lt;p&gt;I just finished my first ever 3d model using &lt;a href=&#34;https://openscad.org/&#34;&gt;OpenSCAD&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The programming aspect to 3d modelling is quite interesting and something I get along with very well.&lt;/p&gt;
&lt;h2 id=&#34;the-first-version&#34;&gt;The first version&lt;/h2&gt;
&lt;p&gt;I did use an image with the outer measurements of the Tardis as a reference guide
(I cannot share the image here, but you&amp;rsquo;ll find it by searching the internet  for &amp;ldquo;Tardis measurements&amp;rdquo;).
I calculated the percentages for all lengths relative to the width of the main body.
This way I can change the scaling of my model later on.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;tardis-v1-openscad-screenshot&#34; src=&#34;./tardis-openscad.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;For now:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the text is somewhat off as I used the wrong font and its scale was just estimated&lt;/li&gt;
&lt;li&gt;the rectangular cutouts are all the same and positioning was only estimated&lt;/li&gt;
&lt;li&gt;the roof&amp;rsquo;s lengths are estimates as well&lt;/li&gt;
&lt;li&gt;the lamp at the top is very much simplified&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You&amp;rsquo;ll find all corresponding files on my &lt;a href=&#34;https://gitlab.com/azureorangexyz/openscad-projects/-/tree/main/tardis?ref_type=heads&#34;&gt;GitLab&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In the near future I will fix the lackings described earlier and try to print it as well.&lt;/p&gt;
</description>
</item>
    
    <item>
<title>Read and Convert Ebooks With Calibre</title>
<link>https://azureorange.xyz/blog/linux/read-and-convert-ebooks-with-calibre/</link>
<pubDate>Fri, 06 Oct 2023 10:52:01 +0200</pubDate>
      
      <guid>https://azureorange.xyz/blog/linux/read-and-convert-ebooks-with-calibre/</guid>
<description>&lt;p&gt;The commonly known default for reading ebooks probably is Adobe Digital Editions which is a proprietary tool that to me seems rather unmaintained.
A better alternative would be the &lt;a href=&#34;https://calibre-ebook.com&#34;&gt;calibre ebook management software&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;reading-ebooks&#34;&gt;Reading ebooks&lt;/h2&gt;
&lt;p&gt;By default calibre opens your books in the default program for the respecting file type.
Via the context menu you can choose to view it with calibre&amp;rsquo;s inbuilt ebook viewer.&lt;/p&gt;
&lt;p&gt;I personally use &lt;a href=&#34;https://azureorange.xyz/&#34;&gt;zathura&lt;/a&gt; to open all my ebooks with.
Zathura is a powerful and highly customizable pdf and ebook viewer with vim-like keybindings.&lt;/p&gt;
&lt;h2 id=&#34;converting-ebooks&#34;&gt;Converting ebooks&lt;/h2&gt;
&lt;p&gt;Adobe&amp;rsquo;s acsm format and others may be encrypted and a plugin is needed to convert these.
I use noDRM&amp;rsquo;s &lt;a href=&#34;https://github.com/noDRM/DeDRM_tools&#34;&gt;DeDRM_Tools&lt;/a&gt; and Leseratte10&amp;rsquo;s &lt;a href=&#34;https://github.com/Leseratte10/acsm-calibre-plugin&#34;&gt;Calibre ACSM Input plugin&lt;/a&gt; to do this for me.
This way I can read all ebooks using calibre and convert them into pdfs which will ensure that I do not loose access after my renting time expired.&lt;/p&gt;
&lt;h2 id=&#34;further-information&#34;&gt;Further information&lt;/h2&gt;
&lt;p&gt;For more read the &lt;a href=&#34;https://manual.calibre-ebook.com/&#34;&gt;calibre manual&lt;/a&gt;.&lt;/p&gt;
</description>
</item>
    
    <item>
<title>DIY: Sewing a Skjoldehamn Hood</title>
<link>https://azureorange.xyz/blog/reenactment/diy-skjoldehamn-gugel/</link>
<pubDate>Thu, 10 Aug 2023 00:15:47 +0200</pubDate>
      
      <guid>https://azureorange.xyz/blog/reenactment/diy-skjoldehamn-gugel/</guid>
<description>&lt;h2 id=&#34;pattern&#34;&gt;Pattern&lt;/h2&gt;
&lt;p&gt;The original finding of the Skjoldehamn hood had one measuring 65 x 65 cm.
The original had a cord attached to the hood, so it could be tightened at the back.
I will add one in the future, but just did not have the time right now.
[Enter something about the original finding by Løvlid] (Løvlid, 2011).&lt;/p&gt;
&lt;p&gt;To get the width of the hood (A), I took half the circumference of my head and added 5 cm for an easier fit.
So the main square (1) measures 67 x 67 cm.&lt;/p&gt;
&lt;p&gt;The back piece (2) is a square of 35 x 35 cm and the front piece (3) is a square of 30 x 30 cm.
So with (C) being 35 cm in length, the back portion of the hood (B) measures 32 cm respectively.&lt;/p&gt;
&lt;p&gt;The cutout for the face (E) measures half the circumference of my face plus 2 or 3 cm spare.
This gives me a cutout of 30 cm in length.
On top of this cutout I left approx. 2 cm intact and between the face cutout and the one for the front piece I left approx. 1.5 cm.&lt;/p&gt;
&lt;p&gt;The main square is cut at an angle to match the final front height of the hood, so the height (F) of the angle cut was approx. 3.5 cm.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;skjoldehamn hood pattern&#34; src=&#34;./hood-pattern.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;literature&#34;&gt;Literature&lt;/h2&gt;
&lt;p&gt;Løvlid, D. H. (2011). &lt;em&gt;The Skjoldehamn Find in the Light of New Knowledge.&lt;/em&gt; (Carol Lynn, Trans.). Lofotr Vikingmuseum. (Original work published 2009). (CC BY-NC-SA 3.0)&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
</description>
</item>
    
    <item>
<title>DIY: Linen Viking Age Undertunic</title>
<link>https://azureorange.xyz/blog/reenactment/diy-linen-viking-age-undertunic/</link>
<pubDate>Tue, 01 Aug 2023 00:00:00 +0000</pubDate>
      
      <guid>https://azureorange.xyz/blog/reenactment/diy-linen-viking-age-undertunic/</guid>
<description>&lt;p&gt;There are fewer finds of Viking Men&amp;rsquo;s clothing than Women&amp;rsquo;s, because of textiles being preserved by proximity to metal or tannin (from wood) in a ground burial.
Many men in the pagan Viking Age though have been cremated rather than buried.
If buried, women were much more likely to be wearing jewellery made of metal and textiles in the immediate area of such jewellery had a chance of surviving time.
Men needed less jewellery to hold their clothings together, what resulted in less metal being present in their graves.
So there is less evidence on men&amp;rsquo;s clothing and what has been reconstructed had to be scraped together from a few lucky findings.&lt;/p&gt;
&lt;p&gt;Although many textiles were made of worsted wool, some were also made from (mostly undyed) linen.
This time I try to sew a linen undertunic, because it is much easier on the skin, isn&amp;rsquo;t as warm and scratchy as wool.&lt;/p&gt;
&lt;h2 id=&#34;the-textile-choice&#34;&gt;The textile choice&lt;/h2&gt;
&lt;p&gt;Undergarments were particularly made from linen and the archaeological evidence indicates that almost all of these textiles were in tabby or plain weave.
The tabby weave is made by threads at right angles going alternately over and under each other.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;tabby weave&#34; src=&#34;https://azureorange.xyz/blog/reenactment/diy-linen-viking-age-undertunic/tabby-weave.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;I bought a piece of tabby weaved linen cloth from a great guy at the medieval market in &amp;hellip;,
which feels really nice on the skin and is very light, so it suits perfectly for a hot summer like we have this year.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;tabby weaved linen cloth&#34; src=&#34;tabby-weaved-linen-cloth.jpg&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;the-pattern&#34;&gt;The pattern&lt;/h2&gt;
&lt;p&gt;The patterns reconstructed for shirts or undertunics or smocks, however you want to call them, were all fairly similar to each other.
They mainly consist of a rectangular front and back body piece and two more or less rectangular arm pieces.&lt;/p&gt;
&lt;p&gt;The tunics reconstructed from findings in Birka, Sweden, seemed to commonly have the front and back pieces cut in one piece with no seams on the shoulder lines and small round or keyhole shaped necklines.
On the sides they had some triangular gores inserted where the front and back panels meet.&lt;/p&gt;
&lt;p&gt;Generally undertunics made of linen had longer sleeves and skirts than the overtunics made of wool.
This might have been to make the undertunic visible to show that one was wealthy enough to afford it, as linen was much more expensive at that time.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Birka tunic&#34; src=&#34;https://azureorange.xyz/blog/reenactment/diy-linen-viking-age-undertunic/birka-tunic.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;the-seam&#34;&gt;The seam&lt;/h2&gt;
&lt;p&gt;There were many variations of flat-felled seams found from Viking Age garments.
These include a running stitch holding together the to pieces of fabric and then the seam allowances were folded over and tacked down.
As flat-felling works well for undergarments (it was less appropriate for outer garments), I decided to go with that.&lt;/p&gt;
&lt;h4 id=&#34;i-chose-a-backstitched-one-because-inside-and-i-liked-it-for-the-ärmel-the-rest-maybe-with-normal-one&#34;&gt;I chose a backstitched one, because inside and I liked it for the Ärmel. The rest maybe with normal one?&lt;/h4&gt;
&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cs.vassar.edu/~capriest/viktunic.html&#34;&gt;https://www.cs.vassar.edu/~capriest/viktunic.html&lt;/a&gt;
&lt;a href=&#34;https://www.cs.vassar.edu/~capriest/mensgarb.html&#34;&gt;https://www.cs.vassar.edu/~capriest/mensgarb.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=2FzvvJ_HZJM&#34;&gt;https://www.youtube.com/watch?v=2FzvvJ_HZJM&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;brika-graves&#34;&gt;Brika Graves&lt;/h3&gt;
&lt;p&gt;Undertunics or Smocks
&lt;a href=&#34;https://www.cs.vassar.edu/~capriest/mensgarb.html&#34;&gt;https://www.cs.vassar.edu/~capriest/mensgarb.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;viking tunic construction
&lt;a href=&#34;https://www.cs.vassar.edu/~capriest/viktunic.html&#34;&gt;https://www.cs.vassar.edu/~capriest/viktunic.html&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;thorsbjerg&#34;&gt;Thorsbjerg&lt;/h3&gt;
&lt;p&gt;Book: p. 73
viking-clothing_compress.pdf&lt;/p&gt;
&lt;h2 id=&#34;viborg-shirt&#34;&gt;Viborg Shirt&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.vikingsof.me/downloads/clothing-guide/male.html#shirt&#34;&gt;https://www.vikingsof.me/downloads/clothing-guide/male.html#shirt&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;970-viking-tunic&#34;&gt;970 viking tunic&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://seamstrue.com/generators/970-viking-tunic/&#34;&gt;https://seamstrue.com/generators/970-viking-tunic/&lt;/a&gt;
&lt;a href=&#34;https://www.livinghistoryarchive.com/article/mastering-the-look-your-complete-guide-to-viking-reenactment-tunics&#34;&gt;https://www.livinghistoryarchive.com/article/mastering-the-look-your-complete-guide-to-viking-reenactment-tunics&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;tunic-reconstruction-haithabu&#34;&gt;Tunic reconstruction Haithabu&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://projectbroadaxe.weebly.com/viking-age-nordic-history/viking-age-fashion-mens-type-i-tunic-from-10th-century-haithabu-hedeby&#34;&gt;https://projectbroadaxe.weebly.com/viking-age-nordic-history/viking-age-fashion-mens-type-i-tunic-from-10th-century-haithabu-hedeby&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;generic-reconstruction&#34;&gt;Generic reconstruction&lt;/h3&gt;
&lt;p&gt;/home/azure/Simple-Viking-Clothing-for-Men.pdf&lt;/p&gt;
&lt;h3 id=&#34;about-clothing&#34;&gt;About clothing&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://www.historyonthenet.com/viking-clothing-warm-and-durable&#34;&gt;https://www.historyonthenet.com/viking-clothing-warm-and-durable&lt;/a&gt;
&lt;a href=&#34;http://www.hurstwic.org/history/articles/daily_living/text/clothing.htm&#34;&gt;http://www.hurstwic.org/history/articles/daily_living/text/clothing.htm&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;maybe-here-something&#34;&gt;Maybe here something?&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://www.vidars-horde.de/en/pages/a-for-articles&#34;&gt;https://www.vidars-horde.de/en/pages/a-for-articles&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;for-other-projects&#34;&gt;For other projects&lt;/h2&gt;
&lt;h3 id=&#34;about-bags&#34;&gt;about bags&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://sagy.vikingove.cz/en/reconstruction-of-the-viking-bag/&#34;&gt;https://sagy.vikingove.cz/en/reconstruction-of-the-viking-bag/&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;brettchenweben&#34;&gt;Brettchenweben?&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://alicjajaczewska.com/ix-xi-century/bands/reconstruction-of-birka-b17-pattern/&#34;&gt;https://alicjajaczewska.com/ix-xi-century/bands/reconstruction-of-birka-b17-pattern/&lt;/a&gt;&lt;/p&gt;
</description>
</item>
    
    <item>
<title>dmenu script: YouTube Music frontend</title>
<link>https://azureorange.xyz/blog/linux/dmenu-music/</link>
<pubDate>Sun, 30 Jul 2023 18:59:40 +0200</pubDate>
      
      <guid>https://azureorange.xyz/blog/linux/dmenu-music/</guid>
<description>&lt;p&gt;Wouldn&amp;rsquo;t it not be great to listen to Music on YouTube without ever opening your browser?&lt;/p&gt;
&lt;p&gt;I asked myself the same question and started experimenting with &lt;code&gt;mpv&lt;/code&gt; and &lt;code&gt;yt-dlp&lt;/code&gt;.
The script uses &lt;code&gt;dmenu&lt;/code&gt; as its GUI.&lt;/p&gt;
&lt;p&gt;In the main menu one may choose to browse local playlists and followed albums; search YouTube; configure some settings.&lt;/p&gt;
&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;
&lt;p&gt;Install the script to your preferred location and run it like normally.&lt;/p&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dm-music:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    usage:      dm-music &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;OPTIONS&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    options:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        -h      display this help message
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        -c      source a custom config file &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;overrides default locations&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    how to configure playlists:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;  Use the search functionality from the main menu or the search menu,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt; choose &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;add to playlist&amp;#34;&lt;/span&gt; and choose a playlist or create
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            a new one.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        2&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;  create a text file in the playlist directory &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;default:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            /home/azure/.local/dm-music/playlists/&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; and add the song url
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            one entry per line.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            Pattern: &amp;lt;url&amp;gt; &amp;lt;description&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    how to follow albums:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;  Create a text file &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;e. g. per artist&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; in the albums directory
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;default: /home/azure/.local/dm-music/albums/&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; and add the album url
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            one entry per line.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            Pattern: &amp;lt;url&amp;gt; &amp;lt;description&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    config:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        default locations &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;in this order&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; /home/azure/.config/dmscripts/dm-music.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            2&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; /home/azure/.config/dm-music.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            3&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; /home/azure/.local/share/dm-music/dm-music.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            4&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; The config file of distrotubes dm-scripts
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               will be sourced &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; available.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        These variables are intended to be configured in a custom config file:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            _data_path&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/home/azure/.local/share/dm-music&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            _search_length&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            _dmenu_cmd&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;dmenu -i -c -l 20&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            _mpv_cmd&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mpv --no-video&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            _repeat&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;   &lt;span style=&#34;color:#75715e&#34;&gt;# 0=no-repeat, 1=repeat&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            _random&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;   &lt;span style=&#34;color:#75715e&#34;&gt;# 0=not-random, 1=random&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;youtube-search&#34;&gt;YouTube search&lt;/h3&gt;
&lt;p&gt;The YouTube index can be searched from withing the main menu as well as the search menu.
While in these menus, a search history will be shown, which is saved locally in a history file.&lt;/p&gt;
&lt;p&gt;The search is powered by &lt;code&gt;yt-dlp&lt;/code&gt; and may take one or two seconds to complete.&lt;/p&gt;
&lt;p&gt;In the configuration file you may specify, how many search results are fetched from YouTube.&lt;/p&gt;
&lt;h3 id=&#34;playlists&#34;&gt;Playlists&lt;/h3&gt;
&lt;p&gt;You may configure local playlists to listen from.
Songs can either be added via the search menu or manually by editing the playlist files.&lt;/p&gt;
&lt;h3 id=&#34;following-albums&#34;&gt;Following Albums&lt;/h3&gt;
&lt;p&gt;Albums can be followed and played as a whole and do not need to be added to a playlist song by song.
At the moment this can only be done by adding the album&amp;rsquo;s url to a local album file, as the search does not only return songs.&lt;/p&gt;
&lt;h3 id=&#34;player-settings&#34;&gt;Player Settings&lt;/h3&gt;
&lt;p&gt;From withing the main menu you may turn on / off the settings for repetition and randomness.
If turned on, the current playlist will be repeated or played in random order respectively.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;main menu&#34; src=&#34;https://azureorange.xyz/blog/linux/dmenu-music/dm-music-main-menu.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;These settings can be made persistent by editing the configuration file.&lt;/p&gt;
&lt;p&gt;You’ll find the script on my &lt;a href=&#34;https://gitlab.com/azureorangexyz/dmenu-scripts/-/blob/main/dm-music&#34;&gt;GitLab&lt;/a&gt; and you are free to suggest any changes or improvements.&lt;/p&gt;
</description>
</item>
    
    <item>
<title>DIY: Forging a knife (and building a forge)</title>
<link>https://azureorange.xyz/blog/reenactment/diy-forging-knife/</link>
<pubDate>Wed, 29 Mar 2023 00:12:06 +0200</pubDate>
      
      <guid>https://azureorange.xyz/blog/reenactment/diy-forging-knife/</guid>
<description>&lt;p&gt;A friend of mine and I always love trying out new things.
I got an old anvil from the grandfather of another friend, so one day we decided to forge a knife.
We both have never forged forged anything so this project was just us trying things for the first time.&lt;/p&gt;
&lt;h3 id=&#34;building-the-forge&#34;&gt;Building the forge&lt;/h3&gt;
&lt;p&gt;At first we needed a forge, so we bought a buttloads of charcoal, which we transported on my motorcycle (alongside the two of us of course) and built a small construction using some stones I had laying around.
Our first forge wasn&amp;rsquo;t very good, as you can see in the picture below.&lt;/p&gt;
&lt;p&gt;But we already had plans for a better one and the stuff needed to build it was - of course - transported on the same motorcycle ride.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;first forge build&#34; src=&#34;https://azureorange.xyz/blog/reenactment/diy-forging-knife/first-forge.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;We used a cheap hairdryer to ensure good and steady airflow and some tin cans to protect it from the heat.
Soon we realised, that we won&amp;rsquo;t get anywhere with this forge and decided to build the one we had in mind.&lt;/p&gt;
&lt;p&gt;To do so, we took the ash bin we bought earlier and punctured the lid with an awl.
This lid was placed in the bottom of the bin slightly tilted, to allow the airflow through.
Through the side of the bin we cut a hole to fit in the cans attached to the hairdryer.
Then we built up the stones alongside the wall to isolate the whole thing.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;second forge build&#34; src=&#34;https://azureorange.xyz/blog/reenactment/diy-forging-knife/second-forge.jpg&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;forging-the-knife&#34;&gt;Forging the knife&lt;/h3&gt;
&lt;p&gt;To forge the knife we used some old files, which were supposed to have high carbon content.
The files were cut to length and we used the back piece as it was already narrowed down to fit inside the handle.&lt;/p&gt;
&lt;p&gt;Then we forged the steel until we had the rough shape of the knives worked out.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;roughly shaped knives&#34; src=&#34;https://azureorange.xyz/blog/reenactment/diy-forging-knife/raw-knives.jpg&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;finishing-the-blade&#34;&gt;Finishing the blade&lt;/h3&gt;
&lt;p&gt;We then ground the blade until it was narrow enough.
The blades were heated red hot and we let them cool down slowly for the steel to normalise.
Without this step, the steel would be more likely to bend during the hardening process.&lt;/p&gt;
&lt;p&gt;We again heated the blades red hot for a last time and quenched them in water, because we forgot to buy any oil.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;sharpening the blade&#34; src=&#34;https://azureorange.xyz/blog/reenactment/diy-forging-knife/grinding-knife.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;Using the files we then sharpened the blade until it was as sharp as it could get.
With a grind stone we then finished this part of the process and the blades were sharp enough to actually use them.&lt;/p&gt;
&lt;h3 id=&#34;wooden-handles&#34;&gt;Wooden handles&lt;/h3&gt;
&lt;p&gt;For the handles my friend collected a Yew branch earlier the week.
We drilled some holes into the branch and used the red-hot narrow piece of the blade to fit the hole to size.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;fitting the handles&#34; src=&#34;https://azureorange.xyz/blog/reenactment/diy-forging-knife/handle-fitting.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;Using some Swiss Army Knives we carved the handles to our likings.
And be careful, because the wood of the Yew tree is very hard and anything else but easy to carve.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;carved handles&#34; src=&#34;https://azureorange.xyz/blog/reenactment/diy-forging-knife/handles.jpg&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;leather-sheaths&#34;&gt;Leather sheaths&lt;/h3&gt;
&lt;p&gt;I still had some cow leather laying around, which we used to make some leather sheaths.
The shape was measured by simply tracing the shape of the knife on both sides.&lt;/p&gt;
&lt;p&gt;Then I decided to carve a Yew twig into the leather, as this would match with the theme.&lt;/p&gt;
&lt;p&gt;The sheath was then sewn using some waxed linen thread and two needles.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;leather sheaths&#34; src=&#34;https://azureorange.xyz/blog/reenactment/diy-forging-knife/leather-sheaths.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;After test fitting the sheath I realised, that it was to narrow, where it should fit the handle.
So I sewed a leather strap over, to close the hole.
Into this strap I carved my name using Younger Futhark runes.&lt;/p&gt;
&lt;h3 id=&#34;final-assembly&#34;&gt;Final assembly&lt;/h3&gt;
&lt;p&gt;Finally it was time to assemble everyting.&lt;/p&gt;
&lt;p&gt;The knives were glued into the handle using some birch pitch we made the same day.&lt;/p&gt;
&lt;p&gt;The handles were waxed with some bee wax I had laying around and we were done.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;finished knives&#34; src=&#34;https://azureorange.xyz/blog/reenactment/diy-forging-knife/finished-knives.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;knife close up&#34; src=&#34;https://azureorange.xyz/blog/reenactment/diy-forging-knife/knife-close-up.jpg&#34;&gt;
&lt;img alt=&#34;knife side&#34; src=&#34;https://azureorange.xyz/blog/reenactment/diy-forging-knife/knife-side.jpg&#34;&gt;
&lt;img alt=&#34;knife front&#34; src=&#34;https://azureorange.xyz/blog/reenactment/diy-forging-knife/knife-front.jpg&#34;&gt;&lt;/p&gt;
</description>
</item>
    
    <item>
<title>Groff: Relocate table of contents</title>
<link>https://azureorange.xyz/blog/linux/groff-relocate-toc/</link>
<pubDate>Tue, 14 Mar 2023 20:05:55 +0100</pubDate>
      
      <guid>https://azureorange.xyz/blog/linux/groff-relocate-toc/</guid>
<description>&lt;p&gt;I recently discovered the program groff, which is a minimal and simple to use text formatter (somewhat like LaTeX).&lt;/p&gt;
&lt;p&gt;One thing whith groff is that the table of contents has to be generated at the end of the document, because of groff being a single-pass text formatter.
This means that groff passes over the file only once.
To generate a toc it need to know on which page your headings are located and it cannot know page number without having seen your headings.&lt;/p&gt;
&lt;p&gt;So I wrote a little script that relocates the toc after running groff:&lt;/p&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/bin/sh
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;file&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$1&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;base&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;file%.*&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;grep -i &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;.TC&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$file&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    preconv &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$file&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; | refer -PS -e | groff -me -ms -kept -T pdf &amp;gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$base&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;.pdf
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    exit &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;groff -m ms -k -Tps &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$file&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &amp;gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$base&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;.ps
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;csplit --prefix&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/tmp/TOC example.ps /ble&lt;span style=&#34;color:#ae81ff&#34;&gt;\ &lt;/span&gt;of&lt;span style=&#34;color:#ae81ff&#34;&gt;\ &lt;/span&gt;Contents/-5 &lt;span style=&#34;color:#75715e&#34;&gt;# --&amp;gt; TOC00, TOC01&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;csplit --prefix&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/tmp/CONT /tmp/TOC00 /^%%Page:&lt;span style=&#34;color:#ae81ff&#34;&gt;\ &lt;/span&gt;1&lt;span style=&#34;color:#ae81ff&#34;&gt;\ &lt;/span&gt;2/ &lt;span style=&#34;color:#75715e&#34;&gt;# --&amp;gt; CONT00, CONT01&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;csplit --prefix&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/tmp/TOC /tmp/TOC01 /^%%Trailer/ &lt;span style=&#34;color:#75715e&#34;&gt;# --&amp;gt; TOC00, TOC01&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cat /tmp/CONT00 /tmp/TOC00 /tmp/CONT01 /tmp/TOC01 | ps2pdf - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$base&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;.pdf
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rm &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$base&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;.ps
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rm /tmp/TOC*
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rm /tmp/CONT*&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The first part of the script checks if the .ms file contains the string &amp;ldquo;.TC&amp;rdquo;, which is used to generate the toc.
If grep cannot find the given string, it simply compiles the pdf using groff and exits right away.&lt;/p&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;grep -i &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;.TC&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$file&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    preconv &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$file&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; | refer -PS -e | groff -me -ms -kept -T pdf &amp;gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$base&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;.pdf
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    exit &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;fi&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If the script did not exit, it continues by compiling a postscript document using groff, which then can be converted into a pdf later.&lt;/p&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;groff -m ms -k -Tps &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$file&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &amp;gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$base&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;.ps&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The postscript file is then split into several parts.&lt;/p&gt;
&lt;p&gt;First it looks for the sequence &amp;ldquo;ble of Contents&amp;rdquo;, which is the heading of the toc itself and splits the file 5 lines above this line.&lt;/p&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;csplit --prefix&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/tmp/TOC example.ps /ble&lt;span style=&#34;color:#ae81ff&#34;&gt;\ &lt;/span&gt;of&lt;span style=&#34;color:#ae81ff&#34;&gt;\ &lt;/span&gt;Contents/-5 &lt;span style=&#34;color:#75715e&#34;&gt;# --&amp;gt; TOC00, TOC01&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Then the first file resulting from the split is split again above the line saying &lt;code&gt;%%Page: 1 2&lt;/code&gt;, that is where the title page ends.&lt;/p&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;csplit --prefix&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/tmp/CONT /tmp/TOC00 /^%%Page:&lt;span style=&#34;color:#ae81ff&#34;&gt;\ &lt;/span&gt;1&lt;span style=&#34;color:#ae81ff&#34;&gt;\ &lt;/span&gt;2/ &lt;span style=&#34;color:#75715e&#34;&gt;# --&amp;gt; CONT00, CONT01&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And last the second file from the first split is splut at the line saying &lt;code&gt;%%Trailer&lt;/code&gt;, which indicates the footer of the postscript file.&lt;/p&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;csplit --prefix&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/tmp/TOC /tmp/TOC01 /^%%Trailer/ &lt;span style=&#34;color:#75715e&#34;&gt;# --&amp;gt; TOC00, TOC01&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;These splits are then concatenated in their new order as well as converted into a pdf file.&lt;/p&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cat /tmp/CONT00 /tmp/TOC00 /tmp/CONT01 /tmp/TOC01 | ps2pdf - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$base&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;.pdf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The script has some requirements it needs to meet, otherwise the relocation won&amp;rsquo;t work properly (yet).
These are that the string &amp;ldquo;ble of Contents&amp;rdquo; cannot be present in the file before the actual table of contents and that the abstract or the title page respectively cannot use more than one page.&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;ll find the script on my &lt;a href=&#34;https://gitlab.com/azureorangexyz/shell-scripts/-/blob/main/ms-groff-compiler.sh&#34;&gt;GitLab&lt;/a&gt; and you are free to suggest any changes or improvements.&lt;/p&gt;
</description>
</item>
    
    <item>
<title>DIY: Sewing a Flat Cap</title>
<link>https://azureorange.xyz/blog/miscellaneous/diy-flat-cap/</link>
<pubDate>Fri, 03 Dec 2021 15:13:18 +0200</pubDate>
      
      <guid>https://azureorange.xyz/blog/miscellaneous/diy-flat-cap/</guid>
<description>&lt;p&gt;I always wanted to wear a flat cap, and now as I had the right materials laying around, as well as some spare time, so I started working on this project.&lt;/p&gt;
&lt;p&gt;I have found a suiting pattern in the internet archive and redrew it to create a pattern with less error, because of the original being drawn very vaguely.
You may find the pattern attached both as a .PDf and as a .SVG.
The pattern suited for hat size 58, as this approximatly was mine, I started right away.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://azureorange.xyz/blog/miscellaneous/diy-flat-cap/pattern.tar.gz&#34;&gt;Download pattern&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The materials I have used were 60 x 60 cm of a rather large-meshed jute fabric for the outer layer, approx. 60 x 60 cm of a patterned cotton fabric for the inner layer, some mixed fabric for the brim and the head band, which just had to match the color style of the others and a piece of leather for the brim with a thickness of app. 3 mm.&lt;/p&gt;
&lt;p&gt;First I had to cut out all the pattern pieces, so I pinned the printed pattern to my fabrics and roughly cut them out, leaving some space for a seam, of course.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;inner layer&#34; src=&#34;https://azureorange.xyz/blog/miscellaneous/diy-flat-cap/04-flatcap.jpeg&#34;&gt;&lt;/p&gt;
&lt;p&gt;Onto the jute pieces I ironed some fusible interlining for stability and to kind of protect the inner fabric from getting all waxy on hot summerdays.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;inner layer&#34; src=&#34;https://azureorange.xyz/blog/miscellaneous/diy-flat-cap/01-flatcap.jpeg&#34;&gt;&lt;/p&gt;
&lt;p&gt;This brings me to my next step, soaking the jute in bees wax, to give it some water repellant functionalities.
The jute was placed on the ironing board and some wax pellets were evenly dirstributed on top.
Then I simply ironed over it until the wax melt and soaked into the fabric.&lt;/p&gt;
&lt;p&gt;For making the brim, I took a piece of thick leather and some fabric, which I sewed together using a sewing machine.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;inner layer&#34; src=&#34;https://azureorange.xyz/blog/miscellaneous/diy-flat-cap/02-flatcap.jpeg&#34;&gt;&lt;/p&gt;
&lt;p&gt;Finally it was time to sew everything together.
I had to sew the whole cap by hand, because I did not think that my sewing machine could handle the waxed fabric.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;inner layer&#34; src=&#34;https://azureorange.xyz/blog/miscellaneous/diy-flat-cap/06-flatcap.jpeg&#34;&gt;&lt;/p&gt;
&lt;p&gt;After many long minutes of sewing, I attached the shield, the inner lining and finally the head band, which nicely covered all my ugly stiches.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;inner layer&#34; src=&#34;https://azureorange.xyz/blog/miscellaneous/diy-flat-cap/07-flatcap.jpeg&#34;&gt;&lt;/p&gt;
&lt;p&gt;As I have finished the flatcap, I realized that it was a little to large to fit my head tightly.
Because of me being really tired, I simply took some strong linen thread and stiched around the cap and pulled it tight.
Now the flatcap fits perfectly.&lt;/p&gt;
&lt;p&gt;Here a picture of the finished flatcap and the pattern:&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;The finished cap&#34; src=&#34;https://azureorange.xyz/blog/miscellaneous/diy-flat-cap/flatcap.jpeg&#34;&gt;&lt;/p&gt;
</description>
</item>
    
    <item>
<title>DIY: Book Binding Attempt No. 1</title>
<link>https://azureorange.xyz/blog/miscellaneous/diy-book-binding/</link>
<pubDate>Thu, 22 Jul 2021 14:44:32 +0200</pubDate>
      
      <guid>https://azureorange.xyz/blog/miscellaneous/diy-book-binding/</guid>
<description>&lt;p&gt;A very good &lt;a href=&#34;https://www.mcozzio.com/&#34;&gt;friend&lt;/a&gt; of mine, well, has written a fantasy novel.                                  &lt;br&gt;
So as his birthday was coming up and yet no printed version of his novel existed, I saw and took the opportunity to bind it in leather and gift it to him.&lt;/p&gt;
&lt;p&gt;First, I went to choose the paper for the text block at the local stationary shop. Very soon, I realized that nicely textured paper colored in a pleasant looking warm white was extremely expensive. Because of the book not being in its final state and my budget being limited, I then went for a slightly thicker but standard 120 g / m2 printing paper.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;assembling the signatures&#34; src=&#34;https://azureorange.xyz/blog/miscellaneous/diy-book-binding/01-book.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;After formatting the novel into signatures using Libreoffice, I then simply printed the whole novel and then folded the sheets using a bone folder to ensure a clean fold. After folding, I first assembled the signatures, then the text block and pressed it between two wooden plates using screw clamps. Ideally, a book press would have been used here, but I did not have one.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;pressing the text block&#34; src=&#34;https://azureorange.xyz/blog/miscellaneous/diy-book-binding/02-book.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;Now it was time to mark the position of the sewing holes. To do so, five vertical lines were drawn onto the text block using a pencil, then the signatures were opened one by one and the sheets were pierced at the marked spot using an awl.&lt;/p&gt;
&lt;p&gt;Using a black linen thread, I started cord stitching the text block. Again I had to improvise here, as I do not own a suiting stitching jig.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;stitching the text block&#34; src=&#34;https://azureorange.xyz/blog/miscellaneous/diy-book-binding/03-book.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;After binding, I glued on the some black end sheets, the text block was put back into the press, and I glued the spine using normal PVA wood glue. After the glue dried, I tried to hammer the spine using a wooden mallet so it would take a rounded shape. This process did not work as well as expected and I think that is because I used way to much glue on the spine.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;glueing the spine&#34; src=&#34;https://azureorange.xyz/blog/miscellaneous/diy-book-binding/04-book.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;Then it was time to sew the headbands, unfortunately, I did not take a picture of this step, but I used some black and brown wool for sewing and a piece of linen cord for the core. A little glimpse of the final headbands may be seen in the final picture though.&lt;/p&gt;
&lt;p&gt;Now I have cut some front and back covers from 3 mm plywood and glued the cord used for binding onto the outside of these covers, then I cut a piece of leather with 3 mm in thickness and glued it onto the spine. To accomplish this, the leather was damped with some water, glued onto the spine using the same PVA glue as before and pressed around the cords using some more cord and the improvised press as a stand.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;leather cover&#34; src=&#34;https://azureorange.xyz/blog/miscellaneous/diy-book-binding/06-book.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;The next day the leather was glued on top of the covers. After the glue dried, I carved a simple frame, as well as the title of the novel into the damped leather, which again proved to be more difficult than expected.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;carving the cover page&#34; src=&#34;https://azureorange.xyz/blog/miscellaneous/diy-book-binding/08-book.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;After everything dried, the leather was stained using some brown antique leather stain. The edges were thinned out using a scalpel, folded over and glued onto the cover. Because of the leather still being very thick, the edges had to be fixated using some staples until the glue dried properly. Then, finally, the end sheets were glued to the cover.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;staining the leather&#34; src=&#34;https://azureorange.xyz/blog/miscellaneous/diy-book-binding/09-book.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;The author had a very good conception of how the country in which his novel takes place looked like.
Therefore, I took a sketch of the map, which he drew, redrew it on paper using a fine liner, and copied it onto normal 80 g / m2 printing paper. I trimmed the edges of the paper and glued the map onto the black end sheet to give the book a final touch.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;the map&#34; src=&#34;https://azureorange.xyz/blog/miscellaneous/diy-book-binding/07-book.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;And this is how the finished book turned out.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;The finished book&#34; src=&#34;https://azureorange.xyz/blog/miscellaneous/diy-book-binding/book.jpeg&#34;&gt;&lt;/p&gt;
</description>
</item>
    
  </channel>
</rss>
