From cd6644ea4ddc78597934ab0ef5ba50e3c3daa927 Mon Sep 17 00:00:00 2001 From: Mitja Felicijan Date: Sat, 8 Jul 2023 23:25:41 +0200 Subject: Moved to a simpler SSG --- public/notes.xml | 1373 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1373 insertions(+) create mode 100755 public/notes.xml (limited to 'public/notes.xml') diff --git a/public/notes.xml b/public/notes.xml new file mode 100755 index 0000000..b4c9e4f --- /dev/null +++ b/public/notes.xml @@ -0,0 +1,1373 @@ + + + Mitja Felicijan's notes + https://mitjafelicijan.com + You do not learn by relaxing. You learn by violently assaulting your problem until it surrenders its mysteries to you. + en-us + + + + + + + + + 60's IBM Computers Commercial + https://mitjafelicijan.com/60s-ibm-computers-commercial.html + Thu, 29 Jun 2023 22:13:45 +0200 + https://mitjafelicijan.com/60s-ibm-computers-commercial.html + Likely aired during an hour-long program during the 1960s, long commercials suchas this typically aired during hour-long programs. + <p>Likely aired during an hour-long program during the 1960s, long commercials such +as this typically aired during hour-long programs. They would <em>not</em> have aired +during a half-hour program.</p> +<p><video +poster="/notes/60s-ibm-computers-commercial.jpg" +src="/notes/60s-ibm-computers-commercial.mp4" +controls></video></p> + + + + + + + 10/GUI 10 Finger Multitouch User Interface + https://mitjafelicijan.com/10gui-10-finger-multitouch-user-interface.html + Thu, 29 Jun 2023 14:51:39 +0200 + https://mitjafelicijan.com/10gui-10-finger-multitouch-user-interface.html + Message from 10/GUI team (page 10gui. + <p>Message from 10/GUI team (page 10gui.com does not exist anymore):</p> +<p><em>Over a quarter-century ago, Xerox introduced the modern graphical user +interface paradigm we today take for granted.</em></p> +<p><em>That it has endured is a testament to the genius of its design. But the +industry is now at a crossroads: New technologies promise higher-bandwidth +interaction, but have yet to find a truly viable implementation.</em></p> +<p><em>10/GUI aims to bridge this gap by rethinking the desktop to leverage technology +in an intuitive and powerful way.</em></p> +<p><video +poster="/notes/10gui-10-finger-multitouch-user-interface.jpg" +src="/notes/10gui-10-finger-multitouch-user-interface.mp4" +controls></video></p> + + + + + + + Alacritty open links with modifier + https://mitjafelicijan.com/alacritty-open-links-with-modifier.html + Sun, 25 Jun 2023 17:17:16 +0200 + https://mitjafelicijan.com/alacritty-open-links-with-modifier.html + Alacritty by default makes all links in the terminal output clickable and thisgets annoying rather quickly. + <p>Alacritty by default makes all links in the terminal output clickable and this +gets annoying rather quickly. I liked the default behavior of Gnome terminal +where you needed to hold Control key and then you could click and open links.</p> +<p>To achieve this in Alacritty you need to provide a <code>hint</code> in the configuration +file. Config file is located at <code>~/.config/alacritty/alacritty.yml</code>.</p> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span>hints: +</span></span><span style="display:flex;"><span> enabled: +</span></span><span style="display:flex;"><span> - regex: <span style="color:#a31515">&#34;(mailto:|gemini:|gopher:|https:|http:|news:|file:|git:|ssh:|ftp:)\ +</span></span></span><span style="display:flex;"><span><span style="color:#a31515"> [^\u0000-\u001F\u007F-\u009F&lt;&gt;\&#34;\\s{-}\\^⟨⟩`]+&#34;</span> +</span></span><span style="display:flex;"><span> command: xdg-open +</span></span><span style="display:flex;"><span> post_processing: <span style="color:#00f">true</span> +</span></span><span style="display:flex;"><span> mouse: +</span></span><span style="display:flex;"><span> enabled: <span style="color:#00f">true</span> +</span></span><span style="display:flex;"><span> mods: Control +</span></span></code></pre><p>The following should work under any Linux system. For macOS, you will need to +change <code>command: xdg-open</code> to something else.</p> +<p>Now the links will be visible and clickable only when Control key is being +pressed.</p> +<p>Source: <a href="https://github.com/alacritty/alacritty/issues/5246">https://github.com/alacritty/alacritty/issues/5246</a></p> + + + + + + + Development environments with Nix + https://mitjafelicijan.com/development-environments-with-nix.html + Sun, 25 Jun 2023 16:38:10 +0200 + https://mitjafelicijan.com/development-environments-with-nix.html + Nix is amazing for making reproducible cross OS development environment. + <p>Nix is amazing for making reproducible cross OS development environment.</p> +<p>First you need to <a href="https://nixos.org/download.html">install Nix package +manager</a>.</p> +<ul> +<li>Create a file <code>shell.nix</code> in your project folder.</li> +<li>In the section that has <code>python3</code> etc add programs you want to use. These can +be CLI or GUI applications. It doesn't matter to Nix.</li> +</ul> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span>{ pkgs ? <span style="color:#00f">import</span> <span style="color:#a31515">&lt;nixpkgs&gt;</span> {} }: +</span></span><span style="display:flex;"><span> pkgs.mkShell { +</span></span><span style="display:flex;"><span> nativeBuildInputs = <span style="color:#00f">with</span> pkgs.buildPackages; [ +</span></span><span style="display:flex;"><span> python3 +</span></span><span style="display:flex;"><span> tinycc +</span></span><span style="display:flex;"><span> ]; +</span></span><span style="display:flex;"><span>} +</span></span></code></pre><p>And then run it <code>nix-shell</code>. By default it will look for <code>shell.nix</code> file. If +you want to specify a different file use <code>nix-shell file.nix</code>. That is about it.</p> +<p>When the shell is spawned it could happen that your <code>PS1</code> prompt will be +overwritten and your prompt will look differently. In that case you need to +either do <code>NIX_SHELL_PRESERVE_PROMPT=1 nix shell</code> or add +<code>NIX_SHELL_PRESERVE_PROMPT</code> variable to your <code>bashrc</code> or <code>zshrc</code> file and set it +to <code>1</code>.</p> +<p>I also have a modified <code>PS1</code> prompt for Bash that I use and it also catches the +usage of Nix shell.</p> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span>NIX_SHELL_PRESERVE_PROMPT=1 +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>parse_git_branch() { +</span></span><span style="display:flex;"><span> git branch 2&gt; /dev/null | sed -e <span style="color:#a31515">&#39;/^[^*]/d&#39;</span> -e <span style="color:#a31515">&#39;s/* \(.*\)/ (\1)/&#39;</span> +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>is_inside_nix_shell() { +</span></span><span style="display:flex;"><span> nix_shell_name=<span style="color:#a31515">&#34;</span><span style="color:#00f">$(</span>basename <span style="color:#a31515">&#34;</span>$IN_NIX_SHELL<span style="color:#a31515">&#34;</span> 2&gt;/dev/null<span style="color:#00f">)</span><span style="color:#a31515">&#34;</span> +</span></span><span style="display:flex;"><span> <span style="color:#00f">if</span> [[ -n <span style="color:#a31515">&#34;</span>$nix_shell_name<span style="color:#a31515">&#34;</span> ]]; <span style="color:#00f">then</span> +</span></span><span style="display:flex;"><span> echo <span style="color:#a31515">&#34; \e[0;36m(nix-shell)\e[0m&#34;</span> +</span></span><span style="display:flex;"><span> <span style="color:#00f">fi</span> +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>export PS1=<span style="color:#a31515">&#34;[\033[38;5;9m\]\u@\h\[</span><span style="color:#00f">$(</span>tput sgr0<span style="color:#00f">)</span><span style="color:#a31515">\]]</span><span style="color:#00f">$(</span>is_inside_nix_shell<span style="color:#00f">)</span><span style="color:#a31515">\[\033[33m\]\$(parse_git_branch)\[\033[00m\] \w\[</span><span style="color:#00f">$(</span>tput sgr0<span style="color:#00f">)</span><span style="color:#a31515">\] \n</span>$<span style="color:#a31515"> &#34;</span> +</span></span></code></pre><p>And this is what it looks like when you are in a Nix shell. Otherwise that part +of prompt is omitted</p> +<p><img src="/notes/ps1-prompt.png" alt="PS1 Prompt" /></p> +<p>More resources:</p> +<ul> +<li><a href="https://nixos.wiki/wiki/Development_environment_with_nix-shell">https://nixos.wiki/wiki/Development_environment_with_nix-shell</a></li> +<li><a href="https://nixos.wiki/wiki/Main_Page">https://nixos.wiki/wiki/Main_Page</a></li> +<li><a href="https://itsfoss.com/why-use-nixos/">https://itsfoss.com/why-use-nixos/</a></li> +<li><a href="https://mynixos.com/">https://mynixos.com/</a></li> +</ul> + + + + + + + Making cgit look nicer + https://mitjafelicijan.com/making-cgit-look-nicer.html + Sat, 24 Jun 2023 13:33:58 +0200 + https://mitjafelicijan.com/making-cgit-look-nicer.html + For personal use I have a private Git serverset up and I use GitHub just as a mirror. + <p>For personal use I have a <a href="https://git.mitjafelicijan.com">private Git server</a> +set up and I use GitHub just as a mirror. By default the cgit theme looks a bit +dated so I made the flowing theme.</p> +<ul> +<li><code>/etc/cgitrc</code></li> +</ul> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span>css=<span style="color:#a31515">/cgit.css</span> +</span></span><span style="display:flex;"><span>logo=<span style="color:#a31515">/startrek.gif</span> +</span></span><span style="display:flex;"><span>favicon=<span style="color:#a31515">/favicon.png</span> +</span></span><span style="display:flex;"><span>source-filter=<span style="color:#a31515">/usr/lib/cgit/filters/syntax-highlighting-edited.sh</span> +</span></span><span style="display:flex;"><span>about-filter=<span style="color:#a31515">/usr/lib/cgit/filters/about-formatting.sh</span> +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>local-time=<span style="color:#a31515">1</span> +</span></span><span style="display:flex;"><span>snapshots=<span style="color:#a31515">tar.gz</span> +</span></span><span style="display:flex;"><span>repository-sort=<span style="color:#a31515">age</span> +</span></span><span style="display:flex;"><span>cache-size=<span style="color:#a31515">1000</span> +</span></span><span style="display:flex;"><span>branch-sort=<span style="color:#a31515">age</span> +</span></span><span style="display:flex;"><span>summary-log=<span style="color:#a31515">200</span> +</span></span><span style="display:flex;"><span>max-atom-items=<span style="color:#a31515">50</span> +</span></span><span style="display:flex;"><span>max-repo-count=<span style="color:#a31515">100</span> +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>enable-index-owner=<span style="color:#a31515">0</span> +</span></span><span style="display:flex;"><span>enable-follow-links=<span style="color:#a31515">1</span> +</span></span><span style="display:flex;"><span>enable-log-filecount=<span style="color:#a31515">1</span> +</span></span><span style="display:flex;"><span>enable-log-linecount=<span style="color:#a31515">1</span> +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>root-title=<span style="color:#a31515">Place for code, experiments and other bullshit!</span> +</span></span><span style="display:flex;"><span>root-desc= +</span></span><span style="display:flex;"><span>clone-url=<span style="color:#a31515">git@git.mitjafelicijan.com:/home/git/$CGIT_REPO_URL</span> +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>mimetype.gif=<span style="color:#a31515">image/gif</span> +</span></span><span style="display:flex;"><span>mimetype.html=<span style="color:#a31515">text/html</span> +</span></span><span style="display:flex;"><span>mimetype.jpg=<span style="color:#a31515">image/jpeg</span> +</span></span><span style="display:flex;"><span>mimetype.jpeg=<span style="color:#a31515">image/jpeg</span> +</span></span><span style="display:flex;"><span>mimetype.pdf=<span style="color:#a31515">application/pdf</span> +</span></span><span style="display:flex;"><span>mimetype.png=<span style="color:#a31515">image/png</span> +</span></span><span style="display:flex;"><span>mimetype.svg=<span style="color:#a31515">image/svg+xml</span> +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>readme=<span style="color:#a31515">:README.md</span> +</span></span><span style="display:flex;"><span>readme=<span style="color:#a31515">:readme.md</span> +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#008000"># Must be at the end!</span> +</span></span><span style="display:flex;"><span>virtual-root=<span style="color:#a31515">/</span> +</span></span><span style="display:flex;"><span>scan-path=<span style="color:#a31515">/home/git/</span> +</span></span></code></pre><p>For <code>syntax-highlighting-edited.sh</code> follow instructions on +<a href="https://wiki.archlinux.org/title/Cgit#Using_highlight">https://wiki.archlinux.org/title/Cgit</a>.</p> +<ul> +<li><code>/usr/share/cgit/cgit.css</code></li> +</ul> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span>* { +</span></span><span style="display:flex;"><span> <span style="color:#00f">font-size</span>: 11<span style="color:#2b91af">pt</span>; +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>body { +</span></span><span style="display:flex;"><span> <span style="color:#00f">font-family</span>: <span style="color:#00f">monospace</span>; +</span></span><span style="display:flex;"><span> <span style="color:#00f">background</span>: <span style="color:#00f">white</span>; +</span></span><span style="display:flex;"><span> <span style="color:#00f">padding</span>: 1<span style="color:#2b91af">em</span>; +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>th, td { +</span></span><span style="display:flex;"><span> <span style="color:#00f">text-align</span>: <span style="color:#00f">left</span>; +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#008000">/* HEADER */</span> +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>#header { +</span></span><span style="display:flex;"><span> <span style="color:#00f">margin-bottom</span>: 1<span style="color:#2b91af">em</span>; +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>#header .<span style="color:#2b91af">logo</span> img { +</span></span><span style="display:flex;"><span> <span style="color:#00f">display</span>: <span style="color:#00f">block</span>; +</span></span><span style="display:flex;"><span> <span style="color:#00f">height</span>: 3<span style="color:#2b91af">em</span>; +</span></span><span style="display:flex;"><span> <span style="color:#00f">margin-right</span>: 10<span style="color:#2b91af">px</span>; +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>#header .<span style="color:#2b91af">sub</span>.<span style="color:#2b91af">right</span> { +</span></span><span style="display:flex;"><span> <span style="color:#00f">display</span>: <span style="color:#00f">none</span>; +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#008000">/* FOOTER */</span> +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>.<span style="color:#2b91af">footer</span> { +</span></span><span style="display:flex;"><span> <span style="color:#00f">margin-top</span>: 2<span style="color:#2b91af">em</span>; +</span></span><span style="display:flex;"><span> <span style="color:#00f">font-style</span>: <span style="color:#00f">italic</span>; +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>.<span style="color:#2b91af">footer</span>, .<span style="color:#2b91af">footer</span> a { +</span></span><span style="display:flex;"><span> <span style="color:#00f">color</span>: <span style="color:#00f">gray</span>; +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#008000">/* TABS */</span> +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>.<span style="color:#2b91af">tabs</span> a { +</span></span><span style="display:flex;"><span> <span style="color:#00f">margin-bottom</span>: 2<span style="color:#2b91af">em</span>; +</span></span><span style="display:flex;"><span> <span style="color:#00f">display</span>: <span style="color:#00f">inline-block</span>; +</span></span><span style="display:flex;"><span> <span style="color:#00f">margin-right</span>: 1<span style="color:#2b91af">em</span>; +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>.<span style="color:#2b91af">tabs</span> td a:only-child { +</span></span><span style="display:flex;"><span> <span style="color:#00f">display</span>: <span style="color:#00f">none</span>; +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#008000">/* HIDING ELEMENTS */</span> +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>.<span style="color:#2b91af">cgit-panel</span>, .<span style="color:#2b91af">form</span> { +</span></span><span style="display:flex;"><span> <span style="color:#00f">display</span>: <span style="color:#00f">none</span>; +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#008000">/* LISTS */</span> +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>.<span style="color:#2b91af">list</span> td, .<span style="color:#2b91af">list</span> th { +</span></span><span style="display:flex;"><span> <span style="color:#00f">padding-right</span>: 2<span style="color:#2b91af">em</span>; +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>.<span style="color:#2b91af">list</span> .<span style="color:#2b91af">nohover</span> a { +</span></span><span style="display:flex;"><span> <span style="color:#00f">color</span>: <span style="color:#00f">black</span>; +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>.<span style="color:#2b91af">list</span> .<span style="color:#2b91af">button</span> { +</span></span><span style="display:flex;"><span> <span style="color:#00f">padding-right</span>: 0.5<span style="color:#2b91af">em</span>; +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#008000">/* COMMIT */</span> +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>.<span style="color:#2b91af">commit-subject</span> { +</span></span><span style="display:flex;"><span> <span style="color:#00f">padding</span>: 1<span style="color:#2b91af">em</span> 0; +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>.<span style="color:#2b91af">decoration</span> a { +</span></span><span style="display:flex;"><span> <span style="color:#00f">padding-left</span>: 0.5<span style="color:#2b91af">em</span>; +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>.<span style="color:#2b91af">commit-info</span> th { +</span></span><span style="display:flex;"><span> <span style="color:#00f">padding-right</span>: 1<span style="color:#2b91af">em</span>; +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>.<span style="color:#2b91af">commit-subject</span> { +</span></span><span style="display:flex;"><span> <span style="color:#00f">padding</span>: 2<span style="color:#2b91af">em</span> 0; +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>table.<span style="color:#2b91af">diff</span> div.<span style="color:#2b91af">head</span> { +</span></span><span style="display:flex;"><span> <span style="color:#00f">padding-top</span>: 2<span style="color:#2b91af">em</span>; +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>table.<span style="color:#2b91af">diffstat</span> td { +</span></span><span style="display:flex;"><span> <span style="color:#00f">padding-right</span>: 1<span style="color:#2b91af">em</span>; +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#008000">/* CONTENT */</span> +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>.<span style="color:#2b91af">linenumbers</span> { +</span></span><span style="display:flex;"><span> <span style="color:#00f">padding-right</span>: 0.5<span style="color:#2b91af">em</span>; +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>.<span style="color:#2b91af">linenumbers</span> a { +</span></span><span style="display:flex;"><span> <span style="color:#00f">color</span>: <span style="color:#00f">gray</span>; +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>.<span style="color:#2b91af">pager</span> { +</span></span><span style="display:flex;"><span> <span style="color:#00f">display</span>: <span style="color:#00f">flex</span>; +</span></span><span style="display:flex;"><span> <span style="color:#00f">list-style-type</span>: <span style="color:#00f">none</span>; +</span></span><span style="display:flex;"><span> <span style="color:#00f">padding</span>: 0; +</span></span><span style="display:flex;"><span> gap: 0.5<span style="color:#2b91af">em</span>; +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#008000">/* DIFF COLORS */</span> +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>table.<span style="color:#2b91af">diff</span> { +</span></span><span style="display:flex;"><span> <span style="color:#00f">width</span>: 100<span style="color:#2b91af">%</span>; +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>table.<span style="color:#2b91af">diff</span> td { +</span></span><span style="display:flex;"><span> <span style="color:#00f">white-space</span>: <span style="color:#00f">pre</span>; +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>table.<span style="color:#2b91af">diff</span> td div.<span style="color:#2b91af">head</span> { +</span></span><span style="display:flex;"><span> <span style="color:#00f">font-weight</span>: <span style="color:#00f">bold</span>; +</span></span><span style="display:flex;"><span> <span style="color:#00f">margin-top</span>: 1<span style="color:#2b91af">em</span>; +</span></span><span style="display:flex;"><span> <span style="color:#00f">color</span>: <span style="color:#00f">black</span>; +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>table.<span style="color:#2b91af">diff</span> td div.<span style="color:#2b91af">hunk</span> { +</span></span><span style="display:flex;"><span> <span style="color:#00f">color</span>: #009; +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>table.<span style="color:#2b91af">diff</span> td div.<span style="color:#2b91af">add</span> { +</span></span><span style="display:flex;"><span> <span style="color:#00f">color</span>: <span style="color:#00f">green</span>; +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>table.<span style="color:#2b91af">diff</span> td div.<span style="color:#2b91af">del</span> { +</span></span><span style="display:flex;"><span> <span style="color:#00f">color</span>: <span style="color:#00f">red</span>; +</span></span><span style="display:flex;"><span>} +</span></span></code></pre> + + + + + + Simple presentations with Markdown + https://mitjafelicijan.com/presentations-with-markdown.html + Wed, 21 Jun 2023 08:54:48 +0200 + https://mitjafelicijan.com/presentations-with-markdown.html + A simple way to make presentations without using desktop apps or using onlineservices is https://github. + <p>A simple way to make presentations without using desktop apps or using online +services is <a href="https://github.com/remarkjs/remark">https://github.com/remarkjs/remark</a>.</p> +<p>First create <code>index.html</code> and be sure you make changes to <code>config</code> variable.</p> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span><span style="color:#00f">&lt;!DOCTYPE html&gt;</span> +</span></span><span style="display:flex;"><span>&lt;html&gt; +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>&lt;head&gt; +</span></span><span style="display:flex;"><span> &lt;title&gt;&lt;/title&gt; +</span></span><span style="display:flex;"><span> &lt;meta charset=<span style="color:#a31515">&#34;utf-8&#34;</span>&gt; +</span></span><span style="display:flex;"><span> &lt;style&gt; +</span></span><span style="display:flex;"><span> body { +</span></span><span style="display:flex;"><span> <span style="color:#00f">font-family</span>: <span style="color:#a31515">&#39;SF Pro Display&#39;</span>; +</span></span><span style="display:flex;"><span> } +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span> .<span style="color:#2b91af">remark-code</span>, +</span></span><span style="display:flex;"><span> .<span style="color:#2b91af">remark-inline-code</span> { +</span></span><span style="display:flex;"><span> <span style="color:#00f">font-family</span>: <span style="color:#a31515">&#39;SF Mono&#39;</span>; +</span></span><span style="display:flex;"><span> <span style="color:#00f">font-size</span>: <span style="color:#00f">medium</span>; +</span></span><span style="display:flex;"><span> <span style="color:#00f">background-color</span>: <span style="color:#00f">gainsboro</span>; +</span></span><span style="display:flex;"><span> <span style="color:#00f">border-radius</span>: 5<span style="color:#2b91af">px</span>; +</span></span><span style="display:flex;"><span> <span style="color:#00f">padding</span>: 0 5<span style="color:#2b91af">px</span>; +</span></span><span style="display:flex;"><span> } +</span></span><span style="display:flex;"><span> &lt;/style&gt; +</span></span><span style="display:flex;"><span>&lt;/head&gt; +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>&lt;body&gt; +</span></span><span style="display:flex;"><span> &lt;textarea id=<span style="color:#a31515">&#34;source&#34;</span>&gt;&lt;/textarea&gt; +</span></span><span style="display:flex;"><span> &lt;script src=<span style="color:#a31515">&#34;https://remarkjs.com/downloads/remark-latest.min.js&#34;</span>&gt;&lt;/script&gt; +</span></span><span style="display:flex;"><span> &lt;script&gt; +</span></span><span style="display:flex;"><span> <span style="color:#00f">const</span> config = { +</span></span><span style="display:flex;"><span> title: <span style="color:#a31515">&#39;My presentation&#39;</span>, +</span></span><span style="display:flex;"><span> file: <span style="color:#a31515">&#39;presentation.md&#39;</span>, +</span></span><span style="display:flex;"><span> }; +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span> document.title = config.title; +</span></span><span style="display:flex;"><span> remark.create({ sourceUrl: config.file }); +</span></span><span style="display:flex;"><span> &lt;/script&gt; +</span></span><span style="display:flex;"><span>&lt;/body&gt; +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>&lt;/html&gt; +</span></span></code></pre><p>Now the markdown file <code>presentation.md</code> with presenetation. <code>---</code> is used to +separate slides. Other stuff is just pure markdown.</p> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span>class: center, middle +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="font-weight:bold"># Main title of the presentation +</span></span></span><span style="display:flex;"><span><span style="font-weight:bold"></span> +</span></span><span style="display:flex;"><span>--- +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="font-weight:bold"># Fist slide +</span></span></span><span style="display:flex;"><span><span style="font-weight:bold"></span> +</span></span><span style="display:flex;"><span>Eveniet mollitia nemo architecto rerum aut iure iste. Sit nihil nobis libero iusto fugit nam laudantium ut. Dignissimos corrupti laudantium nisi. +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#00f">-</span> Lorem ipsum dolor sit amet, consectetur adipiscing elit. +</span></span><span style="display:flex;"><span><span style="color:#00f">-</span> Integer aliquet mauris a felis fringilla, ut congue massa finibus. +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>--- +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="font-weight:bold"># Slide two +</span></span></span><span style="display:flex;"><span><span style="font-weight:bold"></span> +</span></span><span style="display:flex;"><span><span style="color:#00f">-</span> Lorem ipsum dolor sit amet, consectetur adipiscing elit. +</span></span><span style="display:flex;"><span><span style="color:#00f">-</span> Vestibulum eget leo ac dolor venenatis pulvinar. +</span></span></code></pre> + + + + + + Bulk thumbnails + https://mitjafelicijan.com/bulk-make-thumbnails.html + Sun, 04 Jun 2023 20:46:56 +0200 + https://mitjafelicijan.com/bulk-make-thumbnails.html + Make bulk thumbnails of JPGs with ImageMagick. + <p>Make bulk thumbnails of JPGs with ImageMagick.</p> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span><span style="color:#00f">#!/bin/bash +</span></span></span><span style="display:flex;"><span><span style="color:#00f"></span> +</span></span><span style="display:flex;"><span>directory=<span style="color:#a31515">&#34;./images/&#34;</span> +</span></span><span style="display:flex;"><span>dimensions=<span style="color:#a31515">&#34;360x360&#34;</span> +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#00f">for</span> file in <span style="color:#a31515">&#34;</span>$directory<span style="color:#a31515">&#34;</span>*.jpg; <span style="color:#00f">do</span> +</span></span><span style="display:flex;"><span> convert <span style="color:#a31515">&#34;</span>$file<span style="color:#a31515">&#34;</span> -resize $dimensions <span style="color:#a31515">&#34;</span>$file<span style="color:#a31515">&#34;</span> <span style="color:#a31515">&#34;</span><span style="color:#a31515">${</span>file%.*<span style="color:#a31515">}</span><span style="color:#a31515">-thumbnail.jpg&#34;</span> +</span></span><span style="display:flex;"><span><span style="color:#00f">done</span> +</span></span></code></pre> + + + + + + Edsger W. Dijkstra Manuscripts ebook + https://mitjafelicijan.com/ewd-manuscripts-ebook.html + Thu, 01 Jun 2023 22:47:56 +0200 + https://mitjafelicijan.com/ewd-manuscripts-ebook.html + I love reading the original manuscripts of Edsger W. + <p>I love reading the original manuscripts of Edsger W. Dijkstra. They are +available online at the University of Texas at Austin website, but I also found +MOBI version. I converted it into ePub as well.</p> +<p>Downloads:</p> +<ul> +<li><a href="https://files.mitjafelicijan.com/haphazard/ewd-manuscripts.mobi">MOBI version of all Manuscripts</a></li> +<li><a href="https://files.mitjafelicijan.com/haphazard/ewd-manuscripts.epub">ePub version of all Manuscripts</a></li> +</ul> +<p>Sources and credits:</p> +<ul> +<li><a href="https://www.cs.utexas.edu/users/EWD/index00xx.html">Original manuscripts from University of Texas at Austin</a></li> +<li><a href="https://github.com/evmn/The-Manuscripts-of-Edsger-W.-Dijkstra">Original repository of MOBI version</a></li> +</ul> + + + + + + + + + Extending dte editor + https://mitjafelicijan.com/extending-dte-editor.html + Wed, 31 May 2023 08:12:45 +0200 + https://mitjafelicijan.com/extending-dte-editor.html + dte is an interesting editor I startedusing lately more and more. + <p><a href="https://craigbarnes.gitlab.io/dte/"><code>dte</code></a> is an interesting editor I started +using lately more and more. Since it is using +<a href="https://linux.die.net/man/3/execvp"><code>execvp()</code></a> it can be easily extended. I +needed comment/uncomment feature so I created a small utility that does this for +me. Code lives on repository <a href="https://git.mitjafelicijan.com/dte-extensions.git/about/">dte +extensions</a> but this +utilities can be used for whatever you want. Make sure you have version 1.11 or +above.</p> +<p>Next one will be invoking formatter based on the type of a file.</p> +<p>My config that works for me.</p> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span>set show-line-numbers true; +</span></span><span style="display:flex;"><span>set tab-width 4; +</span></span><span style="display:flex;"><span>set <span style="color:#00f">case</span>-sensitive-search false; +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#008000"># Special aliases</span> +</span></span><span style="display:flex;"><span>alias m_comment <span style="color:#a31515">&#39;exec -s -i line -o buffer -e errmsg ~/.dte/bin/comment&#39;</span> +</span></span><span style="display:flex;"><span>alias m_format <span style="color:#a31515">&#39;save; exec go fmt .; reload&#39;</span> +</span></span><span style="display:flex;"><span>alias m_duplicate <span style="color:#a31515">&#39;copy;paste&#39;</span>; +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#008000"># Useful aliases.</span> +</span></span><span style="display:flex;"><span>alias m_force_close <span style="color:#a31515">&#39;quit -f&#39;</span>; +</span></span><span style="display:flex;"><span>alias m_reload <span style="color:#a31515">&#39;close; open $FILE&#39;</span> +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#008000"># Key bindings.</span> +</span></span><span style="display:flex;"><span>bind M-s save; +</span></span><span style="display:flex;"><span>bind M-q m_force_close; +</span></span><span style="display:flex;"><span>bind M-z refresh; +</span></span><span style="display:flex;"><span>bind C-down blkdown; +</span></span><span style="display:flex;"><span>bind C-up blkup; +</span></span><span style="display:flex;"><span>bind C-_ m_comment; +</span></span><span style="display:flex;"><span>bind M-. m_format; +</span></span><span style="display:flex;"><span>bind C-d m_duplicate; +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#008000"># Syntax highlighting.</span> +</span></span><span style="display:flex;"><span>hi preproc magenta; +</span></span><span style="display:flex;"><span>hi keyword red; +</span></span><span style="display:flex;"><span>hi linenumber blue; +</span></span><span style="display:flex;"><span>hi comment cyan; +</span></span></code></pre> + + + + + + Grep to Less that maintain colors + https://mitjafelicijan.com/grep-to-less-maintain-colors.html + Mon, 29 May 2023 21:27:07 +0200 + https://mitjafelicijan.com/grep-to-less-maintain-colors.html + I often use grep to search for todo&#39;s in my code and other people&#39;s code andthen pipe them in less and I missed having colors that grep outputs in less. + <p>I often use <code>grep</code> to search for todo's in my code and other people's code and +then pipe them in <code>less</code> and I missed having colors that grep outputs in <code>less</code>.</p> +<ul> +<li>Grep's <code>--color=always</code> use markers to highlight the matching strings.</li> +<li>Less's <code>-R</code> option outputs &quot;raw&quot; control characters.</li> +</ul> +<p>You could use <code>alias grep='grep --color=always'</code> and <code>alias less='less -R'</code> or +create todo function in your <code>.bashrc</code> that accepts first argument as search +string.</p> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span><span style="color:#008000"># This is where the magic happens.</span> +</span></span><span style="display:flex;"><span>grep --color=always -rni <span style="color:#a31515">&#34;TODO:&#34;</span> | less -R +</span></span></code></pre><p><img src="/notes/grep-less.png" alt="Less and grep" /></p> + + + + + + + Easy measure time took in a bash script + https://mitjafelicijan.com/easy-time-took-in-bash.html + Sun, 28 May 2023 17:53:20 +0200 + https://mitjafelicijan.com/easy-time-took-in-bash.html + In Bash, the $SECONDS variable is a special variable that automatically keepstrack of the number of seconds since the current shell or script startedexecuting. + <p>In Bash, the <code>$SECONDS</code> variable is a special variable that automatically keeps +track of the number of seconds since the current shell or script started +executing. It starts counting from the moment the script begins running.</p> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span><span style="color:#00f">#!/bin/bash +</span></span></span><span style="display:flex;"><span><span style="color:#00f"></span> +</span></span><span style="display:flex;"><span><span style="color:#008000"># Reset the timer to zero.</span> +</span></span><span style="display:flex;"><span>SECONDS=0 +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#008000"># Do something.</span> +</span></span><span style="display:flex;"><span>sleep 5 +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#008000"># Print the time elapsed.</span> +</span></span><span style="display:flex;"><span>echo <span style="color:#a31515">&#34;Time taken: </span>$SECONDS<span style="color:#a31515"> seconds&#34;</span> +</span></span></code></pre> + + + + + + Make DCSS playable on 4k displays + https://mitjafelicijan.com/dcss-on-4k-display.html + Sat, 27 May 2023 19:35:11 +0200 + https://mitjafelicijan.com/dcss-on-4k-display.html + Dungeon Crawl Stone Soup has a a very small font by default. + <p>Dungeon Crawl Stone Soup has a a very small font by default. On a 4k display, it +is barely readable. This is how I made it playable.</p> +<p>Make a file <code>~/.crawlrc</code> with the following content:</p> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span><span style="color:#008000"># Adjust the sizes to your liking.</span> +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>tile_font_crt_size = <span style="color:#a31515">32</span> +</span></span><span style="display:flex;"><span>tile_font_stat_size = <span style="color:#a31515">32</span> +</span></span><span style="display:flex;"><span>tile_font_msg_size = <span style="color:#a31515">32</span> +</span></span><span style="display:flex;"><span>tile_font_tip_size = <span style="color:#a31515">32</span> +</span></span><span style="display:flex;"><span>tile_font_lbl_size = <span style="color:#a31515">32</span> +</span></span><span style="display:flex;"><span>tile_sidebar_pixels = <span style="color:#a31515">64</span> +</span></span></code></pre><p>To zoom in and out in viewport, press <code>Ctrl+</code> and <code>Ctrl-</code> respectively.</p> +<p>All the possible options are documented in the <a href="https://github.com/crawl/crawl/blob/master/crawl-ref/docs/options_guide.txt">Dungeon Crawl Stone Soup Options +Guide</a> +file.</p> + + + + + + + Drawing Pixels in Plan9 + https://mitjafelicijan.com/drawing-pixels-in-plan9.html + Sat, 27 May 2023 17:41:33 +0200 + https://mitjafelicijan.com/drawing-pixels-in-plan9.html + I have started exploring Plan9&#39;s graphics capabilities. + <p>I have started exploring Plan9's graphics capabilities. This is a hello world +alternative for drawing that draws a yellow square on a blue background.</p> +<p>More information:</p> +<ul> +<li><a href="https://github.com/0intro/plan9/blob/main/sys/include/draw.h">draw.h header file</a> +contains all the drawing functions</li> +<li><a href="https://9fans.github.io/plan9port/man/man3/draw.html">draw man page</a> +has a bit more digestable descriptions of the draw functions</li> +<li><a href="https://9fans.github.io/plan9port/man/man3/graphics.html">graphics man page</a> +has a bit more digestable descriptions of the graphics functions</li> +<li><a href="https://9fans.github.io/plan9port/man/man3/">all man pages</a> +can be a valuable resource for learning about the system</li> +</ul> +<p><img src="/notes/plan9-pixels.png" alt="Plan9 Howdy World!" /></p> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span><span style="color:#008000">// main.c +</span></span></span><span style="display:flex;"><span><span style="color:#008000"></span><span style="color:#00f">#include</span> <span style="color:#00f">&lt;u.h&gt;</span><span style="color:#00f"> +</span></span></span><span style="display:flex;"><span><span style="color:#00f">#include</span> <span style="color:#00f">&lt;libc.h&gt;</span><span style="color:#00f"> +</span></span></span><span style="display:flex;"><span><span style="color:#00f">#include</span> <span style="color:#00f">&lt;draw.h&gt;</span><span style="color:#00f"> +</span></span></span><span style="display:flex;"><span><span style="color:#00f">#include</span> <span style="color:#00f">&lt;cursor.h&gt;</span><span style="color:#00f"> +</span></span></span><span style="display:flex;"><span><span style="color:#00f"></span> +</span></span><span style="display:flex;"><span><span style="color:#2b91af">void</span> +</span></span><span style="display:flex;"><span>main() +</span></span><span style="display:flex;"><span>{ +</span></span><span style="display:flex;"><span> ulong co; +</span></span><span style="display:flex;"><span> Image *im, *bg; +</span></span><span style="display:flex;"><span> co = 0x0000FFFF; +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span> <span style="color:#00f">if</span> (initdraw(nil, nil, argv0) &lt; 0) +</span></span><span style="display:flex;"><span> { +</span></span><span style="display:flex;"><span> sysfatal(<span style="color:#a31515">&#34;%s: %r&#34;</span>, argv0); +</span></span><span style="display:flex;"><span> } +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span> im = allocimage(display, Rect(0, 0, 300, 300), RGB24, 0, DYellow); +</span></span><span style="display:flex;"><span> bg = allocimage(display, Rect(0, 0, 1, 1), RGB24, 1, co); +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span> <span style="color:#00f">if</span> (im == nil || bg == nil) +</span></span><span style="display:flex;"><span> { +</span></span><span style="display:flex;"><span> sysfatal(<span style="color:#a31515">&#34;not enough memory&#34;</span>); +</span></span><span style="display:flex;"><span> } +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span> draw(screen, screen-&gt;r, bg, nil, ZP); +</span></span><span style="display:flex;"><span> draw(screen, screen-&gt;r, im, nil, Pt(-40, -40)); +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span> flushimage(display, Refnone); +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span> <span style="color:#008000">// Wait 10 seconds before exiting. +</span></span></span><span style="display:flex;"><span><span style="color:#008000"></span> sleep(10000); +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span> exits(nil); +</span></span><span style="display:flex;"><span>} +</span></span></code></pre><p>And then compile with <code>mk</code> (mkfile below):</p> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span><span style="color:#008000"># mkfile +</span></span></span><span style="display:flex;"><span><span style="color:#008000"></span><span style="">&lt;/$objtype/mkfile</span> +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>RC=/rc/bin +</span></span><span style="display:flex;"><span>BIN=/$objtype/bin +</span></span><span style="display:flex;"><span>MAN=/sys/man +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>main: +</span></span><span style="display:flex;"><span> $CC $CFLAGS main.c +</span></span><span style="display:flex;"><span> $LD $LDFLAGS -o main main.$O +</span></span></code></pre><p>And run with <code>./main</code>. To exit the program, press <code>Delete key</code> (strange but this +is the alternative for Ctrl+C).</p> +<p><em>This is <strong>very cool</strong> indeed!</em></p> + + + + + + + Cronjobs on Github with Github Actions + https://mitjafelicijan.com/cronjobs-github-with-actions.html + Sat, 27 May 2023 00:35:36 +0200 + https://mitjafelicijan.com/cronjobs-github-with-actions.html + In the root of your repository create a folder . + <p>In the root of your repository create a folder <code>.github/workflows</code> and in that +folder create a file a file <code>cron.yaml</code>. This file can be named whatever you +wish. But it has to be a <code>yaml</code> file.</p> +<p>File below (<code>.github/workflows/cron.yaml</code>) describes an action that will trigger +every six hours and it will curl example.com.</p> +<p>However. Be sure that you have enough credits. Free account is not that generous +with the minutes they give you for free. Check more about GitHub Actions usage +on their website <a href="https://docs.github.com/en/actions">https://docs.github.com/en/actions</a>.</p> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span><span style="color:#008000"># .github/workflows/cron.yaml</span> +</span></span><span style="display:flex;"><span>name: Do a curl every 6 hours +</span></span><span style="display:flex;"><span>on: +</span></span><span style="display:flex;"><span> schedule: +</span></span><span style="display:flex;"><span> - cron: <span style="color:#a31515">&#39;0 */6 * * *&#39;</span> +</span></span><span style="display:flex;"><span>jobs: +</span></span><span style="display:flex;"><span> cron: +</span></span><span style="display:flex;"><span> runs-on: ubuntu-latest +</span></span><span style="display:flex;"><span> steps: +</span></span><span style="display:flex;"><span> - name: Call some url +</span></span><span style="display:flex;"><span> run: curl &#39;https://example.com&#39; +</span></span></code></pre> + + + + + + Dungeon Crawl Stone Soup - New player guide + https://mitjafelicijan.com/dcss-new-player-guide.html + Thu, 25 May 2023 22:00:00 +0200 + https://mitjafelicijan.com/dcss-new-player-guide.html + An amazing game deserves an amazing guide. + <p>An amazing game deserves an amazing guide. All this material can be find in some +form on another on <a href="https://github.com/crawl/crawl">craw's</a> official repository.</p> +<ul> +<li><a href="/notes/dcss-quickstart.pdf">DCSS Quickstart</a> - Very short introduction to the +game</li> +<li><a href="/notes/dcss_manual.pdf">DCSS Manual</a> - Extensive manual about the game</li> +</ul> +<p><img src="/notes/dcss.jpg" alt="Dungeon Crawl Stone Soup" /></p> +<p><strong>Movement and Exploration</strong></p> +<ul> +<li>You can move around with the numpad (try numlock on and off), vi-keys, or +clicking with the mouse. Arrow keys work, though you can't move diagonally +with them. Pressing Shift and a direction will move until you see/hit +something.</li> +<li>Pressing <code>&gt;</code> will take you down a staircase, and <code>&lt;</code> to go up a staircase.</li> +<li>You can open doors by walking into them, and close them with <code>C</code>.</li> +<li>You can autoexplore by pressing <code>o</code>.</li> +<li>You can re-view recent messages with <code>Ctrl-p</code>.</li> +</ul> +<p><strong>Monsters and Combat</strong></p> +<ul> +<li>You can pick up items with <code>,</code> or <code>g</code>.</li> +<li>Wield weapons with <code>w</code>. Weapons have different stats. +<ul> +<li>(You may also engage in Unarmed Combat, though it isn't very effective when +untrained).</li> +</ul> +</li> +<li>Attack monsters in melee by walking in their direction (or with +Ctrl-direction).</li> +<li>You can wait with <code>.</code> or <code>s</code>, passing your turn - such as to get monsters into +a corridor with you.</li> +<li>You can rest with <code>5</code>, waiting until you are fully healed, or something +noteworthy happens.</li> +<li>Either mouseover and rightclick, or use <code>x</code> then <code>v</code> on the monster to examine +monsters. Monsters with a red border are 'dangerous' relative to your current +XP level (XL).</li> +<li>Quiver (often ranged) actions for further use with <code>Q</code>.</li> +<li>You can fire ranged weapons manually with <code>f</code>, or auto-target your quiver with +<code>p</code> or <code>Shift-Tab</code>. Throwing weapons can be thrown immediately, while +launchers (like bows) need to be wielded first.</li> +</ul> +<p><strong>Items and Inventory</strong></p> +<ul> +<li>View your inventory by pressing <code>i</code>. Most item related commands can also be +done with this menu.</li> +<li>You can wear amour with <code>W;</code> amour gives <code>AC</code>, while heavier body armour +reduces <code>EV</code>.</li> +<li>Autoexplore will automatically pick up useful items, such as potions and +scrolls, if you aren't in danger.</li> +<li>You can read scrolls with <code>r</code> and drink (&quot;quaff&quot;) potions with <code>q</code>.</li> +<li>Equipment items may have brands, with special properties. Branded equipment is +blue when unidentified.</li> +<li>Equipment items may be artifacts, often with unique properties, and are +unmodifiable. They are written in white.</li> +<li>You can evoke wands with <code>V</code>.</li> +<li>You can put on jewelry with <code>P</code>, and remove it with <code>R</code>.</li> +<li>Gold is used in shops, which can be interacted with by either <code>&gt;</code> or <code>&lt;</code>.</li> +</ul> +<p><strong>Magic and Spellcasting</strong></p> +<ul> +<li>Once you find a spellbook, you can memorize spells with <code>M</code>.</li> +<li>You need to be the same XL as the spell's spell level in order to learn it, in +addition to training magical skill (to lower failure rate).</li> +<li>Cast spells by pressing <code>z</code>, then the letter assigned to the spell. You may +also Quiver a spell and then use it like a ranged weapon (with Shift-Tab).</li> +<li>You can view your memorized spells by pressing <code>I</code> (capital-i) or <code>z</code>.</li> +<li>Like HP, you can recover MP by resting (with 5).</li> +<li>Many spells can be positioned more effectively, or combined with other spells, +in order to get (more effective) use out of them.</li> +<li>Heavier body amour and shields hamper spellcasting.</li> +</ul> +<p><strong>Gods and Divine Abilities</strong></p> +<ul> +<li>You may look at a god's overview by praying at their altar (with <code>&gt;</code> or <code>&lt;</code>). +After praying, you can worship the god by pressing Enter afterwards.</li> +<li>Gods all have unique features about them. Trog, the god of the tutorial, is +also the god of rage and bloodshed, and so despises spellcasting.</li> +<li>Gods like and dislike different things. Most gods either like killing things +(like Trog) or exploring new areas (like Elyvilon), rewarding you piety +(divine favor) for doing so.</li> +<li>You should learn to use and even rely on divine abilities often, as they are +usually very strong. Trog's Berserk gives you 1.5x health, 1.5x speed (to all +valid actions), and a big damage boost. Note that Berserk prevents most +actions other than move and melee attack, and runs out very quickly if you +aren't attacking. And after berserk ends, you are slowed down and can't +berserk again for a short time.</li> +<li>In addition, the vast majority of abilities consume piety in the process. +Regardless, this ability is very cheap, and the benefits are incredible, so +don't hold back!</li> +<li>Pressing <code>^</code> will let you view your current god, abilities, and piety.</li> +</ul> + + + + + + + Display xterm color palette + https://mitjafelicijan.com/write-iso-usb.html + Thu, 25 May 2023 12:00:00 +0200 + https://mitjafelicijan.com/write-iso-usb.html + bash xterm-palette. + <ul> +<li><code>bash xterm-palette.sh</code> - will show you number of max colors available</li> +<li><code>bash xterm-palette.sh -v</code> - will create a list of all colors with codes</li> +</ul> +<p><img src="/notes/xterm-palette.png" alt="xterm color palette" /></p> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span><span style="color:#00f">#!/usr/bin/env bash +</span></span></span><span style="display:flex;"><span><span style="color:#00f"></span><span style="color:#008000"># xterm-palette.sh</span> +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>trap <span style="color:#a31515">&#39;tput sgr0&#39;</span> exit <span style="color:#008000"># Clean up even if user hits ^C</span> +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#00f">function</span> setfg () { +</span></span><span style="display:flex;"><span> printf <span style="color:#a31515">&#39;\e[38;5;%dm&#39;</span> $1 +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#00f">function</span> setbg () { +</span></span><span style="display:flex;"><span> printf <span style="color:#a31515">&#39;\e[48;5;%dm&#39;</span> $1 +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#00f">function</span> showcolors() { +</span></span><span style="display:flex;"><span> <span style="color:#008000"># Given an integer, display that many colors</span> +</span></span><span style="display:flex;"><span> <span style="color:#00f">for</span> ((i=0; i&lt;$1; i++)) +</span></span><span style="display:flex;"><span> <span style="color:#00f">do</span> +</span></span><span style="display:flex;"><span> printf <span style="color:#a31515">&#39;%4d &#39;</span> $i +</span></span><span style="display:flex;"><span> setbg $i +</span></span><span style="display:flex;"><span> tput el +</span></span><span style="display:flex;"><span> tput sgr0 +</span></span><span style="display:flex;"><span> echo +</span></span><span style="display:flex;"><span> <span style="color:#00f">done</span> +</span></span><span style="display:flex;"><span> tput sgr0 el +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#008000"># First, test if terminal supports OSC 4 at all.</span> +</span></span><span style="display:flex;"><span>printf <span style="color:#a31515">&#39;\e]4;%d;?\a&#39;</span> 0 +</span></span><span style="display:flex;"><span>read -d <span style="color:#a31515">$&#39;\a&#39;</span> -s -t 0.1 &lt;/dev/tty +</span></span><span style="display:flex;"><span><span style="color:#00f">if</span> [ -z <span style="color:#a31515">&#34;</span>$REPLY<span style="color:#a31515">&#34;</span> ] +</span></span><span style="display:flex;"><span><span style="color:#00f">then</span> +</span></span><span style="display:flex;"><span> <span style="color:#008000"># OSC 4 not supported, so we&#39;ll fall back to terminfo</span> +</span></span><span style="display:flex;"><span> max=<span style="color:#00f">$(</span>tput colors<span style="color:#00f">)</span> +</span></span><span style="display:flex;"><span><span style="color:#00f">else</span> +</span></span><span style="display:flex;"><span> <span style="color:#008000"># OSC 4 is supported, so use it for a binary search</span> +</span></span><span style="display:flex;"><span> min=0 +</span></span><span style="display:flex;"><span> max=256 +</span></span><span style="display:flex;"><span> <span style="color:#00f">while</span> [[ <span style="color:#00f">$((</span>min+1<span style="color:#00f">))</span> -lt $max ]] +</span></span><span style="display:flex;"><span> <span style="color:#00f">do</span> +</span></span><span style="display:flex;"><span> i=<span style="color:#00f">$((</span> (min+max)/2 <span style="color:#00f">))</span> +</span></span><span style="display:flex;"><span> printf <span style="color:#a31515">&#39;\e]4;%d;?\a&#39;</span> $i +</span></span><span style="display:flex;"><span> read -d <span style="color:#a31515">$&#39;\a&#39;</span> -s -t 0.1 &lt;/dev/tty +</span></span><span style="display:flex;"><span> <span style="color:#00f">if</span> [ -z <span style="color:#a31515">&#34;</span>$REPLY<span style="color:#a31515">&#34;</span> ] +</span></span><span style="display:flex;"><span> <span style="color:#00f">then</span> +</span></span><span style="display:flex;"><span> max=$i +</span></span><span style="display:flex;"><span> <span style="color:#00f">else</span> +</span></span><span style="display:flex;"><span> min=$i +</span></span><span style="display:flex;"><span> <span style="color:#00f">fi</span> +</span></span><span style="display:flex;"><span> <span style="color:#00f">done</span> +</span></span><span style="display:flex;"><span><span style="color:#00f">fi</span> +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#008000"># If -v is given, show all the colors</span> +</span></span><span style="display:flex;"><span><span style="color:#00f">case</span> <span style="color:#a31515">${</span>1-none<span style="color:#a31515">}</span> in +</span></span><span style="display:flex;"><span> none) +</span></span><span style="display:flex;"><span> echo $max +</span></span><span style="display:flex;"><span> ;; +</span></span><span style="display:flex;"><span> -v) +</span></span><span style="display:flex;"><span> showcolors $max +</span></span><span style="display:flex;"><span> ;; +</span></span><span style="display:flex;"><span> *) +</span></span><span style="display:flex;"><span> <span style="color:#00f">if</span> [[ <span style="color:#a31515">&#34;</span>$1<span style="color:#a31515">&#34;</span> -gt 0 ]]; <span style="color:#00f">then</span> +</span></span><span style="display:flex;"><span> showcolors $1 +</span></span><span style="display:flex;"><span> <span style="color:#00f">else</span> +</span></span><span style="display:flex;"><span> echo $max +</span></span><span style="display:flex;"><span> <span style="color:#00f">fi</span> +</span></span><span style="display:flex;"><span> ;; +</span></span><span style="display:flex;"><span><span style="color:#00f">esac</span> | less --raw-control-chars --QUIT-AT-EOF --no-init +</span></span></code></pre> + + + + + + Sane defaults for tmux with more visible statusbar + https://mitjafelicijan.com/tmux-sane-defaults.html + Thu, 25 May 2023 12:00:00 +0200 + https://mitjafelicijan.com/tmux-sane-defaults.html + # Remap prefix from &#39;C-b&#39; to &#39;M-a&#39;. + <pre><code class="language-conf"># Remap prefix from 'C-b' to 'M-a'. +unbind C-b +set-option -g prefix M-a +bind-key M-a send-prefix + +# Split panes using | and -. +bind | split-window -h +bind - split-window -v +unbind '&quot;' +unbind % + +# Start counting windows with 1. +set-option -g allow-rename on +set -g base-index 1 +setw -g pane-base-index 1 + +# Statusbar: purple bg and white fg. +set -g status-bg '#480b8e' +set -g status-fg '#ffffff' + +# Active window: black bg and white fg. +set -g window-status-current-format &quot;#[fg=#ffffff]#[bg=#111111]#[fg=#ffffff]#[bg=#111111] #I:#W #[fg=#ffffff]#[bg=#111111]&quot; + +# Disable mouse mode (tmux 2.1 and above). +set -g mouse off +</code></pre> + + + + + + + My brand new Plan9/9front desktop + https://mitjafelicijan.com/fresh-9front-desktop.html + Wed, 24 May 2023 12:00:00 +0200 + https://mitjafelicijan.com/fresh-9front-desktop.html + I have been experimenting with Plan9/9front for a week now. + <p>I have been experimenting with Plan9/9front for a week now. Noice! This is how +my desktop looks like.</p> +<p><img src="/notes/9front-desktop.png" alt="9front desktop" /></p> + + + + + + + + + Parse RSS feeds with Lua + https://mitjafelicijan.com/parse-rss-with-lua.html + Tue, 23 May 2023 12:00:00 +0200 + https://mitjafelicijan.com/parse-rss-with-lua.html + Example of parsing RSS feeds with Lua. + <p>Example of parsing RSS feeds with Lua. Before running the script install:</p> +<ul> +<li>feedparser with <code>luarocks install feedparser</code></li> +<li>luasocket with <code>luarocks install luasocket</code></li> +</ul> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span><span style="color:#00f">local</span> http = require(<span style="color:#a31515">&#34;socket.http&#34;</span>) +</span></span><span style="display:flex;"><span><span style="color:#00f">local</span> feedparser = require(<span style="color:#a31515">&#34;feedparser&#34;</span>) +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#00f">local</span> feed_url = <span style="color:#a31515">&#34;https://mitjafelicijan.com/feed.rss&#34;</span> +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#00f">local</span> response, status, _ = http.request(feed_url) +</span></span><span style="display:flex;"><span><span style="color:#00f">if</span> status == 200 <span style="color:#00f">then</span> +</span></span><span style="display:flex;"><span> <span style="color:#00f">local</span> parsed = feedparser.parse(response) +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span> <span style="color:#008000">-- Print out feed details.</span> +</span></span><span style="display:flex;"><span> print(<span style="color:#a31515">&#34;&gt; Title &#34;</span>, parsed.feed.title) +</span></span><span style="display:flex;"><span> print(<span style="color:#a31515">&#34;&gt; Author &#34;</span>, parsed.feed.author) +</span></span><span style="display:flex;"><span> print(<span style="color:#a31515">&#34;&gt; ID &#34;</span>, parsed.feed.id) +</span></span><span style="display:flex;"><span> print(<span style="color:#a31515">&#34;&gt; Entries &#34;</span>, #parsed.entries) +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span> <span style="color:#00f">for</span> _, item <span style="color:#00f">in</span> ipairs(parsed.entries) <span style="color:#00f">do</span> +</span></span><span style="display:flex;"><span> print(<span style="color:#a31515">&#34;GUID &#34;</span>, item.guid) +</span></span><span style="display:flex;"><span> print(<span style="color:#a31515">&#34;Title &#34;</span>, item.title) +</span></span><span style="display:flex;"><span> print(<span style="color:#a31515">&#34;Link &#34;</span>, item.link) +</span></span><span style="display:flex;"><span> print(<span style="color:#a31515">&#34;Summary &#34;</span>, item.summary) +</span></span><span style="display:flex;"><span> <span style="color:#00f">end</span> +</span></span><span style="display:flex;"><span><span style="color:#00f">else</span> +</span></span><span style="display:flex;"><span> print(<span style="color:#a31515">&#34;! Request failed. Status:&#34;</span>, status) +</span></span><span style="display:flex;"><span><span style="color:#00f">end</span> +</span></span></code></pre> + + + + + + Extend Lua with custom C functions using Clang + https://mitjafelicijan.com/extend-lua-with-custom-c.html + Tue, 23 May 2023 12:00:00 +0200 + https://mitjafelicijan.com/extend-lua-with-custom-c.html + Here is a boilerplate for extending Lua with custom C functions. + <p>Here is a boilerplate for extending Lua with custom C functions. This requires +Clang and Lua 5.1 to be installed. GCC can be used instead of Clang, but the +Makefile will need to be modified.</p> +<ul> +<li> +<p>nativefunc.c</p> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span><span style="color:#00f">#include</span> <span style="color:#00f">&lt;lua.h&gt;</span><span style="color:#00f"> +</span></span></span><span style="display:flex;"><span><span style="color:#00f">#include</span> <span style="color:#00f">&lt;lauxlib.h&gt;</span><span style="color:#00f"> +</span></span></span><span style="display:flex;"><span><span style="color:#00f"></span> +</span></span><span style="display:flex;"><span><span style="color:#00f">static</span> <span style="color:#2b91af">int</span> l_mult50(lua_State *L) { +</span></span><span style="display:flex;"><span> <span style="color:#2b91af">double</span> number = luaL_checknumber(L, 1); +</span></span><span style="display:flex;"><span> lua_pushnumber(L, number * 50); +</span></span><span style="display:flex;"><span> <span style="color:#00f">return</span> 1; +</span></span><span style="display:flex;"><span>} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#2b91af">int</span> luaopen_nativefunc(lua_State *L) { +</span></span><span style="display:flex;"><span> <span style="color:#00f">static</span> <span style="color:#00f">const</span> <span style="color:#00f">struct</span> luaL_Reg nativeFuncLib[] = {{<span style="color:#a31515">&#34;mult50&#34;</span>, l_mult50}, {NULL, NULL}}; +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span> luaL_register(L, <span style="color:#a31515">&#34;nativelib&#34;</span>, nativeFuncLib); +</span></span><span style="display:flex;"><span> <span style="color:#00f">return</span> 1; +</span></span><span style="display:flex;"><span>} +</span></span></code></pre></li> +<li> +<p>main.lua</p> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span>require <span style="color:#a31515">&#34;nativefunc&#34;</span> +</span></span><span style="display:flex;"><span>print(nativelib.mult50(50)) +</span></span></code></pre></li> +<li> +<p>Makefile</p> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span>CC = clang +</span></span><span style="display:flex;"><span>CFLAGS = +</span></span><span style="display:flex;"><span>INCLUDES = <span style="color:#a31515">`</span>pkg-config lua5.1 --cflags-only-I<span style="color:#a31515">`</span> +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>all: +</span></span><span style="display:flex;"><span> <span style="color:#00f">$(</span>CC<span style="color:#00f">)</span> -shared -o nativefunc.so -fPIC nativefunc.c <span style="color:#00f">$(</span>CFLAGS<span style="color:#00f">)</span> <span style="color:#00f">$(</span>INCLUDES<span style="color:#00f">)</span> +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>clean: +</span></span><span style="display:flex;"><span> rm *.so +</span></span></code></pre></li> +</ul> + + + + + + + + + Execute not blocking async shell command in C# + https://mitjafelicijan.com/non-blocking-shell-exec-csharp.html + Mon, 22 May 2023 12:00:00 +0200 + https://mitjafelicijan.com/non-blocking-shell-exec-csharp.html + Execute a shell command in async in C# while not blocking the UI thread. + <p>Execute a shell command in async in C# while not blocking the UI thread.</p> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span><span style="color:#00f">private</span> <span style="color:#00f">async</span> Task executeCopyCommand() +</span></span><span style="display:flex;"><span>{ +</span></span><span style="display:flex;"><span> <span style="color:#00f">await</span> Task.Run(() =&gt; +</span></span><span style="display:flex;"><span> { +</span></span><span style="display:flex;"><span> <span style="color:#2b91af">var</span> processStartInfo = <span style="color:#00f">new</span> ProcessStartInfo(<span style="color:#a31515">&#34;cmd&#34;</span>, <span style="color:#a31515">&#34;/c dir&#34;</span>) +</span></span><span style="display:flex;"><span> { +</span></span><span style="display:flex;"><span> RedirectStandardOutput = <span style="color:#00f">true</span>, +</span></span><span style="display:flex;"><span> UseShellExecute = <span style="color:#00f">false</span>, +</span></span><span style="display:flex;"><span> CreateNoWindow = <span style="color:#00f">true</span> +</span></span><span style="display:flex;"><span> }; +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span> <span style="color:#2b91af">var</span> process = <span style="color:#00f">new</span> Process +</span></span><span style="display:flex;"><span> { +</span></span><span style="display:flex;"><span> StartInfo = processStartInfo +</span></span><span style="display:flex;"><span> }; +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span> process.Start(); +</span></span><span style="display:flex;"><span> process.WaitForExit(); +</span></span><span style="display:flex;"><span> }); +</span></span><span style="display:flex;"><span>} +</span></span></code></pre><p>Make sure that <code>async</code> is present in the function definition and <code>await</code> is used +in the method that calls <code>executeCopyCommand()</code>.</p> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span><span style="color:#00f">private</span> <span style="color:#00f">async</span> <span style="color:#00f">void</span> button_Click(<span style="color:#2b91af">object</span> sender, EventArgs e) +</span></span><span style="display:flex;"><span>{ +</span></span><span style="display:flex;"><span> <span style="color:#00f">await</span> executeCopyCommand(); +</span></span><span style="display:flex;"><span>} +</span></span></code></pre> + + + + + + Change permissions of matching files recursively + https://mitjafelicijan.com/mass-set-permission.html + Tue, 16 May 2023 12:00:00 +0200 + https://mitjafelicijan.com/mass-set-permission.html + Replace *. + <p>Replace <code>*.xml</code> with your pattern. This will remove executable bit from all +files matching the pattern. Change <code>+</code> to <code>-</code> to add executable bit.</p> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span>find . -type f -name <span style="color:#a31515">&#34;*.xml&#34;</span> -exec chmod -x {} + +</span></span></code></pre> + + + + + + + + Previews how man page written in Troff will look like + https://mitjafelicijan.com/preview-troff-man-pages.html + Mon, 15 May 2023 12:00:00 +0200 + https://mitjafelicijan.com/preview-troff-man-pages.html + Troff is used to write man pages and it is difficult to read it so this willpreview how it will look like when it is rendered. + <p>Troff is used to write man pages and it is difficult to read it so this will +preview how it will look like when it is rendered.</p> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span><span style="color:#008000"># On Linux system.</span> +</span></span><span style="display:flex;"><span>groff -man -Tascii filename +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#008000"># On Plan9 system.</span> +</span></span><span style="display:flex;"><span>man 1 filename +</span></span></code></pre> + + + + + + Convert all MKV files into other formats + https://mitjafelicijan.com/convert-mkv.html + Sun, 14 May 2023 12:00:00 +0200 + https://mitjafelicijan.com/convert-mkv.html + You will need ffmpeg installed on your system. + <p>You will need <code>ffmpeg</code> installed on your system. This will convert all MKV files +into WebM format.</p> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span><span style="color:#008000"># Convert all MKV files into WebM format.</span> +</span></span><span style="display:flex;"><span>find ./ -name <span style="color:#a31515">&#39;*.mkv&#39;</span> -exec bash -c <span style="color:#a31515">&#39;ffmpeg -i &#34;$0&#34; -vcodec libvpx -acodec libvorbis -cpu-used 5 -threads 8 &#34;${0%%.mp4}.webm&#34;&#39;</span> {} <span style="color:#a31515">\;</span> +</span></span></code></pre><pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span><span style="color:#008000"># Convert all MKV files into MP4 format.</span> +</span></span><span style="display:flex;"><span>find ./ -name <span style="color:#a31515">&#39;*.mkv&#39;</span> -exec bash -c <span style="color:#a31515">&#39;ffmpeg -i &#34;$0&#34; c:a copy -c:v copy -cpu-used 5 -threads 8 &#34;${0%%.mp4}.mp4&#34;&#39;</span> {} <span style="color:#a31515">\;</span> +</span></span></code></pre> + + + + + + Download list of YouTube files + https://mitjafelicijan.com/download-youtube-videos.html + Sat, 13 May 2023 12:00:00 +0200 + https://mitjafelicijan.com/download-youtube-videos.html + If you need to download a list of YouTube videos and don&#39;t want to download theactual YouTube list (which yt-dlp supports), you can use the following method. + <p>If you need to download a list of YouTube videos and don't want to download the +actual YouTube list (which <code>yt-dlp</code> supports), you can use the following method.</p> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span><span style="color:#008000">// Used to get list of raw URL&#39;s from YouTube&#39;s video tab&#39;. +</span></span></span><span style="display:flex;"><span><span style="color:#008000">// Copy them into videos.txt. +</span></span></span><span style="display:flex;"><span><span style="color:#008000"></span>document.querySelectorAll(<span style="color:#a31515">&#39;#contents a.ytd-thumbnail.style-scope.ytd-thumbnail&#39;</span>).forEach(el =&gt; console.log(el.href)) +</span></span></code></pre><p>Download and install <a href="https://github.com/yt-dlp/yt-dlp">https://github.com/yt-dlp/yt-dlp</a>.</p> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span><span style="color:#008000"># This will download all videos in videos.txt.</span> +</span></span><span style="display:flex;"><span>yt-dlp --batch-file videos.txt -N <span style="color:#a31515">`</span>nproc<span style="color:#a31515">`</span> -f webm +</span></span></code></pre> + + + + + + Install Plan9port on Linux + https://mitjafelicijan.com/install-plan9port-linux.html + Fri, 12 May 2023 12:00:00 +0200 + https://mitjafelicijan.com/install-plan9port-linux.html + Install Plan9port on Linux. + <p>Install Plan9port on Linux. This applies to +<a href="https://9fans.github.io/plan9port/">Plan9port</a>. This is a port of many Plan 9 +programs to Unix-like operating systems. Useful for programs like <code>9term</code> and +<code>rc</code>.</p> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span>sudo apt-get install gcc libx11-dev libxt-dev libxext-dev libfontconfig1-dev +</span></span><span style="display:flex;"><span>git clone https://github.com/9fans/plan9port $HOME/plan9 +</span></span><span style="display:flex;"><span>cd $HOME/plan9/plan9port +</span></span><span style="display:flex;"><span>./INSTALL -r $HOME/plan9 +</span></span></code></pre> + + + + + + Fix bootloader not being written in Plan9 + https://mitjafelicijan.com/fix-plan9-bootloader.html + Thu, 11 May 2023 12:00:00 +0200 + https://mitjafelicijan.com/fix-plan9-bootloader.html + If the bootloader is not being written to a disk when installing 9front on realharware try clearing first sector of the disk with the following command. + <p>If the bootloader is not being written to a disk when installing 9front on real +harware try clearing first sector of the disk with the following command.</p> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span>dd <span style="color:#00f">if</span>=/dev/zero of=/dev/sdX bs=512 count=1 +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#008000"># If command above doesn&#39;t work try this one, wait couple of seconds and</span> +</span></span><span style="display:flex;"><span><span style="color:#008000"># press delete key to stop the command.</span> +</span></span><span style="display:flex;"><span>cat &lt;/dev/zero &gt;/dev/sd*/data +</span></span></code></pre> + + + + + + Take a screenshot in Plan9 + https://mitjafelicijan.com/plan9-screenshot.html + Wed, 10 May 2023 12:00:00 +0200 + https://mitjafelicijan.com/plan9-screenshot.html + Take a screenshot in Plan9. + <p>Take a screenshot in Plan9. This applies to <a href="https://9p.io/plan9/">Plan9</a> and +<a href="https://9front.org/">9front</a>. This will take a screenshot of the screen and +output it to <code>/dev/screen</code>. You can then use <code>topng</code> to convert it to a png +image.</p> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span><span style="color:#008000"># Instant screenshot.</span> +</span></span><span style="display:flex;"><span>cat /dev/screen | topng &gt; screen.png +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#008000"># Delayed screenshot (5 seconds).</span> +</span></span><span style="display:flex;"><span>sleep 5; cat /dev/screen | topng &gt; screen.png +</span></span></code></pre> + + + + + + #cat-v on weechat configuration + https://mitjafelicijan.com/catv-weechat-config.html + Tue, 09 May 2023 12:00:00 +0200 + https://mitjafelicijan.com/catv-weechat-config.html + Set up weechat to connect to #cat-v on oftc. + <p>Set up weechat to connect to #cat-v on oftc. This applies to +<a href="https://weechat.org/">weechat</a> but should be similar for other irc clients.</p> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span><span style="color:#008000"># Install weechat and launch it and execute the following commands.</span> +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>/server add oftc irc.oftc.net -tls +</span></span><span style="display:flex;"><span>/set irc.server.oftc.autoconnect on +</span></span><span style="display:flex;"><span>/set irc.server.oftc.autojoin <span style="color:#a31515">&#34;#cat-v&#34;</span> +</span></span><span style="display:flex;"><span>/set irc.server.oftc.nicks <span style="color:#a31515">&#34;nick1,nick2,nick3&#34;</span> +</span></span></code></pre> + + + + + + Write ISO to USB Key + https://mitjafelicijan.com/write-iso-usb.html + Mon, 08 May 2023 12:00:00 +0200 + https://mitjafelicijan.com/write-iso-usb.html + Write ISO to USB key. + <p>Write ISO to USB key. Nothing fancy here.</p> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span>sudo dd <span style="color:#00f">if</span>=iso_file.iso of=/dev/sdX bs=4M status=progress conv=fdatasync +</span></span></code></pre> + + + + + + Mount Plan9 over network + https://mitjafelicijan.com/mount-plan9-over-network.html + Sun, 07 May 2023 12:00:00 +0200 + https://mitjafelicijan.com/mount-plan9-over-network.html + First install libfuse with sudo apt install libfuse-dev. + <ul> +<li>First install libfuse with sudo apt install libfuse-dev.</li> +<li>Then clone <a href="https://github.com/ftrvxmtrx/9pfs">https://github.com/ftrvxmtrx/9pfs</a> and compile it with make.</li> +<li>Copy 9pfs to your path.</li> +</ul> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span><span style="color:#008000"># On Plan9 side</span> +</span></span><span style="display:flex;"><span>ip/ipconfig <span style="color:#008000"># enables network</span> +</span></span><span style="display:flex;"><span>aux/listen1 -tv tcp!*!9999 /bin/exportfs -r tmp <span style="color:#008000"># export tmp folder</span> +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#008000"># On Linux side</span> +</span></span><span style="display:flex;"><span>9pfs 172.18.0.1 -p 9999 local_folder <span style="color:#008000"># mount</span> +</span></span><span style="display:flex;"><span>umount local_folder <span style="color:#008000"># unmount</span> +</span></span></code></pre> + + + + + + Push to multiple origins at once in Git + https://mitjafelicijan.com/git-push-multiple-origins.html + Sat, 06 May 2023 12:00:00 +0200 + https://mitjafelicijan.com/git-push-multiple-origins.html + Sometimes you want to push to multiple origins at once. + <p>Sometimes you want to push to multiple origins at once. This is useful if you +have a mirror of your repository on another server. You can do this by adding +multiple push urls to your git config. This is a shorthand for command above.</p> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span>git config --global alias.pushall <span style="color:#a31515">&#39;!sh -c &#34;git remote | xargs -L1 git push --all&#34;&#39;</span> +</span></span></code></pre> + + + + + + Run 9front in Qemu + https://mitjafelicijan.com/run-9front-in-qemu.html + Fri, 05 May 2023 12:00:00 +0200 + https://mitjafelicijan.com/run-9front-in-qemu.html + Run 9front in Qemu. + <p>Run 9front in Qemu. This applies to <a href="https://9p.io/plan9/">Plan9</a> and +<a href="https://9front.org/">9front</a>.</p> +<p>Download from here <a href="http://9front.org/iso/">http://9front.org/iso/</a>.</p> +<pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span><span style="color:#008000"># Create a qcow2 image.</span> +</span></span><span style="display:flex;"><span>qemu-img create -f qcow2 $HOME/VM/9front.qcow2.img 30G +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span><span style="color:#008000"># Run the VM.</span> +</span></span><span style="display:flex;"><span>qemu-system-x86_64 -cpu host -enable-kvm -m 1024 <span style="color:#a31515">\ +</span></span></span><span style="display:flex;"><span><span style="color:#a31515"></span> -net nic,model=virtio,macaddr=52:54:00:00:EE:03 -net user <span style="color:#a31515">\ +</span></span></span><span style="display:flex;"><span><span style="color:#a31515"></span> -device virtio-scsi-pci,id=scsi <span style="color:#a31515">\ +</span></span></span><span style="display:flex;"><span><span style="color:#a31515"></span> -drive <span style="color:#00f">if</span>=none,id=vd0,file=$HOME/VM/9front.qcow2.img <span style="color:#a31515">\ +</span></span></span><span style="display:flex;"><span><span style="color:#a31515"></span> -device scsi-hd,drive=vd0 <span style="color:#a31515">\ +</span></span></span><span style="display:flex;"><span><span style="color:#a31515"></span> -drive <span style="color:#00f">if</span>=none,id=vd1,file=$HOME/VM/ISO/9front.386.iso <span style="color:#a31515">\ +</span></span></span><span style="display:flex;"><span><span style="color:#a31515"></span> -device scsi-cd,drive=vd1,bootindex=0 +</span></span></code></pre> + + + + + + Cache busting in Hugo + https://mitjafelicijan.com/cachebusting-in-hugo.html + Mon, 01 May 2023 12:00:00 +0200 + https://mitjafelicijan.com/cachebusting-in-hugo.html + {{ $cachebuster := delimit (shuffle (split (md5 &#34;6fab11c6669976d759d2992eff1dd5be&#34;) &#34;&#34; )) &#34;&#34; }}&lt;link rel=&#34;stylesheet&#34; href=&#34;/style. + <pre tabindex="0" style="background-color:#fff;"><code><span style="display:flex;"><span>{{ $cachebuster := delimit (shuffle (split (md5 &#34;6fab11c6669976d759d2992eff1dd5be&#34;) &#34;&#34; )) &#34;&#34; }} +</span></span><span style="display:flex;"><span> +</span></span><span style="display:flex;"><span>&lt;link rel=<span style="color:#a31515">&#34;stylesheet&#34;</span> href=<span style="color:#a31515">&#34;/style.css?v={{ $cachebuster }}&#34;</span>&gt; +</span></span></code></pre><p>This <code>6fab11c6669976d759d2992eff1dd5be</code> can be random string you generate use. +You can use whatever you want.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3