From 58904b7d9b781c9a7eb18183392b3a565fdbcd51 Mon Sep 17 00:00:00 2001 From: Mitja Felicijan Date: Sat, 8 Jul 2023 23:26:39 +0200 Subject: Removed public folder --- public/notes.xml | 1373 ------------------------------------------------------ 1 file changed, 1373 deletions(-) delete mode 100755 public/notes.xml (limited to 'public/notes.xml') diff --git a/public/notes.xml b/public/notes.xml deleted file mode 100755 index b4c9e4f..0000000 --- a/public/notes.xml +++ /dev/null @@ -1,1373 +0,0 @@ - - - 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