commit 781e2dd6c51de32c15637a7051987ba70ea78ffb parent a9e431cda4e6c1156bc79fe55d46d02fcf772380 Author: Samdal <samdal@protonmail.com> Date: Wed, 6 Aug 2025 00:58:46 +0200 remove git nchannel files Diffstat:
96 files changed, 0 insertions(+), 7248 deletions(-)
diff --git a/git/n-channel/file/.gitignore.html b/git/n-channel/file/.gitignore.html @@ -1,31 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>.gitignore - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../style.css" /> -</head> -<body> -<table><tr><td><a href="../../"><img src="../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../log.html">Log</a> | <a href="../files.html">Files</a> | <a href="../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> .gitignore (94B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> _site -<a href="#l2" class="line" id="l2"> 2</a> .sass-cache -<a href="#l3" class="line" id="l3"> 3</a> .jekyll-cache -<a href="#l4" class="line" id="l4"> 4</a> .jekyll-metadata -<a href="#l5" class="line" id="l5"> 5</a> .bundle -<a href="#l6" class="line" id="l6"> 6</a> vendor -<a href="#l7" class="line" id="l7"> 7</a> git/n-channel/file -<a href="#l8" class="line" id="l8"> 8</a> _git/repos -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/404.html.html b/git/n-channel/file/404.html.html @@ -1,34 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>404.html - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../style.css" /> -</head> -<body> -<table><tr><td><a href="../../"><img src="../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../log.html">Log</a> | <a href="../files.html">Files</a> | <a href="../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> 404.html (158B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> --- -<a href="#l2" class="line" id="l2"> 2</a> layout: page -<a href="#l3" class="line" id="l3"> 3</a> title: "404: Page not found" -<a href="#l4" class="line" id="l4"> 4</a> permalink: 404.html -<a href="#l5" class="line" id="l5"> 5</a> --- -<a href="#l6" class="line" id="l6"> 6</a> -<a href="#l7" class="line" id="l7"> 7</a> -<a href="#l8" class="line" id="l8"> 8</a> -<a href="#l9" class="line" id="l9"> 9</a> Sorry, we've misplaced that URL or it's pointing to something that doesn't exist. -<a href="#l10" class="line" id="l10"> 10</a> -<a href="#l11" class="line" id="l11"> 11</a> -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/Gemfile.html b/git/n-channel/file/Gemfile.html @@ -1,63 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>Gemfile - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../style.css" /> -</head> -<body> -<table><tr><td><a href="../../"><img src="../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../log.html">Log</a> | <a href="../files.html">Files</a> | <a href="../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> Gemfile (1426B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> source "https://rubygems.org" -<a href="#l2" class="line" id="l2"> 2</a> # Hello! This is where you manage which Jekyll version is used to run. -<a href="#l3" class="line" id="l3"> 3</a> # When you want to use a different version, change it below, save the -<a href="#l4" class="line" id="l4"> 4</a> # file and run `bundle install`. Run Jekyll with `bundle exec`, like so: -<a href="#l5" class="line" id="l5"> 5</a> # -<a href="#l6" class="line" id="l6"> 6</a> # bundle exec jekyll serve -<a href="#l7" class="line" id="l7"> 7</a> # -<a href="#l8" class="line" id="l8"> 8</a> # This will help ensure the proper Jekyll version is running. -<a href="#l9" class="line" id="l9"> 9</a> # Happy Jekylling! -<a href="#l10" class="line" id="l10"> 10</a> gem "jekyll", "~> 4.4.1" -<a href="#l11" class="line" id="l11"> 11</a> # This is the default theme for new Jekyll sites. You may change this to anything you like. -<a href="#l12" class="line" id="l12"> 12</a> gem "minima", "~> 2.5" -<a href="#l13" class="line" id="l13"> 13</a> # If you want to use GitHub Pages, remove the "gem "jekyll"" above and -<a href="#l14" class="line" id="l14"> 14</a> # uncomment the line below. To upgrade, run `bundle update github-pages`. -<a href="#l15" class="line" id="l15"> 15</a> # gem "github-pages", group: :jekyll_plugins -<a href="#l16" class="line" id="l16"> 16</a> # If you have any plugins, put them here! -<a href="#l17" class="line" id="l17"> 17</a> group :jekyll_plugins do -<a href="#l18" class="line" id="l18"> 18</a> gem "jekyll-feed", "~> 0.12" -<a href="#l19" class="line" id="l19"> 19</a> end -<a href="#l20" class="line" id="l20"> 20</a> -<a href="#l21" class="line" id="l21"> 21</a> # Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem -<a href="#l22" class="line" id="l22"> 22</a> # and associated library. -<a href="#l23" class="line" id="l23"> 23</a> platforms :mingw, :x64_mingw, :mswin, :jruby do -<a href="#l24" class="line" id="l24"> 24</a> gem "tzinfo", ">= 1", "< 3" -<a href="#l25" class="line" id="l25"> 25</a> gem "tzinfo-data" -<a href="#l26" class="line" id="l26"> 26</a> end -<a href="#l27" class="line" id="l27"> 27</a> -<a href="#l28" class="line" id="l28"> 28</a> # Performance-booster for watching directories on Windows -<a href="#l29" class="line" id="l29"> 29</a> gem "wdm", "~> 0.1", :platforms => [:mingw, :x64_mingw, :mswin] -<a href="#l30" class="line" id="l30"> 30</a> -<a href="#l31" class="line" id="l31"> 31</a> # Lock `http_parser.rb` gem to `v0.6.x` on JRuby builds since newer versions of the gem -<a href="#l32" class="line" id="l32"> 32</a> # do not have a Java counterpart. -<a href="#l33" class="line" id="l33"> 33</a> gem "http_parser.rb", "~> 0.6.0", :platforms => [:jruby] -<a href="#l34" class="line" id="l34"> 34</a> -<a href="#l35" class="line" id="l35"> 35</a> gem 'jekyll-paginate' -<a href="#l36" class="line" id="l36"> 36</a> gem 'jekyll-seo-tag' -<a href="#l37" class="line" id="l37"> 37</a> gem 'jekyll-sitemap' -<a href="#l38" class="line" id="l38"> 38</a> gem 'jekyll-regex-replace' -<a href="#l39" class="line" id="l39"> 39</a> gem 'neocities' -<a href="#l40" class="line" id="l40"> 40</a> gem 'sass' -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/Gemfile.lock.html b/git/n-channel/file/Gemfile.lock.html @@ -1,256 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>Gemfile.lock - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../style.css" /> -</head> -<body> -<table><tr><td><a href="../../"><img src="../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../log.html">Log</a> | <a href="../files.html">Files</a> | <a href="../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> Gemfile.lock (6078B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> GEM -<a href="#l2" class="line" id="l2"> 2</a> remote: https://rubygems.org/ -<a href="#l3" class="line" id="l3"> 3</a> specs: -<a href="#l4" class="line" id="l4"> 4</a> addressable (2.8.7) -<a href="#l5" class="line" id="l5"> 5</a> public_suffix (>= 2.0.2, < 7.0) -<a href="#l6" class="line" id="l6"> 6</a> base64 (0.2.0) -<a href="#l7" class="line" id="l7"> 7</a> bigdecimal (3.1.9) -<a href="#l8" class="line" id="l8"> 8</a> colorator (1.1.0) -<a href="#l9" class="line" id="l9"> 9</a> concurrent-ruby (1.3.5) -<a href="#l10" class="line" id="l10"> 10</a> csv (3.3.2) -<a href="#l11" class="line" id="l11"> 11</a> domain_name (0.6.20240107) -<a href="#l12" class="line" id="l12"> 12</a> em-websocket (0.5.3) -<a href="#l13" class="line" id="l13"> 13</a> eventmachine (>= 0.12.9) -<a href="#l14" class="line" id="l14"> 14</a> http_parser.rb (~> 0) -<a href="#l15" class="line" id="l15"> 15</a> eventmachine (1.2.7) -<a href="#l16" class="line" id="l16"> 16</a> ffi (1.17.1) -<a href="#l17" class="line" id="l17"> 17</a> ffi (1.17.1-aarch64-linux-gnu) -<a href="#l18" class="line" id="l18"> 18</a> ffi (1.17.1-aarch64-linux-musl) -<a href="#l19" class="line" id="l19"> 19</a> ffi (1.17.1-arm-linux-gnu) -<a href="#l20" class="line" id="l20"> 20</a> ffi (1.17.1-arm-linux-musl) -<a href="#l21" class="line" id="l21"> 21</a> ffi (1.17.1-arm64-darwin) -<a href="#l22" class="line" id="l22"> 22</a> ffi (1.17.1-x86-linux-gnu) -<a href="#l23" class="line" id="l23"> 23</a> ffi (1.17.1-x86-linux-musl) -<a href="#l24" class="line" id="l24"> 24</a> ffi (1.17.1-x86_64-darwin) -<a href="#l25" class="line" id="l25"> 25</a> ffi (1.17.1-x86_64-linux-gnu) -<a href="#l26" class="line" id="l26"> 26</a> ffi (1.17.1-x86_64-linux-musl) -<a href="#l27" class="line" id="l27"> 27</a> ffi-compiler (1.3.2) -<a href="#l28" class="line" id="l28"> 28</a> ffi (>= 1.15.5) -<a href="#l29" class="line" id="l29"> 29</a> rake -<a href="#l30" class="line" id="l30"> 30</a> forwardable-extended (2.6.0) -<a href="#l31" class="line" id="l31"> 31</a> google-protobuf (4.29.3) -<a href="#l32" class="line" id="l32"> 32</a> bigdecimal -<a href="#l33" class="line" id="l33"> 33</a> rake (>= 13) -<a href="#l34" class="line" id="l34"> 34</a> google-protobuf (4.29.3-aarch64-linux) -<a href="#l35" class="line" id="l35"> 35</a> bigdecimal -<a href="#l36" class="line" id="l36"> 36</a> rake (>= 13) -<a href="#l37" class="line" id="l37"> 37</a> google-protobuf (4.29.3-arm64-darwin) -<a href="#l38" class="line" id="l38"> 38</a> bigdecimal -<a href="#l39" class="line" id="l39"> 39</a> rake (>= 13) -<a href="#l40" class="line" id="l40"> 40</a> google-protobuf (4.29.3-x86-linux) -<a href="#l41" class="line" id="l41"> 41</a> bigdecimal -<a href="#l42" class="line" id="l42"> 42</a> rake (>= 13) -<a href="#l43" class="line" id="l43"> 43</a> google-protobuf (4.29.3-x86_64-darwin) -<a href="#l44" class="line" id="l44"> 44</a> bigdecimal -<a href="#l45" class="line" id="l45"> 45</a> rake (>= 13) -<a href="#l46" class="line" id="l46"> 46</a> google-protobuf (4.29.3-x86_64-linux) -<a href="#l47" class="line" id="l47"> 47</a> bigdecimal -<a href="#l48" class="line" id="l48"> 48</a> rake (>= 13) -<a href="#l49" class="line" id="l49"> 49</a> http (5.3.1) -<a href="#l50" class="line" id="l50"> 50</a> addressable (~> 2.8) -<a href="#l51" class="line" id="l51"> 51</a> http-cookie (~> 1.0) -<a href="#l52" class="line" id="l52"> 52</a> http-form_data (~> 2.2) -<a href="#l53" class="line" id="l53"> 53</a> llhttp-ffi (~> 0.5.0) -<a href="#l54" class="line" id="l54"> 54</a> http-cookie (1.0.8) -<a href="#l55" class="line" id="l55"> 55</a> domain_name (~> 0.5) -<a href="#l56" class="line" id="l56"> 56</a> http-form_data (2.3.0) -<a href="#l57" class="line" id="l57"> 57</a> http_parser.rb (0.8.0) -<a href="#l58" class="line" id="l58"> 58</a> i18n (1.14.7) -<a href="#l59" class="line" id="l59"> 59</a> concurrent-ruby (~> 1.0) -<a href="#l60" class="line" id="l60"> 60</a> jekyll (4.4.1) -<a href="#l61" class="line" id="l61"> 61</a> addressable (~> 2.4) -<a href="#l62" class="line" id="l62"> 62</a> base64 (~> 0.2) -<a href="#l63" class="line" id="l63"> 63</a> colorator (~> 1.0) -<a href="#l64" class="line" id="l64"> 64</a> csv (~> 3.0) -<a href="#l65" class="line" id="l65"> 65</a> em-websocket (~> 0.5) -<a href="#l66" class="line" id="l66"> 66</a> i18n (~> 1.0) -<a href="#l67" class="line" id="l67"> 67</a> jekyll-sass-converter (>= 2.0, < 4.0) -<a href="#l68" class="line" id="l68"> 68</a> jekyll-watch (~> 2.0) -<a href="#l69" class="line" id="l69"> 69</a> json (~> 2.6) -<a href="#l70" class="line" id="l70"> 70</a> kramdown (~> 2.3, >= 2.3.1) -<a href="#l71" class="line" id="l71"> 71</a> kramdown-parser-gfm (~> 1.0) -<a href="#l72" class="line" id="l72"> 72</a> liquid (~> 4.0) -<a href="#l73" class="line" id="l73"> 73</a> mercenary (~> 0.3, >= 0.3.6) -<a href="#l74" class="line" id="l74"> 74</a> pathutil (~> 0.9) -<a href="#l75" class="line" id="l75"> 75</a> rouge (>= 3.0, < 5.0) -<a href="#l76" class="line" id="l76"> 76</a> safe_yaml (~> 1.0) -<a href="#l77" class="line" id="l77"> 77</a> terminal-table (>= 1.8, < 4.0) -<a href="#l78" class="line" id="l78"> 78</a> webrick (~> 1.7) -<a href="#l79" class="line" id="l79"> 79</a> jekyll-feed (0.17.0) -<a href="#l80" class="line" id="l80"> 80</a> jekyll (>= 3.7, < 5.0) -<a href="#l81" class="line" id="l81"> 81</a> jekyll-paginate (1.1.0) -<a href="#l82" class="line" id="l82"> 82</a> jekyll-regex-replace (1.1.0) -<a href="#l83" class="line" id="l83"> 83</a> jekyll-sass-converter (3.1.0) -<a href="#l84" class="line" id="l84"> 84</a> sass-embedded (~> 1.75) -<a href="#l85" class="line" id="l85"> 85</a> jekyll-seo-tag (2.8.0) -<a href="#l86" class="line" id="l86"> 86</a> jekyll (>= 3.8, < 5.0) -<a href="#l87" class="line" id="l87"> 87</a> jekyll-sitemap (1.4.0) -<a href="#l88" class="line" id="l88"> 88</a> jekyll (>= 3.7, < 5.0) -<a href="#l89" class="line" id="l89"> 89</a> jekyll-watch (2.2.1) -<a href="#l90" class="line" id="l90"> 90</a> listen (~> 3.0) -<a href="#l91" class="line" id="l91"> 91</a> json (2.10.1) -<a href="#l92" class="line" id="l92"> 92</a> kramdown (2.5.1) -<a href="#l93" class="line" id="l93"> 93</a> rexml (>= 3.3.9) -<a href="#l94" class="line" id="l94"> 94</a> kramdown-parser-gfm (1.1.0) -<a href="#l95" class="line" id="l95"> 95</a> kramdown (~> 2.0) -<a href="#l96" class="line" id="l96"> 96</a> liquid (4.0.4) -<a href="#l97" class="line" id="l97"> 97</a> listen (3.9.0) -<a href="#l98" class="line" id="l98"> 98</a> rb-fsevent (~> 0.10, >= 0.10.3) -<a href="#l99" class="line" id="l99"> 99</a> rb-inotify (~> 0.9, >= 0.9.10) -<a href="#l100" class="line" id="l100"> 100</a> llhttp-ffi (0.5.1) -<a href="#l101" class="line" id="l101"> 101</a> ffi-compiler (~> 1.0) -<a href="#l102" class="line" id="l102"> 102</a> rake (~> 13.0) -<a href="#l103" class="line" id="l103"> 103</a> mercenary (0.4.0) -<a href="#l104" class="line" id="l104"> 104</a> minima (2.5.2) -<a href="#l105" class="line" id="l105"> 105</a> jekyll (>= 3.5, < 5.0) -<a href="#l106" class="line" id="l106"> 106</a> jekyll-feed (~> 0.9) -<a href="#l107" class="line" id="l107"> 107</a> jekyll-seo-tag (~> 2.1) -<a href="#l108" class="line" id="l108"> 108</a> neocities (0.1.1) -<a href="#l109" class="line" id="l109"> 109</a> http (~> 5.3, >= 5.3.1) -<a href="#l110" class="line" id="l110"> 110</a> pastel (~> 0.8, = 0.8.0) -<a href="#l111" class="line" id="l111"> 111</a> rake (~> 13, >= 13.3.0) -<a href="#l112" class="line" id="l112"> 112</a> tty-prompt (~> 0.23, = 0.23.1) -<a href="#l113" class="line" id="l113"> 113</a> tty-table (~> 0.12, = 0.12.0) -<a href="#l114" class="line" id="l114"> 114</a> whirly (~> 0.3, >= 0.3.0) -<a href="#l115" class="line" id="l115"> 115</a> pastel (0.8.0) -<a href="#l116" class="line" id="l116"> 116</a> tty-color (~> 0.5) -<a href="#l117" class="line" id="l117"> 117</a> pathutil (0.16.2) -<a href="#l118" class="line" id="l118"> 118</a> forwardable-extended (~> 2.6) -<a href="#l119" class="line" id="l119"> 119</a> public_suffix (6.0.1) -<a href="#l120" class="line" id="l120"> 120</a> rake (13.3.0) -<a href="#l121" class="line" id="l121"> 121</a> rb-fsevent (0.11.2) -<a href="#l122" class="line" id="l122"> 122</a> rb-inotify (0.11.1) -<a href="#l123" class="line" id="l123"> 123</a> ffi (~> 1.0) -<a href="#l124" class="line" id="l124"> 124</a> rexml (3.4.1) -<a href="#l125" class="line" id="l125"> 125</a> rouge (4.5.1) -<a href="#l126" class="line" id="l126"> 126</a> safe_yaml (1.0.5) -<a href="#l127" class="line" id="l127"> 127</a> sass (3.7.4) -<a href="#l128" class="line" id="l128"> 128</a> sass-listen (~> 4.0.0) -<a href="#l129" class="line" id="l129"> 129</a> sass-embedded (1.85.0) -<a href="#l130" class="line" id="l130"> 130</a> google-protobuf (~> 4.29) -<a href="#l131" class="line" id="l131"> 131</a> rake (>= 13) -<a href="#l132" class="line" id="l132"> 132</a> sass-embedded (1.85.0-aarch64-linux-android) -<a href="#l133" class="line" id="l133"> 133</a> google-protobuf (~> 4.29) -<a href="#l134" class="line" id="l134"> 134</a> sass-embedded (1.85.0-aarch64-linux-gnu) -<a href="#l135" class="line" id="l135"> 135</a> google-protobuf (~> 4.29) -<a href="#l136" class="line" id="l136"> 136</a> sass-embedded (1.85.0-aarch64-linux-musl) -<a href="#l137" class="line" id="l137"> 137</a> google-protobuf (~> 4.29) -<a href="#l138" class="line" id="l138"> 138</a> sass-embedded (1.85.0-arm-linux-androideabi) -<a href="#l139" class="line" id="l139"> 139</a> google-protobuf (~> 4.29) -<a href="#l140" class="line" id="l140"> 140</a> sass-embedded (1.85.0-arm-linux-gnueabihf) -<a href="#l141" class="line" id="l141"> 141</a> google-protobuf (~> 4.29) -<a href="#l142" class="line" id="l142"> 142</a> sass-embedded (1.85.0-arm-linux-musleabihf) -<a href="#l143" class="line" id="l143"> 143</a> google-protobuf (~> 4.29) -<a href="#l144" class="line" id="l144"> 144</a> sass-embedded (1.85.0-arm64-darwin) -<a href="#l145" class="line" id="l145"> 145</a> google-protobuf (~> 4.29) -<a href="#l146" class="line" id="l146"> 146</a> sass-embedded (1.85.0-riscv64-linux-android) -<a href="#l147" class="line" id="l147"> 147</a> google-protobuf (~> 4.29) -<a href="#l148" class="line" id="l148"> 148</a> sass-embedded (1.85.0-riscv64-linux-gnu) -<a href="#l149" class="line" id="l149"> 149</a> google-protobuf (~> 4.29) -<a href="#l150" class="line" id="l150"> 150</a> sass-embedded (1.85.0-riscv64-linux-musl) -<a href="#l151" class="line" id="l151"> 151</a> google-protobuf (~> 4.29) -<a href="#l152" class="line" id="l152"> 152</a> sass-embedded (1.85.0-x86_64-cygwin) -<a href="#l153" class="line" id="l153"> 153</a> google-protobuf (~> 4.29) -<a href="#l154" class="line" id="l154"> 154</a> sass-embedded (1.85.0-x86_64-darwin) -<a href="#l155" class="line" id="l155"> 155</a> google-protobuf (~> 4.29) -<a href="#l156" class="line" id="l156"> 156</a> sass-embedded (1.85.0-x86_64-linux-android) -<a href="#l157" class="line" id="l157"> 157</a> google-protobuf (~> 4.29) -<a href="#l158" class="line" id="l158"> 158</a> sass-embedded (1.85.0-x86_64-linux-gnu) -<a href="#l159" class="line" id="l159"> 159</a> google-protobuf (~> 4.29) -<a href="#l160" class="line" id="l160"> 160</a> sass-embedded (1.85.0-x86_64-linux-musl) -<a href="#l161" class="line" id="l161"> 161</a> google-protobuf (~> 4.29) -<a href="#l162" class="line" id="l162"> 162</a> sass-listen (4.0.0) -<a href="#l163" class="line" id="l163"> 163</a> rb-fsevent (~> 0.9, >= 0.9.4) -<a href="#l164" class="line" id="l164"> 164</a> rb-inotify (~> 0.9, >= 0.9.7) -<a href="#l165" class="line" id="l165"> 165</a> strings (0.2.1) -<a href="#l166" class="line" id="l166"> 166</a> strings-ansi (~> 0.2) -<a href="#l167" class="line" id="l167"> 167</a> unicode-display_width (>= 1.5, < 3.0) -<a href="#l168" class="line" id="l168"> 168</a> unicode_utils (~> 1.4) -<a href="#l169" class="line" id="l169"> 169</a> strings-ansi (0.2.0) -<a href="#l170" class="line" id="l170"> 170</a> terminal-table (3.0.2) -<a href="#l171" class="line" id="l171"> 171</a> unicode-display_width (>= 1.1.1, < 3) -<a href="#l172" class="line" id="l172"> 172</a> tty-color (0.6.0) -<a href="#l173" class="line" id="l173"> 173</a> tty-cursor (0.7.1) -<a href="#l174" class="line" id="l174"> 174</a> tty-prompt (0.23.1) -<a href="#l175" class="line" id="l175"> 175</a> pastel (~> 0.8) -<a href="#l176" class="line" id="l176"> 176</a> tty-reader (~> 0.8) -<a href="#l177" class="line" id="l177"> 177</a> tty-reader (0.9.0) -<a href="#l178" class="line" id="l178"> 178</a> tty-cursor (~> 0.7) -<a href="#l179" class="line" id="l179"> 179</a> tty-screen (~> 0.8) -<a href="#l180" class="line" id="l180"> 180</a> wisper (~> 2.0) -<a href="#l181" class="line" id="l181"> 181</a> tty-screen (0.8.2) -<a href="#l182" class="line" id="l182"> 182</a> tty-table (0.12.0) -<a href="#l183" class="line" id="l183"> 183</a> pastel (~> 0.8) -<a href="#l184" class="line" id="l184"> 184</a> strings (~> 0.2.0) -<a href="#l185" class="line" id="l185"> 185</a> tty-screen (~> 0.8) -<a href="#l186" class="line" id="l186"> 186</a> unicode-display_width (2.6.0) -<a href="#l187" class="line" id="l187"> 187</a> unicode_utils (1.4.0) -<a href="#l188" class="line" id="l188"> 188</a> webrick (1.9.1) -<a href="#l189" class="line" id="l189"> 189</a> whirly (0.3.0) -<a href="#l190" class="line" id="l190"> 190</a> unicode-display_width (>= 1.1) -<a href="#l191" class="line" id="l191"> 191</a> wisper (2.0.1) -<a href="#l192" class="line" id="l192"> 192</a> -<a href="#l193" class="line" id="l193"> 193</a> PLATFORMS -<a href="#l194" class="line" id="l194"> 194</a> aarch64-linux -<a href="#l195" class="line" id="l195"> 195</a> aarch64-linux-android -<a href="#l196" class="line" id="l196"> 196</a> aarch64-linux-gnu -<a href="#l197" class="line" id="l197"> 197</a> aarch64-linux-musl -<a href="#l198" class="line" id="l198"> 198</a> arm-linux-androideabi -<a href="#l199" class="line" id="l199"> 199</a> arm-linux-gnu -<a href="#l200" class="line" id="l200"> 200</a> arm-linux-gnueabihf -<a href="#l201" class="line" id="l201"> 201</a> arm-linux-musl -<a href="#l202" class="line" id="l202"> 202</a> arm-linux-musleabihf -<a href="#l203" class="line" id="l203"> 203</a> arm64-darwin -<a href="#l204" class="line" id="l204"> 204</a> riscv64-linux-android -<a href="#l205" class="line" id="l205"> 205</a> riscv64-linux-gnu -<a href="#l206" class="line" id="l206"> 206</a> riscv64-linux-musl -<a href="#l207" class="line" id="l207"> 207</a> ruby -<a href="#l208" class="line" id="l208"> 208</a> x86-linux -<a href="#l209" class="line" id="l209"> 209</a> x86-linux-gnu -<a href="#l210" class="line" id="l210"> 210</a> x86-linux-musl -<a href="#l211" class="line" id="l211"> 211</a> x86_64-cygwin -<a href="#l212" class="line" id="l212"> 212</a> x86_64-darwin -<a href="#l213" class="line" id="l213"> 213</a> x86_64-linux-android -<a href="#l214" class="line" id="l214"> 214</a> x86_64-linux-gnu -<a href="#l215" class="line" id="l215"> 215</a> x86_64-linux-musl -<a href="#l216" class="line" id="l216"> 216</a> -<a href="#l217" class="line" id="l217"> 217</a> DEPENDENCIES -<a href="#l218" class="line" id="l218"> 218</a> http_parser.rb (~> 0.6.0) -<a href="#l219" class="line" id="l219"> 219</a> jekyll (~> 4.4.1) -<a href="#l220" class="line" id="l220"> 220</a> jekyll-feed (~> 0.12) -<a href="#l221" class="line" id="l221"> 221</a> jekyll-paginate -<a href="#l222" class="line" id="l222"> 222</a> jekyll-regex-replace -<a href="#l223" class="line" id="l223"> 223</a> jekyll-seo-tag -<a href="#l224" class="line" id="l224"> 224</a> jekyll-sitemap -<a href="#l225" class="line" id="l225"> 225</a> minima (~> 2.5) -<a href="#l226" class="line" id="l226"> 226</a> neocities -<a href="#l227" class="line" id="l227"> 227</a> sass -<a href="#l228" class="line" id="l228"> 228</a> tzinfo (>= 1, < 3) -<a href="#l229" class="line" id="l229"> 229</a> tzinfo-data -<a href="#l230" class="line" id="l230"> 230</a> wdm (~> 0.1) -<a href="#l231" class="line" id="l231"> 231</a> -<a href="#l232" class="line" id="l232"> 232</a> BUNDLED WITH -<a href="#l233" class="line" id="l233"> 233</a> 2.6.9 -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/_config.yml.html b/git/n-channel/file/_config.yml.html @@ -1,90 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>_config.yml - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../style.css" /> -</head> -<body> -<table><tr><td><a href="../../"><img src="../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../log.html">Log</a> | <a href="../files.html">Files</a> | <a href="../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> _config.yml (989B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> site: n-channel -<a href="#l2" class="line" id="l2"> 2</a> url: #yoururl -<a href="#l3" class="line" id="l3"> 3</a> title: N-Channel MOSFET -<a href="#l4" class="line" id="l4"> 4</a> description: A Blog about electronics and programming 𓆟 -<a href="#l5" class="line" id="l5"> 5</a> permalink: pretty -<a href="#l6" class="line" id="l6"> 6</a> -<a href="#l7" class="line" id="l7"> 7</a> baseurl: "" -<a href="#l8" class="line" id="l8"> 8</a> -<a href="#l9" class="line" id="l9"> 9</a> highlighter: none -<a href="#l10" class="line" id="l10"> 10</a> -<a href="#l11" class="line" id="l11"> 11</a> exclude: -<a href="#l12" class="line" id="l12"> 12</a> - .jekyll-cache -<a href="#l13" class="line" id="l13"> 13</a> - "git/n-channel/file" -<a href="#l14" class="line" id="l14"> 14</a> -<a href="#l15" class="line" id="l15"> 15</a> compress_html: -<a href="#l16" class="line" id="l16"> 16</a> clippings: all -<a href="#l17" class="line" id="l17"> 17</a> comments: ["<!-- ", " -->"] -<a href="#l18" class="line" id="l18"> 18</a> -<a href="#l19" class="line" id="l19"> 19</a> sass: -<a href="#l20" class="line" id="l20"> 20</a> sass_dir: _sass -<a href="#l21" class="line" id="l21"> 21</a> style: :compressed -<a href="#l22" class="line" id="l22"> 22</a> -<a href="#l23" class="line" id="l23"> 23</a> plugins: -<a href="#l24" class="line" id="l24"> 24</a> - jekyll-paginate -<a href="#l25" class="line" id="l25"> 25</a> - jekyll-seo-tag -<a href="#l26" class="line" id="l26"> 26</a> - jekyll-sitemap -<a href="#l27" class="line" id="l27"> 27</a> - jekyll-regex-replace -<a href="#l28" class="line" id="l28"> 28</a> -<a href="#l29" class="line" id="l29"> 29</a> collections: -<a href="#l30" class="line" id="l30"> 30</a> pages: -<a href="#l31" class="line" id="l31"> 31</a> output: true -<a href="#l32" class="line" id="l32"> 32</a> permalink: /:name -<a href="#l33" class="line" id="l33"> 33</a> posts: -<a href="#l34" class="line" id="l34"> 34</a> output: true -<a href="#l35" class="line" id="l35"> 35</a> permalink: /:year/:month/:day/:slug -<a href="#l36" class="line" id="l36"> 36</a> -<a href="#l37" class="line" id="l37"> 37</a> defaults: -<a href="#l38" class="line" id="l38"> 38</a> - scope: -<a href="#l39" class="line" id="l39"> 39</a> path: 'tag/' -<a href="#l40" class="line" id="l40"> 40</a> values: -<a href="#l41" class="line" id="l41"> 41</a> sitemap: false -<a href="#l42" class="line" id="l42"> 42</a> -<a href="#l43" class="line" id="l43"> 43</a> - scope: -<a href="#l44" class="line" id="l44"> 44</a> path: 'git/*/log.html' -<a href="#l45" class="line" id="l45"> 45</a> values: -<a href="#l46" class="line" id="l46"> 46</a> git_file: true -<a href="#l47" class="line" id="l47"> 47</a> -<a href="#l48" class="line" id="l48"> 48</a> - scope: -<a href="#l49" class="line" id="l49"> 49</a> path: "" -<a href="#l50" class="line" id="l50"> 50</a> values: -<a href="#l51" class="line" id="l51"> 51</a> layout: "default" -<a href="#l52" class="line" id="l52"> 52</a> -<a href="#l53" class="line" id="l53"> 53</a> - scope: -<a href="#l54" class="line" id="l54"> 54</a> path: "" -<a href="#l55" class="line" id="l55"> 55</a> type: "pages" -<a href="#l56" class="line" id="l56"> 56</a> values: -<a href="#l57" class="line" id="l57"> 57</a> layout: "page" -<a href="#l58" class="line" id="l58"> 58</a> -<a href="#l59" class="line" id="l59"> 59</a> - scope: -<a href="#l60" class="line" id="l60"> 60</a> path: "" -<a href="#l61" class="line" id="l61"> 61</a> type: "posts" -<a href="#l62" class="line" id="l62"> 62</a> values: -<a href="#l63" class="line" id="l63"> 63</a> layout: "post" -<a href="#l64" class="line" id="l64"> 64</a> -<a href="#l65" class="line" id="l65"> 65</a> markdown: kramdown -<a href="#l66" class="line" id="l66"> 66</a> highlighter: rouge -<a href="#l67" class="line" id="l67"> 67</a> input: GFM -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/_data/navigation.yml.html b/git/n-channel/file/_data/navigation.yml.html @@ -1,34 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>navigation.yml - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../"><img src="../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../log.html">Log</a> | <a href="../../files.html">Files</a> | <a href="../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> navigation.yml (145B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> links: -<a href="#l2" class="line" id="l2"> 2</a> - title: Blog -<a href="#l3" class="line" id="l3"> 3</a> url: / -<a href="#l4" class="line" id="l4"> 4</a> - title: About -<a href="#l5" class="line" id="l5"> 5</a> url: /about -<a href="#l6" class="line" id="l6"> 6</a> - title: Git -<a href="#l7" class="line" id="l7"> 7</a> url: /git -<a href="#l8" class="line" id="l8"> 8</a> - title: Search -<a href="#l9" class="line" id="l9"> 9</a> url: /search -<a href="#l10" class="line" id="l10"> 10</a> - title: Rss -<a href="#l11" class="line" id="l11"> 11</a> url: /atom.xml -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/_includes/anchor_headings.html.html b/git/n-channel/file/_includes/anchor_headings.html.html @@ -1,127 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>anchor_headings.html - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../"><img src="../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../log.html">Log</a> | <a href="../../files.html">Files</a> | <a href="../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> anchor_headings.html (4609B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> {% capture headingsWorkspace %} -<a href="#l2" class="line" id="l2"> 2</a> {% comment %} -<a href="#l3" class="line" id="l3"> 3</a> Version 1.0.4 -<a href="#l4" class="line" id="l4"> 4</a> https://github.com/allejo/jekyll-anchor-headings -<a href="#l5" class="line" id="l5"> 5</a> -<a href="#l6" class="line" id="l6"> 6</a> "Be the pull request you wish to see in the world." ~Ben Balter -<a href="#l7" class="line" id="l7"> 7</a> -<a href="#l8" class="line" id="l8"> 8</a> Usage: -<a href="#l9" class="line" id="l9"> 9</a> {% include anchor_headings.html html=content %} -<a href="#l10" class="line" id="l10"> 10</a> -<a href="#l11" class="line" id="l11"> 11</a> Parameters: -<a href="#l12" class="line" id="l12"> 12</a> * html (string) - the HTML of compiled markdown generated by kramdown in Jekyll -<a href="#l13" class="line" id="l13"> 13</a> -<a href="#l14" class="line" id="l14"> 14</a> Optional Parameters: -<a href="#l15" class="line" id="l15"> 15</a> * beforeHeading (bool) : false - Set to true if the anchor should be placed _before_ the heading's content -<a href="#l16" class="line" id="l16"> 16</a> * anchorAttrs (string) : '' - Any custom HTML attributes that will be added to the `<a>` tag; you may NOT use `href`, `class` or `title` -<a href="#l17" class="line" id="l17"> 17</a> * anchorBody (string) : '' - The content that will be placed inside the anchor; the `%heading%` placeholder is available -<a href="#l18" class="line" id="l18"> 18</a> * anchorClass (string) : '' - The class(es) that will be used for each anchor. Separate multiple classes with a space -<a href="#l19" class="line" id="l19"> 19</a> * anchorTitle (string) : '' - The `title` attribute that will be used for anchors -<a href="#l20" class="line" id="l20"> 20</a> * h_min (int) : 1 - The minimum header level to build an anchor for; any header lower than this value will be ignored -<a href="#l21" class="line" id="l21"> 21</a> * h_max (int) : 6 - The maximum header level to build an anchor for; any header greater than this value will be ignored -<a href="#l22" class="line" id="l22"> 22</a> * bodyPrefix (string) : '' - Anything that should be inserted inside of the heading tag _before_ its anchor and content -<a href="#l23" class="line" id="l23"> 23</a> * bodySuffix (string) : '' - Anything that should be inserted inside of the heading tag _after_ its anchor and content -<a href="#l24" class="line" id="l24"> 24</a> -<a href="#l25" class="line" id="l25"> 25</a> Output: -<a href="#l26" class="line" id="l26"> 26</a> The original HTML with the addition of anchors inside of all of the h1-h6 headings. -<a href="#l27" class="line" id="l27"> 27</a> {% endcomment %} -<a href="#l28" class="line" id="l28"> 28</a> -<a href="#l29" class="line" id="l29"> 29</a> {% assign minHeader = include.h_min | default: 1 %} -<a href="#l30" class="line" id="l30"> 30</a> {% assign maxHeader = include.h_max | default: 6 %} -<a href="#l31" class="line" id="l31"> 31</a> {% assign beforeHeading = include.beforeHeading %} -<a href="#l32" class="line" id="l32"> 32</a> {% assign nodes = include.html | split: '<h' %} -<a href="#l33" class="line" id="l33"> 33</a> -<a href="#l34" class="line" id="l34"> 34</a> {% capture edited_headings %}{% endcapture %} -<a href="#l35" class="line" id="l35"> 35</a> -<a href="#l36" class="line" id="l36"> 36</a> {% for _node in nodes %} -<a href="#l37" class="line" id="l37"> 37</a> {% capture node %}{{ _node | strip }}{% endcapture %} -<a href="#l38" class="line" id="l38"> 38</a> -<a href="#l39" class="line" id="l39"> 39</a> {% if node == "" %} -<a href="#l40" class="line" id="l40"> 40</a> {% continue %} -<a href="#l41" class="line" id="l41"> 41</a> {% endif %} -<a href="#l42" class="line" id="l42"> 42</a> -<a href="#l43" class="line" id="l43"> 43</a> {% assign nextChar = node | replace: '"', '' | strip | slice: 0, 1 %} -<a href="#l44" class="line" id="l44"> 44</a> {% assign headerLevel = nextChar | times: 1 %} -<a href="#l45" class="line" id="l45"> 45</a> -<a href="#l46" class="line" id="l46"> 46</a> <!-- If the level is cast to 0, it means it's not a h1-h6 tag, so let's try to fix it --> -<a href="#l47" class="line" id="l47"> 47</a> {% if headerLevel == 0 %} -<a href="#l48" class="line" id="l48"> 48</a> {% if nextChar != '<' and nextChar != '' %} -<a href="#l49" class="line" id="l49"> 49</a> {% capture node %}<h{{ node }}{% endcapture %} -<a href="#l50" class="line" id="l50"> 50</a> {% endif %} -<a href="#l51" class="line" id="l51"> 51</a> -<a href="#l52" class="line" id="l52"> 52</a> {% capture edited_headings %}{{ edited_headings }}{{ node }}{% endcapture %} -<a href="#l53" class="line" id="l53"> 53</a> {% continue %} -<a href="#l54" class="line" id="l54"> 54</a> {% endif %} -<a href="#l55" class="line" id="l55"> 55</a> -<a href="#l56" class="line" id="l56"> 56</a> {% assign _workspace = node | split: '</h' %} -<a href="#l57" class="line" id="l57"> 57</a> {% assign _idWorkspace = _workspace[0] | split: 'id="' %} -<a href="#l58" class="line" id="l58"> 58</a> {% assign _idWorkspace = _idWorkspace[1] | split: '"' %} -<a href="#l59" class="line" id="l59"> 59</a> {% assign html_id = _idWorkspace[0] %} -<a href="#l60" class="line" id="l60"> 60</a> -<a href="#l61" class="line" id="l61"> 61</a> {% capture _hAttrToStrip %}{{ _workspace[0] | split: '>' | first }}>{% endcapture %} -<a href="#l62" class="line" id="l62"> 62</a> {% assign header = _workspace[0] | replace: _hAttrToStrip, '' %} -<a href="#l63" class="line" id="l63"> 63</a> -<a href="#l64" class="line" id="l64"> 64</a> <!-- Build the anchor to inject for our heading --> -<a href="#l65" class="line" id="l65"> 65</a> {% capture anchor %}{% endcapture %} -<a href="#l66" class="line" id="l66"> 66</a> -<a href="#l67" class="line" id="l67"> 67</a> {% if html_id and headerLevel >= minHeader and headerLevel <= maxHeader %} -<a href="#l68" class="line" id="l68"> 68</a> {% capture anchor %}href="#{{ html_id }}"{% endcapture %} -<a href="#l69" class="line" id="l69"> 69</a> -<a href="#l70" class="line" id="l70"> 70</a> {% if include.anchorClass %} -<a href="#l71" class="line" id="l71"> 71</a> {% capture anchor %}{{ anchor }} class="{{ include.anchorClass }}"{% endcapture %} -<a href="#l72" class="line" id="l72"> 72</a> {% endif %} -<a href="#l73" class="line" id="l73"> 73</a> -<a href="#l74" class="line" id="l74"> 74</a> {% if include.anchorTitle %} -<a href="#l75" class="line" id="l75"> 75</a> {% capture anchor %}{{ anchor }} title="{{ include.anchorTitle | replace: '%heading%', header }}"{% endcapture %} -<a href="#l76" class="line" id="l76"> 76</a> {% endif %} -<a href="#l77" class="line" id="l77"> 77</a> -<a href="#l78" class="line" id="l78"> 78</a> {% if include.anchorAttrs %} -<a href="#l79" class="line" id="l79"> 79</a> {% capture anchor %}{{ anchor }} {{ include.anchorAttrs }}{% endcapture %} -<a href="#l80" class="line" id="l80"> 80</a> {% endif %} -<a href="#l81" class="line" id="l81"> 81</a> -<a href="#l82" class="line" id="l82"> 82</a> {% capture anchor %}<a {{ anchor }}>{{ include.anchorBody | replace: '%heading%', header | default: '' }}</a>{% endcapture %} -<a href="#l83" class="line" id="l83"> 83</a> -<a href="#l84" class="line" id="l84"> 84</a> <!-- In order to prevent adding extra space after a heading, we'll let the 'anchor' value contain it --> -<a href="#l85" class="line" id="l85"> 85</a> {% if beforeHeading %} -<a href="#l86" class="line" id="l86"> 86</a> {% capture anchor %}{{ anchor }} {% endcapture %} -<a href="#l87" class="line" id="l87"> 87</a> {% else %} -<a href="#l88" class="line" id="l88"> 88</a> {% capture anchor %} {{ anchor }}{% endcapture %} -<a href="#l89" class="line" id="l89"> 89</a> {% endif %} -<a href="#l90" class="line" id="l90"> 90</a> {% endif %} -<a href="#l91" class="line" id="l91"> 91</a> -<a href="#l92" class="line" id="l92"> 92</a> {% capture new_heading %} -<a href="#l93" class="line" id="l93"> 93</a> <h{{ _hAttrToStrip }} -<a href="#l94" class="line" id="l94"> 94</a> {{ include.bodyPrefix }} -<a href="#l95" class="line" id="l95"> 95</a> {% if beforeHeading %} -<a href="#l96" class="line" id="l96"> 96</a> {{ anchor }}{{ header }} -<a href="#l97" class="line" id="l97"> 97</a> {% else %} -<a href="#l98" class="line" id="l98"> 98</a> {{ header }}{{ anchor }} -<a href="#l99" class="line" id="l99"> 99</a> {% endif %} -<a href="#l100" class="line" id="l100"> 100</a> {{ include.bodySuffix }} -<a href="#l101" class="line" id="l101"> 101</a> </h{{ _workspace | last }} -<a href="#l102" class="line" id="l102"> 102</a> {% endcapture %} -<a href="#l103" class="line" id="l103"> 103</a> {% capture edited_headings %}{{ edited_headings }}{{ new_heading }}{% endcapture %} -<a href="#l104" class="line" id="l104"> 104</a> {% endfor %} -<a href="#l105" class="line" id="l105"> 105</a> {% endcapture %}{% assign headingsWorkspace = '' %}{{ edited_headings | strip }}</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/_includes/head.html.html b/git/n-channel/file/_includes/head.html.html @@ -1,87 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>head.html - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../"><img src="../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../log.html">Log</a> | <a href="../../files.html">Files</a> | <a href="../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> head.html (1937B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> <head> -<a href="#l2" class="line" id="l2"> 2</a> <link rel="icon" href="/favicon.png"> -<a href="#l3" class="line" id="l3"> 3</a> <meta charset="UTF-8"> -<a href="#l4" class="line" id="l4"> 4</a> <meta name="viewport" content="width=device-width, initial-scale=1.0"> -<a href="#l5" class="line" id="l5"> 5</a> -<a href="#l6" class="line" id="l6"> 6</a> {% seo title=false %} -<a href="#l7" class="line" id="l7"> 7</a> -<a href="#l8" class="line" id="l8"> 8</a> <title> -<a href="#l9" class="line" id="l9"> 9</a> {% if page.tag or page.title %} -<a href="#l10" class="line" id="l10"> 10</a> {% if page.tag %} -<a href="#l11" class="line" id="l11"> 11</a> {{ page.tag | escape }} -<a href="#l12" class="line" id="l12"> 12</a> {% else %} -<a href="#l13" class="line" id="l13"> 13</a> {{ page.title | escape }} -<a href="#l14" class="line" id="l14"> 14</a> {% endif %} -<a href="#l15" class="line" id="l15"> 15</a> - -<a href="#l16" class="line" id="l16"> 16</a> {% endif %} -<a href="#l17" class="line" id="l17"> 17</a> {% if paginator and paginator.page and paginator.total_pages > 1 and paginator.page > 1 %} -<a href="#l18" class="line" id="l18"> 18</a> Page {{ paginator.page }} of {{ paginator.total_pages }} - -<a href="#l19" class="line" id="l19"> 19</a> {% endif %} -<a href="#l20" class="line" id="l20"> 20</a> {{ site.title | escape }} -<a href="#l21" class="line" id="l21"> 21</a> {% unless page.tag or page.title %} -<a href="#l22" class="line" id="l22"> 22</a> - {{ site.description | escape }} -<a href="#l23" class="line" id="l23"> 23</a> {% endunless %} -<a href="#l24" class="line" id="l24"> 24</a> </title> -<a href="#l25" class="line" id="l25"> 25</a> -<a href="#l26" class="line" id="l26"> 26</a> <link rel="alternate" type="application/atom+xml" title="{{ site.title }}" href="{{ site.baseurl }}/atom.xml"> -<a href="#l27" class="line" id="l27"> 27</a> <link rel="alternate" type="application/json" title="{{ site.title }}" href="{{ "/feed.json" | prepend: site.baseurl | prepend: site.url }}" /> -<a href="#l28" class="line" id="l28"> 28</a> <link rel="sitemap" type="application/xml" title="sitemap" href="{{ site.baseurl }}/sitemap.xml" /> -<a href="#l29" class="line" id="l29"> 29</a> -<a href="#l30" class="line" id="l30"> 30</a> <style> -<a href="#l31" class="line" id="l31"> 31</a> {% capture include_to_scssify %} -<a href="#l32" class="line" id="l32"> 32</a> {% include inline.scss %} -<a href="#l33" class="line" id="l33"> 33</a> {% endcapture %} -<a href="#l34" class="line" id="l34"> 34</a> {{ include_to_scssify | scssify }} -<a href="#l35" class="line" id="l35"> 35</a> </style> -<a href="#l36" class="line" id="l36"> 36</a> -<a href="#l37" class="line" id="l37"> 37</a> <script> -<a href="#l38" class="line" id="l38"> 38</a> var fish_style = document.createElement('style'); -<a href="#l39" class="line" id="l39"> 39</a> fish_style.id = "fish-style"; -<a href="#l40" class="line" id="l40"> 40</a> document.head.appendChild(fish_style); -<a href="#l41" class="line" id="l41"> 41</a> -<a href="#l42" class="line" id="l42"> 42</a> let should_enable_fish_mode = localStorage.getItem("fish-mode") == "true"; -<a href="#l43" class="line" id="l43"> 43</a> -<a href="#l44" class="line" id="l44"> 44</a> function enable_fish_mode() { -<a href="#l45" class="line" id="l45"> 45</a> fish_style.innerHTML = "body,a,input,label,span{cursor:url('/assets/images/modified_stolen_art/cursor.png'), auto;}"; -<a href="#l46" class="line" id="l46"> 46</a> } -<a href="#l47" class="line" id="l47"> 47</a> -<a href="#l48" class="line" id="l48"> 48</a> function toggle_fish_mode() { -<a href="#l49" class="line" id="l49"> 49</a> let check_box = document.getElementById("enable-fish-mode"); -<a href="#l50" class="line" id="l50"> 50</a> localStorage.setItem("fish-mode", check_box.checked); -<a href="#l51" class="line" id="l51"> 51</a> -<a href="#l52" class="line" id="l52"> 52</a> if (check_box.checked){ -<a href="#l53" class="line" id="l53"> 53</a> enable_fish_mode(); -<a href="#l54" class="line" id="l54"> 54</a> } else { -<a href="#l55" class="line" id="l55"> 55</a> fish_style.innerHTML = ""; -<a href="#l56" class="line" id="l56"> 56</a> } -<a href="#l57" class="line" id="l57"> 57</a> } -<a href="#l58" class="line" id="l58"> 58</a> -<a href="#l59" class="line" id="l59"> 59</a> if (should_enable_fish_mode) { -<a href="#l60" class="line" id="l60"> 60</a> enable_fish_mode(); -<a href="#l61" class="line" id="l61"> 61</a> } -<a href="#l62" class="line" id="l62"> 62</a> </script> -<a href="#l63" class="line" id="l63"> 63</a> -<a href="#l64" class="line" id="l64"> 64</a> </head> -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/_includes/inline.scss.html b/git/n-channel/file/_includes/inline.scss.html @@ -1,24 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>inline.scss - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../"><img src="../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../log.html">Log</a> | <a href="../../files.html">Files</a> | <a href="../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> inline.scss (13B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> @use "main"; -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/_includes/navigation.html.html b/git/n-channel/file/_includes/navigation.html.html @@ -1,38 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>navigation.html - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../"><img src="../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../log.html">Log</a> | <a href="../../files.html">Files</a> | <a href="../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> navigation.html (751B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> <header aria-hidden="true" class="no-print"> -<a href="#l2" class="line" id="l2"> 2</a> <a href="/" style> -<a href="#l3" class="line" id="l3"> 3</a> <div class="header-img-outer"> -<a href="#l4" class="line" id="l4"> 4</a> <img class="header-img" style="margin-bottom: 0.5rem; max-width: 9.5rem;" src="/assets/images/modified_stolen_art/templeos.jpeg" width="250" height="288"> -<a href="#l5" class="line" id="l5"> 5</a> <img class="header-img" style="margin-bottom: 0.5rem; max-width: 8.0rem;" src="/assets/images/modified_stolen_art/c-programming-language-chito.png" width="180" height="244"> -<a href="#l6" class="line" id="l6"> 6</a> </div> -<a href="#l7" class="line" id="l7"> 7</a> </a> -<a href="#l8" class="line" id="l8"> 8</a> <nav role="navigation" aria-hidden="true"> -<a href="#l9" class="line" id="l9"> 9</a> <ul> -<a href="#l10" class="line" id="l10"> 10</a> {% for item in site.data.navigation.links %} -<a href="#l11" class="line" id="l11"> 11</a> <li><a href="{{ item.url }}" {% if item.url == page.url %} class="active"{% endif %}>{{ item.title }}</a></li> -<a href="#l12" class="line" id="l12"> 12</a> {% endfor %} -<a href="#l13" class="line" id="l13"> 13</a> </ul> -<a href="#l14" class="line" id="l14"> 14</a> </nav> -<a href="#l15" class="line" id="l15"> 15</a> </header> -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/_layouts/compress.html.html b/git/n-channel/file/_layouts/compress.html.html @@ -1,33 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>compress.html - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../"><img src="../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../log.html">Log</a> | <a href="../../files.html">Files</a> | <a href="../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> compress.html (4494B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> --- -<a href="#l2" class="line" id="l2"> 2</a> # Jekyll layout that compresses HTML -<a href="#l3" class="line" id="l3"> 3</a> # v3.0.4 -<a href="#l4" class="line" id="l4"> 4</a> # http://jch.penibelst.de/ -<a href="#l5" class="line" id="l5"> 5</a> # © 2014–2015 Anatol Broder -<a href="#l6" class="line" id="l6"> 6</a> # MIT License -<a href="#l7" class="line" id="l7"> 7</a> --- -<a href="#l8" class="line" id="l8"> 8</a> -<a href="#l9" class="line" id="l9"> 9</a> {% capture _LINE_FEED %} -<a href="#l10" class="line" id="l10"> 10</a> {% endcapture %}{% if site.compress_html.ignore.envs contains jekyll.environment %}{{ content }}{% else %}{% capture _content %}{{ content }}{% endcapture %}{% assign _profile = site.compress_html.profile %}{% if site.compress_html.endings == "all" %}{% assign _endings = "html head body li dt dd optgroup option colgroup caption thead tbody tfoot tr td th" | split: " " %}{% else %}{% assign _endings = site.compress_html.endings %}{% endif %}{% for _element in _endings %}{% capture _end %}</{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _end %}{% endfor %}{% if _profile and _endings %}{% assign _profile_endings = _content | size | plus: 1 %}{% endif %}{% for _element in site.compress_html.startings %}{% capture _start %}<{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _start %}{% endfor %}{% if _profile and site.compress_html.startings %}{% assign _profile_startings = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.comments == "all" %}{% assign _comments = "<!-- -->" | split: " " %}{% else %}{% assign _comments = site.compress_html.comments %}{% endif %}{% if _comments.size == 2 %}{% capture _comment_befores %}.{{ _content }}{% endcapture %}{% assign _comment_befores = _comment_befores | split: _comments.first %}{% for _comment_before in _comment_befores %}{% if forloop.first %}{% continue %}{% endif %}{% capture _comment_outside %}{% if _carry %}{{ _comments.first }}{% endif %}{{ _comment_before }}{% endcapture %}{% capture _comment %}{% unless _carry %}{{ _comments.first }}{% endunless %}{{ _comment_outside | split: _comments.last | first }}{% if _comment_outside contains _comments.last %}{{ _comments.last }}{% assign _carry = false %}{% else %}{% assign _carry = true %}{% endif %}{% endcapture %}{% assign _content = _content | remove_first: _comment %}{% endfor %}{% if _profile %}{% assign _profile_comments = _content | size | plus: 1 %}{% endif %}{% endif %}{% assign _pre_befores = _content | split: "<pre" %}{% assign _content = "" %}{% for _pre_before in _pre_befores %}{% assign _pres = _pre_before | split: "</pre>" %}{% assign _pres_after = "" %}{% if _pres.size != 0 %}{% if site.compress_html.blanklines %}{% assign _lines = _pres.last | split: _LINE_FEED %}{% capture _pres_after %}{% for _line in _lines %}{% assign _trimmed = _line | split: " " | join: " " %}{% if _trimmed != empty or forloop.last %}{% unless forloop.first %}{{ _LINE_FEED }}{% endunless %}{{ _line }}{% endif %}{% endfor %}{% endcapture %}{% else %}{% assign _pres_after = _pres.last | split: " " | join: " " %}{% endif %}{% endif %}{% capture _content %}{{ _content }}{% if _pre_before contains "</pre>" %}<pre{{ _pres.first }}</pre>{% endif %}{% unless _pre_before contains "</pre>" and _pres.size == 1 %}{{ _pres_after }}{% endunless %}{% endcapture %}{% endfor %}{% if _profile %}{% assign _profile_collapse = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.clippings == "all" %}{% assign _clippings = "html head title base link meta style body article section nav aside h1 h2 h3 h4 h5 h6 hgroup header footer address p hr blockquote ol ul li dl dt dd figure figcaption main div table caption colgroup col tbody thead tfoot tr td th" | split: " " %}{% else %}{% assign _clippings = site.compress_html.clippings %}{% endif %}{% for _element in _clippings %}{% assign _edges = " <e;<e; </e>;</e>;</e> ;</e>" | replace: "e", _element | split: ";" %}{% assign _content = _content | replace: _edges[0], _edges[1] | replace: _edges[2], _edges[3] | replace: _edges[4], _edges[5] %}{% endfor %}{% if _profile and _clippings %}{% assign _profile_clippings = _content | size | plus: 1 %}{% endif %}{{ _content }}{% if _profile %} <table id="compress_html_profile_{{ site.time | date: "%Y%m%d" }}" class="compress_html_profile"> <thead> <tr> <td>Step <td>Bytes <tbody> <tr> <td>raw <td>{{ content | size }}{% if _profile_endings %} <tr> <td>endings <td>{{ _profile_endings }}{% endif %}{% if _profile_startings %} <tr> <td>startings <td>{{ _profile_startings }}{% endif %}{% if _profile_comments %} <tr> <td>comments <td>{{ _profile_comments }}{% endif %}{% if _profile_collapse %} <tr> <td>collapse <td>{{ _profile_collapse }}{% endif %}{% if _profile_clippings %} <tr> <td>clippings <td>{{ _profile_clippings }}{% endif %} </table>{% endif %}{% endif %} -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/_layouts/default.html.html b/git/n-channel/file/_layouts/default.html.html @@ -1,65 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>default.html - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../"><img src="../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../log.html">Log</a> | <a href="../../files.html">Files</a> | <a href="../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> default.html (936B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> --- -<a href="#l2" class="line" id="l2"> 2</a> layout: compress -<a href="#l3" class="line" id="l3"> 3</a> --- -<a href="#l4" class="line" id="l4"> 4</a> -<a href="#l5" class="line" id="l5"> 5</a> <!DOCTYPE html> -<a href="#l6" class="line" id="l6"> 6</a> <html lang="en" > -<a href="#l7" class="line" id="l7"> 7</a> {% include head.html %} -<a href="#l8" class="line" id="l8"> 8</a> <body> -<a href="#l9" class="line" id="l9"> 9</a> <main> -<a href="#l10" class="line" id="l10"> 10</a> <div class="main-title"> -<a href="#l11" class="line" id="l11"> 11</a> <a style="text-decoration: none" href="/"> -<a href="#l12" class="line" id="l12"> 12</a> -<a href="#l13" class="line" id="l13"> 13</a> <h1 style="margin-bottom: 0.7rem;"> -<a href="#l14" class="line" id="l14"> 14</a> N-Channel MOSFET -<a href="#l15" class="line" id="l15"> 15</a> </h1> -<a href="#l16" class="line" id="l16"> 16</a> <div class="main-title-columns"> -<a href="#l17" class="line" id="l17"> 17</a> -<a href="#l18" class="line" id="l18"> 18</a> <img style="image-rendering: crisp-edges; height: 100%; height: 4rem; margin: auto 0px; margin-right: 0.4rem;" src="/favicon.png" widht=64 height=46> -<a href="#l19" class="line" id="l19"> 19</a> -<a href="#l20" class="line" id="l20"> 20</a> <h2 style="margin-top: 0px; text-wrap: balance;"> -<a href="#l21" class="line" id="l21"> 21</a> <i> -<a href="#l22" class="line" id="l22"> 22</a> Metal–Oxide–Semiconductor<br>Field-effect Transistor -<a href="#l23" class="line" id="l23"> 23</a> </i> -<a href="#l24" class="line" id="l24"> 24</a> </h2> -<a href="#l25" class="line" id="l25"> 25</a> -<a href="#l26" class="line" id="l26"> 26</a> </div> -<a href="#l27" class="line" id="l27"> 27</a> -<a href="#l28" class="line" id="l28"> 28</a> </a> -<a href="#l29" class="line" id="l29"> 29</a> </div> -<a href="#l30" class="line" id="l30"> 30</a> -<a href="#l31" class="line" id="l31"> 31</a> <div class="main-content"> -<a href="#l32" class="line" id="l32"> 32</a> {% include navigation.html %} -<a href="#l33" class="line" id="l33"> 33</a> -<a href="#l34" class="line" id="l34"> 34</a> {{ content }} -<a href="#l35" class="line" id="l35"> 35</a> </div> -<a href="#l36" class="line" id="l36"> 36</a> -<a href="#l37" class="line" id="l37"> 37</a> </main> -<a href="#l38" class="line" id="l38"> 38</a> -<a href="#l39" class="line" id="l39"> 39</a> <div class="footer invertable-image" > -<a href="#l40" class="line" id="l40"> 40</a> </div> -<a href="#l41" class="line" id="l41"> 41</a> </body> -<a href="#l42" class="line" id="l42"> 42</a> </html> -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/_layouts/page.html.html b/git/n-channel/file/_layouts/page.html.html @@ -1,34 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>page.html - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../"><img src="../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../log.html">Log</a> | <a href="../../files.html">Files</a> | <a href="../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> page.html (106B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> --- -<a href="#l2" class="line" id="l2"> 2</a> layout: default -<a href="#l3" class="line" id="l3"> 3</a> --- -<a href="#l4" class="line" id="l4"> 4</a> -<a href="#l5" class="line" id="l5"> 5</a> <section class="post"> -<a href="#l6" class="line" id="l6"> 6</a> <h1>{{ page.title }}</h1> -<a href="#l7" class="line" id="l7"> 7</a> {{ content }} -<a href="#l8" class="line" id="l8"> 8</a> </section> -<a href="#l9" class="line" id="l9"> 9</a> -<a href="#l10" class="line" id="l10"> 10</a> -<a href="#l11" class="line" id="l11"> 11</a> -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/_layouts/post.html.html b/git/n-channel/file/_layouts/post.html.html @@ -1,93 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>post.html - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../"><img src="../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../log.html">Log</a> | <a href="../../files.html">Files</a> | <a href="../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> post.html (2042B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> --- -<a href="#l2" class="line" id="l2"> 2</a> layout: default -<a href="#l3" class="line" id="l3"> 3</a> --- -<a href="#l4" class="line" id="l4"> 4</a> -<a href="#l5" class="line" id="l5"> 5</a> <section class="post"> -<a href="#l6" class="line" id="l6"> 6</a> <h1>{{ page.title }}</h1> -<a href="#l7" class="line" id="l7"> 7</a> {{ content }} -<a href="#l8" class="line" id="l8"> 8</a> <span class="meta" id="date-and-tags"><time id="date-and-tags-date" datetime="{{ page.date | date_to_xmlschema }}">{{ page.date | date: "%B %-d, %Y" }}</time> &middot; {% for tag in page.tags %} -<a href="#l9" class="line" id="l9"> 9</a> <a href="/tag/{{tag}}">{{tag}}</a>{% unless forloop.last %}, {% endunless %}{% endfor %}</span> -<a href="#l10" class="line" id="l10"> 10</a> -<a href="#l11" class="line" id="l11"> 11</a> -<a href="#l12" class="line" id="l12"> 12</a> {% if page.comments == true %} -<a href="#l13" class="line" id="l13"> 13</a> -<a href="#l14" class="line" id="l14"> 14</a> <div> -<a href="#l15" class="line" id="l15"> 15</a> <label for="show-comments" style="font-size: 90%; color:gray;"> Show comments: </label> -<a href="#l16" class="line" id="l16"> 16</a> <input type="checkbox" id="show-comments" onclick="toggle_comments()"> -<a href="#l17" class="line" id="l17"> 17</a> </div> -<a href="#l18" class="line" id="l18"> 18</a> -<a href="#l19" class="line" id="l19"> 19</a> <div class="commentbox" id="commentbox_div"></div> -<a href="#l20" class="line" id="l20"> 20</a> -<a href="#l21" class="line" id="l21"> 21</a> <script> -<a href="#l22" class="line" id="l22"> 22</a> var commentbox_div = document.getElementById("commentbox_div"); -<a href="#l23" class="line" id="l23"> 23</a> let comments_have_been_enabled = false; -<a href="#l24" class="line" id="l24"> 24</a> -<a href="#l25" class="line" id="l25"> 25</a> document.getElementById("show-comments").checked = localStorage.getItem("show-comments") == "true"; -<a href="#l26" class="line" id="l26"> 26</a> -<a href="#l27" class="line" id="l27"> 27</a> function enable_comments() { -<a href="#l28" class="line" id="l28"> 28</a> if (comments_have_been_enabled == false) { -<a href="#l29" class="line" id="l29"> 29</a> comments_have_been_enabled = true; -<a href="#l30" class="line" id="l30"> 30</a> -<a href="#l31" class="line" id="l31"> 31</a> let script = document.createElement('script'); -<a href="#l32" class="line" id="l32"> 32</a> script.onload = function () { -<a href="#l33" class="line" id="l33"> 33</a> if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) { -<a href="#l34" class="line" id="l34"> 34</a> commentBox('5678673445257216-proj', { -<a href="#l35" class="line" id="l35"> 35</a> textColor: '#fff', -<a href="#l36" class="line" id="l36"> 36</a> subtextColor: '#fff' -<a href="#l37" class="line" id="l37"> 37</a> }); -<a href="#l38" class="line" id="l38"> 38</a> } else { -<a href="#l39" class="line" id="l39"> 39</a> commentBox('5678673445257216-proj'); -<a href="#l40" class="line" id="l40"> 40</a> } -<a href="#l41" class="line" id="l41"> 41</a> }; -<a href="#l42" class="line" id="l42"> 42</a> script.src = "https://unpkg.com/commentbox.io/dist/commentBox.min.js"; -<a href="#l43" class="line" id="l43"> 43</a> document.head.appendChild(script); -<a href="#l44" class="line" id="l44"> 44</a> -<a href="#l45" class="line" id="l45"> 45</a> } -<a href="#l46" class="line" id="l46"> 46</a> commentbox_div.style.display = "block"; -<a href="#l47" class="line" id="l47"> 47</a> } -<a href="#l48" class="line" id="l48"> 48</a> -<a href="#l49" class="line" id="l49"> 49</a> function toggle_comments() { -<a href="#l50" class="line" id="l50"> 50</a> let checkBox = document.getElementById("show-comments"); -<a href="#l51" class="line" id="l51"> 51</a> localStorage.setItem("show-comments", checkBox.checked); -<a href="#l52" class="line" id="l52"> 52</a> -<a href="#l53" class="line" id="l53"> 53</a> if (checkBox.checked){ -<a href="#l54" class="line" id="l54"> 54</a> enable_comments(); -<a href="#l55" class="line" id="l55"> 55</a> } else { -<a href="#l56" class="line" id="l56"> 56</a> commentbox_div.style.display = "none"; -<a href="#l57" class="line" id="l57"> 57</a> } -<a href="#l58" class="line" id="l58"> 58</a> } -<a href="#l59" class="line" id="l59"> 59</a> -<a href="#l60" class="line" id="l60"> 60</a> let checkBox = document.getElementById("show-comments"); -<a href="#l61" class="line" id="l61"> 61</a> -<a href="#l62" class="line" id="l62"> 62</a> if (checkBox.checked) { -<a href="#l63" class="line" id="l63"> 63</a> enable_comments(); -<a href="#l64" class="line" id="l64"> 64</a> } -<a href="#l65" class="line" id="l65"> 65</a> </script> -<a href="#l66" class="line" id="l66"> 66</a> -<a href="#l67" class="line" id="l67"> 67</a> {% endif %} -<a href="#l68" class="line" id="l68"> 68</a> </section> -<a href="#l69" class="line" id="l69"> 69</a> -<a href="#l70" class="line" id="l70"> 70</a> -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/_layouts/tag.html.html b/git/n-channel/file/_layouts/tag.html.html @@ -1,40 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>tag.html - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../"><img src="../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../log.html">Log</a> | <a href="../../files.html">Files</a> | <a href="../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> tag.html (497B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> --- -<a href="#l2" class="line" id="l2"> 2</a> layout: default -<a href="#l3" class="line" id="l3"> 3</a> --- -<a href="#l4" class="line" id="l4"> 4</a> -<a href="#l5" class="line" id="l5"> 5</a> <section class="posts"> -<a href="#l6" class="line" id="l6"> 6</a> <h1>Tag #{{page.tag}}</h1> -<a href="#l7" class="line" id="l7"> 7</a> <ul> -<a href="#l8" class="line" id="l8"> 8</a> {% for post in site.posts %} -<a href="#l9" class="line" id="l9"> 9</a> {% if post.tags contains page.tag %} -<a href="#l10" class="line" id="l10"> 10</a> <li {% cycle 'alternate-color': 'style="color: #799f7c;"', 'style="color: #b3b781;"'%} > -<a href="#l11" class="line" id="l11"> 11</a> <a style="color: inherit" class="post" href="{{ post.url }}">{{ post.title }}</a><time datetime="{{ post.date | date_to_xmlschema }}">{{ post.date | date: "%m-%d-%Y" }}</time> -<a href="#l12" class="line" id="l12"> 12</a> </li> -<a href="#l13" class="line" id="l13"> 13</a> {% endif %} -<a href="#l14" class="line" id="l14"> 14</a> {% endfor %} -<a href="#l15" class="line" id="l15"> 15</a> </ul> -<a href="#l16" class="line" id="l16"> 16</a> -<a href="#l17" class="line" id="l17"> 17</a> </section> -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/_layouts/tags.html.html b/git/n-channel/file/_layouts/tags.html.html @@ -1,37 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>tags.html - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../"><img src="../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../log.html">Log</a> | <a href="../../files.html">Files</a> | <a href="../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> tags.html (340B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> --- -<a href="#l2" class="line" id="l2"> 2</a> layout: default -<a href="#l3" class="line" id="l3"> 3</a> title: Tags -<a href="#l4" class="line" id="l4"> 4</a> --- -<a href="#l5" class="line" id="l5"> 5</a> -<a href="#l6" class="line" id="l6"> 6</a> <section class="posts"> -<a href="#l7" class="line" id="l7"> 7</a> <h1>{{ page.title }}</h1> -<a href="#l8" class="line" id="l8"> 8</a> {% assign tags = site.tags | sort %} -<a href="#l9" class="line" id="l9"> 9</a> <ul> -<a href="#l10" class="line" id="l10"> 10</a> {% for tag in tags %} -<a href="#l11" class="line" id="l11"> 11</a> <li><a href="/tag/{{ tag | first | slugify }}/">{{ tag[0] | replace:'-', ' ' }} ({{ tag | last | size }}){% unless forloop.last %}, {% endunless %}</a></li> -<a href="#l12" class="line" id="l12"> 12</a> {% endfor %} -<a href="#l13" class="line" id="l13"> 13</a> </ul> -<a href="#l14" class="line" id="l14"> 14</a> -<a href="#l15" class="line" id="l15"> 15</a> </section></pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/_pages/about.md.html b/git/n-channel/file/_pages/about.md.html @@ -1,66 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>about.md - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../"><img src="../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../log.html">Log</a> | <a href="../../files.html">Files</a> | <a href="../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> about.md (1802B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> --- -<a href="#l2" class="line" id="l2"> 2</a> layout: page -<a href="#l3" class="line" id="l3"> 3</a> title: About -<a href="#l4" class="line" id="l4"> 4</a> --- -<a href="#l5" class="line" id="l5"> 5</a> -<a href="#l6" class="line" id="l6"> 6</a> ## Hi -<a href="#l7" class="line" id="l7"> 7</a> -<a href="#l8" class="line" id="l8"> 8</a> I mostly do systems programming and electronics, so that's what you will see here. -<a href="#l9" class="line" id="l9"> 9</a> I'm a year away from completing my Bachelor's in Electronic Engineering, but I have a full-time job doing programming and electronics for some guys making arcade machines. -<a href="#l10" class="line" id="l10"> 10</a> -<a href="#l11" class="line" id="l11"> 11</a>  -<a href="#l12" class="line" id="l12"> 12</a> {: style="text-align: center;"} -<a href="#l13" class="line" id="l13"> 13</a> -<a href="#l14" class="line" id="l14"> 14</a> (I don't have any non-private socials) -<a href="#l15" class="line" id="l15"> 15</a> -<a href="#l16" class="line" id="l16"> 16</a> Even if you already know programming, you should check out these people: -<a href="#l17" class="line" id="l17"> 17</a> - [Ryan Fleury's Blog](https://www.rfleury.com/) -<a href="#l18" class="line" id="l18"> 18</a> - [(and read the source code of his projects)](https://github.com/EpicGamesExt/raddebugger) -<a href="#l19" class="line" id="l19"> 19</a> - [Handmade Hero Videos](https://guide.handmadehero.org/) -<a href="#l20" class="line" id="l20"> 20</a> - [Casey Muratori's Other vidoes](https://www.youtube.com/@MollyRocket) -<a href="#l21" class="line" id="l21"> 21</a> - Jonathan Blow -<a href="#l22" class="line" id="l22"> 22</a> - [John Jackson](https://www.youtube.com/@johnjackson9767) (awesome guy) -<a href="#l23" class="line" id="l23"> 23</a> -<a href="#l24" class="line" id="l24"> 24</a> <hr> -<a href="#l25" class="line" id="l25"> 25</a> -<a href="#l26" class="line" id="l26"> 26</a> My [nisse](https://en.wikipedia.org/wiki/Nisse_(folklore)) collection: -<a href="#l27" class="line" id="l27"> 27</a> -<a href="#l28" class="line" id="l28"> 28</a>  -<a href="#l29" class="line" id="l29"> 29</a> {: style="text-align: center;"} -<a href="#l30" class="line" id="l30"> 30</a> -<a href="#l31" class="line" id="l31"> 31</a> Images under the folder `modified_stolen_images` are not mine. -<a href="#l32" class="line" id="l32"> 32</a> Sources: -<a href="#l33" class="line" id="l33"> 33</a> {: style="font-size: 70%; margin-bottom: 0;"} -<a href="#l34" class="line" id="l34"> 34</a> - [templeos.jpeg](https://x.com/chibitoad/status/1448406173263171585) -<a href="#l35" class="line" id="l35"> 35</a> - [nuko_calm.png, cursor.png and c-programming-language-chito.png](https://store.line.me/stickershop/product/25634268) -<a href="#l36" class="line" id="l36"> 36</a> - [couch.png](https://www.pixiv.net/en/artworks/92469486) -<a href="#l37" class="line" id="l37"> 37</a> - [kettenkrad.gif](https://www.reddit.com/r/GirlsLastTour/comments/fsn49q/i_spent_the_entire_afternoon_animating_chi_and/) -<a href="#l38" class="line" id="l38"> 38</a> - [gears.gif](https://gall.dcinside.com/mgallery/board/view/?id=girlslastyour&no=8172) -<a href="#l39" class="line" id="l39"> 39</a> - [eureka.png](https://x.com/auksechan/status/1509225655430434822) -<a href="#l40" class="line" id="l40"> 40</a> - silly.png ( don't know the source ) -<a href="#l41" class="line" id="l41"> 41</a> - grass.png: Official art from 少女終末旅行 -<a href="#l42" class="line" id="l42"> 42</a> {: style="font-size: 70%; margin: 0;"} -<a href="#l43" class="line" id="l43"> 43</a> -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/_pages/search.html.html b/git/n-channel/file/_pages/search.html.html @@ -1,94 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>search.html - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../"><img src="../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../log.html">Log</a> | <a href="../../files.html">Files</a> | <a href="../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> search.html (1825B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> --- -<a href="#l2" class="line" id="l2"> 2</a> layout: default -<a href="#l3" class="line" id="l3"> 3</a> title: Search -<a href="#l4" class="line" id="l4"> 4</a> --- -<a href="#l5" class="line" id="l5"> 5</a> -<a href="#l6" class="line" id="l6"> 6</a> <section class="posts"> -<a href="#l7" class="line" id="l7"> 7</a> <style> -<a href="#l8" class="line" id="l8"> 8</a> #search-container { -<a href="#l9" class="line" id="l9"> 9</a> max-width: 100%; -<a href="#l10" class="line" id="l10"> 10</a> } -<a href="#l11" class="line" id="l11"> 11</a> .text-search { -<a href="#l12" class="line" id="l12"> 12</a> } -<a href="#l13" class="line" id="l13"> 13</a> -<a href="#l14" class="line" id="l14"> 14</a> input[type=text] { -<a href="#l15" class="line" id="l15"> 15</a> font-size: normal; -<a href="#l16" class="line" id="l16"> 16</a> outline: none; -<a href="#l17" class="line" id="l17"> 17</a> padding: 1rem; -<a href="#l18" class="line" id="l18"> 18</a> background: transparent; -<a href="#l19" class="line" id="l19"> 19</a> width: 100%; -<a href="#l20" class="line" id="l20"> 20</a> -webkit-appearance: none; -<a href="#l21" class="line" id="l21"> 21</a> font-family: inherit; -<a href="#l22" class="line" id="l22"> 22</a> font-size: 100%; -<a href="#l23" class="line" id="l23"> 23</a> border: none; -<a href="#l24" class="line" id="l24"> 24</a> } -<a href="#l25" class="line" id="l25"> 25</a> #results-container { -<a href="#l26" class="line" id="l26"> 26</a> margin: .5rem 0; -<a href="#l27" class="line" id="l27"> 27</a> } -<a href="#l28" class="line" id="l28"> 28</a> .main-content { -<a href="#l29" class="line" id="l29"> 29</a> padding-right: 0px; -<a href="#l30" class="line" id="l30"> 30</a> } -<a href="#l31" class="line" id="l31"> 31</a> </style> -<a href="#l32" class="line" id="l32"> 32</a> -<a href="#l33" class="line" id="l33"> 33</a> <h1 style=""> {{ page.title }} </h1> -<a href="#l34" class="line" id="l34"> 34</a> -<a href="#l35" class="line" id="l35"> 35</a> -<a href="#l36" class="line" id="l36"> 36</a> <!-- Html Elements for Search --> -<a href="#l37" class="line" id="l37"> 37</a> <div id="search-container"> -<a href="#l38" class="line" id="l38"> 38</a> <div style="background: rgb(236, 237, 238); display: flex; flex-direction: row;"> -<a href="#l39" class="line" id="l39"> 39</a> <input style="flex-grow:999;" type="text" id="search-input" placeholder="Search..."> -<a href="#l40" class="line" id="l40"> 40</a> <img style="flex-basis: 150px; flex-grow: 1; width: 150px; height: auto;" src="/assets/images/modified_stolen_art/nuko_calm.png" width=342 height=127> -<a href="#l41" class="line" id="l41"> 41</a> </div> -<a href="#l42" class="line" id="l42"> 42</a> -<a href="#l43" class="line" id="l43"> 43</a> <p> <b>Tags: </b> -<a href="#l44" class="line" id="l44"> 44</a> {% for tag in site.tags %} -<a href="#l45" class="line" id="l45"> 45</a> <a href="/tag/{{ tag | first }}"> {{ tag | first }}{% unless forloop.last %},{% endunless %}</a> -<a href="#l46" class="line" id="l46"> 46</a> {% endfor %} -<a href="#l47" class="line" id="l47"> 47</a> </p> -<a href="#l48" class="line" id="l48"> 48</a> -<a href="#l49" class="line" id="l49"> 49</a> <ol id="results-container"></ol> -<a href="#l50" class="line" id="l50"> 50</a> </div> -<a href="#l51" class="line" id="l51"> 51</a> -<a href="#l52" class="line" id="l52"> 52</a> -<a href="#l53" class="line" id="l53"> 53</a> -<a href="#l54" class="line" id="l54"> 54</a> <!-- Script pointing to search-script.js --> -<a href="#l55" class="line" id="l55"> 55</a> <script src="/search.js" type="text/javascript"></script> -<a href="#l56" class="line" id="l56"> 56</a> -<a href="#l57" class="line" id="l57"> 57</a> <!-- Configuration --> -<a href="#l58" class="line" id="l58"> 58</a> <script type="text/javascript"> -<a href="#l59" class="line" id="l59"> 59</a> SimpleJekyllSearch({ -<a href="#l60" class="line" id="l60"> 60</a> searchInput: document.getElementById('search-input'), -<a href="#l61" class="line" id="l61"> 61</a> resultsContainer: document.getElementById('results-container'), -<a href="#l62" class="line" id="l62"> 62</a> json: '/search.json', -<a href="#l63" class="line" id="l63"> 63</a> searchResultTemplate: '<li><a href="{url}" title="{description}">{title}</a></li>', -<a href="#l64" class="line" id="l64"> 64</a> noResultsText: 'No results found', -<a href="#l65" class="line" id="l65"> 65</a> limit: 10, -<a href="#l66" class="line" id="l66"> 66</a> fuzzy: true, -<a href="#l67" class="line" id="l67"> 67</a> exclude: ['Welcome'] -<a href="#l68" class="line" id="l68"> 68</a> }) -<a href="#l69" class="line" id="l69"> 69</a> </script> -<a href="#l70" class="line" id="l70"> 70</a> -<a href="#l71" class="line" id="l71"> 71</a> </section> -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/_plugins/tags.rb.html b/git/n-channel/file/_plugins/tags.rb.html @@ -1,48 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>tags.rb - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../"><img src="../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../log.html">Log</a> | <a href="../../files.html">Files</a> | <a href="../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> tags.rb (613B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> module Jekyll -<a href="#l2" class="line" id="l2"> 2</a> class TagPageGenerator < Generator -<a href="#l3" class="line" id="l3"> 3</a> safe true -<a href="#l4" class="line" id="l4"> 4</a> -<a href="#l5" class="line" id="l5"> 5</a> def generate(site) -<a href="#l6" class="line" id="l6"> 6</a> tags = site.posts.docs.flat_map { |post| post.data['tags'] || [] }.to_set -<a href="#l7" class="line" id="l7"> 7</a> tags.each do |tag| -<a href="#l8" class="line" id="l8"> 8</a> site.pages << TagPage.new(site, site.source, tag) -<a href="#l9" class="line" id="l9"> 9</a> end -<a href="#l10" class="line" id="l10"> 10</a> end -<a href="#l11" class="line" id="l11"> 11</a> end -<a href="#l12" class="line" id="l12"> 12</a> -<a href="#l13" class="line" id="l13"> 13</a> class TagPage < Page -<a href="#l14" class="line" id="l14"> 14</a> def initialize(site, base, tag) -<a href="#l15" class="line" id="l15"> 15</a> @site = site -<a href="#l16" class="line" id="l16"> 16</a> @base = base -<a href="#l17" class="line" id="l17"> 17</a> @dir = File.join('tag', tag) -<a href="#l18" class="line" id="l18"> 18</a> @name = 'index.html' -<a href="#l19" class="line" id="l19"> 19</a> -<a href="#l20" class="line" id="l20"> 20</a> self.process(@name) -<a href="#l21" class="line" id="l21"> 21</a> self.read_yaml(File.join(base, '_layouts'), 'tag.html') -<a href="#l22" class="line" id="l22"> 22</a> self.data['tag'] = tag -<a href="#l23" class="line" id="l23"> 23</a> self.data['title'] = "Tag: #{tag}" -<a href="#l24" class="line" id="l24"> 24</a> end -<a href="#l25" class="line" id="l25"> 25</a> end -<a href="#l26" class="line" id="l26"> 26</a> end</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/_posts/2014-02-21-fish-mode.md.html b/git/n-channel/file/_posts/2014-02-21-fish-mode.md.html @@ -1,46 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>2014-02-21-fish-mode.md - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../"><img src="../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../log.html">Log</a> | <a href="../../files.html">Files</a> | <a href="../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> 2014-02-21-fish-mode.md (976B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> --- -<a href="#l2" class="line" id="l2"> 2</a> layout: post -<a href="#l3" class="line" id="l3"> 3</a> title: 𓆛𓆜𓆝𓆞𓆟 -<a href="#l4" class="line" id="l4"> 4</a> description: 𓆛𓆜𓆝𓆞𓆟𓆛𓆜𓆝𓆞𓆟𓆛𓆜𓆝𓆞𓆟𓆛𓆜𓆝𓆞𓆟𓆛𓆜𓆝𓆞𓆟𓆛𓆜𓆝𓆞𓆟𓆛𓆜𓆝𓆞𓆟𓆛𓆜𓆝𓆞𓆟𓆛𓆜𓆝𓆞𓆟𓆛𓆜𓆝𓆞𓆟 -<a href="#l5" class="line" id="l5"> 5</a> comments: true -<a href="#l6" class="line" id="l6"> 6</a> tags: [] -<a href="#l7" class="line" id="l7"> 7</a> --- -<a href="#l8" class="line" id="l8"> 8</a> -<a href="#l9" class="line" id="l9"> 9</a> <div> -<a href="#l10" class="line" id="l10"> 10</a> <label for="enable-fish-mode" style="font-size: 90%; color:gray; margin-right: 0.5rem;"> Fish mode <i style="font-size: 50%; letter-spacing: -5px;"> tkmiz </i> </label> -<a href="#l11" class="line" id="l11"> 11</a> <input type="checkbox" id="enable-fish-mode" onclick="toggle_fish_mode()"> -<a href="#l12" class="line" id="l12"> 12</a> </div> -<a href="#l13" class="line" id="l13"> 13</a> -<a href="#l14" class="line" id="l14"> 14</a> <script> -<a href="#l15" class="line" id="l15"> 15</a> let check_box = document.getElementById("enable-fish-mode"); -<a href="#l16" class="line" id="l16"> 16</a> document.getElementById("enable-fish-mode").checked = should_enable_fish_mode; -<a href="#l17" class="line" id="l17"> 17</a> -<a href="#l18" class="line" id="l18"> 18</a> window.addEventListener("load", (event) => { -<a href="#l19" class="line" id="l19"> 19</a> document.getElementById("date-and-tags").innerHTML += "<a>fish</a>"; -<a href="#l20" class="line" id="l20"> 20</a> document.getElementById("date-and-tags-date").style = "color: #60736e; font-style: italic; letter-spacing: .1rem;"; -<a href="#l21" class="line" id="l21"> 21</a> }); -<a href="#l22" class="line" id="l22"> 22</a> </script> -<a href="#l23" class="line" id="l23"> 23</a> -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/_posts/2024-01-20-Simplifying-state.md.html b/git/n-channel/file/_posts/2024-01-20-Simplifying-state.md.html @@ -1,383 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>2024-01-20-Simplifying-state.md - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../"><img src="../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../log.html">Log</a> | <a href="../../files.html">Files</a> | <a href="../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> 2024-01-20-Simplifying-state.md (13391B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> --- -<a href="#l2" class="line" id="l2"> 2</a> layout: post -<a href="#l3" class="line" id="l3"> 3</a> title: "Simplifying state: Synchronous hardware ideas applied to software" -<a href="#l4" class="line" id="l4"> 4</a> description: Synchronous hardware ideas applied to software -<a href="#l5" class="line" id="l5"> 5</a> summary: If you have a 'frame' based execution loop, where each module is ran once per frame. You can pass signals around that have a lifetime of a single frame. -<a href="#l6" class="line" id="l6"> 6</a> comments: true -<a href="#l7" class="line" id="l7"> 7</a> tags: [writing, programming, VHDL, C] -<a href="#l8" class="line" id="l8"> 8</a> --- -<a href="#l9" class="line" id="l9"> 9</a> -<a href="#l10" class="line" id="l10"> 10</a> ## State madness -<a href="#l11" class="line" id="l11"> 11</a> -<a href="#l12" class="line" id="l12"> 12</a> Lots of code, contains a ton of state. My current project is especially prone due to it being very rule-driven. -<a href="#l13" class="line" id="l13"> 13</a> -<a href="#l14" class="line" id="l14"> 14</a> The problem that arises, is as the codebase grows, you naturally end up having multiple systems interacting with each-other. -<a href="#l15" class="line" id="l15"> 15</a> -<a href="#l16" class="line" id="l16"> 16</a> Now in my special case, everything is completely compiletime known. Meaning there isn't really any dynamic modularity to handle, but that makes this example even easier to show. -<a href="#l17" class="line" id="l17"> 17</a> -<a href="#l18" class="line" id="l18"> 18</a> We're going to look at one particular approach to solving complex communication between different "entities", inspired by my experiences from writing hardware systems. -<a href="#l19" class="line" id="l19"> 19</a> -<a href="#l20" class="line" id="l20"> 20</a> ## Just use if statements -<a href="#l21" class="line" id="l21"> 21</a> ```c -<a href="#l22" class="line" id="l22"> 22</a> #include "room1.h" -<a href="#l23" class="line" id="l23"> 23</a> -<a href="#l24" class="line" id="l24"> 24</a> void update() { -<a href="#l25" class="line" id="l25"> 25</a> if (room1.lever1) { -<a href="#l26" class="line" id="l26"> 26</a> door.state = OPEN; -<a href="#l27" class="line" id="l27"> 27</a> } else { -<a href="#l28" class="line" id="l28"> 28</a> door.state = CLOSED; -<a href="#l29" class="line" id="l29"> 29</a> } -<a href="#l30" class="line" id="l30"> 30</a> } -<a href="#l31" class="line" id="l31"> 31</a> ``` -<a href="#l32" class="line" id="l32"> 32</a> Some might think the above code is too simple, or silly. One might say "It's natural for most systems to grow to some complexity level where you need handlers, objects, etc. globals are bad for extensibility". -<a href="#l33" class="line" id="l33"> 33</a> -<a href="#l34" class="line" id="l34"> 34</a> However, I think this is blatantly false. If you want to get work done, you better try to write things in a way which is this simple. Over-complicating things is a super easy trap to fall into. -<a href="#l35" class="line" id="l35"> 35</a> -<a href="#l36" class="line" id="l36"> 36</a> ```c -<a href="#l37" class="line" id="l37"> 37</a> if (((room1.lever1 || room1.lever2) && -<a href="#l38" class="line" id="l38"> 38</a> (room2.lever1 && room2.lever4)) || -<a href="#l39" class="line" id="l39"> 39</a> secret_room.master_lever) { -<a href="#l40" class="line" id="l40"> 40</a> door.state = OPEN; -<a href="#l41" class="line" id="l41"> 41</a> } else { -<a href="#l42" class="line" id="l42"> 42</a> door.state = CLOSED; -<a href="#l43" class="line" id="l43"> 43</a> } -<a href="#l44" class="line" id="l44"> 44</a> ``` -<a href="#l45" class="line" id="l45"> 45</a> As things get more complex, don't add some weird system, just continue to do simple things. Imagine writing the snippet above using said weird system where you push changes, or communicate via functions. -<a href="#l46" class="line" id="l46"> 46</a> If possible you want `door.state` to only be changed at one place. This has the added benefit of being extremely readable. However, you will loose context other places, but if you're good at grepping that shouldn't be a problem. -<a href="#l47" class="line" id="l47"> 47</a> -<a href="#l48" class="line" id="l48"> 48</a> *Even in situations where less information is known at compiletime, this can be applied in some form. For example, if you don't know which switches are bound to which doors it's generally solved by iterating through some datastructures. It's worth noting that in dynamic cases, you don't usually have lots of weird cases, they tend to be more predictable.* -<a href="#l49" class="line" id="l49"> 49</a> -<a href="#l50" class="line" id="l50"> 50</a> ## Wait, all logic inside "update()"? -<a href="#l51" class="line" id="l51"> 51</a> -<a href="#l52" class="line" id="l52"> 52</a> Yes, that's right. Just run all your logic each frame. Computers are blazingly fast, checking some if statements doesn't take that long. You're probably going to be limited by other things before a bunch of branches limit you. -<a href="#l53" class="line" id="l53"> 53</a> -<a href="#l54" class="line" id="l54"> 54</a> Compared to signals, event systems, and other methods of solving this problem, just having an update functions allows a lot more flexibility. Using event systems leads to exponentially more code as you add states and signals. -<a href="#l55" class="line" id="l55"> 55</a> A lot of them also use string identifiers, and dynamic access. Which is extremely bothersome for extensibility, and is prone to typos. -<a href="#l56" class="line" id="l56"> 56</a> -<a href="#l57" class="line" id="l57"> 57</a> However, one thing should be noted, handling state with just globals + `update()` does have one limitation when it comes to being able to write concise code. -<a href="#l58" class="line" id="l58"> 58</a> This is when you want code to vary with state, and not just data. -<a href="#l59" class="line" id="l59"> 59</a> You can fix this by having a switch statement, using function pointers, or even more if statements. -<a href="#l60" class="line" id="l60"> 60</a> -<a href="#l61" class="line" id="l61"> 61</a> But there is a better way -<a href="#l62" class="line" id="l62"> 62</a> -<a href="#l63" class="line" id="l63"> 63</a> ## Corutines -<a href="#l64" class="line" id="l64"> 64</a> -<a href="#l65" class="line" id="l65"> 65</a> You can create a corutine instance for each of your update() functions. -<a href="#l66" class="line" id="l66"> 66</a> -<a href="#l67" class="line" id="l67"> 67</a> This lets you store code state without having to write lots of code managing it. Personally I use [minicoro](https://github.com/edubart/minicoro) to do my corutine states. -<a href="#l68" class="line" id="l68"> 68</a> -<a href="#l69" class="line" id="l69"> 69</a> ```c -<a href="#l70" class="line" id="l70"> 70</a> void update(coro_t* co) { -<a href="#l71" class="line" id="l71"> 71</a> while (true) { -<a href="#l72" class="line" id="l72"> 72</a> if (room1.lever1) break; -<a href="#l73" class="line" id="l73"> 73</a> yield(co); -<a href="#l74" class="line" id="l74"> 74</a> } -<a href="#l75" class="line" id="l75"> 75</a> while (true) { -<a href="#l76" class="line" id="l76"> 76</a> if (room1.lever2 || room2.lever1) break; -<a href="#l77" class="line" id="l77"> 77</a> u32 res = do_update_1(); -<a href="#l78" class="line" id="l78"> 78</a> if (res > 3) do_update_2(); -<a href="#l79" class="line" id="l79"> 79</a> yield(co); -<a href="#l80" class="line" id="l80"> 80</a> } -<a href="#l81" class="line" id="l81"> 81</a> while (true) { -<a href="#l82" class="line" id="l82"> 82</a> if (room4.lever3 && room4.push_button) break; -<a href="#l83" class="line" id="l83"> 83</a> do_update_2(); -<a href="#l84" class="line" id="l84"> 84</a> yield(co); -<a href="#l85" class="line" id="l85"> 85</a> } -<a href="#l86" class="line" id="l86"> 86</a> open_final_door(); -<a href="#l87" class="line" id="l87"> 87</a> } -<a href="#l88" class="line" id="l88"> 88</a> ``` -<a href="#l89" class="line" id="l89"> 89</a> -<a href="#l90" class="line" id="l90"> 90</a> I'm hoping this simple example sort of shows how extensible and concise the code gets by doing this. Even very stateful programs can be implemented this way, and the huge benefit is that you can follow the code linearly downwards. It's also extremely easy to debug, as you can just step through each corutines `update()` function. -<a href="#l91" class="line" id="l91"> 91</a> -<a href="#l92" class="line" id="l92"> 92</a> ## When it gets bothersome -<a href="#l93" class="line" id="l93"> 93</a> -<a href="#l94" class="line" id="l94"> 94</a> What happens if we want to only act on changes to some of these variables? -<a href="#l95" class="line" id="l95"> 95</a> -<a href="#l96" class="line" id="l96"> 96</a> ```c -<a href="#l97" class="line" id="l97"> 97</a> void update(coro_t* co) { -<a href="#l98" class="line" id="l98"> 98</a> bool has_pushed_lever1 = false; -<a href="#l99" class="line" id="l99"> 99</a> while (true) { -<a href="#l100" class="line" id="l100"> 100</a> if (!hash_pushed_lever1 && room1.lever1) { -<a href="#l101" class="line" id="l101"> 101</a> play_audio(&audio_sources[AUDIO_LEVER_OPEN]); -<a href="#l102" class="line" id="l102"> 102</a> has_pushed_lever1 = true; -<a href="#l103" class="line" id="l103"> 103</a> } -<a href="#l104" class="line" id="l104"> 104</a> if (hash_pushed_lever1 && !room1.lever1) { -<a href="#l105" class="line" id="l105"> 105</a> play_audio(&audio_sources[AUDIO_LEVER_CLOSE]); -<a href="#l106" class="line" id="l106"> 106</a> has_pushed_lever1 = false; -<a href="#l107" class="line" id="l107"> 107</a> } -<a href="#l108" class="line" id="l108"> 108</a> yield(co); -<a href="#l109" class="line" id="l109"> 109</a> } -<a href="#l110" class="line" id="l110"> 110</a> } -<a href="#l111" class="line" id="l111"> 111</a> ``` -<a href="#l112" class="line" id="l112"> 112</a> You start having to do stuff like this. -<a href="#l113" class="line" id="l113"> 113</a> -<a href="#l114" class="line" id="l114"> 114</a> You might get the idea of using some event system just for this. Now it generally gets the job done, but as explained it gets hard to manage. -<a href="#l115" class="line" id="l115"> 115</a> Event systems play very poorly if you want situations like explained further above, where you have lots of things in your if statements. Having to set up event listeners for each one of those and somehow collecting them together is how you get horrible spaghetti code. -<a href="#l116" class="line" id="l116"> 116</a> Callbacks also don't allow you to change a corutine's state in any meaningful way, which is even more of a problem. This means you will have to go back to switch statements again. How horrid! -<a href="#l117" class="line" id="l117"> 117</a> -<a href="#l118" class="line" id="l118"> 118</a> You probably already know the solution to this. It is to just store the previous state of each such variable. -<a href="#l119" class="line" id="l119"> 119</a> ```c -<a href="#l120" class="line" id="l120"> 120</a> typedef struct { -<a href="#l121" class="line" id="l121"> 121</a> bool state; -<a href="#l122" class="line" id="l122"> 122</a> bool last_state; -<a href="#l123" class="line" id="l123"> 123</a> } lever_t; -<a href="#l124" class="line" id="l124"> 124</a> ``` -<a href="#l125" class="line" id="l125"> 125</a> -<a href="#l126" class="line" id="l126"> 126</a> If you have ever used or made a platform library that isn't event based, you have probably encountered this for button presses or the like: -<a href="#l127" class="line" id="l127"> 127</a> `if (platform_key_pressed(KEYCODE_SPACE) == true)` -<a href="#l128" class="line" id="l128"> 128</a> -<a href="#l129" class="line" id="l129"> 129</a> It's essentially the same concept. Each frame, only one place edits the lever's data, meaning that as long as every single piece of code is ran each frame, you can just check if the state has changed. -<a href="#l130" class="line" id="l130"> 130</a> -<a href="#l131" class="line" id="l131"> 131</a> ## How this is related to synchronous hardware? -<a href="#l132" class="line" id="l132"> 132</a> When making synchronous hardware, you often have control signals which only exist for a single "clock-cycle". -<a href="#l133" class="line" id="l133"> 133</a> -<a href="#l134" class="line" id="l134"> 134</a> Take this VHDL code for blinking an LED at 1Hz as an example -<a href="#l135" class="line" id="l135"> 135</a> -<a href="#l136" class="line" id="l136"> 136</a> ```vhdl -<a href="#l137" class="line" id="l137"> 137</a> clock_enable_1hz_gen : enable_gen port map ( -<a href="#l138" class="line" id="l138"> 138</a> clk_50hz => CLOCK, resetn => NRESET, -<a href="#l139" class="line" id="l139"> 139</a> clock_divisor => "00000001011111010111100001000000", -<a href="#l140" class="line" id="l140"> 140</a> enable => clock_enable_1hz -<a href="#l141" class="line" id="l141"> 141</a> ); -<a href="#l142" class="line" id="l142"> 142</a> -<a href="#l143" class="line" id="l143"> 143</a> alive_gen : process (CLOCK, NRESET) is -<a href="#l144" class="line" id="l144"> 144</a> begin -<a href="#l145" class="line" id="l145"> 145</a> if rising_edge(CLOCK) then -<a href="#l146" class="line" id="l146"> 146</a> if NRESET = '0' then -<a href="#l147" class="line" id="l147"> 147</a> LEDR(0) <= '0'; -<a href="#l148" class="line" id="l148"> 148</a> elsif clock_enable_1hz = '1' then -<a href="#l149" class="line" id="l149"> 149</a> LEDR(0) <= not LEDR(0); -<a href="#l150" class="line" id="l150"> 150</a> end if; -<a href="#l151" class="line" id="l151"> 151</a> end if; -<a href="#l152" class="line" id="l152"> 152</a> end process; -<a href="#l153" class="line" id="l153"> 153</a> ``` -<a href="#l154" class="line" id="l154"> 154</a> This process is synchronous because it only does something during the rising edge of the clock signal. clock_enable_1hz is only on during one clock cycle, and is enabled every nth rising edge, such that we can toggle the LED at 1Hz. -<a href="#l155" class="line" id="l155"> 155</a> This technique is riddled across hardware design. When designing hardware, everything is ran each clock-cycle. Everything is an update() function. -<a href="#l156" class="line" id="l156"> 156</a> -<a href="#l157" class="line" id="l157"> 157</a> This is essentially the same as our software, where we run each update function each "frame" instead of each "clock-cycle" -<a href="#l158" class="line" id="l158"> 158</a> -<a href="#l159" class="line" id="l159"> 159</a> This constraint of hardware design, gives life to this unique way of sharing stateful information. And gives us a feature we can exploit when writing software as well. -<a href="#l160" class="line" id="l160"> 160</a> -<a href="#l161" class="line" id="l161"> 161</a> ## Using this knowledge -<a href="#l162" class="line" id="l162"> 162</a> ```c -<a href="#l163" class="line" id="l163"> 163</a> bool secret_hold_button_click; -<a href="#l164" class="line" id="l164"> 164</a> -<a href="#l165" class="line" id="l165"> 165</a> void update(coro_t* co) { -<a href="#l166" class="line" id="l166"> 166</a> float hold_time = 0; -<a href="#l167" class="line" id="l167"> 167</a> while (true) { -<a href="#l168" class="line" id="l168"> 168</a> secret_hold_button_click = false; // always reset -<a href="#l169" class="line" id="l169"> 169</a> -<a href="#l170" class="line" id="l170"> 170</a> if (room.secret_hold_button[0].state == true) -<a href="#l171" class="line" id="l171"> 171</a> hold_time += delta_time(); -<a href="#l172" class="line" id="l172"> 172</a> else -<a href="#l173" class="line" id="l173"> 173</a> hold_time = 0; -<a href="#l174" class="line" id="l174"> 174</a> -<a href="#l175" class="line" id="l175"> 175</a> if (hold_time > 1.0) { -<a href="#l176" class="line" id="l176"> 176</a> secret_hold_button_click = true; -<a href="#l177" class="line" id="l177"> 177</a> hold_time = 0; -<a href="#l178" class="line" id="l178"> 178</a> } -<a href="#l179" class="line" id="l179"> 179</a> -<a href="#l180" class="line" id="l180"> 180</a> yield(co); -<a href="#l181" class="line" id="l181"> 181</a> } -<a href="#l182" class="line" id="l182"> 182</a> } -<a href="#l183" class="line" id="l183"> 183</a> -<a href="#l184" class="line" id="l184"> 184</a> // somewhere else... -<a href="#l185" class="line" id="l185"> 185</a> void update_special_room() { -<a href="#l186" class="line" id="l186"> 186</a> if (secret_hold_button_click && special_mode_active) -<a href="#l187" class="line" id="l187"> 187</a> play_audio(&audio[AUDIO_SPECIAL_ROOM]); -<a href="#l188" class="line" id="l188"> 188</a> } -<a href="#l189" class="line" id="l189"> 189</a> ``` -<a href="#l190" class="line" id="l190"> 190</a> We can propagate control signals through our "synchronous" codebase just by having variables that have a per-frame lifetime. -<a href="#l191" class="line" id="l191"> 191</a> -<a href="#l192" class="line" id="l192"> 192</a> I've found this extremely powerful. It's simpler and more concise than an event system. It allows you to still use corutines, and is thereby easy to debug. It also creates manageable codepaths, and you can inspect the memory to see which states are active at any given moment. -<a href="#l193" class="line" id="l193"> 193</a> -<a href="#l194" class="line" id="l194"> 194</a> This is not limited to booleans either. We can for example use counters. Or for more advanced info, you might want to to create an array instead. -<a href="#l195" class="line" id="l195"> 195</a> ```c -<a href="#l196" class="line" id="l196"> 196</a> struct room_t { -<a href="#l197" class="line" id="l197"> 197</a> s32 changes_this_frame; // signed on purpose -<a href="#l198" class="line" id="l198"> 198</a> u32 people_in_room; -<a href="#l199" class="line" id="l199"> 199</a> } -<a href="#l200" class="line" id="l200"> 200</a> -<a href="#l201" class="line" id="l201"> 201</a> void update_room(coro_t* co, room_t* room) { -<a href="#l202" class="line" id="l202"> 202</a> s32 in_room_prev = 0; -<a href="#l203" class="line" id="l203"> 203</a> -<a href="#l204" class="line" id="l204"> 204</a> while (true) { -<a href="#l205" class="line" id="l205"> 205</a> room.people_in_room = count_people_in_room(room1); -<a href="#l206" class="line" id="l206"> 206</a> room.changes_this_frame = (s32)room.people_in_room - in_room_prev; -<a href="#l207" class="line" id="l207"> 207</a> in_room_prev = people_in_room; -<a href="#l208" class="line" id="l208"> 208</a> yield(co); -<a href="#l209" class="line" id="l209"> 209</a> } -<a href="#l210" class="line" id="l210"> 210</a> } -<a href="#l211" class="line" id="l211"> 211</a> ``` -<a href="#l212" class="line" id="l212"> 212</a> -<a href="#l213" class="line" id="l213"> 213</a> ## Comparison to callback driven system -<a href="#l214" class="line" id="l214"> 214</a> -<a href="#l215" class="line" id="l215"> 215</a> ### Simple condition -<a href="#l216" class="line" id="l216"> 216</a> ```c -<a href="#l217" class="line" id="l217"> 217</a> void init() { -<a href="#l218" class="line" id="l218"> 218</a> event_add_listner(room.levers[0].on_click, try_open_room_secret); -<a href="#l219" class="line" id="l219"> 219</a> } -<a href="#l220" class="line" id="l220"> 220</a> -<a href="#l221" class="line" id="l221"> 221</a> ev_func(try_open_room_secret) { -<a href="#l222" class="line" id="l222"> 222</a> if (room.has_secret) { -<a href="#l223" class="line" id="l223"> 223</a> room.secret_doors[0] = OPEN; -<a href="#l224" class="line" id="l224"> 224</a> event_del_listner(room.levers[0].on_click, try_open_room_secret); -<a href="#l225" class="line" id="l225"> 225</a> } -<a href="#l226" class="line" id="l226"> 226</a> } -<a href="#l227" class="line" id="l227"> 227</a> ``` -<a href="#l228" class="line" id="l228"> 228</a> vs -<a href="#l229" class="line" id="l229"> 229</a> ```c -<a href="#l230" class="line" id="l230"> 230</a> void update(coro_t* co) { -<a href="#l231" class="line" id="l231"> 231</a> while (true) { -<a href="#l232" class="line" id="l232"> 232</a> if (room.has_secret && lever_pressed(room.levers[0])) { -<a href="#l233" class="line" id="l233"> 233</a> room.secret_doors[0] = OPEN; -<a href="#l234" class="line" id="l234"> 234</a> return; -<a href="#l235" class="line" id="l235"> 235</a> } -<a href="#l236" class="line" id="l236"> 236</a> yield(co); -<a href="#l237" class="line" id="l237"> 237</a> } -<a href="#l238" class="line" id="l238"> 238</a> } -<a href="#l239" class="line" id="l239"> 239</a> ``` -<a href="#l240" class="line" id="l240"> 240</a> -<a href="#l241" class="line" id="l241"> 241</a> As you can see, they're fairly comparable currently. You could even say the event system has some benefits. -<a href="#l242" class="line" id="l242"> 242</a> ### More complex conditions -<a href="#l243" class="line" id="l243"> 243</a> *You need to press multiple buttons within a time frame.* -<a href="#l244" class="line" id="l244"> 244</a> -<a href="#l245" class="line" id="l245"> 245</a> ```c -<a href="#l246" class="line" id="l246"> 246</a> timer_t* room_timer; -<a href="#l247" class="line" id="l247"> 247</a> bool lever_states[2]; -<a href="#l248" class="line" id="l248"> 248</a> -<a href="#l249" class="line" id="l249"> 249</a> void init() { -<a href="#l250" class="line" id="l250"> 250</a> for (u32 i = 0; i < count_of(lever_states); i++) -<a href="#l251" class="line" id="l251"> 251</a> event_add_listner(room.levers[i].on_click, try_open_room_secret); -<a href="#l252" class="line" id="l252"> 252</a> room_timer.init(); -<a href="#l253" class="line" id="l253"> 253</a> event_add_listner(room_timer.on_timeout, reset_levers); -<a href="#l254" class="line" id="l254"> 254</a> } -<a href="#l255" class="line" id="l255"> 255</a> -<a href="#l256" class="line" id="l256"> 256</a> ev_func(try_open_room_secret) { -<a href="#l257" class="line" id="l257"> 257</a> // lets hope the event poster gives information about which lever was pressed... -<a href="#l258" class="line" id="l258"> 258</a> lever_t* lever = (lever_t*)ev_data; -<a href="#l259" class="line" id="l259"> 259</a> -<a href="#l260" class="line" id="l260"> 260</a> if (!room_timer.timer_started) { -<a href="#l261" class="line" id="l261"> 261</a> room_timer.start_timer(10.0); -<a href="#l262" class="line" id="l262"> 262</a> } -<a href="#l263" class="line" id="l263"> 263</a> lever_states[lever.index] = true; -<a href="#l264" class="line" id="l264"> 264</a> bool all_pressed = true; -<a href="#l265" class="line" id="l265"> 265</a> for (u32 i = 0; i < count_of(lever_states); i++) { -<a href="#l266" class="line" id="l266"> 266</a> if (!lever_states[i]) { -<a href="#l267" class="line" id="l267"> 267</a> all_pressed = false; -<a href="#l268" class="line" id="l268"> 268</a> break; -<a href="#l269" class="line" id="l269"> 269</a> } -<a href="#l270" class="line" id="l270"> 270</a> } -<a href="#l271" class="line" id="l271"> 271</a> if (all_pressed) { -<a href="#l272" class="line" id="l272"> 272</a> room.secret_doors[0] = OPEN; -<a href="#l273" class="line" id="l273"> 273</a> for (u32 i = 0; i < count_of(lever_states); i++) -<a href="#l274" class="line" id="l274"> 274</a> event_del_listner(room.levers[i].on_click, try_open_room_secret); -<a href="#l275" class="line" id="l275"> 275</a> event_del_listner(room_timer.on_timeout, reset_last_lever); -<a href="#l276" class="line" id="l276"> 276</a> room_timer.destroy(); -<a href="#l277" class="line" id="l277"> 277</a> } -<a href="#l278" class="line" id="l278"> 278</a> } -<a href="#l279" class="line" id="l279"> 279</a> -<a href="#l280" class="line" id="l280"> 280</a> ev_func(reset_levers) { -<a href="#l281" class="line" id="l281"> 281</a> lever_states = {0}; -<a href="#l282" class="line" id="l282"> 282</a> } -<a href="#l283" class="line" id="l283"> 283</a> ``` -<a href="#l284" class="line" id="l284"> 284</a> vs -<a href="#l285" class="line" id="l285"> 285</a> ```c -<a href="#l286" class="line" id="l286"> 286</a> void update(coro_t* co) { -<a href="#l287" class="line" id="l287"> 287</a> while (true) { -<a href="#l288" class="line" id="l288"> 288</a> bool lever_states[2] = {0}; -<a href="#l289" class="line" id="l289"> 289</a> for (u32 i = 0; i < count_of(lever_states); i++) -<a href="#l290" class="line" id="l290"> 290</a> if (lever_pressed(room.levers[i]) goto lever_pressed; -<a href="#l291" class="line" id="l291"> 291</a> yield(co); -<a href="#l292" class="line" id="l292"> 292</a> continue; -<a href="#l293" class="line" id="l293"> 293</a> -<a href="#l294" class="line" id="l294"> 294</a> lever_pressed: -<a href="#l295" class="line" id="l295"> 295</a> for (yield_for_seconds(co, 10.0)) { -<a href="#l296" class="line" id="l296"> 296</a> bool all_pressed = true; -<a href="#l297" class="line" id="l297"> 297</a> for (u32 i = 0; i < count_of(lever_states); i++) { -<a href="#l298" class="line" id="l298"> 298</a> if (lever_pressed(room.levers[i]) lever_states[i] = true; -<a href="#l299" class="line" id="l299"> 299</a> if (!lever_states[i]) all_pressed = false; -<a href="#l300" class="line" id="l300"> 300</a> } -<a href="#l301" class="line" id="l301"> 301</a> if (all_pressed) { -<a href="#l302" class="line" id="l302"> 302</a> room.secret_doors[0] = OPEN; -<a href="#l303" class="line" id="l303"> 303</a> return; -<a href="#l304" class="line" id="l304"> 304</a> } -<a href="#l305" class="line" id="l305"> 305</a> } -<a href="#l306" class="line" id="l306"> 306</a> } -<a href="#l307" class="line" id="l307"> 307</a> } -<a href="#l308" class="line" id="l308"> 308</a> ``` -<a href="#l309" class="line" id="l309"> 309</a> The event solution even requires us to create a new "timer" module. Meanwhile, corutines can naturally yield for a set amount of time just by checking what the current time is. -<a href="#l310" class="line" id="l310"> 310</a> -<a href="#l311" class="line" id="l311"> 311</a> The event solution also has more management around it, requiring us to initialize the timer and event systems, as well as cleaning them up once we're done with them. -<a href="#l312" class="line" id="l312"> 312</a> -<a href="#l313" class="line" id="l313"> 313</a> This only gets worse for the event driven solution once you add multiple types of events. You will have to pull your code into even more functions, and do checks from data accumulated from different event handlers. -<a href="#l314" class="line" id="l314"> 314</a> The corutine solution doesn't have to change—It is 100% extensible, we have yet to introduce any abstractions on it. -<a href="#l315" class="line" id="l315"> 315</a> -<a href="#l316" class="line" id="l316"> 316</a> ## Doing it the other way around -<a href="#l317" class="line" id="l317"> 317</a> -<a href="#l318" class="line" id="l318"> 318</a> We can also read at the reset point, and allow other code to set the data. -<a href="#l319" class="line" id="l319"> 319</a> ```c -<a href="#l320" class="line" id="l320"> 320</a> struct entity_t { -<a href="#l321" class="line" id="l321"> 321</a> vec2 pos; -<a href="#l322" class="line" id="l322"> 322</a> int health; -<a href="#l323" class="line" id="l323"> 323</a> bool on_fire; -<a href="#l324" class="line" id="l324"> 324</a> bool immune_to_fire_this_frame; -<a href="#l325" class="line" id="l325"> 325</a> }; -<a href="#l326" class="line" id="l326"> 326</a> -<a href="#l327" class="line" id="l327"> 327</a> void fire_immunity_circle(coro_t* co) { -<a href="#l328" class="line" id="l328"> 328</a> vec2 circle_centre; -<a href="#l329" class="line" id="l329"> 329</a> float radius; -<a href="#l330" class="line" id="l330"> 330</a> while (true) { -<a href="#l331" class="line" id="l331"> 331</a> for (e in entities) { -<a href="#l332" class="line" id="l332"> 332</a> if (vec2_dist(e.pos, circle_centre) <= radius) { -<a href="#l333" class="line" id="l333"> 333</a> e.immune_to_fire_this_frame = true; -<a href="#l334" class="line" id="l334"> 334</a> } -<a href="#l335" class="line" id="l335"> 335</a> } -<a href="#l336" class="line" id="l336"> 336</a> yield(co); -<a href="#l337" class="line" id="l337"> 337</a> } -<a href="#l338" class="line" id="l338"> 338</a> } -<a href="#l339" class="line" id="l339"> 339</a> -<a href="#l340" class="line" id="l340"> 340</a> void update_entity(entity_t* e) { -<a href="#l341" class="line" id="l341"> 341</a> if (e.on_fire) { -<a href="#l342" class="line" id="l342"> 342</a> if (!e.immune_to_fire_this_frame) -<a href="#l343" class="line" id="l343"> 343</a> e.health -= 1; -<a href="#l344" class="line" id="l344"> 344</a> } -<a href="#l345" class="line" id="l345"> 345</a> e.immune_to_fire_this_frame = false; -<a href="#l346" class="line" id="l346"> 346</a> } -<a href="#l347" class="line" id="l347"> 347</a> ``` -<a href="#l348" class="line" id="l348"> 348</a> -<a href="#l349" class="line" id="l349"> 349</a> The above code makes it so you don't have to track which entities are inside your circle, to disable immunity on their eventual exit. You also don't have problems if the immunity fields are intersecting. -<a href="#l350" class="line" id="l350"> 350</a> -<a href="#l351" class="line" id="l351"> 351</a> The other way to achieve the same would be to loop over all immunity fields inside `update_entity()`. This would indeed work. However, it means you have to store all your immunity fields in some array(s). Toggling, enableing and doing weird things would get increasingly constrained. -<a href="#l352" class="line" id="l352"> 352</a> -<a href="#l353" class="line" id="l353"> 353</a> The above code gives you full control over how the immunity fields are allocated and applied. You can have weird logic like only applying to entities on a team, or who are in the same building, or who are named in some certain way. All without changing the interface to towards the entities. It's really flexible. -<a href="#l354" class="line" id="l354"> 354</a> -<a href="#l355" class="line" id="l355"> 355</a> <br> -<a href="#l356" class="line" id="l356"> 356</a> -<a href="#l357" class="line" id="l357"> 357</a> --- -<a href="#l358" class="line" id="l358"> 358</a> -<a href="#l359" class="line" id="l359"> 359</a> ## Closing thoughts -<a href="#l360" class="line" id="l360"> 360</a> I believe that using checking logic each frame—combined with corutines and synchronous control signals—is an extremely powerful and simple way to implement heavy and intertwined logic. -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/_posts/2024-05-08-VGA-Kontroller.md.html b/git/n-channel/file/_posts/2024-05-08-VGA-Kontroller.md.html @@ -1,824 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>2024-05-08-VGA-Kontroller.md - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../"><img src="../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../log.html">Log</a> | <a href="../../files.html">Files</a> | <a href="../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> 2024-05-08-VGA-Kontroller.md (27963B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> --- -<a href="#l2" class="line" id="l2"> 2</a> layout: post -<a href="#l3" class="line" id="l3"> 3</a> title: "[Norwegian] VGA Kontroller" -<a href="#l4" class="line" id="l4"> 4</a> description: VGA Kontroller -<a href="#l5" class="line" id="l5"> 5</a> summary: Oppbygning av en enkel VGA kontroller fra bunnen av -<a href="#l6" class="line" id="l6"> 6</a> comments: true -<a href="#l7" class="line" id="l7"> 7</a> tags: [writing, norwegian, electronics, programming, VHDL, C, graphics] -<a href="#l8" class="line" id="l8"> 8</a> --- -<a href="#l9" class="line" id="l9"> 9</a> -<a href="#l10" class="line" id="l10"> 10</a> ## Forord -<a href="#l11" class="line" id="l11"> 11</a> Dette er utsnitt fra en proskjektoppgave jeg gjorde i det andre FPGA faget jeg hadde I løpet av Bacheloren min. -<a href="#l12" class="line" id="l12"> 12</a> -<a href="#l13" class="line" id="l13"> 13</a> ## Introduksjon -<a href="#l14" class="line" id="l14"> 14</a> Denne bloggen går ut på å implementere en kommunikasjonsprotokoll i fastvare, og binde det til en NIOS II CPU, ved hjelp av DE2-115 FPGA utviklerkortet. -<a href="#l15" class="line" id="l15"> 15</a> -<a href="#l16" class="line" id="l16"> 16</a> -<a href="#l17" class="line" id="l17"> 17</a> ### VGA protokollen -<a href="#l18" class="line" id="l18"> 18</a> > **Video Graphics Array (VGA)** is a video display controller and accompanying de facto graphics standard, first introduced with the IBM PS/2 line of computers in 1987, which became ubiquitous in the IBM PC compatible industry within three years. The term can now refer to the computer display standard, the 15-pin D-subminiature VGA connector, or the 640x480 resolution characteristic of the VGA hardware. -<a href="#l19" class="line" id="l19"> 19</a> > -<a href="#l20" class="line" id="l20"> 20</a> > > \- [Video Graphics Array, Wikipedia](https://en.wikipedia.org/wiki/Video_Graphics_Array) -<a href="#l21" class="line" id="l21"> 21</a> > {: class="quote-cite"} -<a href="#l22" class="line" id="l22"> 22</a> -<a href="#l23" class="line" id="l23"> 23</a> VGA har lenge vært brukt i industrien. Det er en analog standard som er relativt timing kritisk. Videoprotokollere krever at du sender informasjon hele tiden, dette betyr at å sende hver byte fra CPU vil bruke nesten 100% av utførelsestiden. I tillegg vil timing sannsynligvis være et problem ved enkelte oppløsninger og oppfriskningshastigheter. Å ha diskret fastvarekomponenter som står mellom CPU og VGA er derfor nødvendig. -<a href="#l24" class="line" id="l24"> 24</a> -<a href="#l25" class="line" id="l25"> 25</a> ### Trinnene som skal beseires -<a href="#l26" class="line" id="l26"> 26</a> 1. Forståelse av VGA-protokollen. Hvordan fungerer den? -<a href="#l27" class="line" id="l27"> 27</a> 1. Implementasjon av protokollen i VHDL. Kan vi få en skjerm til å vise en enkel farge? -<a href="#l28" class="line" id="l28"> 28</a> 1. Tyngre testing. Kan vi lage et avansert mønster som flytter seg? -<a href="#l29" class="line" id="l29"> 29</a> 1. Simple Buss Interface. Kan vi tegne fra NIOS II, har vi nok VRAM? -<a href="#l30" class="line" id="l30"> 30</a> 1. Text-mode i fastvare. Hvordan ble minne og hastighet løst før i tiden? -<a href="#l31" class="line" id="l31"> 31</a> -<a href="#l32" class="line" id="l32"> 32</a> ## Forståelse av VGA -<a href="#l33" class="line" id="l33"> 33</a> Mesteparten av ledningene i VGA kontakten er GND eller ikke nødvendig til grunnleggende bruk. I DE2-115 kortet er bare RGB, horisontal sync og vertikal sync koblet. Siden R, G, og B er analoge signaler, krever vi en DAC for å omgjøre signalene. -<a href="#l34" class="line" id="l34"> 34</a> -<a href="#l35" class="line" id="l35"> 35</a> \ -<a href="#l36" class="line" id="l36"> 36</a> Figur 1. DE2-115 VGA schematic -<a href="#l37" class="line" id="l37"> 37</a> {: style="color:gray; font-size: 80%; text-align: center;"} -<a href="#l38" class="line" id="l38"> 38</a> -<a href="#l39" class="line" id="l39"> 39</a> På DE2-115 kortet så brukes det en 3 kanals 10-bit DAC som er spesielt laget for høy-hastighet videosignaler. Bare 8 av de 10 mulige bits-ene blir faktisk brukt, som vi kan se i skjemategningen. De to nederste bits-ene er alltid 0, så den minste ikke-null lysstyrken våres er faktisk høyere enn det en kanskje hadde forventet. -<a href="#l40" class="line" id="l40"> 40</a> -<a href="#l41" class="line" id="l41"> 41</a> I VHDL må vi bare sette opp en `std_logic_vector(7 downto 0)` for hver av disse signalene, og så legge inn et 8-bit tall på hver av dem. -<a href="#l42" class="line" id="l42"> 42</a> -<a href="#l43" class="line" id="l43"> 43</a> ADV7123 chip-en som er på kortet har og koblet noen signaler for klokke, sync og blank. Klokke signalet kan vi bare koble til samme klokke vi bruker til å styre RGB-signalene. Sync og blank har vi ikke bruk for. Så blank kan vi bare holde høy, og sync kan vi holde lav. -<a href="#l44" class="line" id="l44"> 44</a> -<a href="#l45" class="line" id="l45"> 45</a> \ -<a href="#l46" class="line" id="l46"> 46</a> Figur 2. ADV7123 block diagram. -<a href="#l47" class="line" id="l47"> 47</a> {: style="color:gray; font-size: 80%; text-align: center;"} -<a href="#l48" class="line" id="l48"> 48</a> -<a href="#l49" class="line" id="l49"> 49</a> Å bare sende farger er selvfølgelig ikke nok informasjon for skjermen å vite hvilke oppløsning og oppfriskningshastighet som brukes. I tillegg krever skjermen informasjon om hvilken kolonne og rad vi faktisk ønsker å tegne til. I VGA sendes dette gjennom `h_sync` og `v_sync` signalene. Disse signalene aktiveres under det som kalles “blanking period”. Altså, vi tegner ikke til skjermen 100% av tiden. -<a href="#l50" class="line" id="l50"> 50</a> -<a href="#l51" class="line" id="l51"> 51</a> \ -<a href="#l52" class="line" id="l52"> 52</a> Figur 3. VGA timing diagram -<a href="#l53" class="line" id="l53"> 53</a> {: style="color:gray; font-size: 80%; text-align: center;"} -<a href="#l54" class="line" id="l54"> 54</a> -<a href="#l55" class="line" id="l55"> 55</a> Timingen består da av 4 perioder for hver kolonne, og likeledes 4 perioder for radene samlet. Den enkleste måten å finne hvor lenge hver av disse periodene skal være, er å bla de opp i en tabell. -<a href="#l56" class="line" id="l56"> 56</a> -<a href="#l57" class="line" id="l57"> 57</a> \ -<a href="#l58" class="line" id="l58"> 58</a> Figur 4. VGA timing tabell. -<a href="#l59" class="line" id="l59"> 59</a> {: style="color:gray; font-size: 80%; text-align: center;"} -<a href="#l60" class="line" id="l60"> 60</a> -<a href="#l61" class="line" id="l61"> 61</a> Som vi kan se her er det en tredje parameter vi ikke har tatt i betenkning enda, “Polarity”. Alt polarity gjør er å invertere `h_sync` og `v_sync` signalene. -<a href="#l62" class="line" id="l62"> 62</a> -<a href="#l63" class="line" id="l63"> 63</a> Med all informasjonen våres samlet, så kan vi formalisere logikken litt mer. -<a href="#l64" class="line" id="l64"> 64</a> -<a href="#l65" class="line" id="l65"> 65</a> *pseudo-kode for VGA timing:* -<a href="#l66" class="line" id="l66"> 66</a> ``` -<a href="#l67" class="line" id="l67"> 67</a> let h_sync = 1; -<a href="#l68" class="line" id="l68"> 68</a> let v_sync = 1; -<a href="#l69" class="line" id="l69"> 69</a> const total_v_time = height+v_front_porch+v_sync_pulse+v_back_porch; -<a href="#l70" class="line" id="l70"> 70</a> const total_h_time = width+h_front_porch+h_sync_pulse+h_back_porch; -<a href="#l71" class="line" id="l71"> 71</a> const total_time = total_v_time * total_h_time; -<a href="#l72" class="line" id="l72"> 72</a> let h_counter = 0; -<a href="#l73" class="line" id="l73"> 73</a> let v_counter = 0; -<a href="#l74" class="line" id="l74"> 74</a> while True do -<a href="#l75" class="line" id="l75"> 75</a> if h_counter >= total_h_time-1 then -<a href="#l76" class="line" id="l76"> 76</a> h_counter = 0; -<a href="#l77" class="line" id="l77"> 77</a> if v_counter >= total_v_time-1 then -<a href="#l78" class="line" id="l78"> 78</a> v_counter = 0; -<a href="#l79" class="line" id="l79"> 79</a> else -<a href="#l80" class="line" id="l80"> 80</a> v_counter++; -<a href="#l81" class="line" id="l81"> 81</a> end; -<a href="#l82" class="line" id="l82"> 82</a> else -<a href="#l83" class="line" id="l83"> 83</a> h_counter++; -<a href="#l84" class="line" id="l84"> 84</a> end; -<a href="#l85" class="line" id="l85"> 85</a> -<a href="#l86" class="line" id="l86"> 86</a> if h_counter >= width+h_front_porch and -<a href="#l87" class="line" id="l87"> 87</a> h_counter < width+h_front_porch+h_sync_pulse then -<a href="#l88" class="line" id="l88"> 88</a> h_sync = h_polarity; -<a href="#l89" class="line" id="l89"> 89</a> else -<a href="#l90" class="line" id="l90"> 90</a> h_sync = not h_polarity; -<a href="#l91" class="line" id="l91"> 91</a> end; -<a href="#l92" class="line" id="l92"> 92</a> if v_counter >= height+v_front_porch and -<a href="#l93" class="line" id="l93"> 93</a> v_counter < height+v_front_porch+v_sync_pulse then -<a href="#l94" class="line" id="l94"> 94</a> v_sync = v_polarity; -<a href="#l95" class="line" id="l95"> 95</a> else -<a href="#l96" class="line" id="l96"> 96</a> v_sync = not v_polarity; -<a href="#l97" class="line" id="l97"> 97</a> end; -<a href="#l98" class="line" id="l98"> 98</a> -<a href="#l99" class="line" id="l99"> 99</a> wait 1; -<a href="#l100" class="line" id="l100"> 100</a> end; -<a href="#l101" class="line" id="l101"> 101</a> ``` -<a href="#l102" class="line" id="l102"> 102</a> -<a href="#l103" class="line" id="l103"> 103</a> Så langt er det rett fram, la oss gå over til VHDL. -<a href="#l104" class="line" id="l104"> 104</a> -<a href="#l105" class="line" id="l105"> 105</a> ## Implementasjon i VHDL -<a href="#l106" class="line" id="l106"> 106</a> ```vhdl -<a href="#l107" class="line" id="l107"> 107</a> vga_process : process (pixel_clock) is -<a href="#l108" class="line" id="l108"> 108</a> variable h_counter : integer range 0 to h_period - 1 := 0; -<a href="#l109" class="line" id="l109"> 109</a> variable v_counter : integer range 0 to v_period - 1 := 0; -<a href="#l110" class="line" id="l110"> 110</a> begin -<a href="#l111" class="line" id="l111"> 111</a> if rising_edge(pixel_clock) then -<a href="#l112" class="line" id="l112"> 112</a> if nreset = '0' then -<a href="#l113" class="line" id="l113"> 113</a> h_counter := 0; -<a href="#l114" class="line" id="l114"> 114</a> v_counter := 0; -<a href="#l115" class="line" id="l115"> 115</a> draw_time <= '0'; -<a href="#l116" class="line" id="l116"> 116</a> pan <= 0; -<a href="#l117" class="line" id="l117"> 117</a> vga_hs <= not h_polarity; -<a href="#l118" class="line" id="l118"> 118</a> vga_vs <= not v_polarity; -<a href="#l119" class="line" id="l119"> 119</a> else -<a href="#l120" class="line" id="l120"> 120</a> -- inkrementer tellere, først horisontal scanlinje, så neste linje -<a href="#l121" class="line" id="l121"> 121</a> if h_counter = h_period - 1 then -<a href="#l122" class="line" id="l122"> 122</a> h_counter := 0; -<a href="#l123" class="line" id="l123"> 123</a> if v_counter = v_period - 1 then -<a href="#l124" class="line" id="l124"> 124</a> v_counter := 0; -<a href="#l125" class="line" id="l125"> 125</a> if pan = pan_max then -<a href="#l126" class="line" id="l126"> 126</a> pan <= 0; -<a href="#l127" class="line" id="l127"> 127</a> else -<a href="#l128" class="line" id="l128"> 128</a> pan <= pan + 1; -<a href="#l129" class="line" id="l129"> 129</a> end if; -<a href="#l130" class="line" id="l130"> 130</a> else -<a href="#l131" class="line" id="l131"> 131</a> v_counter := v_counter + 1; -<a href="#l132" class="line" id="l132"> 132</a> end if; -<a href="#l133" class="line" id="l133"> 133</a> else -<a href="#l134" class="line" id="l134"> 134</a> h_counter := h_counter + 1; -<a href="#l135" class="line" id="l135"> 135</a> end if; -<a href="#l136" class="line" id="l136"> 136</a> -- hold vsync/hsync low/high dersom vi er i sync området -<a href="#l137" class="line" id="l137"> 137</a> if h_counter < h_pixels + h_front_porch or -<a href="#l138" class="line" id="l138"> 138</a> h_counter >= h_pixels + h_front_porch + h_sync_pulse then -<a href="#l139" class="line" id="l139"> 139</a> vga_hs <= not h_polarity; -<a href="#l140" class="line" id="l140"> 140</a> else -<a href="#l141" class="line" id="l141"> 141</a> vga_hs <= h_polarity; -<a href="#l142" class="line" id="l142"> 142</a> end if; -<a href="#l143" class="line" id="l143"> 143</a> if v_counter < v_pixels + v_front_porch or -<a href="#l144" class="line" id="l144"> 144</a> v_counter >= v_pixels + v_front_porch + v_sync_pulse then -<a href="#l145" class="line" id="l145"> 145</a> vga_vs <= not v_polarity; -<a href="#l146" class="line" id="l146"> 146</a> else -<a href="#l147" class="line" id="l147"> 147</a> vga_vs <= v_polarity; -<a href="#l148" class="line" id="l148"> 148</a> end if; -<a href="#l149" class="line" id="l149"> 149</a> if h_counter < h_pixels then -<a href="#l150" class="line" id="l150"> 150</a> x <= h_counter; -<a href="#l151" class="line" id="l151"> 151</a> else -<a href="#l152" class="line" id="l152"> 152</a> x <= 0; -<a href="#l153" class="line" id="l153"> 153</a> end if; -<a href="#l154" class="line" id="l154"> 154</a> if v_counter < v_pixels then -<a href="#l155" class="line" id="l155"> 155</a> y <= v_counter; -<a href="#l156" class="line" id="l156"> 156</a> else -<a href="#l157" class="line" id="l157"> 157</a> y <= 0; -<a href="#l158" class="line" id="l158"> 158</a> end if; -<a href="#l159" class="line" id="l159"> 159</a> if h_counter < h_pixels and v_counter < v_pixels then -<a href="#l160" class="line" id="l160"> 160</a> draw_time <= '1'; -<a href="#l161" class="line" id="l161"> 161</a> else -<a href="#l162" class="line" id="l162"> 162</a> draw_time <= '0'; -<a href="#l163" class="line" id="l163"> 163</a> end if; -<a href="#l164" class="line" id="l164"> 164</a> end if; -<a href="#l165" class="line" id="l165"> 165</a> end if; -<a href="#l166" class="line" id="l166"> 166</a> end process; -<a href="#l167" class="line" id="l167"> 167</a> ``` -<a href="#l168" class="line" id="l168"> 168</a> -<a href="#l169" class="line" id="l169"> 169</a> Koden handler stort sett bare om noen tellere, og å skru på draw_time, h_sync og v_sync i de riktige periodene. Koden bruker konstanter/generics, så det er enkelt å endre på timing. Men så langt er det ikke planlagt å ha mulighet for å endre timing dynamisk fra NIOS II. -<a href="#l170" class="line" id="l170"> 170</a> -<a href="#l171" class="line" id="l171"> 171</a> \ -<a href="#l172" class="line" id="l172"> 172</a> Figur 5. Skjerm koblet til DE2-115 kort. -<a href="#l173" class="line" id="l173"> 173</a> {: style="color:gray; font-size: 80%; text-align: center;"} -<a href="#l174" class="line" id="l174"> 174</a> -<a href="#l175" class="line" id="l175"> 175</a> -<a href="#l176" class="line" id="l176"> 176</a> \ -<a href="#l177" class="line" id="l177"> 177</a> Figur 6. Skjerm med figurer som endrer seg -<a href="#l178" class="line" id="l178"> 178</a> {: style="color:gray; font-size: 80%; text-align: center;"} -<a href="#l179" class="line" id="l179"> 179</a> ```vhdl -<a href="#l180" class="line" id="l180"> 180</a> if ((x + pan / 1) / 32) mod 2 = 0 and ((y + pan / 1) / 32) mod 2 = 0 then -<a href="#l181" class="line" id="l181"> 181</a> vga_r <= (others => '1'); -<a href="#l182" class="line" id="l182"> 182</a> vga_g <= (others => '0'); -<a href="#l183" class="line" id="l183"> 183</a> vga_b <= (others => '1'); -<a href="#l184" class="line" id="l184"> 184</a> else -<a href="#l185" class="line" id="l185"> 185</a> vga_r <= (others => '0'); -<a href="#l186" class="line" id="l186"> 186</a> vga_g <= (others => '1'); -<a href="#l187" class="line" id="l187"> 187</a> vga_b <= (others => '1'); -<a href="#l188" class="line" id="l188"> 188</a> end if; -<a href="#l189" class="line" id="l189"> 189</a> ``` -<a href="#l190" class="line" id="l190"> 190</a> -<a href="#l191" class="line" id="l191"> 191</a> ## Tilkobling av RAM modul -<a href="#l192" class="line" id="l192"> 192</a> Første steget her er å flytte ut informasjon om x, y, og draw_time utenfor vga-modulen. -<a href="#l193" class="line" id="l193"> 193</a> Deretter skriver vi en enkel test for å se at det fortsatt fungerer -<a href="#l194" class="line" id="l194"> 194</a> ```vhdl -<a href="#l195" class="line" id="l195"> 195</a> draw : process(CLOCK_25) is -<a href="#l196" class="line" id="l196"> 196</a> begin -<a href="#l197" class="line" id="l197"> 197</a> if rising_edge(CLOCK_25) then -<a href="#l198" class="line" id="l198"> 198</a> if draw_time = '1' then -<a href="#l199" class="line" id="l199"> 199</a> VGA_R <= (others => '1'); -<a href="#l200" class="line" id="l200"> 200</a> VGA_G <= (others => '1'); -<a href="#l201" class="line" id="l201"> 201</a> VGA_B <= (others => '1'); -<a href="#l202" class="line" id="l202"> 202</a> if x < 100 then -<a href="#l203" class="line" id="l203"> 203</a> VGA_R <= (others => '1'); -<a href="#l204" class="line" id="l204"> 204</a> VGA_G <= (others => '0'); -<a href="#l205" class="line" id="l205"> 205</a> VGA_B <= (others => '1'); -<a href="#l206" class="line" id="l206"> 206</a> end if; -<a href="#l207" class="line" id="l207"> 207</a> else -<a href="#l208" class="line" id="l208"> 208</a> VGA_R <= (others => '0'); -<a href="#l209" class="line" id="l209"> 209</a> VGA_G <= (others => '0'); -<a href="#l210" class="line" id="l210"> 210</a> VGA_B <= (others => '0'); -<a href="#l211" class="line" id="l211"> 211</a> end if; -<a href="#l212" class="line" id="l212"> 212</a> end if; -<a href="#l213" class="line" id="l213"> 213</a> end process; -<a href="#l214" class="line" id="l214"> 214</a> ``` -<a href="#l215" class="line" id="l215"> 215</a> Dette gir lilla kolonne, og resten hvit, slik som forventet. Alt fungerer fortsatt. -<a href="#l216" class="line" id="l216"> 216</a> -<a href="#l217" class="line" id="l217"> 217</a> Vi legger så til en ram modul gjennom IP-katalogen, vi trenger en 2-port ram, med egen klokke for read/write. -<a href="#l218" class="line" id="l218"> 218</a> -<a href="#l219" class="line" id="l219"> 219</a> For å støtte hele fargespekteret, trenger vi 8(bits) * 3(farger) * 640(bredde) * 480(høyde) -<a href="#l220" class="line" id="l220"> 220</a> altså 7372800 bits. -<a href="#l221" class="line" id="l221"> 221</a> Vi velger en ord-størrelse på 24-bit, slik at vi kan lese alle tre fargene om gangen. Dette betyr 307200 ord totalt. -<a href="#l222" class="line" id="l222"> 222</a> -<a href="#l223" class="line" id="l223"> 223</a> -<a href="#l224" class="line" id="l224"> 224</a> \ -<a href="#l225" class="line" id="l225"> 225</a> Figur 7. 2-port ram fra IP-katalog -<a href="#l226" class="line" id="l226"> 226</a> {: style="color:gray; font-size: 80%; text-align: center;"} -<a href="#l227" class="line" id="l227"> 227</a> -<a href="#l228" class="line" id="l228"> 228</a> -<a href="#l229" class="line" id="l229"> 229</a> \ -<a href="#l230" class="line" id="l230"> 230</a> Figur 8. Kompilasjons rapport, minneforbruk -<a href="#l231" class="line" id="l231"> 231</a> {: style="color:gray; font-size: 80%; text-align: center;"} -<a href="#l232" class="line" id="l232"> 232</a> -<a href="#l233" class="line" id="l233"> 233</a> Men som en kan se er det ikke nok plass til å ha 8:8:8 farger ved 640x480 oppløsning. -<a href="#l234" class="line" id="l234"> 234</a> Vi er nødt til å gjøre forenklinger. -<a href="#l235" class="line" id="l235"> 235</a> Dersom vi deler oppløsningen på 8, får vi da 80x60 * 24, som er 115200 bits. -<a href="#l236" class="line" id="l236"> 236</a> Det skal være godt innenfor. -<a href="#l237" class="line" id="l237"> 237</a> -<a href="#l238" class="line" id="l238"> 238</a> Vi kobler RAM modulen -<a href="#l239" class="line" id="l239"> 239</a> ```vhdl -<a href="#l240" class="line" id="l240"> 240</a> vram_instance : vram port map( -<a href="#l241" class="line" id="l241"> 241</a> wrclock => CLOCK_50, -<a href="#l242" class="line" id="l242"> 242</a> wraddress => vram_wraddress, -<a href="#l243" class="line" id="l243"> 243</a> data => vram_data, -<a href="#l244" class="line" id="l244"> 244</a> wren => vram_wren, -<a href="#l245" class="line" id="l245"> 245</a> -<a href="#l246" class="line" id="l246"> 246</a> rdclock => CLOCK_25, -<a href="#l247" class="line" id="l247"> 247</a> rdaddress => vram_rdaddress, -<a href="#l248" class="line" id="l248"> 248</a> q => vram_out -<a href="#l249" class="line" id="l249"> 249</a> ); -<a href="#l250" class="line" id="l250"> 250</a> -<a href="#l251" class="line" id="l251"> 251</a> -<a href="#l252" class="line" id="l252"> 252</a> vram_rdaddress <= std_logic_vector(to_unsigned( -<a href="#l253" class="line" id="l253"> 253</a> (h_pixels / 8) * (y / 8) + ((x+1) / 8), 13)); -<a href="#l254" class="line" id="l254"> 254</a> VGA_R <= vram_out(23 downto 16) when draw_time = '1' else (others => '0'); -<a href="#l255" class="line" id="l255"> 255</a> VGA_G <= vram_out(15 downto 8) when draw_time = '1' else (others => '0'); -<a href="#l256" class="line" id="l256"> 256</a> VGA_B <= vram_out(7 downto 0) when draw_time = '1' else (others => '0'); -<a href="#l257" class="line" id="l257"> 257</a> ``` -<a href="#l258" class="line" id="l258"> 258</a> [grunnen til at det er (x+1) dekkes i neste side] -<a href="#l259" class="line" id="l259"> 259</a> {: style="color:gray; font-size: 80%; text-align: center;"} -<a href="#l260" class="line" id="l260"> 260</a> -<a href="#l261" class="line" id="l261"> 261</a> process til testing av VRAM i VHDL, brukt sammen med signal tap logic analyzer. -<a href="#l262" class="line" id="l262"> 262</a> ```vhdl -<a href="#l263" class="line" id="l263"> 263</a> fill_color : process(CLOCK_50) is -<a href="#l264" class="line" id="l264"> 264</a> variable i : integer range 0 to v_pixels * h_pixels / 8; -<a href="#l265" class="line" id="l265"> 265</a> variable slow : integer range 0 to 500000; -<a href="#l266" class="line" id="l266"> 266</a> begin -<a href="#l267" class="line" id="l267"> 267</a> if rising_edge(CLOCK_50) then -<a href="#l268" class="line" id="l268"> 268</a> vram_wren <= '0'; -<a href="#l269" class="line" id="l269"> 269</a> if KEY(0) = '0' then -<a href="#l270" class="line" id="l270"> 270</a> i := 0; -<a href="#l271" class="line" id="l271"> 271</a> slow := 0; -<a href="#l272" class="line" id="l272"> 272</a> end if; -<a href="#l273" class="line" id="l273"> 273</a> if slow = 500000 and KEY(1) = '0' then -<a href="#l274" class="line" id="l274"> 274</a> slow := 0; -<a href="#l275" class="line" id="l275"> 275</a> if i < (v_pixels*h_pixels/8-1) and SW(17) = '1' then -<a href="#l276" class="line" id="l276"> 276</a> vram_wren <= '1'; -<a href="#l277" class="line" id="l277"> 277</a> vram_wraddress <= std_logic_vector(to_unsigned(i, 13)); -<a href="#l278" class="line" id="l278"> 278</a> -<a href="#l279" class="line" id="l279"> 279</a> if SW(0) = '1' then -<a href="#l280" class="line" id="l280"> 280</a> vram_data <= "111111110000000000000000"; -<a href="#l281" class="line" id="l281"> 281</a> elsif SW(1) = '1' then -<a href="#l282" class="line" id="l282"> 282</a> vram_data <= "000000001111111100000000"; -<a href="#l283" class="line" id="l283"> 283</a> elsif SW(2) = '1' then -<a href="#l284" class="line" id="l284"> 284</a> vram_data <= "000000000000000011111111"; -<a href="#l285" class="line" id="l285"> 285</a> else -<a href="#l286" class="line" id="l286"> 286</a> vram_data <= "000000000000000000000000"; -<a href="#l287" class="line" id="l287"> 287</a> end if; -<a href="#l288" class="line" id="l288"> 288</a> -<a href="#l289" class="line" id="l289"> 289</a> i := i + 1; -<a href="#l290" class="line" id="l290"> 290</a> end if; -<a href="#l291" class="line" id="l291"> 291</a> else -<a href="#l292" class="line" id="l292"> 292</a> slow := slow + 1; -<a href="#l293" class="line" id="l293"> 293</a> end if; -<a href="#l294" class="line" id="l294"> 294</a> end if; -<a href="#l295" class="line" id="l295"> 295</a> end process; -<a href="#l296" class="line" id="l296"> 296</a> ``` -<a href="#l297" class="line" id="l297"> 297</a> Siden systemet er synkront, trenger vi å laste inn fargen en klokkesyklus før den vises. Dette kan gjøres med å utvide rekkevidden til x integer til å inkludere -1, deretter endre på hvordan tellerne oppfører seg når det er blanking time. -<a href="#l298" class="line" id="l298"> 298</a> ```vhdl -<a href="#l299" class="line" id="l299"> 299</a> -- I VGA entity -<a href="#l300" class="line" id="l300"> 300</a> if h_counter < h_pixels then -<a href="#l301" class="line" id="l301"> 301</a> x <= h_counter; -<a href="#l302" class="line" id="l302"> 302</a> else -<a href="#l303" class="line" id="l303"> 303</a> x <= -1; -<a href="#l304" class="line" id="l304"> 304</a> end if; -<a href="#l305" class="line" id="l305"> 305</a> if v_counter < v_pixels then -<a href="#l306" class="line" id="l306"> 306</a> y <= v_counter; -<a href="#l307" class="line" id="l307"> 307</a> if h_counter >= h_pixels and v_counter + 1 < v_pixels then -<a href="#l308" class="line" id="l308"> 308</a> y <= v_counter + 1; -<a href="#l309" class="line" id="l309"> 309</a> end if; -<a href="#l310" class="line" id="l310"> 310</a> else -<a href="#l311" class="line" id="l311"> 311</a> y <= 0; -<a href="#l312" class="line" id="l312"> 312</a> end if; -<a href="#l313" class="line" id="l313"> 313</a> ``` -<a href="#l314" class="line" id="l314"> 314</a> Dersom vi ikke gjør dette, får vi følgende problemer -<a href="#l315" class="line" id="l315"> 315</a> -<a href="#l316" class="line" id="l316"> 316</a> -<a href="#l317" class="line" id="l317"> 317</a> \ -<a href="#l318" class="line" id="l318"> 318</a> Figur 9. indeksering problemer som oppsto underveis -<a href="#l319" class="line" id="l319"> 319</a> {: style="color:gray; font-size: 80%; text-align: center;"} -<a href="#l320" class="line" id="l320"> 320</a> -<a href="#l321" class="line" id="l321"> 321</a> Til slutt så har vi et minneområde vi kan tegne rød/grønn/blå/svart til. -<a href="#l322" class="line" id="l322"> 322</a> -<a href="#l323" class="line" id="l323"> 323</a> \ -<a href="#l324" class="line" id="l324"> 324</a> Figur 10. Sluttresultat av VRAM testing i VHDL, alle farger har blitt tegnet på med vilje. -<a href="#l325" class="line" id="l325"> 325</a> {: style="color:gray; font-size: 80%; text-align: center;"} -<a href="#l326" class="line" id="l326"> 326</a> -<a href="#l327" class="line" id="l327"> 327</a> ## Interface mot NIOS II -<a href="#l328" class="line" id="l328"> 328</a> Vi lager et enkelt bus interface -<a href="#l329" class="line" id="l329"> 329</a> -<a href="#l330" class="line" id="l330"> 330</a> ```vhdl -<a href="#l331" class="line" id="l331"> 331</a> entity main is -<a href="#l332" class="line" id="l332"> 332</a> port( -<a href="#l333" class="line" id="l333"> 333</a> CLK : in std_logic; -<a href="#l334" class="line" id="l334"> 334</a> RESET : in std_logic; -<a href="#l335" class="line" id="l335"> 335</a> CHIPSELECT : in std_logic; -<a href="#l336" class="line" id="l336"> 336</a> WR : in std_logic; -<a href="#l337" class="line" id="l337"> 337</a> RD : in std_logic; -<a href="#l338" class="line" id="l338"> 338</a> ADDRESS : in std_logic_vector(12 downto 0); -<a href="#l339" class="line" id="l339"> 339</a> WRITEDATA : in std_logic_vector(31 downto 0); -<a href="#l340" class="line" id="l340"> 340</a> READDATA : out std_logic_vector(31 downto 0); -<a href="#l341" class="line" id="l341"> 341</a> -<a href="#l342" class="line" id="l342"> 342</a> VGA_R, VGA_G, VGA_B : out std_logic_vector(7 downto 0); -<a href="#l343" class="line" id="l343"> 343</a> VGA_CLK, VGA_SYNC_N, VGA_BLANK_N : out std_logic; -<a href="#l344" class="line" id="l344"> 344</a> VGA_VS, VGA_HS : out std_logic -<a href="#l345" class="line" id="l345"> 345</a> ); -<a href="#l346" class="line" id="l346"> 346</a> end entity main; -<a href="#l347" class="line" id="l347"> 347</a> ``` -<a href="#l348" class="line" id="l348"> 348</a> ```vhdl -<a href="#l349" class="line" id="l349"> 349</a> bus_interface : process (CLK) is -<a href="#l350" class="line" id="l350"> 350</a> begin -<a href="#l351" class="line" id="l351"> 351</a> if rising_edge(CLK) then -<a href="#l352" class="line" id="l352"> 352</a> vram_wren <= '0'; -<a href="#l353" class="line" id="l353"> 353</a> if nreset = '0' then -<a href="#l354" class="line" id="l354"> 354</a> elsif CHIPSELECT = '1' then -<a href="#l355" class="line" id="l355"> 355</a> if WR = '1' then -<a href="#l356" class="line" id="l356"> 356</a> vram_wren <= '1'; -<a href="#l357" class="line" id="l357"> 357</a> vram_data <= WRITEDATA(23 downto 0); -<a href="#l358" class="line" id="l358"> 358</a> vram_wraddress <= ADDRESS(12 downto 0); -<a href="#l359" class="line" id="l359"> 359</a> end if; -<a href="#l360" class="line" id="l360"> 360</a> end if; -<a href="#l361" class="line" id="l361"> 361</a> end if; -<a href="#l362" class="line" id="l362"> 362</a> end process; -<a href="#l363" class="line" id="l363"> 363</a> ``` -<a href="#l364" class="line" id="l364"> 364</a> Også legger vi til denne i platform designer -<a href="#l365" class="line" id="l365"> 365</a> -<a href="#l366" class="line" id="l366"> 366</a> \ -<a href="#l367" class="line" id="l367"> 367</a> Figur 11. vga kontroller i platform designer -<a href="#l368" class="line" id="l368"> 368</a> {: style="color:gray; font-size: 80%; text-align: center;"} -<a href="#l369" class="line" id="l369"> 369</a> -<a href="#l370" class="line" id="l370"> 370</a> Vi lager så programmer i C som rett og slett bare skriver til riktig adresse. -<a href="#l371" class="line" id="l371"> 371</a> -<a href="#l372" class="line" id="l372"> 372</a> Gradvis fylling: -<a href="#l373" class="line" id="l373"> 373</a> ```c -<a href="#l374" class="line" id="l374"> 374</a> for (;;) { -<a href="#l375" class="line" id="l375"> 375</a> for (uint32_t c = 0; c < 3; c++) { -<a href="#l376" class="line" id="l376"> 376</a> for (uint32_t i = 0; i < 80*60; i++) { -<a href="#l377" class="line" id="l377"> 377</a> IOWR_32DIRECT(VGA_CONTROLLER_0_BASE, i*4, 0xff << (c*8)); -<a href="#l378" class="line" id="l378"> 378</a> usleep(100); -<a href="#l379" class="line" id="l379"> 379</a> } -<a href="#l380" class="line" id="l380"> 380</a> } -<a href="#l381" class="line" id="l381"> 381</a> } -<a href="#l382" class="line" id="l382"> 382</a> ``` -<a href="#l383" class="line" id="l383"> 383</a> Gradient -<a href="#l384" class="line" id="l384"> 384</a> ```c -<a href="#l385" class="line" id="l385"> 385</a> for (uint32_t y = 0; y < 60; y++) { -<a href="#l386" class="line" id="l386"> 386</a> uint32_t c = (y * 255/60); -<a href="#l387" class="line" id="l387"> 387</a> for (uint32_t x = 0; x < 80; x++) { -<a href="#l388" class="line" id="l388"> 388</a> if (x > 80 * 2/3) { -<a href="#l389" class="line" id="l389"> 389</a> IOWR_32DIRECT(VGA_CONTROLLER_0_BASE, (y*80+x)*4, c<<16); -<a href="#l390" class="line" id="l390"> 390</a> } else if (x > 80 * 1/3) { -<a href="#l391" class="line" id="l391"> 391</a> IOWR_32DIRECT(VGA_CONTROLLER_0_BASE, (y*80+x)*4, c<<8); -<a href="#l392" class="line" id="l392"> 392</a> } else { -<a href="#l393" class="line" id="l393"> 393</a> IOWR_32DIRECT(VGA_CONTROLLER_0_BASE, (y*80+x)*4, c<<0); -<a href="#l394" class="line" id="l394"> 394</a> } -<a href="#l395" class="line" id="l395"> 395</a> } -<a href="#l396" class="line" id="l396"> 396</a> } -<a href="#l397" class="line" id="l397"> 397</a> ``` -<a href="#l398" class="line" id="l398"> 398</a> Bilde -<a href="#l399" class="line" id="l399"> 399</a> ```c -<a href="#l400" class="line" id="l400"> 400</a> for (uint32_t i = 0; i < 80*60; i++) { -<a href="#l401" class="line" id="l401"> 401</a> uint32_t p = 0; -<a href="#l402" class="line" id="l402"> 402</a> p |= gimp_image.pixel_data[i*3+0] << 16; -<a href="#l403" class="line" id="l403"> 403</a> p |= gimp_image.pixel_data[i*3+1] << 8; -<a href="#l404" class="line" id="l404"> 404</a> p |= gimp_image.pixel_data[i*3+2] << 0; -<a href="#l405" class="line" id="l405"> 405</a> IOWR_32DIRECT(VGA_CONTROLLER_0_BASE, i*4, p); -<a href="#l406" class="line" id="l406"> 406</a> } -<a href="#l407" class="line" id="l407"> 407</a> ``` -<a href="#l408" class="line" id="l408"> 408</a> -<a href="#l409" class="line" id="l409"> 409</a> -<a href="#l410" class="line" id="l410"> 410</a> \ -<a href="#l411" class="line" id="l411"> 411</a> Figur 12. farger tegnet fra NIOS II -<a href="#l412" class="line" id="l412"> 412</a> {: style="color:gray; font-size: 80%; text-align: center;"} -<a href="#l413" class="line" id="l413"> 413</a> -<a href="#l414" class="line" id="l414"> 414</a> -<a href="#l415" class="line" id="l415"> 415</a> \ -<a href="#l416" class="line" id="l416"> 416</a> Figur 13. Bilde eksportert til C-kildekode fra GIMP -<a href="#l417" class="line" id="l417"> 417</a> {: style="color:gray; font-size: 80%; text-align: center;"} -<a href="#l418" class="line" id="l418"> 418</a> -<a href="#l419" class="line" id="l419"> 419</a> ## VGA Text-Mode -<a href="#l420" class="line" id="l420"> 420</a> -<a href="#l421" class="line" id="l421"> 421</a> > **VGA text mode** was introduced in 1987 by IBM as part of the VGA standard for its IBM PS/2 computers. Its use on IBM PC compatibles was widespread through the 1990s and persists today for some applications on modern computers. The main features of VGA text mode are colored (programmable 16 color palette) characters and their background, blinking, various shapes of the cursor (block/underline/hidden static/blinking), and loadable fonts (with various glyph sizes). The Linux console traditionally uses hardware VGA text modes, and the Win32 console environment has an ability to switch the screen to text mode for some text window sizes. -<a href="#l422" class="line" id="l422"> 422</a> > -<a href="#l423" class="line" id="l423"> 423</a> > > \- [VGA_text_mode, Wikipedia](https://en.wikipedia.org/wiki/VGA_text_mode) -<a href="#l424" class="line" id="l424"> 424</a> > {: class="quote-cite"} -<a href="#l425" class="line" id="l425"> 425</a> -<a href="#l426" class="line" id="l426"> 426</a> VGA text mode lar deg bruke et 8x16 font-atlas til å tegne på skjermen. font-atlaset består av et enkelt bitmap, du velger selv hvilke farger som skal være i forgrunnen og bakgrunnen. -<a href="#l427" class="line" id="l427"> 427</a> Kommunikasjon med en VGA text-mode enhet skjer i 16-bit ord, hvor hvert ord representerer en karakter. -<a href="#l428" class="line" id="l428"> 428</a> -<a href="#l429" class="line" id="l429"> 429</a> \ -<a href="#l430" class="line" id="l430"> 430</a> Figur 14. Vga text mode oppbygning (fra wikipedia) -<a href="#l431" class="line" id="l431"> 431</a> {: style="color:gray; font-size: 80%; text-align: center;"} -<a href="#l432" class="line" id="l432"> 432</a> -<a href="#l433" class="line" id="l433"> 433</a> \ -<a href="#l434" class="line" id="l434"> 434</a> Figur 15. 4-bit og 3-bit fargepalett. -<a href="#l435" class="line" id="l435"> 435</a> {: style="color:gray; font-size: 80%; text-align: center;"} -<a href="#l436" class="line" id="l436"> 436</a> -<a href="#l437" class="line" id="l437"> 437</a> 4-bit fargepalletet ble hentet fra CGA grafikkortet, mens 3-bit fargepalett ble hentet fra European Computer Manufacturers Association standarden stiftet i 1976. -<a href="#l438" class="line" id="l438"> 438</a> -<a href="#l439" class="line" id="l439"> 439</a> <br> -<a href="#l440" class="line" id="l440"> 440</a> -<a href="#l441" class="line" id="l441"> 441</a> Font-atlaset lagrer vi i en gigantisk `std_logic_vector`, det er langt ifra optimalt, men det lar oss unngå timing problemer under lesing av atlaset. -<a href="#l442" class="line" id="l442"> 442</a> ```vhdl -<a href="#l443" class="line" id="l443"> 443</a> signal bitmap : std_logic_vector(0 to 128*256-1); -<a href="#l444" class="line" id="l444"> 444</a> ``` -<a href="#l445" class="line" id="l445"> 445</a> Det første vi gjør er å utvide adresse-mappet, slik at vi gir brukeren mulighet til å endre på font-atlaset, samt mulighet til å velge om text-mode eller full-color skal brukes. -<a href="#l446" class="line" id="l446"> 446</a> -<a href="#l447" class="line" id="l447"> 447</a> ```vhdl -<a href="#l448" class="line" id="l448"> 448</a> bus_interface : process (CLK) is -<a href="#l449" class="line" id="l449"> 449</a> variable curr_32_bit_addr : integer; -<a href="#l450" class="line" id="l450"> 450</a> begin -<a href="#l451" class="line" id="l451"> 451</a> if rising_edge(CLK) then -<a href="#l452" class="line" id="l452"> 452</a> vram_wren <= '0'; -<a href="#l453" class="line" id="l453"> 453</a> if nreset = '0' then -<a href="#l454" class="line" id="l454"> 454</a> is_vga_text_mode <= '0'; -<a href="#l455" class="line" id="l455"> 455</a> elsif CHIPSELECT = '1' then -<a href="#l456" class="line" id="l456"> 456</a> if address_integer < 4800 then -<a href="#l457" class="line" id="l457"> 457</a> if WR = '1' then -<a href="#l458" class="line" id="l458"> 458</a> vram_wren <= '1'; -<a href="#l459" class="line" id="l459"> 459</a> vram_wraddress <= ADDRESS(12 downto 0); -<a href="#l460" class="line" id="l460"> 460</a> vram_data <= WRITEDATA(23 downto 0); -<a href="#l461" class="line" id="l461"> 461</a> end if; -<a href="#l462" class="line" id="l462"> 462</a> elsif address_integer = 4800 then -<a href="#l463" class="line" id="l463"> 463</a> if WR = '1' then -<a href="#l464" class="line" id="l464"> 464</a> is_vga_text_mode <= WRITEDATA(0); -<a href="#l465" class="line" id="l465"> 465</a> end if; -<a href="#l466" class="line" id="l466"> 466</a> if RD = '1' then -<a href="#l467" class="line" id="l467"> 467</a> READDATA <= "0000000000000000000000000000000" & is_vga_text_mode; -<a href="#l468" class="line" id="l468"> 468</a> end if; -<a href="#l469" class="line" id="l469"> 469</a> elsif address_integer < 4800 + 128*256 then -<a href="#l470" class="line" id="l470"> 470</a> if WR = '1' then -<a href="#l471" class="line" id="l471"> 471</a> curr_32_bit_addr := (address_integer-(4800+1)) / 32; -<a href="#l472" class="line" id="l472"> 472</a> bitmap(curr_32_bit_addr*32 to (curr_32_bit_addr+1)*32 - 1) <= WRITEDATA; -<a href="#l473" class="line" id="l473"> 473</a> end if; -<a href="#l474" class="line" id="l474"> 474</a> end if; -<a href="#l475" class="line" id="l475"> 475</a> end if; -<a href="#l476" class="line" id="l476"> 476</a> end if; -<a href="#l477" class="line" id="l477"> 477</a> end process; -<a href="#l478" class="line" id="l478"> 478</a> ``` -<a href="#l479" class="line" id="l479"> 479</a> -<a href="#l480" class="line" id="l480"> 480</a> Vi bør og fylle inn en default-verdi i font-atlaset. Dersom du søker på nettet, er de fleste ressurser skrevet for DOS. Heldigvis har vi utrolig gode emulatorer som DOSBox nå til dags. -<a href="#l481" class="line" id="l481"> 481</a> -<a href="#l482" class="line" id="l482"> 482</a> \ -<a href="#l483" class="line" id="l483"> 483</a> Figur 16. Fontraption kjørende i DOSBox -<a href="#l484" class="line" id="l484"> 484</a> {: style="color:gray; font-size: 80%; text-align: center;"} -<a href="#l485" class="line" id="l485"> 485</a> -<a href="#l486" class="line" id="l486"> 486</a> Dette lar oss eksportere mangfoldige text-mode skrifttyper til flere formater. -<a href="#l487" class="line" id="l487"> 487</a> -<a href="#l488" class="line" id="l488"> 488</a> For å automatisk generere en `std_logic_vector` i formatet vi selv ønsker, er vi nødt til å lage et lite skript som leser en bildefil og skriver ut masse tekst. -<a href="#l489" class="line" id="l489"> 489</a> ```c -<a href="#l490" class="line" id="l490"> 490</a> int main() -<a href="#l491" class="line" id="l491"> 491</a> { -<a href="#l492" class="line" id="l492"> 492</a> for (int i = 0; i < 256; i++) { -<a href="#l493" class="line" id="l493"> 493</a> int xbegin = (i % 16) * 8; -<a href="#l494" class="line" id="l494"> 494</a> int ybegin = i / 16 * 16; -<a href="#l495" class="line" id="l495"> 495</a> for (int y = 0; y < 16; y++) { -<a href="#l496" class="line" id="l496"> 496</a> printf("\""); -<a href="#l497" class="line" id="l497"> 497</a> for (int x = 0; x < 8; x++) { -<a href="#l498" class="line" id="l498"> 498</a> unsigned char b = gimp_image.pixel_data[((ybegin+y)*128 + xbegin+x) * 3]; -<a href="#l499" class="line" id="l499"> 499</a> printf("%d", b != 0); -<a href="#l500" class="line" id="l500"> 500</a> } -<a href="#l501" class="line" id="l501"> 501</a> printf("\" &\n"); -<a href="#l502" class="line" id="l502"> 502</a> } -<a href="#l503" class="line" id="l503"> 503</a> printf("\n"); -<a href="#l504" class="line" id="l504"> 504</a> } -<a href="#l505" class="line" id="l505"> 505</a> } -<a href="#l506" class="line" id="l506"> 506</a> ``` -<a href="#l507" class="line" id="l507"> 507</a> -<a href="#l508" class="line" id="l508"> 508</a> \ -<a href="#l509" class="line" id="l509"> 509</a> Figur 17. font i `std_logic_vector` -<a href="#l510" class="line" id="l510"> 510</a> {: style="color:gray; font-size: 80%; text-align: center;"} -<a href="#l511" class="line" id="l511"> 511</a> -<a href="#l512" class="line" id="l512"> 512</a> Så ikke minst, prosessen for å skrive til skjermen ut ifra hvilken modus. Her ble en asynkron prosess valgt, siden ellers ville timing og klokkedomener blitt et problem. -<a href="#l513" class="line" id="l513"> 513</a> -<a href="#l514" class="line" id="l514"> 514</a> ```vhdl -<a href="#l515" class="line" id="l515"> 515</a> mode : process (x, y, draw_time, vram_out, blink_white, bitmap, nreset, is_vga_text_mode) is -<a href="#l516" class="line" id="l516"> 516</a> variable current_character : std_logic_vector(0 to 127); -<a href="#l517" class="line" id="l517"> 517</a> variable code_point : integer range 0 to 255; -<a href="#l518" class="line" id="l518"> 518</a> variable foreground : integer range 0 to 15; -<a href="#l519" class="line" id="l519"> 519</a> variable background : integer range 0 to 7; -<a href="#l520" class="line" id="l520"> 520</a> variable blink : std_logic; -<a href="#l521" class="line" id="l521"> 521</a> -<a href="#l522" class="line" id="l522"> 522</a> variable code_point_x : integer range 0 to 7; -<a href="#l523" class="line" id="l523"> 523</a> variable code_point_y : integer range 0 to 15; -<a href="#l524" class="line" id="l524"> 524</a> begin -<a href="#l525" class="line" id="l525"> 525</a> VGA_R <= (others => '0'); -<a href="#l526" class="line" id="l526"> 526</a> VGA_G <= (others => '0'); -<a href="#l527" class="line" id="l527"> 527</a> VGA_B <= (others => '0'); -<a href="#l528" class="line" id="l528"> 528</a> vram_rdaddress <= (others => '0'); -<a href="#l529" class="line" id="l529"> 529</a> if nreset = '0' then -<a href="#l530" class="line" id="l530"> 530</a> -- nothing -<a href="#l531" class="line" id="l531"> 531</a> else -<a href="#l532" class="line" id="l532"> 532</a> -<a href="#l533" class="line" id="l533"> 533</a> if is_vga_text_mode = '0' then -<a href="#l534" class="line" id="l534"> 534</a> vram_rdaddress <= std_logic_vector(to_unsigned( -<a href="#l535" class="line" id="l535"> 535</a> (h_pixels / 8) * (y / 8) + ((x+1) / 8), 13)); -<a href="#l536" class="line" id="l536"> 536</a> else -<a href="#l537" class="line" id="l537"> 537</a> vram_rdaddress <= std_logic_vector(to_unsigned( -<a href="#l538" class="line" id="l538"> 538</a> (h_pixels / 8) * (y / 16) + ((x+1) / 8), 13)); -<a href="#l539" class="line" id="l539"> 539</a> end if; -<a href="#l540" class="line" id="l540"> 540</a> -<a href="#l541" class="line" id="l541"> 541</a> if draw_time = '1' then -<a href="#l542" class="line" id="l542"> 542</a> if is_vga_text_mode = '0' then -<a href="#l543" class="line" id="l543"> 543</a> VGA_R <= vram_out(23 downto 16); -<a href="#l544" class="line" id="l544"> 544</a> VGA_G <= vram_out(15 downto 8); -<a href="#l545" class="line" id="l545"> 545</a> VGA_B <= vram_out(7 downto 0); -<a href="#l546" class="line" id="l546"> 546</a> else -<a href="#l547" class="line" id="l547"> 547</a> -<a href="#l548" class="line" id="l548"> 548</a> code_point := to_integer(unsigned(vram_out(7 downto 0))); -<a href="#l549" class="line" id="l549"> 549</a> foreground := to_integer(unsigned(vram_out(11 downto 8))); -<a href="#l550" class="line" id="l550"> 550</a> background := to_integer(unsigned(vram_out(14 downto 12))); -<a href="#l551" class="line" id="l551"> 551</a> blink := vram_out(15); -<a href="#l552" class="line" id="l552"> 552</a> current_character := bitmap(code_point * 128 to (code_point+1) * 128 - 1 ); -<a href="#l553" class="line" id="l553"> 553</a> VGA_R <= color_map_8(background)(23 downto 16); -<a href="#l554" class="line" id="l554"> 554</a> VGA_G <= color_map_8(background)(15 downto 8); -<a href="#l555" class="line" id="l555"> 555</a> VGA_B <= color_map_8(background)(7 downto 0); -<a href="#l556" class="line" id="l556"> 556</a> -<a href="#l557" class="line" id="l557"> 557</a> if blink = '0' or blink_white = '1' then -<a href="#l558" class="line" id="l558"> 558</a> code_point_y := y mod 16; -<a href="#l559" class="line" id="l559"> 559</a> code_point_x := x mod 8; -<a href="#l560" class="line" id="l560"> 560</a> if current_character(code_point_y * 8 + code_point_x) = '1' then -<a href="#l561" class="line" id="l561"> 561</a> VGA_R <= color_map_16(foreground)(23 downto 16); -<a href="#l562" class="line" id="l562"> 562</a> VGA_G <= color_map_16(foreground)(15 downto 8); -<a href="#l563" class="line" id="l563"> 563</a> VGA_B <= color_map_16(foreground)(7 downto 0); -<a href="#l564" class="line" id="l564"> 564</a> end if; -<a href="#l565" class="line" id="l565"> 565</a> end if; -<a href="#l566" class="line" id="l566"> 566</a> end if; -<a href="#l567" class="line" id="l567"> 567</a> end if; -<a href="#l568" class="line" id="l568"> 568</a> end if; -<a href="#l569" class="line" id="l569"> 569</a> end process; -<a href="#l570" class="line" id="l570"> 570</a> ``` -<a href="#l571" class="line" id="l571"> 571</a> -<a href="#l572" class="line" id="l572"> 572</a> `blink_white` blir laget av en ganske enkel prosess, lignende heart.vhd -<a href="#l573" class="line" id="l573"> 573</a> ```c -<a href="#l574" class="line" id="l574"> 574</a> blink_white_gen : process(CLK) is -<a href="#l575" class="line" id="l575"> 575</a> begin -<a href="#l576" class="line" id="l576"> 576</a> if rising_edge(CLK) then -<a href="#l577" class="line" id="l577"> 577</a> if nreset = '0' then -<a href="#l578" class="line" id="l578"> 578</a> blink_counter <= (others => '0'); -<a href="#l579" class="line" id="l579"> 579</a> else -<a href="#l580" class="line" id="l580"> 580</a> blink_counter <= blink_counter + 1; -<a href="#l581" class="line" id="l581"> 581</a> end if; -<a href="#l582" class="line" id="l582"> 582</a> end if; -<a href="#l583" class="line" id="l583"> 583</a> end process; -<a href="#l584" class="line" id="l584"> 584</a> blink_white <= blink_counter(24); -<a href="#l585" class="line" id="l585"> 585</a> ``` -<a href="#l586" class="line" id="l586"> 586</a> For å teste alle mulige kombinasjoner av farge, så tegner vi “A” på hele skjermen, også endrer vi forgrunn og bakgrunn ut fra x og y koordinat. -<a href="#l587" class="line" id="l587"> 587</a> -<a href="#l588" class="line" id="l588"> 588</a> ```c -<a href="#l589" class="line" id="l589"> 589</a> for (uint32_t y = 0; y < 30; y++) { -<a href="#l590" class="line" id="l590"> 590</a> for (uint32_t x = 0; x < 80; x++) { -<a href="#l591" class="line" id="l591"> 591</a> int cfg = x * 16 / 80; -<a href="#l592" class="line" id="l592"> 592</a> uint32_t c = 0 << 15 | ((y * 8/30) << 12) | (cfg << 8) | 65; -<a href="#l593" class="line" id="l593"> 593</a> IOWR_32DIRECT(VGA_CONTROLLER_0_BASE, (y*80+x)*4, c); -<a href="#l594" class="line" id="l594"> 594</a> } -<a href="#l595" class="line" id="l595"> 595</a> } -<a href="#l596" class="line" id="l596"> 596</a> ``` -<a href="#l597" class="line" id="l597"> 597</a> -<a href="#l598" class="line" id="l598"> 598</a> -<a href="#l599" class="line" id="l599"> 599</a> \ -<a href="#l600" class="line" id="l600"> 600</a> Figur 18. VGA Text-Mode -<a href="#l601" class="line" id="l601"> 601</a> {: style="color:gray; font-size: 80%; text-align: center;"} -<a href="#l602" class="line" id="l602"> 602</a> -<a href="#l603" class="line" id="l603"> 603</a> VGA text-mode lar oss utnytte utrolig mye mer oppløsning selv om vi har begrenset minne og prosessorkraft. I tillegg gjør det skriving av software enklere, siden enhver applikasjon ikke trenger å implementere font-rendering. -<a href="#l604" class="line" id="l604"> 604</a> -<a href="#l605" class="line" id="l605"> 605</a> ## C driver implementasjon -<a href="#l606" class="line" id="l606"> 606</a> For å forenkle utviklingen av framtidig programvare lager vi en C-driver. Se datablad for mer informasjon om både driveren og for eksempel på bruk. -<a href="#l607" class="line" id="l607"> 607</a> ```c -<a href="#l608" class="line" id="l608"> 608</a> #include <io.h> -<a href="#l609" class="line" id="l609"> 609</a> #include <system.h> -<a href="#l610" class="line" id="l610"> 610</a> #include <inttypes.h> -<a href="#l611" class="line" id="l611"> 611</a> -<a href="#l612" class="line" id="l612"> 612</a> typedef union vga_full_color { -<a href="#l613" class="line" id="l613"> 613</a> struct __attribute__((packed)) { -<a href="#l614" class="line" id="l614"> 614</a> union __attribute__((packed)) { -<a href="#l615" class="line" id="l615"> 615</a> struct __attribute__((packed)) { -<a href="#l616" class="line" id="l616"> 616</a> uint8_t b,g,r; -<a href="#l617" class="line" id="l617"> 617</a> }; -<a href="#l618" class="line" id="l618"> 618</a> uint8_t bgr[3]; -<a href="#l619" class="line" id="l619"> 619</a> }; -<a href="#l620" class="line" id="l620"> 620</a> uint8_t _padding; -<a href="#l621" class="line" id="l621"> 621</a> }; -<a href="#l622" class="line" id="l622"> 622</a> uint32_t raw_dword; -<a href="#l623" class="line" id="l623"> 623</a> } vga_full_color_t; -<a href="#l624" class="line" id="l624"> 624</a> -<a href="#l625" class="line" id="l625"> 625</a> typedef union vga_text_mode { -<a href="#l626" class="line" id="l626"> 626</a> struct { -<a href="#l627" class="line" id="l627"> 627</a> uint16_t codepoint : 8; -<a href="#l628" class="line" id="l628"> 628</a> uint16_t fg : 4; -<a href="#l629" class="line" id="l629"> 629</a> uint16_t bg : 3; -<a href="#l630" class="line" id="l630"> 630</a> uint16_t blink : 1; -<a href="#l631" class="line" id="l631"> 631</a> }; -<a href="#l632" class="line" id="l632"> 632</a> uint16_t raw_word; -<a href="#l633" class="line" id="l633"> 633</a> } vga_text_mode_t; -<a href="#l634" class="line" id="l634"> 634</a> -<a href="#l635" class="line" id="l635"> 635</a> #define VGA_MODE_FULL_COLOR 0 -<a href="#l636" class="line" id="l636"> 636</a> #define VGA_MODE_TEXT_MODE 1 -<a href="#l637" class="line" id="l637"> 637</a> uint8_t vga_get_mode(int base_address) { -<a href="#l638" class="line" id="l638"> 638</a> return IORD_32DIRECT(base_address, 4800*4); -<a href="#l639" class="line" id="l639"> 639</a> } -<a href="#l640" class="line" id="l640"> 640</a> void vga_set_mode(int base_address, uint8_t mode) { -<a href="#l641" class="line" id="l641"> 641</a> IOWR_32DIRECT(base_address, 4800*4, mode & 1); -<a href="#l642" class="line" id="l642"> 642</a> } -<a href="#l643" class="line" id="l643"> 643</a> void vga_clear_screen(int base_address) { -<a href="#l644" class="line" id="l644"> 644</a> for (uint32_t i = 0; i < 60*80; i++) { -<a href="#l645" class="line" id="l645"> 645</a> IOWR_32DIRECT(base_address, i*4, 0); -<a href="#l646" class="line" id="l646"> 646</a> } -<a href="#l647" class="line" id="l647"> 647</a> } -<a href="#l648" class="line" id="l648"> 648</a> -<a href="#l649" class="line" id="l649"> 649</a> void vga_full_color_set(int base_address, uint32_t index, vga_full_color_t c) { -<a href="#l650" class="line" id="l650"> 650</a> IOWR_32DIRECT(base_address, index*4, c.raw_dword); -<a href="#l651" class="line" id="l651"> 651</a> } -<a href="#l652" class="line" id="l652"> 652</a> void vga_full_color_set_xy(int base_address, unsigned char x, unsigned char y, vga_full_color_t c) { -<a href="#l653" class="line" id="l653"> 653</a> if (x >= 80) { -<a href="#l654" class="line" id="l654"> 654</a> // wrap -<a href="#l655" class="line" id="l655"> 655</a> y += x/80; -<a href="#l656" class="line" id="l656"> 656</a> x %= 80; -<a href="#l657" class="line" id="l657"> 657</a> } -<a href="#l658" class="line" id="l658"> 658</a> if (y >= 60) y %= 60; -<a href="#l659" class="line" id="l659"> 659</a> IOWR_32DIRECT(base_address, (y*80+x)*4, c.raw_dword); -<a href="#l660" class="line" id="l660"> 660</a> } -<a href="#l661" class="line" id="l661"> 661</a> -<a href="#l662" class="line" id="l662"> 662</a> void vga_text_mode_set(int base_address, uint32_t index, vga_text_mode_t c) { -<a href="#l663" class="line" id="l663"> 663</a> IOWR_32DIRECT(base_address, index*4, c.raw_word); -<a href="#l664" class="line" id="l664"> 664</a> } -<a href="#l665" class="line" id="l665"> 665</a> void vga_text_mode_set_xy(int base_address, unsigned char x, unsigned char y, vga_text_mode_t c) { -<a href="#l666" class="line" id="l666"> 666</a> if (x >= 80) { -<a href="#l667" class="line" id="l667"> 667</a> // wrap -<a href="#l668" class="line" id="l668"> 668</a> y += x/80; -<a href="#l669" class="line" id="l669"> 669</a> x %= 80; -<a href="#l670" class="line" id="l670"> 670</a> } -<a href="#l671" class="line" id="l671"> 671</a> if (y >= 30) y %= 30; -<a href="#l672" class="line" id="l672"> 672</a> IOWR_32DIRECT(base_address, (y*80+x)*4, c.raw_word); -<a href="#l673" class="line" id="l673"> 673</a> } -<a href="#l674" class="line" id="l674"> 674</a> ``` -<a href="#l675" class="line" id="l675"> 675</a> -<a href="#l676" class="line" id="l676"> 676</a> ## C eksempel [Terminal] -<a href="#l677" class="line" id="l677"> 677</a> -<a href="#l678" class="line" id="l678"> 678</a> \ -<a href="#l679" class="line" id="l679"> 679</a> Figur 19. Bilde av terminalen -<a href="#l680" class="line" id="l680"> 680</a> {: style="color:gray; font-size: 80%; text-align: center;"} -<a href="#l681" class="line" id="l681"> 681</a> ```c -<a href="#l682" class="line" id="l682"> 682</a> void random_tm(const char* cb) -<a href="#l683" class="line" id="l683"> 683</a> { -<a href="#l684" class="line" id="l684"> 684</a> vga_set_mode(VGA_CONTROLLER_0_BASE, VGA_MODE_TEXT_MODE); -<a href="#l685" class="line" id="l685"> 685</a> for (uint32_t i = 0; i < 80*30; i++) { -<a href="#l686" class="line" id="l686"> 686</a> vga_text_mode_t c = { -<a href="#l687" class="line" id="l687"> 687</a> .raw_word = rand() % 0xffff, -<a href="#l688" class="line" id="l688"> 688</a> }; -<a href="#l689" class="line" id="l689"> 689</a> vga_text_mode_set(VGA_CONTROLLER_0_BASE, i, c); -<a href="#l690" class="line" id="l690"> 690</a> } -<a href="#l691" class="line" id="l691"> 691</a> } -<a href="#l692" class="line" id="l692"> 692</a> -<a href="#l693" class="line" id="l693"> 693</a> struct commands { -<a href="#l694" class="line" id="l694"> 694</a> void(*func)(const char* cb); -<a href="#l695" class="line" id="l695"> 695</a> const char* name; -<a href="#l696" class="line" id="l696"> 696</a> const char* desc; -<a href="#l697" class="line" id="l697"> 697</a> int quit_immidiately; -<a href="#l698" class="line" id="l698"> 698</a> } commands[] = { -<a href="#l699" class="line" id="l699"> 699</a> {cat, "cat", "shows a picture of a cat"}, -<a href="#l700" class="line" id="l700"> 700</a> {gradient, "gradient", "RGB gradient"}, -<a href="#l701" class="line" id="l701"> 701</a> {cycle_rgb_slow, "cycle", "slowly cycle rgb", 1}, -<a href="#l702" class="line" id="l702"> 702</a> {0, "clear", "clears screen", 1}, -<a href="#l703" class="line" id="l703"> 703</a> {display_char, "char", "displays all combinations of arg1 (1 character)"}, -<a href="#l704" class="line" id="l704"> 704</a> {random, "rand", "random colors"}, -<a href="#l705" class="line" id="l705"> 705</a> {random_tm, "tmrand", "random colors text mode"}, -<a href="#l706" class="line" id="l706"> 706</a> -<a href="#l707" class="line" id="l707"> 707</a> }; -<a href="#l708" class="line" id="l708"> 708</a> -<a href="#l709" class="line" id="l709"> 709</a> #define vga_printstr(_base, _x, _y, _str) do { \ -<a href="#l710" class="line" id="l710"> 710</a> for (uint32_t _i = 0; _i < strlen(_str); _i++) { \ -<a href="#l711" class="line" id="l711"> 711</a> c.codepoint = (_str)[_i]; \ -<a href="#l712" class="line" id="l712"> 712</a> vga_text_mode_set_xy(_base, _x, _y, c); \ -<a href="#l713" class="line" id="l713"> 713</a> (_x)++; \ -<a href="#l714" class="line" id="l714"> 714</a> } \ -<a href="#l715" class="line" id="l715"> 715</a> } while (0) -<a href="#l716" class="line" id="l716"> 716</a> -<a href="#l717" class="line" id="l717"> 717</a> #define vga_printstr_ln(_base, _x, _y, _str) do { \ -<a href="#l718" class="line" id="l718"> 718</a> vga_printstr(_base, _x, _y, _str); \ -<a href="#l719" class="line" id="l719"> 719</a> (_y) += 1; \ -<a href="#l720" class="line" id="l720"> 720</a> (_y) += (_x) / 80; \ -<a href="#l721" class="line" id="l721"> 721</a> (_x) = 0; \ -<a href="#l722" class="line" id="l722"> 722</a> } while (0) -<a href="#l723" class="line" id="l723"> 723</a> -<a href="#l724" class="line" id="l724"> 724</a> int main() { -<a href="#l725" class="line" id="l725"> 725</a> clear_screen: -<a href="#l726" class="line" id="l726"> 726</a> vga_clear_screen(VGA_CONTROLLER_0_BASE); -<a href="#l727" class="line" id="l727"> 727</a> vga_set_mode(VGA_CONTROLLER_0_BASE, VGA_MODE_TEXT_MODE); -<a href="#l728" class="line" id="l728"> 728</a> char command_buffer[128] = {0}; -<a href="#l729" class="line" id="l729"> 729</a> uint32_t x = 0; -<a href="#l730" class="line" id="l730"> 730</a> uint32_t y = 0; -<a href="#l731" class="line" id="l731"> 731</a> vga_text_mode_t c = { -<a href="#l732" class="line" id="l732"> 732</a> .bg = 0, -<a href="#l733" class="line" id="l733"> 733</a> .fg = 15, -<a href="#l734" class="line" id="l734"> 734</a> }; -<a href="#l735" class="line" id="l735"> 735</a> line_begin: -<a href="#l736" class="line" id="l736"> 736</a> vga_printstr(VGA_CONTROLLER_0_BASE, x, y, "$> "); -<a href="#l737" class="line" id="l737"> 737</a> for (;;) { -<a href="#l738" class="line" id="l738"> 738</a> c.codepoint = 221; -<a href="#l739" class="line" id="l739"> 739</a> c.blink = 1; -<a href="#l740" class="line" id="l740"> 740</a> vga_text_mode_set_xy(VGA_CONTROLLER_0_BASE, x, y, c); -<a href="#l741" class="line" id="l741"> 741</a> c.blink = 0; -<a href="#l742" class="line" id="l742"> 742</a> -<a href="#l743" class="line" id="l743"> 743</a> unsigned char codepoint = getchar(); -<a href="#l744" class="line" id="l744"> 744</a> -<a href="#l745" class="line" id="l745"> 745</a> c.codepoint = 0; -<a href="#l746" class="line" id="l746"> 746</a> vga_text_mode_set_xy(VGA_CONTROLLER_0_BASE, x, y, c); -<a href="#l747" class="line" id="l747"> 747</a> if (codepoint == '\n' || codepoint == '\r') { -<a href="#l748" class="line" id="l748"> 748</a> vga_printstr_ln(VGA_CONTROLLER_0_BASE, x, y, ""); -<a href="#l749" class="line" id="l749"> 749</a> -<a href="#l750" class="line" id="l750"> 750</a> for (uint32_t i = 0; i < sizeof(commands) / sizeof(*commands); i++) { -<a href="#l751" class="line" id="l751"> 751</a> if (memcmp(commands[i].name, command_buffer, strlen(commands[i].name)) == 0) { -<a href="#l752" class="line" id="l752"> 752</a> if (commands[i].func) -<a href="#l753" class="line" id="l753"> 753</a> commands[i].func(command_buffer); -<a href="#l754" class="line" id="l754"> 754</a> command_buffer[0] = 0; -<a href="#l755" class="line" id="l755"> 755</a> if (!commands[i].quit_immidiately) -<a href="#l756" class="line" id="l756"> 756</a> getchar(); -<a href="#l757" class="line" id="l757"> 757</a> goto clear_screen; -<a href="#l758" class="line" id="l758"> 758</a> } -<a href="#l759" class="line" id="l759"> 759</a> } -<a href="#l760" class="line" id="l760"> 760</a> if (memcmp("help", command_buffer, strlen("help")) == 0) { -<a href="#l761" class="line" id="l761"> 761</a> for (uint32_t i = 0; i < sizeof(commands) / sizeof(*commands); i++) { -<a href="#l762" class="line" id="l762"> 762</a> vga_printstr(VGA_CONTROLLER_0_BASE, x, y, "> "); -<a href="#l763" class="line" id="l763"> 763</a> vga_printstr(VGA_CONTROLLER_0_BASE, x, y, commands[i].name); -<a href="#l764" class="line" id="l764"> 764</a> vga_printstr(VGA_CONTROLLER_0_BASE, x, y, " | "); -<a href="#l765" class="line" id="l765"> 765</a> vga_printstr_ln(VGA_CONTROLLER_0_BASE, x, y, commands[i].desc); -<a href="#l766" class="line" id="l766"> 766</a> } -<a href="#l767" class="line" id="l767"> 767</a> } else if (*command_buffer != 0) { -<a href="#l768" class="line" id="l768"> 768</a> if (strchr(command_buffer, ' ')) *strchr(command_buffer, ' ') = 0; -<a href="#l769" class="line" id="l769"> 769</a> vga_printstr(VGA_CONTROLLER_0_BASE, x, y, "[term: error]: command '"); -<a href="#l770" class="line" id="l770"> 770</a> vga_printstr(VGA_CONTROLLER_0_BASE, x, y, command_buffer); -<a href="#l771" class="line" id="l771"> 771</a> vga_printstr_ln(VGA_CONTROLLER_0_BASE, x, y, "' not found"); -<a href="#l772" class="line" id="l772"> 772</a> } -<a href="#l773" class="line" id="l773"> 773</a> command_buffer[0] = 0; -<a href="#l774" class="line" id="l774"> 774</a> goto line_begin; -<a href="#l775" class="line" id="l775"> 775</a> continue; -<a href="#l776" class="line" id="l776"> 776</a> } -<a href="#l777" class="line" id="l777"> 777</a> if (codepoint == 127) { -<a href="#l778" class="line" id="l778"> 778</a> if (x > 3) x--; -<a href="#l779" class="line" id="l779"> 779</a> c.codepoint = 0; -<a href="#l780" class="line" id="l780"> 780</a> vga_text_mode_set_xy(VGA_CONTROLLER_0_BASE, x, y, c); -<a href="#l781" class="line" id="l781"> 781</a> command_buffer[x-3] = codepoint; -<a href="#l782" class="line" id="l782"> 782</a> command_buffer[x-3+1] = 0; -<a href="#l783" class="line" id="l783"> 783</a> continue; -<a href="#l784" class="line" id="l784"> 784</a> } -<a href="#l785" class="line" id="l785"> 785</a> c.codepoint = codepoint; -<a href="#l786" class="line" id="l786"> 786</a> vga_text_mode_set_xy(VGA_CONTROLLER_0_BASE, x, y, c); -<a href="#l787" class="line" id="l787"> 787</a> if (x-3 < sizeof(command_buffer)) { -<a href="#l788" class="line" id="l788"> 788</a> command_buffer[x-3] = codepoint; -<a href="#l789" class="line" id="l789"> 789</a> command_buffer[x-3+1] = 0; -<a href="#l790" class="line" id="l790"> 790</a> } -<a href="#l791" class="line" id="l791"> 791</a> x++; -<a href="#l792" class="line" id="l792"> 792</a> } -<a href="#l793" class="line" id="l793"> 793</a> } -<a href="#l794" class="line" id="l794"> 794</a> ``` -<a href="#l795" class="line" id="l795"> 795</a> -<a href="#l796" class="line" id="l796"> 796</a> -<a href="#l797" class="line" id="l797"> 797</a> -<a href="#l798" class="line" id="l798"> 798</a> -<a href="#l799" class="line" id="l799"> 799</a> -<a href="#l800" class="line" id="l800"> 800</a> -<a href="#l801" class="line" id="l801"> 801</a> -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/_posts/2025-02-20-hello-world.md.html b/git/n-channel/file/_posts/2025-02-20-hello-world.md.html @@ -1,42 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>2025-02-20-hello-world.md - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../"><img src="../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../log.html">Log</a> | <a href="../../files.html">Files</a> | <a href="../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> 2025-02-20-hello-world.md (356B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> --- -<a href="#l2" class="line" id="l2"> 2</a> layout: post -<a href="#l3" class="line" id="l3"> 3</a> title: Hello World -<a href="#l4" class="line" id="l4"> 4</a> description: Hello World -<a href="#l5" class="line" id="l5"> 5</a> #summary: What is the difference between various font formats? -<a href="#l6" class="line" id="l6"> 6</a> comments: true -<a href="#l7" class="line" id="l7"> 7</a> tags: [misc] -<a href="#l8" class="line" id="l8"> 8</a> --- -<a href="#l9" class="line" id="l9"> 9</a> Hello world! This day marks the creation of this website. -<a href="#l10" class="line" id="l10"> 10</a> -<a href="#l11" class="line" id="l11"> 11</a> (posts earlier than this one were made before the website was created) -<a href="#l12" class="line" id="l12"> 12</a> -<a href="#l13" class="line" id="l13"> 13</a> ```c -<a href="#l14" class="line" id="l14"> 14</a> #include <stdio.h> -<a href="#l15" class="line" id="l15"> 15</a> -<a href="#l16" class="line" id="l16"> 16</a> int main() { -<a href="#l17" class="line" id="l17"> 17</a> puts("Hello World"); -<a href="#l18" class="line" id="l18"> 18</a> } -<a href="#l19" class="line" id="l19"> 19</a> ``` -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/_posts/2025-02-21-Software-Rants.md.html b/git/n-channel/file/_posts/2025-02-21-Software-Rants.md.html @@ -1,150 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>2025-02-21-Software-Rants.md - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../"><img src="../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../log.html">Log</a> | <a href="../../files.html">Files</a> | <a href="../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> 2025-02-21-Software-Rants.md (4848B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> --- -<a href="#l2" class="line" id="l2"> 2</a> layout: post -<a href="#l3" class="line" id="l3"> 3</a> title: Software rants you should watch -<a href="#l4" class="line" id="l4"> 4</a> description: A Compilation of rants about software, programming and OOP -<a href="#l5" class="line" id="l5"> 5</a> comments: true -<a href="#l6" class="line" id="l6"> 6</a> tags: [misc, programming] -<a href="#l7" class="line" id="l7"> 7</a> --- -<a href="#l8" class="line" id="l8"> 8</a> -<a href="#l9" class="line" id="l9"> 9</a> A compilation of good programming rants worth watching. -<a href="#l10" class="line" id="l10"> 10</a> -<a href="#l11" class="line" id="l11"> 11</a> ## Short Videos -<a href="#l12" class="line" id="l12"> 12</a> -<a href="#l13" class="line" id="l13"> 13</a> <iframe style="width: 80%; aspect-ratio:16/9; height: auto; margin: 10px auto;" -<a href="#l14" class="line" id="l14"> 14</a> frameborder="0" allowfullscreen -<a href="#l15" class="line" id="l15"> 15</a> src="https://youtube.com/embed/k0qmkQGqpM8" title="Terry Davis On Simplicity"> -<a href="#l16" class="line" id="l16"> 16</a> </iframe> -<a href="#l17" class="line" id="l17"> 17</a> -<a href="#l18" class="line" id="l18"> 18</a> -<a href="#l19" class="line" id="l19"> 19</a> <iframe style="width: 80%; aspect-ratio:16/9; height: auto; margin: 10px auto;" -<a href="#l20" class="line" id="l20"> 20</a> frameborder="0" allowfullscreen -<a href="#l21" class="line" id="l21"> 21</a> src="https://www.youtube.com/embed/FRFRtSwYMrk" title="Tsoding why software is brokern"> -<a href="#l22" class="line" id="l22"> 22</a> </iframe> -<a href="#l23" class="line" id="l23"> 23</a> -<a href="#l24" class="line" id="l24"> 24</a> <iframe style="width: 80%; aspect-ratio:16/9; height: auto; margin: 10px auto;" -<a href="#l25" class="line" id="l25"> 25</a> frameborder="0" allowfullscreen -<a href="#l26" class="line" id="l26"> 26</a> src="https://youtube.com/embed/04ksL1hf_p8" title="Jblow problem with OOP"> -<a href="#l27" class="line" id="l27"> 27</a> </iframe> -<a href="#l28" class="line" id="l28"> 28</a> -<a href="#l29" class="line" id="l29"> 29</a> <iframe style="width: 80%; aspect-ratio:16/9; height: auto; margin: 10px auto;" -<a href="#l30" class="line" id="l30"> 30</a> frameborder="0" allowfullscreen -<a href="#l31" class="line" id="l31"> 31</a> src="https://www.youtube.com/embed/oaLoLC8eBZc" title="Jblow clips during web programmer break"> -<a href="#l32" class="line" id="l32"> 32</a> </iframe> -<a href="#l33" class="line" id="l33"> 33</a> -<a href="#l34" class="line" id="l34"> 34</a> <iframe style="width: 80%; aspect-ratio:16/9; height: auto; margin: 10px auto;" -<a href="#l35" class="line" id="l35"> 35</a> frameborder="0" allowfullscreen -<a href="#l36" class="line" id="l36"> 36</a> src="https://www.youtube.com/embed/CgdKYBqe6QA" title="Jblow clips for productivity"> -<a href="#l37" class="line" id="l37"> 37</a> </iframe> -<a href="#l38" class="line" id="l38"> 38</a> -<a href="#l39" class="line" id="l39"> 39</a> <iframe style="width: 80%; aspect-ratio:16/9; height: auto; margin: 10px auto;" -<a href="#l40" class="line" id="l40"> 40</a> frameborder="0" allowfullscreen -<a href="#l41" class="line" id="l41"> 41</a> src="https://www.youtube.com/embed/nL8GWU9M8LY" title="Jblow clips for quitting your job"> -<a href="#l42" class="line" id="l42"> 42</a> </iframe> -<a href="#l43" class="line" id="l43"> 43</a> -<a href="#l44" class="line" id="l44"> 44</a> <iframe style="width: 80%; aspect-ratio:16/9; height: auto; margin: 10px auto;" -<a href="#l45" class="line" id="l45"> 45</a> frameborder="0" allowfullscreen -<a href="#l46" class="line" id="l46"> 46</a> src="https://www.youtube.com/embed/4oky64qN5WI" title="Jblow on simplicity"> -<a href="#l47" class="line" id="l47"> 47</a> </iframe> -<a href="#l48" class="line" id="l48"> 48</a> -<a href="#l49" class="line" id="l49"> 49</a> <iframe style="width: 80%; aspect-ratio:16/9; height: auto; margin: 10px auto;" -<a href="#l50" class="line" id="l50"> 50</a> frameborder="0" allowfullscreen -<a href="#l51" class="line" id="l51"> 51</a> src="https://www.youtube.com/embed/ubWB_ResHwM" title="Jblow sledgehammer programming"> -<a href="#l52" class="line" id="l52"> 52</a> </iframe> -<a href="#l53" class="line" id="l53"> 53</a> -<a href="#l54" class="line" id="l54"> 54</a> <iframe style="width: 80%; aspect-ratio:16/9; height: auto; margin: 10px auto;" -<a href="#l55" class="line" id="l55"> 55</a> frameborder="0" allowfullscreen -<a href="#l56" class="line" id="l56"> 56</a> src="https://www.youtube.com/embed/GKYCA3UsmrU" title="HMH Get rid of the OOP mindset"> -<a href="#l57" class="line" id="l57"> 57</a> </iframe> -<a href="#l58" class="line" id="l58"> 58</a> -<a href="#l59" class="line" id="l59"> 59</a> <iframe style="width: 80%; aspect-ratio:16/9; height: auto; margin: 10px auto;" -<a href="#l60" class="line" id="l60"> 60</a> frameborder="0" allowfullscreen -<a href="#l61" class="line" id="l61"> 61</a> src="https://www.youtube.com/embed/zjkuXtiG1og" title="HMH new/delete"> -<a href="#l62" class="line" id="l62"> 62</a> </iframe> -<a href="#l63" class="line" id="l63"> 63</a> -<a href="#l64" class="line" id="l64"> 64</a> ## Medium Videos -<a href="#l65" class="line" id="l65"> 65</a> -<a href="#l66" class="line" id="l66"> 66</a> <iframe style="width: 80%; aspect-ratio:16/9; height: auto; margin: 10px auto;" -<a href="#l67" class="line" id="l67"> 67</a> frameborder="0" allowfullscreen -<a href="#l68" class="line" id="l68"> 68</a> src="https://www.youtube.com/embed/xt1KNDmOYqA" title="HMH N+2"> -<a href="#l69" class="line" id="l69"> 69</a> </iframe> -<a href="#l70" class="line" id="l70"> 70</a> -<a href="#l71" class="line" id="l71"> 71</a> <iframe style="width: 80%; aspect-ratio:16/9; height: auto; margin: 10px auto;" -<a href="#l72" class="line" id="l72"> 72</a> frameborder="0" allowfullscreen -<a href="#l73" class="line" id="l73"> 73</a> src="https://www.youtube.com/embed/tD5NrevFtbU" title="Casey Clean Code bad performance"> -<a href="#l74" class="line" id="l74"> 74</a> </iframe> -<a href="#l75" class="line" id="l75"> 75</a> -<a href="#l76" class="line" id="l76"> 76</a> <iframe style="width: 80%; aspect-ratio:16/9; height: auto; margin: 10px auto;" -<a href="#l77" class="line" id="l77"> 77</a> frameborder="0" allowfullscreen -<a href="#l78" class="line" id="l78"> 78</a> src="https://www.youtube.com/embed/x2EOOJg8FkA" title="Casey Performance excuses"> -<a href="#l79" class="line" id="l79"> 79</a> </iframe> -<a href="#l80" class="line" id="l80"> 80</a> -<a href="#l81" class="line" id="l81"> 81</a> <iframe style="width: 80%; aspect-ratio:16/9; height: auto; margin: 10px auto;" -<a href="#l82" class="line" id="l82"> 82</a> frameborder="0" allowfullscreen -<a href="#l83" class="line" id="l83"> 83</a> src="https://www.youtube.com/embed/QM1iUe6IofM" title="Brian Will OOP is bad"> -<a href="#l84" class="line" id="l84"> 84</a> </iframe> -<a href="#l85" class="line" id="l85"> 85</a> -<a href="#l86" class="line" id="l86"> 86</a> <iframe style="width: 80%; aspect-ratio:16/9; height: auto; margin: 10px auto;" -<a href="#l87" class="line" id="l87"> 87</a> frameborder="0" allowfullscreen -<a href="#l88" class="line" id="l88"> 88</a> src="https://www.youtube.com/embed/IRTfhkiAqPw" title="Brian Will OOP is embarrasing"> -<a href="#l89" class="line" id="l89"> 89</a> </iframe> -<a href="#l90" class="line" id="l90"> 90</a> -<a href="#l91" class="line" id="l91"> 91</a> -<a href="#l92" class="line" id="l92"> 92</a> ## Long Videos -<a href="#l93" class="line" id="l93"> 93</a> -<a href="#l94" class="line" id="l94"> 94</a> <iframe style="width: 80%; aspect-ratio:16/9; height: auto; margin: 10px auto;" -<a href="#l95" class="line" id="l95"> 95</a> frameborder="0" allowfullscreen -<a href="#l96" class="line" id="l96"> 96</a> src="https://www.youtube.com/embed/ZLxazlP7Ppo" title="Ginger Bill Clean Code debacke"> -<a href="#l97" class="line" id="l97"> 97</a> </iframe> -<a href="#l98" class="line" id="l98"> 98</a> -<a href="#l99" class="line" id="l99"> 99</a> <iframe style="width: 80%; aspect-ratio:16/9; height: auto; margin: 10px auto;" -<a href="#l100" class="line" id="l100"> 100</a> frameborder="0" allowfullscreen -<a href="#l101" class="line" id="l101"> 101</a> src="https://www.youtube.com/embed/C90H3ZueZMM" title="Shawn McGrath: OOP rant"> -<a href="#l102" class="line" id="l102"> 102</a> </iframe> -<a href="#l103" class="line" id="l103"> 103</a> -<a href="#l104" class="line" id="l104"> 104</a> <iframe style="width: 80%; aspect-ratio:16/9; height: auto; margin: 10px auto;" -<a href="#l105" class="line" id="l105"> 105</a> frameborder="0" allowfullscreen -<a href="#l106" class="line" id="l106"> 106</a> src="https://www.youtube.com/embed/rX0ItVEVjHc" title="Mike Acton Data-Orianted Design"> -<a href="#l107" class="line" id="l107"> 107</a> </iframe> -<a href="#l108" class="line" id="l108"> 108</a> -<a href="#l109" class="line" id="l109"> 109</a> <iframe style="width: 80%; aspect-ratio:16/9; height: auto; margin: 10px auto;" -<a href="#l110" class="line" id="l110"> 110</a> frameborder="0" allowfullscreen -<a href="#l111" class="line" id="l111"> 111</a> src="https://www.youtube.com/embed/TZ5a3gCCZYo" title="Rfleury Enter the Arena"> -<a href="#l112" class="line" id="l112"> 112</a> </iframe> -<a href="#l113" class="line" id="l113"> 113</a> -<a href="#l114" class="line" id="l114"> 114</a> <iframe style="width: 80%; aspect-ratio:16/9; height: auto; margin: 10px auto;" -<a href="#l115" class="line" id="l115"> 115</a> frameborder="0" allowfullscreen -<a href="#l116" class="line" id="l116"> 116</a> src="https://www.youtube.com/embed/kZRE7HIO3vk" title="Casey 30 million line problem"> -<a href="#l117" class="line" id="l117"> 117</a> </iframe> -<a href="#l118" class="line" id="l118"> 118</a> -<a href="#l119" class="line" id="l119"> 119</a> <iframe style="width: 80%; aspect-ratio:16/9; height: auto; margin: 10px auto;" -<a href="#l120" class="line" id="l120"> 120</a> frameborder="0" allowfullscreen -<a href="#l121" class="line" id="l121"> 121</a> src="https://www.youtube.com/embed/7YpFGkG-u1w" title="Casey Where does bad code come from"> -<a href="#l122" class="line" id="l122"> 122</a> </iframe> -<a href="#l123" class="line" id="l123"> 123</a> -<a href="#l124" class="line" id="l124"> 124</a> <iframe style="width: 80%; aspect-ratio:16/9; height: auto; margin: 10px auto;" -<a href="#l125" class="line" id="l125"> 125</a> frameborder="0" allowfullscreen -<a href="#l126" class="line" id="l126"> 126</a> src="https://www.youtube.com/embed/hxM8QmyZXtg" title="Casey refterm"> -<a href="#l127" class="line" id="l127"> 127</a> </iframe> -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/_posts/2025-02-22-implications-of-OOP.md.html b/git/n-channel/file/_posts/2025-02-22-implications-of-OOP.md.html @@ -1,322 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>2025-02-22-implications-of-OOP.md - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../"><img src="../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../log.html">Log</a> | <a href="../../files.html">Files</a> | <a href="../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> 2025-02-22-implications-of-OOP.md (9614B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> --- -<a href="#l2" class="line" id="l2"> 2</a> layout: post -<a href="#l3" class="line" id="l3"> 3</a> title: "Implications of inheritance: OOP is Bad" -<a href="#l4" class="line" id="l4"> 4</a> description: The one feature that is properly unique to OOP is terrible, this is why. -<a href="#l5" class="line" id="l5"> 5</a> comments: true -<a href="#l6" class="line" id="l6"> 6</a> tags: [writing, programming, C] -<a href="#l7" class="line" id="l7"> 7</a> --- -<a href="#l8" class="line" id="l8"> 8</a> -<a href="#l9" class="line" id="l9"> 9</a> Although the primary premise of Object-Oriented Programming may be simple, it forces certain design decisions that you otherwise wouldn't make. -<a href="#l10" class="line" id="l10"> 10</a> Structuring your program with an OOP mindset already restricts your thinking, but these extra implications make thinking outside the ~~object~~ box much harder. -<a href="#l11" class="line" id="l11"> 11</a> -<a href="#l12" class="line" id="l12"> 12</a> Modern programming languages that "support" OOP **force** you to use their restrictions throughout your program. -<a href="#l13" class="line" id="l13"> 13</a> -<a href="#l14" class="line" id="l14"> 14</a> ## What is OOP? -<a href="#l15" class="line" id="l15"> 15</a> -<a href="#l16" class="line" id="l16"> 16</a> In the everyday sense, OOP is a software strategy where *functions* and *data* are tied together. -<a href="#l17" class="line" id="l17"> 17</a> I don't have an issue with that. If that's all that OOP did, then it would merely be an alternative syntax for accomplishing this: -<a href="#l18" class="line" id="l18"> 18</a> ```c -<a href="#l19" class="line" id="l19"> 19</a> // not OOP (?) -<a href="#l20" class="line" id="l20"> 20</a> struct my_struct { -<a href="#l21" class="line" id="l21"> 21</a> int a, b, c; -<a href="#l22" class="line" id="l22"> 22</a> } -<a href="#l23" class="line" id="l23"> 23</a> -<a href="#l24" class="line" id="l24"> 24</a> int calculate_sum(my_struct& self) { -<a href="#l25" class="line" id="l25"> 25</a> return self.a + self.b + self.c; -<a href="#l26" class="line" id="l26"> 26</a> } -<a href="#l27" class="line" id="l27"> 27</a> -<a href="#l28" class="line" id="l28"> 28</a> //~ usage /////////////////// -<a href="#l29" class="line" id="l29"> 29</a> -<a href="#l30" class="line" id="l30"> 30</a> my_struct object = {1, 2, 3}; -<a href="#l31" class="line" id="l31"> 31</a> int res = calculate_sum(object); -<a href="#l32" class="line" id="l32"> 32</a> ``` -<a href="#l33" class="line" id="l33"> 33</a> ```c -<a href="#l34" class="line" id="l34"> 34</a> // OOP -<a href="#l35" class="line" id="l35"> 35</a> class my_class { -<a href="#l36" class="line" id="l36"> 36</a> int a, b, c; -<a href="#l37" class="line" id="l37"> 37</a> } -<a href="#l38" class="line" id="l38"> 38</a> -<a href="#l39" class="line" id="l39"> 39</a> int my_class::calculate_sum(/* implicit self */) { -<a href="#l40" class="line" id="l40"> 40</a> return self.a + self.b + self.c; -<a href="#l41" class="line" id="l41"> 41</a> } -<a href="#l42" class="line" id="l42"> 42</a> -<a href="#l43" class="line" id="l43"> 43</a> //~ usage /////////////////// -<a href="#l44" class="line" id="l44"> 44</a> -<a href="#l45" class="line" id="l45"> 45</a> my_class object = {1, 2, 3}; -<a href="#l46" class="line" id="l46"> 46</a> int res = object.calculate_sum(); -<a href="#l47" class="line" id="l47"> 47</a> ``` -<a href="#l48" class="line" id="l48"> 48</a> -<a href="#l49" class="line" id="l49"> 49</a> So this isn't the whole story. A program being "OOP" implies other things, mainly **inheritance**. -<a href="#l50" class="line" id="l50"> 50</a> -<a href="#l51" class="line" id="l51"> 51</a> ### What is inheritance? -<a href="#l52" class="line" id="l52"> 52</a> -<a href="#l53" class="line" id="l53"> 53</a> Inheritance is the ability of a class to extend other classes. -<a href="#l54" class="line" id="l54"> 54</a> It allows you to add methods and members on top of a generic base class. -<a href="#l55" class="line" id="l55"> 55</a> -<a href="#l56" class="line" id="l56"> 56</a> It looks something like this. -<a href="#l57" class="line" id="l57"> 57</a> ```c -<a href="#l58" class="line" id="l58"> 58</a> // OOP -<a href="#l59" class="line" id="l59"> 59</a> class my_base_class { -<a href="#l60" class="line" id="l60"> 60</a> int a, b; -<a href="#l61" class="line" id="l61"> 61</a> } -<a href="#l62" class="line" id="l62"> 62</a> class my_class : my_base_class { -<a href="#l63" class="line" id="l63"> 63</a> // int a, b; are automatically imported from the base class -<a href="#l64" class="line" id="l64"> 64</a> int c; -<a href="#l65" class="line" id="l65"> 65</a> } -<a href="#l66" class="line" id="l66"> 66</a> ``` -<a href="#l67" class="line" id="l67"> 67</a> But you can still do this without OOP. -<a href="#l68" class="line" id="l68"> 68</a> ```c -<a href="#l69" class="line" id="l69"> 69</a> // not OOP (?) -<a href="#l70" class="line" id="l70"> 70</a> struct my_struct { -<a href="#l71" class="line" id="l71"> 71</a> int a, b; -<a href="#l72" class="line" id="l72"> 72</a> } -<a href="#l73" class="line" id="l73"> 73</a> struct my_struct { -<a href="#l74" class="line" id="l74"> 74</a> my_base_struct base; -<a href="#l75" class="line" id="l75"> 75</a> int c; -<a href="#l76" class="line" id="l76"> 76</a> } -<a href="#l77" class="line" id="l77"> 77</a> ``` -<a href="#l78" class="line" id="l78"> 78</a> The difference is that you explicitly type `object.base.a + object.base.b`, but a language feature could make it identical. -<a href="#l79" class="line" id="l79"> 79</a> -<a href="#l80" class="line" id="l80"> 80</a> The "non-OOP" way is so far superior: -<a href="#l81" class="line" id="l81"> 81</a> - Control over memory layout -<a href="#l82" class="line" id="l82"> 82</a> - Explicit without being cumbersome -<a href="#l83" class="line" id="l83"> 83</a> - Allows composability (although some languages have "multiple-inheritance") -<a href="#l84" class="line" id="l84"> 84</a> -<a href="#l85" class="line" id="l85"> 85</a> ## So what's the catch -<a href="#l86" class="line" id="l86"> 86</a> -<a href="#l87" class="line" id="l87"> 87</a> OOP inheritance allows you to *override* functions. -<a href="#l88" class="line" id="l88"> 88</a> ```c -<a href="#l89" class="line" id="l89"> 89</a> // OOP -<a href="#l90" class="line" id="l90"> 90</a> class my_base_class { -<a href="#l91" class="line" id="l91"> 91</a> virtual string to_string() { -<a href="#l92" class="line" id="l92"> 92</a> return "base_class"; -<a href="#l93" class="line" id="l93"> 93</a> } -<a href="#l94" class="line" id="l94"> 94</a> } -<a href="#l95" class="line" id="l95"> 95</a> class my_class : my_base_class { -<a href="#l96" class="line" id="l96"> 96</a> string to_string() { // overridden function -<a href="#l97" class="line" id="l97"> 97</a> return "my_class"; -<a href="#l98" class="line" id="l98"> 98</a> } -<a href="#l99" class="line" id="l99"> 99</a> } -<a href="#l100" class="line" id="l100"> 100</a> ``` -<a href="#l101" class="line" id="l101"> 101</a> The "magic" part about OOP is that casting an object to its parent class retains the overridden methods in the parent class. -<a href="#l102" class="line" id="l102"> 102</a> ```c -<a href="#l103" class="line" id="l103"> 103</a> void print_string(my_base_class obj) { -<a href="#l104" class="line" id="l104"> 104</a> print(obj.to_string()); -<a href="#l105" class="line" id="l105"> 105</a> } -<a href="#l106" class="line" id="l106"> 106</a> -<a href="#l107" class="line" id="l107"> 107</a> my_class object = new my_class(); -<a href="#l108" class="line" id="l108"> 108</a> // object will implicitly cast to 'my_base_class' -<a href="#l109" class="line" id="l109"> 109</a> print_string(object); // prints "my_class" -<a href="#l110" class="line" id="l110"> 110</a> ``` -<a href="#l111" class="line" id="l111"> 111</a> -<a href="#l112" class="line" id="l112"> 112</a> Did you notice something?\ -<a href="#l113" class="line" id="l113"> 113</a> For this functionality to work, we created the `object` with a constructor called via `new my_class();`. -<a href="#l114" class="line" id="l114"> 114</a> -<a href="#l115" class="line" id="l115"> 115</a> So RAII, *Resource acquisition is initialization*, that's the catch that makes OOP unique. -<a href="#l116" class="line" id="l116"> 116</a> -<a href="#l117" class="line" id="l117"> 117</a> ## Other ways that don't use RAII -<a href="#l118" class="line" id="l118"> 118</a> -<a href="#l119" class="line" id="l119"> 119</a> ### 1. Function pointers -<a href="#l120" class="line" id="l120"> 120</a> Function pointers manually do what the RAII and virtual methods do "automatically" for us. -<a href="#l121" class="line" id="l121"> 121</a> ```c -<a href="#l122" class="line" id="l122"> 122</a> typedef string to_string_function_pointer_t(void* self); -<a href="#l123" class="line" id="l123"> 123</a> -<a href="#l124" class="line" id="l124"> 124</a> ////////////////////////////////////////////////// -<a href="#l125" class="line" id="l125"> 125</a> // Replace virtual function with function pointer defined above -<a href="#l126" class="line" id="l126"> 126</a> -<a href="#l127" class="line" id="l127"> 127</a> struct my_base_struct { -<a href="#l128" class="line" id="l128"> 128</a> to_string_function_pointer_t* to_string; -<a href="#l129" class="line" id="l129"> 129</a> } -<a href="#l130" class="line" id="l130"> 130</a> struct my_struct { -<a href="#l131" class="line" id="l131"> 131</a> my_base_struct base; -<a href="#l132" class="line" id="l132"> 132</a> } -<a href="#l133" class="line" id="l133"> 133</a> -<a href="#l134" class="line" id="l134"> 134</a> ////////////////////////////////////////////////// -<a href="#l135" class="line" id="l135"> 135</a> // Make the to_string functions -<a href="#l136" class="line" id="l136"> 136</a> -<a href="#l137" class="line" id="l137"> 137</a> string to_string_base_struct(void* self_void) { -<a href="#l138" class="line" id="l138"> 138</a> my_base_struct* self = self_void; -<a href="#l139" class="line" id="l139"> 139</a> return "base_class"; -<a href="#l140" class="line" id="l140"> 140</a> } -<a href="#l141" class="line" id="l141"> 141</a> -<a href="#l142" class="line" id="l142"> 142</a> string to_string_my_struct(void* self_void) { -<a href="#l143" class="line" id="l143"> 143</a> my_struct* self = self_void; -<a href="#l144" class="line" id="l144"> 144</a> return "my_class"; -<a href="#l145" class="line" id="l145"> 145</a> } -<a href="#l146" class="line" id="l146"> 146</a> -<a href="#l147" class="line" id="l147"> 147</a> ////////////////////////////////////////////////// -<a href="#l148" class="line" id="l148"> 148</a> // Make "constructors" -<a href="#l149" class="line" id="l149"> 149</a> -<a href="#l150" class="line" id="l150"> 150</a> my_base_struct* make_my_base_struct() { -<a href="#l151" class="line" id="l151"> 151</a> my_base_struct* res = malloc(sizeof(*res)); -<a href="#l152" class="line" id="l152"> 152</a> *res = (my_base_struct){ .to_string = to_string_base_struct}; -<a href="#l153" class="line" id="l153"> 153</a> return res; -<a href="#l154" class="line" id="l154"> 154</a> } -<a href="#l155" class="line" id="l155"> 155</a> -<a href="#l156" class="line" id="l156"> 156</a> my_struct* make_my_struct() { -<a href="#l157" class="line" id="l157"> 157</a> my_struct* res = malloc(sizeof(*res)); -<a href="#l158" class="line" id="l158"> 158</a> *res = (my_base_struct){ .to_string = to_string_my_struct}; -<a href="#l159" class="line" id="l159"> 159</a> return res; -<a href="#l160" class="line" id="l160"> 160</a> } -<a href="#l161" class="line" id="l161"> 161</a> ``` -<a href="#l162" class="line" id="l162"> 162</a> Usage then remains the same. -<a href="#l163" class="line" id="l163"> 163</a> ```c -<a href="#l164" class="line" id="l164"> 164</a> void print_string(my_base_struct base) { -<a href="#l165" class="line" id="l165"> 165</a> print(base.to_string()); -<a href="#l166" class="line" id="l166"> 166</a> } -<a href="#l167" class="line" id="l167"> 167</a> -<a href="#l168" class="line" id="l168"> 168</a> my_struct object = make_my_struct(); -<a href="#l169" class="line" id="l169"> 169</a> print_string(object.base); // prints "my_class" -<a href="#l170" class="line" id="l170"> 170</a> ``` -<a href="#l171" class="line" id="l171"> 171</a> This example shows how much work the OOP language is doing for us. -<a href="#l172" class="line" id="l172"> 172</a> C makes it apparent how intricate of a solution this is. -<a href="#l173" class="line" id="l173"> 173</a> ### 2. Enums -<a href="#l174" class="line" id="l174"> 174</a> ```c -<a href="#l175" class="line" id="l175"> 175</a> enum struct_type { -<a href="#l176" class="line" id="l176"> 176</a> TYPE_MY_BASE_STRUCT, -<a href="#l177" class="line" id="l177"> 177</a> TYPE_MY_STRUCT, -<a href="#l178" class="line" id="l178"> 178</a> }; -<a href="#l179" class="line" id="l179"> 179</a> -<a href="#l180" class="line" id="l180"> 180</a> struct my_base_struct { -<a href="#l181" class="line" id="l181"> 181</a> struct_type type; -<a href="#l182" class="line" id="l182"> 182</a> } -<a href="#l183" class="line" id="l183"> 183</a> -<a href="#l184" class="line" id="l184"> 184</a> string to_string(my_base_struct* obj) { -<a href="#l185" class="line" id="l185"> 185</a> switch (obj.type) { -<a href="#l186" class="line" id="l186"> 186</a> case TYPE_MY_BASE_STRUCT: return "my_base_struct"; -<a href="#l187" class="line" id="l187"> 187</a> case TYPE_MY_STRUCT: return "my_struct"; -<a href="#l188" class="line" id="l188"> 188</a> default: return "invalid type"; -<a href="#l189" class="line" id="l189"> 189</a> } -<a href="#l190" class="line" id="l190"> 190</a> } -<a href="#l191" class="line" id="l191"> 191</a> -<a href="#l192" class="line" id="l192"> 192</a> ``` -<a href="#l193" class="line" id="l193"> 193</a> ```c -<a href="#l194" class="line" id="l194"> 194</a> void print_string(my_base_struct base) { -<a href="#l195" class="line" id="l195"> 195</a> print(to_string(base)); -<a href="#l196" class="line" id="l196"> 196</a> } -<a href="#l197" class="line" id="l197"> 197</a> -<a href="#l198" class="line" id="l198"> 198</a> my_base_struct object = {.type = TYPE_MY_STRUCT}; -<a href="#l199" class="line" id="l199"> 199</a> print_string(object.base); // prints "my_class" -<a href="#l200" class="line" id="l200"> 200</a> ``` -<a href="#l201" class="line" id="l201"> 201</a> -<a href="#l202" class="line" id="l202"> 202</a> ## Why I think the non-RAII ways are better -<a href="#l203" class="line" id="l203"> 203</a> -<a href="#l204" class="line" id="l204"> 204</a> ### 1. Function pointers -<a href="#l205" class="line" id="l205"> 205</a> As you saw, the function pointer strategy was pretty painful. However, it's very explicit. In the cases where we genuinely need a fully obfuscated API, this is perfect. -<a href="#l206" class="line" id="l206"> 206</a> -<a href="#l207" class="line" id="l207"> 207</a> Functions are a fundamental concept and are easy to reuse. The `to_string_my_struct()` can be used by any other function, which many OOP languages will not let you do. -<a href="#l208" class="line" id="l208"> 208</a> ```c -<a href="#l209" class="line" id="l209"> 209</a> string to_string_my_struct(my_struct* obj) { -<a href="#l210" class="line" id="l210"> 210</a> return to_string_my_base_struct(obj.base) + int_to_string(obj.c); -<a href="#l211" class="line" id="l211"> 211</a> } -<a href="#l212" class="line" id="l212"> 212</a> ``` -<a href="#l213" class="line" id="l213"> 213</a> \ -<a href="#l214" class="line" id="l214"> 214</a> Many child structs can compose multiple different function pointers. Typical OOP syntax does not allow this. -<a href="#l215" class="line" id="l215"> 215</a> -<a href="#l216" class="line" id="l216"> 216</a> I personally only find function pointers useful with dynamically loaded code. The OOP mindset fails to make this obvious. -<a href="#l217" class="line" id="l217"> 217</a> -<a href="#l218" class="line" id="l218"> 218</a> Through ease of composability and lack of required language features—I would argue that for dynamic cases, even without having gotten to the thick part of why RAII is bad, function pointers are superior. -<a href="#l219" class="line" id="l219"> 219</a> -<a href="#l220" class="line" id="l220"> 220</a> ### 2. Enums -<a href="#l221" class="line" id="l221"> 221</a> The enum example has roughly the same amount of code as the OOP example, maybe slightly more. -<a href="#l222" class="line" id="l222"> 222</a> The enum solution states its intent clearly, as it doesn't use advanced language features. -<a href="#l223" class="line" id="l223"> 223</a> -<a href="#l224" class="line" id="l224"> 224</a> You might have noticed I never created the `my_struct` in the enum example. This happened because we don't need multiple types anymore. -<a href="#l225" class="line" id="l225"> 225</a> -<a href="#l226" class="line" id="l226"> 226</a> The enums let us compose all our behavior in a single type! -<a href="#l227" class="line" id="l227"> 227</a> ```c -<a href="#l228" class="line" id="l228"> 228</a> struct entity { -<a href="#l229" class="line" id="l229"> 229</a> entity_type type; -<a href="#l230" class="line" id="l230"> 230</a> struct { -<a href="#l231" class="line" id="l231"> 231</a> int hp; -<a href="#l232" class="line" id="l232"> 232</a> hit_box hitbox; -<a href="#l233" class="line" id="l233"> 233</a> vec2 velocity; -<a href="#l234" class="line" id="l234"> 234</a> vec2 position; -<a href="#l235" class="line" id="l235"> 235</a> } common; -<a href="#l236" class="line" id="l236"> 236</a> -<a href="#l237" class="line" id="l237"> 237</a> struct { -<a href="#l238" class="line" id="l238"> 238</a> entity_ref current_target; -<a href="#l239" class="line" id="l239"> 239</a> } common_enemy; -<a href="#l240" class="line" id="l240"> 240</a> } -<a href="#l241" class="line" id="l241"> 241</a> ``` -<a href="#l242" class="line" id="l242"> 242</a> If you have never done this before, it is **incredibly** useful. All functions collapse into one, and the different data members toggle the related branches. -<a href="#l243" class="line" id="l243"> 243</a> -<a href="#l244" class="line" id="l244"> 244</a> The code becomes a lot more uniform. -<a href="#l245" class="line" id="l245"> 245</a> All the struct members are directly visible, and all the branches and composed behavior get placed next to each other. -<a href="#l246" class="line" id="l246"> 246</a> In extreme cases, multiple files with tens of classes and functions become a single large function. Utilizing a centralized vs decentralized approach might be a personal preference, but performance and code sharing are objectively better with the latter approach. -<a href="#l247" class="line" id="l247"> 247</a> -<a href="#l248" class="line" id="l248"> 248</a> Additionally, if you're concerned about the memory usage of having one large struct, you can use a "tagged union". -<a href="#l249" class="line" id="l249"> 249</a> -<a href="#l250" class="line" id="l250"> 250</a> ### 3. You can combine the two above -<a href="#l251" class="line" id="l251"> 251</a> ```c -<a href="#l252" class="line" id="l252"> 252</a> struct entity { -<a href="#l253" class="line" id="l253"> 253</a> entity_type type; -<a href="#l254" class="line" id="l254"> 254</a> struct { -<a href="#l255" class="line" id="l255"> 255</a> int hp; -<a href="#l256" class="line" id="l256"> 256</a> hit_box hitbox; -<a href="#l257" class="line" id="l257"> 257</a> vec2 velocity; -<a href="#l258" class="line" id="l258"> 258</a> vec2 position; -<a href="#l259" class="line" id="l259"> 259</a> } common; -<a href="#l260" class="line" id="l260"> 260</a> -<a href="#l261" class="line" id="l261"> 261</a> struct { -<a href="#l262" class="line" id="l262"> 262</a> entity_ref current_target; -<a href="#l263" class="line" id="l263"> 263</a> } common_enemy; -<a href="#l264" class="line" id="l264"> 264</a> -<a href="#l265" class="line" id="l265"> 265</a> void* extra_entity_data; -<a href="#l266" class="line" id="l266"> 266</a> entity_function_poitner_t* update; -<a href="#l267" class="line" id="l267"> 267</a> entity_function_poitner_t* on_spawn; -<a href="#l268" class="line" id="l268"> 268</a> entity_function_poitner_t* on_death; -<a href="#l269" class="line" id="l269"> 269</a> } -<a href="#l270" class="line" id="l270"> 270</a> ``` -<a href="#l271" class="line" id="l271"> 271</a> -<a href="#l272" class="line" id="l272"> 272</a> You can incorporate the function pointer approach without removing anything in an enum-based type. Doing this lets static code remain straightforward while providing dynamic functionality. -<a href="#l273" class="line" id="l273"> 273</a> -<a href="#l274" class="line" id="l274"> 274</a> ## Finally: Problems with RAII -<a href="#l275" class="line" id="l275"> 275</a> -<a href="#l276" class="line" id="l276"> 276</a> OOP and RAII bot suffer from a problematic thinking pattern where every object needs to be constructed, destroyed, and handled individually. -<a href="#l277" class="line" id="l277"> 277</a> In reality, this is almost *never* the case. -<a href="#l278" class="line" id="l278"> 278</a> When I talk to people tainted by the stains of OOP, they often end up with scattered types and functions and useless boilerplate. -<a href="#l279" class="line" id="l279"> 279</a> -<a href="#l280" class="line" id="l280"> 280</a> Learning to chunk elements with the same lifetime together makes memory management a breeze. -<a href="#l281" class="line" id="l281"> 281</a> -<a href="#l282" class="line" id="l282"> 282</a> <iframe style="width: 80%; aspect-ratio:16/9; height: auto; margin: 10px auto;" -<a href="#l283" class="line" id="l283"> 283</a> frameborder="0" allowfullscreen -<a href="#l284" class="line" id="l284"> 284</a> src="https://www.youtube.com/embed/xt1KNDmOYqA" title="HMH N+2"> -<a href="#l285" class="line" id="l285"> 285</a> </iframe> -<a href="#l286" class="line" id="l286"> 286</a> Want more videos like the one above? [My list of software rants worth watching]({% post_url 2025-02-21-Software-Rants %}). -<a href="#l287" class="line" id="l287"> 287</a> -<a href="#l288" class="line" id="l288"> 288</a> Due to OOP languages supporting this single feature—namely poor automation of function pointers—they force your entire program to be written in a sub-optimal way. -<a href="#l289" class="line" id="l289"> 289</a> Languages like C++ allow a hybrid approach due to its history as an extension of C. Most OOP languages are not like this. -<a href="#l290" class="line" id="l290"> 290</a> -<a href="#l291" class="line" id="l291"> 291</a> When I use a language with native OOP features, I find myself searching "How to do struct literal in X". Only to realize I have to write a constructor, despite not even using virtual functions. -<a href="#l292" class="line" id="l292"> 292</a> -<a href="#l293" class="line" id="l293"> 293</a> ### What about encapsulation -<a href="#l294" class="line" id="l294"> 294</a> You might have noticed that I didn't mention encapsulation. -<a href="#l295" class="line" id="l295"> 295</a> That's because encapsulation is stupid, and abusing it is harmful. -<a href="#l296" class="line" id="l296"> 296</a> -<a href="#l297" class="line" id="l297"> 297</a> If you **need** encapsulation, you should use an opaque type. -<a href="#l298" class="line" id="l298"> 298</a> -<a href="#l299" class="line" id="l299"> 299</a> Ensuring individual members are only used internally can be done by prefixing the name with `_` or `_INTERNAL_`. -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/_posts/2025-02-22-making-generic-data-structures-in-C.md.html b/git/n-channel/file/_posts/2025-02-22-making-generic-data-structures-in-C.md.html @@ -1,250 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>2025-02-22-making-generic-data-structures-in-C.md - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../"><img src="../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../log.html">Log</a> | <a href="../../files.html">Files</a> | <a href="../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> 2025-02-22-making-generic-data-structures-in-C.md (7444B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> --- -<a href="#l2" class="line" id="l2"> 2</a> layout: post -<a href="#l3" class="line" id="l3"> 3</a> title: Generic data structures in C -<a href="#l4" class="line" id="l4"> 4</a> description: Reducing boilerplate and frictoin of generic data structures in C -<a href="#l5" class="line" id="l5"> 5</a> #summary: What is the difference between various font formats? -<a href="#l6" class="line" id="l6"> 6</a> comments: true -<a href="#l7" class="line" id="l7"> 7</a> tags: [writing, programming, C] -<a href="#l8" class="line" id="l8"> 8</a> --- -<a href="#l9" class="line" id="l9"> 9</a> -<a href="#l10" class="line" id="l10"> 10</a> Static typing is a great tool. It reduces a lot of bugs. However, having too many types hinders the uniformity of your code. -<a href="#l11" class="line" id="l11"> 11</a> -<a href="#l12" class="line" id="l12"> 12</a> Modern languages have tooling that does generic types automatically, but C does not. -<a href="#l13" class="line" id="l13"> 13</a> I don't always agree that creating and using generics is a good idea, but I use generics in C. -<a href="#l14" class="line" id="l14"> 14</a> -<a href="#l15" class="line" id="l15"> 15</a> ## How C programmers normally do it -<a href="#l16" class="line" id="l16"> 16</a> -<a href="#l17" class="line" id="l17"> 17</a> Usually, C programmers use `void*` and wrap functions around the operations. -<a href="#l18" class="line" id="l18"> 18</a> Doing this creates friction, and it has no type safety. -<a href="#l19" class="line" id="l19"> 19</a> -<a href="#l20" class="line" id="l20"> 20</a> > Note that in cases where you don't need type safety or easy top-level operations, `void*` may be an excellent tool. -<a href="#l21" class="line" id="l21"> 21</a> -<a href="#l22" class="line" id="l22"> 22</a> -<a href="#l23" class="line" id="l23"> 23</a> Example of a `void*` based linked list: -<a href="#l24" class="line" id="l24"> 24</a> ```c -<a href="#l25" class="line" id="l25"> 25</a> typedef struct generic_linked_list generic_linked_list; -<a href="#l26" class="line" id="l26"> 26</a> struct generic_linked_list { -<a href="#l27" class="line" id="l27"> 27</a> generic_linked_list* next; -<a href="#l28" class="line" id="l28"> 28</a> void* data; -<a href="#l29" class="line" id="l29"> 29</a> }; -<a href="#l30" class="line" id="l30"> 30</a> -<a href="#l31" class="line" id="l31"> 31</a> generic_linked_list* create_node(void* data, size_t data_size_bytes) { -<a href="#l32" class="line" id="l32"> 32</a> generic_linked_list* res = malloc(sizeof(*res)); -<a href="#l33" class="line" id="l33"> 33</a> res->next = 0; -<a href="#l34" class="line" id="l34"> 34</a> res->data = malloc(data_size_bytes); -<a href="#l35" class="line" id="l35"> 35</a> memcpy(res->data, data, data_size_bytes); -<a href="#l36" class="line" id="l36"> 36</a> } -<a href="#l37" class="line" id="l37"> 37</a> -<a href="#l38" class="line" id="l38"> 38</a> void llist_stack_push(generic_linked_list** first_node, void *data, size_t data_size_bytes) -<a href="#l39" class="line" id="l39"> 39</a> { -<a href="#l40" class="line" id="l40"> 40</a> generic_linked_list* new_node = create_node(data, data_size_bytes); -<a href="#l41" class="line" id="l41"> 41</a> new_node->next = *first_node; -<a href="#l42" class="line" id="l42"> 42</a> *first_node = new_node; -<a href="#l43" class="line" id="l43"> 43</a> } -<a href="#l44" class="line" id="l44"> 44</a> ``` -<a href="#l45" class="line" id="l45"> 45</a> -<a href="#l46" class="line" id="l46"> 46</a> ## The simple way -<a href="#l47" class="line" id="l47"> 47</a> -<a href="#l48" class="line" id="l48"> 48</a> Instead of plastering `void*` everywhere, create macros that assume member names. -<a href="#l49" class="line" id="l49"> 49</a> ```c -<a href="#l50" class="line" id="l50"> 50</a> #define llist_queue_push(f,l,n) ((f)==0) ? (f)=(l)=(n) : ((l)->next=(n), (l)=(n), (n)->next=0) -<a href="#l51" class="line" id="l51"> 51</a> #define llist_queue_pop(f,l) ((f)==(l)) ? ((f)=(l)=0) : ((f)=(f)->next) -<a href="#l52" class="line" id="l52"> 52</a> -<a href="#l53" class="line" id="l53"> 53</a> #define llist_stack_push(f,n) ((n)->next=(f), (f)=(n)) -<a href="#l54" class="line" id="l54"> 54</a> #define llist_stack_pop(f) ((f)==0) ? 0 : ((f)=(f->next)) -<a href="#l55" class="line" id="l55"> 55</a> ``` -<a href="#l56" class="line" id="l56"> 56</a> -<a href="#l57" class="line" id="l57"> 57</a> Having generic *operations* encourages defining the structures yourself. -<a href="#l58" class="line" id="l58"> 58</a> ```c -<a href="#l59" class="line" id="l59"> 59</a> typedef struct llist_int llist_int; -<a href="#l60" class="line" id="l60"> 60</a> struct llist_int { -<a href="#l61" class="line" id="l61"> 61</a> llist_int* next; -<a href="#l62" class="line" id="l62"> 62</a> int val; -<a href="#l63" class="line" id="l63"> 63</a> } -<a href="#l64" class="line" id="l64"> 64</a> ``` -<a href="#l65" class="line" id="l65"> 65</a> -<a href="#l66" class="line" id="l66"> 66</a> Then you use it like below. -<a href="#l67" class="line" id="l67"> 67</a> ```c -<a href="#l68" class="line" id="l68"> 68</a> llist_int* list_first; -<a href="#l69" class="line" id="l69"> 69</a> -<a href="#l70" class="line" id="l70"> 70</a> llist_int* n = malloc((sizeof(*n))); -<a href="#l71" class="line" id="l71"> 71</a> n->val = 10; -<a href="#l72" class="line" id="l72"> 72</a> llist_stack_push(list_first, n); -<a href="#l73" class="line" id="l73"> 73</a> ``` -<a href="#l74" class="line" id="l74"> 74</a> -<a href="#l75" class="line" id="l75"> 75</a> It's a lot simpler. It's type safe and gives the user control of memory management. -<a href="#l76" class="line" id="l76"> 76</a> -<a href="#l77" class="line" id="l77"> 77</a> Meanwhile, with the `void*` method, merely reading the list requires typing `*(int*)list_first->data`. -<a href="#l78" class="line" id="l78"> 78</a> -<a href="#l79" class="line" id="l79"> 79</a> Retaining control over data types also makes it straightforward to compose large structures. -<a href="#l80" class="line" id="l80"> 80</a> ```c -<a href="#l81" class="line" id="l81"> 81</a> typedef struct tree_node tree_node; -<a href="#l82" class="line" id="l82"> 82</a> struct tree_node { -<a href="#l83" class="line" id="l83"> 83</a> tree_node* parent; -<a href="#l84" class="line" id="l84"> 84</a> -<a href="#l85" class="line" id="l85"> 85</a> tree_node* child_first; -<a href="#l86" class="line" id="l86"> 86</a> tree_node* child_last; -<a href="#l87" class="line" id="l87"> 87</a> -<a href="#l88" class="line" id="l88"> 88</a> tree_node* next; -<a href="#l89" class="line" id="l89"> 89</a> tree_node* prev; -<a href="#l90" class="line" id="l90"> 90</a> -<a href="#l91" class="line" id="l91"> 91</a> int val; -<a href="#l92" class="line" id="l92"> 92</a> } -<a href="#l93" class="line" id="l93"> 93</a> ``` -<a href="#l94" class="line" id="l94"> 94</a> We can use this structure as is. We don't need the boilerplate that comes with a different solution. -<a href="#l95" class="line" id="l95"> 95</a> -<a href="#l96" class="line" id="l96"> 96</a> ## The "hide away" method -<a href="#l97" class="line" id="l97"> 97</a> -<a href="#l98" class="line" id="l98"> 98</a> You can also conceal the header information and provide the type in a friendlier way. -<a href="#l99" class="line" id="l99"> 99</a> ```c -<a href="#l100" class="line" id="l100"> 100</a> typedef struct { -<a href="#l101" class="line" id="l101"> 101</a> int sz; -<a href="#l102" class="line" id="l102"> 102</a> } _dyn_arr_header; -<a href="#l103" class="line" id="l103"> 103</a> #define dyn_arr(T) T* -<a href="#l104" class="line" id="l104"> 104</a> -<a href="#l105" class="line" id="l105"> 105</a> #define dyn_arr_get_sz(arr) ((arr) ? ((_dyn_arr_header*)((u8*)(arr) - sizeof(_dyn_arr_header)))->sz : 0) -<a href="#l106" class="line" id="l106"> 106</a> -<a href="#l107" class="line" id="l107"> 107</a> #define dyn_arr_push(arr, new_val) ( \ -<a href="#l108" class="line" id="l108"> 108</a> arr = realloc(arr, sizeof(_dyn_arr_header) + (dyn_arr_get_sz(arr) + 1) * sizeof(*arr)), \ -<a href="#l109" class="line" id="l109"> 109</a> arr[dyn_arr_get_sz(arr)-1] = new_val \ -<a href="#l110" class="line" id="l110"> 110</a> ) -<a href="#l111" class="line" id="l111"> 111</a> ``` -<a href="#l112" class="line" id="l112"> 112</a> ```c -<a href="#l113" class="line" id="l113"> 113</a> dyn_arr(float) my_arr = NULL; -<a href="#l114" class="line" id="l114"> 114</a> -<a href="#l115" class="line" id="l115"> 115</a> dyn_arr_push(my_arr, 10.0f); -<a href="#l116" class="line" id="l116"> 116</a> dyn_arr_push(my_arr, 20.0f); -<a href="#l117" class="line" id="l117"> 117</a> -<a href="#l118" class="line" id="l118"> 118</a> assert(my_arr[1] == 20.0f);; -<a href="#l119" class="line" id="l119"> 119</a> ``` -<a href="#l120" class="line" id="l120"> 120</a> I don't use dynamic arrays anymore, and that's mostly where this technique is helpful. -<a href="#l121" class="line" id="l121"> 121</a> This approach creates more obfuscated and harder-to-read code than exposing types. -<a href="#l122" class="line" id="l122"> 122</a> -<a href="#l123" class="line" id="l123"> 123</a> ## Going a bit crazy -<a href="#l124" class="line" id="l124"> 124</a> -<a href="#l125" class="line" id="l125"> 125</a> Although using generic operations rather than types is the takeaway from this post, I figured I should demonstrate an extreme example. Let's make a hash table. -<a href="#l126" class="line" id="l126"> 126</a> -<a href="#l127" class="line" id="l127"> 127</a> To ease use, we can provide macros that generate the correct structures. -<a href="#l128" class="line" id="l128"> 128</a> ```c -<a href="#l129" class="line" id="l129"> 129</a> #define htable_def_ex(_htable_entry_T) \ -<a href="#l130" class="line" id="l130"> 130</a> struct { \ -<a href="#l131" class="line" id="l131"> 131</a> u64 table_sz; \ -<a href="#l132" class="line" id="l132"> 132</a> _htable_entry_T** table; \ -<a href="#l133" class="line" id="l133"> 133</a> } -<a href="#l134" class="line" id="l134"> 134</a> -<a href="#l135" class="line" id="l135"> 135</a> // If you don't care about having anonymous types, you can use this: -<a href="#l136" class="line" id="l136"> 136</a> #define htable_def(_T) htable_def_ex(struct {u64 hash; void* next; _T val;}) -<a href="#l137" class="line" id="l137"> 137</a> ``` -<a href="#l138" class="line" id="l138"> 138</a> We wrap our operations in generic macros like before. This time, using internal functions and processing the input and output of them. -<a href="#l139" class="line" id="l139"> 139</a> ```c -<a href="#l140" class="line" id="l140"> 140</a> typedef struct {u64 hash; void* next;} null_htable_entry_t; -<a href="#l141" class="line" id="l141"> 141</a> typedef htable_def_ex(null_htable_entry_t) _null_htable_t; -<a href="#l142" class="line" id="l142"> 142</a> -<a href="#l143" class="line" id="l143"> 143</a> #define htable_find(_HTABLE, _KEY) \ -<a href="#l144" class="line" id="l144"> 144</a> ((_HTABLE) ? ( \ -<a href="#l145" class="line" id="l145"> 145</a> (typeof((_HTABLE)->table[0]))_htable_find((_HTABLE), (_KEY)) \ -<a href="#l146" class="line" id="l146"> 146</a> ) : NULL) -<a href="#l147" class="line" id="l147"> 147</a> -<a href="#l148" class="line" id="l148"> 148</a> void* _htable_find(void* htable, uint64_t key) -<a href="#l149" class="line" id="l149"> 149</a> { -<a href="#l150" class="line" id="l150"> 150</a> _null_htable_t* ht = htable; -<a href="#l151" class="line" id="l151"> 151</a> uint64_t index = key % ht->table_sz; -<a href="#l152" class="line" id="l152"> 152</a> -<a href="#l153" class="line" id="l153"> 153</a> for (null_htable_entry_header_t* it = ht->table[index]; it; it = it->next) { -<a href="#l154" class="line" id="l154"> 154</a> if (it->hash == key) return (u8*)it + sizeof(null_htable_entry_t); -<a href="#l155" class="line" id="l155"> 155</a> } -<a href="#l156" class="line" id="l156"> 156</a> return NULL; -<a href="#l157" class="line" id="l157"> 157</a> } -<a href="#l158" class="line" id="l158"> 158</a> -<a href="#l159" class="line" id="l159"> 159</a> #define htable_find_or_create(_HTABLE, _KEY)\ -<a href="#l160" class="line" id="l160"> 160</a> ((typeof((_HTABLE)->table[0]))_htable_find_or_create(_HTABLE, sizeof(*(_HTABLE)->tmp_list), _KEY)) -<a href="#l161" class="line" id="l161"> 161</a> -<a href="#l162" class="line" id="l162"> 162</a> void* _htable_find_or_create(void* htable, size_t entry_sz, uint64_t key) -<a href="#l163" class="line" id="l163"> 163</a> { -<a href="#l164" class="line" id="l164"> 164</a> null_htable_t* ht = htable; -<a href="#l165" class="line" id="l165"> 165</a> null_htable_entry_t* result = _htable_find(htable, key); -<a href="#l166" class="line" id="l166"> 166</a> -<a href="#l167" class="line" id="l167"> 167</a> if (!result) { -<a href="#l168" class="line" id="l168"> 168</a> uint64_t index = key % ht->table_sz; -<a href="#l169" class="line" id="l169"> 169</a> -<a href="#l170" class="line" id="l170"> 170</a> result = malloc(sizeof(null_htable_entry_t) + entry_sz); -<a href="#l171" class="line" id="l171"> 171</a> -<a href="#l172" class="line" id="l172"> 172</a> result->next = ht->table[index]; -<a href="#l173" class="line" id="l173"> 173</a> result->hash = key; -<a href="#l174" class="line" id="l174"> 174</a> ht->table[index] = result; -<a href="#l175" class="line" id="l175"> 175</a> } -<a href="#l176" class="line" id="l176"> 176</a> return result; -<a href="#l177" class="line" id="l177"> 177</a> } -<a href="#l178" class="line" id="l178"> 178</a> ``` -<a href="#l179" class="line" id="l179"> 179</a> -<a href="#l180" class="line" id="l180"> 180</a> Usage code: -<a href="#l181" class="line" id="l181"> 181</a> ```c -<a href="#l182" class="line" id="l182"> 182</a> htable_def(int) int_htable; -<a href="#l183" class="line" id="l183"> 183</a> int_htable id_table = { -<a href="#l184" class="line" id="l184"> 184</a> .table_sz = 1001, -<a href="#l185" class="line" id="l185"> 185</a> .table = malloc(1001 * sizeof(*id_table.table)), -<a href="#l186" class="line" id="l186"> 186</a> }; -<a href="#l187" class="line" id="l187"> 187</a> -<a href="#l188" class="line" id="l188"> 188</a> { -<a href="#l189" class="line" id="l189"> 189</a> int* res = htable_find_or_create(&id_table, key); -<a href="#l190" class="line" id="l190"> 190</a> *res = 10; -<a href="#l191" class="line" id="l191"> 191</a> } -<a href="#l192" class="line" id="l192"> 192</a> -<a href="#l193" class="line" id="l193"> 193</a> { -<a href="#l194" class="line" id="l194"> 194</a> int* res = htable_find(&id_table, key); -<a href="#l195" class="line" id="l195"> 195</a> assert(res); -<a href="#l196" class="line" id="l196"> 196</a> assert(res == 10); -<a href="#l197" class="line" id="l197"> 197</a> } -<a href="#l198" class="line" id="l198"> 198</a> ``` -<a href="#l199" class="line" id="l199"> 199</a> -<a href="#l200" class="line" id="l200"> 200</a> If you wish to avoid using `typeof`, you can make another struct member to use as the "return" value. Like this: -<a href="#l201" class="line" id="l201"> 201</a> ```c -<a href="#l202" class="line" id="l202"> 202</a> #define htable_def_ex(_htable_entry_T) \ -<a href="#l203" class="line" id="l203"> 203</a> struct { \ -<a href="#l204" class="line" id="l204"> 204</a> u64 table_sz; \ -<a href="#l205" class="line" id="l205"> 205</a> _htable_entry_T** table; \ -<a href="#l206" class="line" id="l206"> 206</a> _htable_entry_T* last_find; \ -<a href="#l207" class="line" id="l207"> 207</a> } -<a href="#l208" class="line" id="l208"> 208</a> -<a href="#l209" class="line" id="l209"> 209</a> #define htable_find(_HTABLE, _KEY) \ -<a href="#l210" class="line" id="l210"> 210</a> ((_HTABLE) ? ( \ -<a href="#l211" class="line" id="l211"> 211</a> (_HTABLE)->last_find = _htable_find((_HTABLE), (_KEY)) \ -<a href="#l212" class="line" id="l212"> 212</a> ) : NULL) -<a href="#l213" class="line" id="l213"> 213</a> ``` -<a href="#l214" class="line" id="l214"> 214</a> -<a href="#l215" class="line" id="l215"> 215</a> ## What you should remember -<a href="#l216" class="line" id="l216"> 216</a> The best generic data structure is no generic data structure. Nowadays, I almost exclusively use linked lists. They are flexible, pointer stable, and thereby play nicely with arenas. The hash table we made also plays well with Arenas. -<a href="#l217" class="line" id="l217"> 217</a> -<a href="#l218" class="line" id="l218"> 218</a> I rarely long for a dynamic array, a hash table, or other more complicated data structures. -<a href="#l219" class="line" id="l219"> 219</a> In the cases where you actually would benefit from having a reusable generic data structure, don't do it the `void*` way. -<a href="#l220" class="line" id="l220"> 220</a> Try doing the types raw and focus on making the operations "generic". -<a href="#l221" class="line" id="l221"> 221</a> -<a href="#l222" class="line" id="l222"> 222</a> You will be surprised at how much it reduces friction and boilerplate. -<a href="#l223" class="line" id="l223"> 223</a> -<a href="#l224" class="line" id="l224"> 224</a> <br> -<a href="#l225" class="line" id="l225"> 225</a> -<a href="#l226" class="line" id="l226"> 226</a> For the non-C people reading, you might have become thankful that your tooling does generics automatically. -<a href="#l227" class="line" id="l227"> 227</a> I think of it differently. One of the beauties of C is that complicated things are hard to do. Experiencing that hardship directs you toward simplicity. -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/_posts/2025-02-23-my-old-projects.md.html b/git/n-channel/file/_posts/2025-02-23-my-old-projects.md.html @@ -1,363 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>2025-02-23-my-old-projects.md - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../"><img src="../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../log.html">Log</a> | <a href="../../files.html">Files</a> | <a href="../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> 2025-02-23-my-old-projects.md (16616B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> --- -<a href="#l2" class="line" id="l2"> 2</a> layout: post -<a href="#l3" class="line" id="l3"> 3</a> title: My old projects -<a href="#l4" class="line" id="l4"> 4</a> description: Compilation of my old projects (the code behind most of them isn't that great, but a bunch of them are interesting) -<a href="#l5" class="line" id="l5"> 5</a> #summary: What is the difference between various font formats? -<a href="#l6" class="line" id="l6"> 6</a> comments: true -<a href="#l7" class="line" id="l7"> 7</a> tags: [writing, programming, electronics, C] -<a href="#l8" class="line" id="l8"> 8</a> --- -<a href="#l9" class="line" id="l9"> 9</a> -<a href="#l10" class="line" id="l10"> 10</a> ## Preface -<a href="#l11" class="line" id="l11"> 11</a> -<a href="#l12" class="line" id="l12"> 12</a> I primarily developed as a programmer through personal projects, reading good code I've found, and watching YouTube. -<a href="#l13" class="line" id="l13"> 13</a> -<a href="#l14" class="line" id="l14"> 14</a> I've learned a lot from the [Gunslinger graphics framework](https://github.com/MrFrenik/gunslinger) and later the [RAD Debugger project](https://github.com/EpicGamesExt/raddebugger). -<a href="#l15" class="line" id="l15"> 15</a> -<a href="#l16" class="line" id="l16"> 16</a> At first I watched YouTubers like [The Cherno](https://www.youtube.com/@TheCherno), [Bisqwit](https://www.youtube.com/@Bisqwit) and [javidx9](https://www.youtube.com/@javidx9). -<a href="#l17" class="line" id="l17"> 17</a> Later I watched the people you can see in [this post]({% post_url 2025-02-21-Software-Rants %}), but I don't spend much time on YouTube anymore. -<a href="#l18" class="line" id="l18"> 18</a> I have also watched a lot of different electronics channels. -<a href="#l19" class="line" id="l19"> 19</a> -<a href="#l20" class="line" id="l20"> 20</a> # The projects (in order) -<a href="#l21" class="line" id="l21"> 21</a> -<a href="#l22" class="line" id="l22"> 22</a> It's difficult to mention my completed projects concisely, but I tried listing most of them here. -<a href="#l23" class="line" id="l23"> 23</a> -<a href="#l24" class="line" id="l24"> 24</a> ## Unreal Engine -<a href="#l25" class="line" id="l25"> 25</a> -<a href="#l26" class="line" id="l26"> 26</a> My programming journey started during the first summer break of secondary school. I learned C++ and Unreal Engine with a [Udemy course](https://www.udemy.com/course/unrealcourse). -<a href="#l27" class="line" id="l27"> 27</a> -<a href="#l28" class="line" id="l28"> 28</a> It was overwhelming. I couldn't solve anything by myself. -<a href="#l29" class="line" id="l29"> 29</a> On the bright side, I received a large stream of information, which set me up for further learning. -<a href="#l30" class="line" id="l30"> 30</a> -<a href="#l31" class="line" id="l31"> 31</a> I got bored after working through a good chunk of the course, and I attempted to create a game with what I learned. Instead of C++, I used Blueprint, but I still got stuck at rudimentary logic and math. -<a href="#l32" class="line" id="l32"> 32</a> -<a href="#l33" class="line" id="l33"> 33</a> ## Weeb Bot -<a href="#l34" class="line" id="l34"> 34</a> -<a href="#l35" class="line" id="l35"> 35</a> As cringe as it may be, "[Weeb boot](https://github.com/Samdal/WeebBot)" was my first successful independent project. It was a discord bot written in Golang. -<a href="#l36" class="line" id="l36"> 36</a> -<a href="#l37" class="line" id="l37"> 37</a> I made the bot in 2018-2019 during secondary school (I was around 14-15 years old). -<a href="#l38" class="line" id="l38"> 38</a> I didn't know much programming. I could only read examples and write if statements. -<a href="#l39" class="line" id="l39"> 39</a> -<a href="#l40" class="line" id="l40"> 40</a> The bot provided storage retrieval, automated responses, string transformations, and web scraping.\ -<a href="#l41" class="line" id="l41"> 41</a> I later added the [Anilist GraphQL API](https://anilist.co/graphiql). -<a href="#l42" class="line" id="l42"> 42</a> -<a href="#l43" class="line" id="l43"> 43</a>  -<a href="#l44" class="line" id="l44"> 44</a> {: style="text-align: center;"} -<a href="#l45" class="line" id="l45"> 45</a> -<a href="#l46" class="line" id="l46"> 46</a> ## Drones -<a href="#l47" class="line" id="l47"> 47</a> -<a href="#l48" class="line" id="l48"> 48</a> I've been involved in making two drones. -<a href="#l49" class="line" id="l49"> 49</a> -<a href="#l50" class="line" id="l50"> 50</a> My dad made the first one. He made the structure using wood and a plastic box to house the electronics. -<a href="#l51" class="line" id="l51"> 51</a> The drone had a commercial flight controller and motors. Sadly, it never flew that great when we tested it. -<a href="#l52" class="line" id="l52"> 52</a> -<a href="#l53" class="line" id="l53"> 53</a> The second time, we decided to buy a ready-made kit for a drone frame. I assembled and soldered it together. However, I never got far enough to fly and test it properly. -<a href="#l54" class="line" id="l54"> 54</a> This was partly because the configuration tool for the new flight controller was hard to use, and I was unsure if I had broken connections. -<a href="#l55" class="line" id="l55"> 55</a> I didn't assemble it in a repairable manner, so it was hard to debug. -<a href="#l56" class="line" id="l56"> 56</a> -<a href="#l57" class="line" id="l57"> 57</a> ## Snow plower -<a href="#l58" class="line" id="l58"> 58</a> -<a href="#l59" class="line" id="l59"> 59</a> I made the snow plower roughly at the same time as [Weeb Bot](#weeb-bot), maybe slightly later. -<a href="#l60" class="line" id="l60"> 60</a> It utilized a Raspberry PI running [ROS](https://www.ros.org/), and the navigation and mapping information came from a lidar. -<a href="#l61" class="line" id="l61"> 61</a> -<a href="#l62" class="line" id="l62"> 62</a>  -<a href="#l63" class="line" id="l63"> 63</a> {: style="text-align: center;"} -<a href="#l64" class="line" id="l64"> 64</a> -<a href="#l65" class="line" id="l65"> 65</a> It would then navigate and plow the snow autonomously, like a robot vacuum. -<a href="#l66" class="line" id="l66"> 66</a> -<a href="#l67" class="line" id="l67"> 67</a> The snow plower's hull reused an old defective snow blower (it had tracks, so it looked cool). -<a href="#l68" class="line" id="l68"> 68</a> The plan was to fit it with electro motors to substitute the removed gasoline engine. -<a href="#l69" class="line" id="l69"> 69</a> -<a href="#l70" class="line" id="l70"> 70</a> The project never got further than half-working simulations and rudimentary mappings with the lidar. -<a href="#l71" class="line" id="l71"> 71</a> It would be cool to complete it now that I'm more experienced. -<a href="#l72" class="line" id="l72"> 72</a> -<a href="#l73" class="line" id="l73"> 73</a> ## Traffic light -<a href="#l74" class="line" id="l74"> 74</a> -<a href="#l75" class="line" id="l75"> 75</a> I made a traffic light simulation with an Arduino. It marked the first time I properly tried to use OOP. -<a href="#l76" class="line" id="l76"> 76</a> Read my [post about OOP]({ % post_url 2025-02-22-implications-of-OOP }), or [my list of software rants worth watching]({% post_url 2025-02-21-Software-Rants %}) if you want to know more about my stance about it now. -<a href="#l77" class="line" id="l77"> 77</a> -<a href="#l78" class="line" id="l78"> 78</a> The traffic light was a school assignment, but it never counted towards my grade due to the low completion rate. -<a href="#l79" class="line" id="l79"> 79</a> -<a href="#l80" class="line" id="l80"> 80</a>  -<a href="#l81" class="line" id="l81"> 81</a> {: style="text-align: center;"} -<a href="#l82" class="line" id="l82"> 82</a> -<a href="#l83" class="line" id="l83"> 83</a> ## Anders Tale (Godot) -<a href="#l84" class="line" id="l84"> 84</a> -<a href="#l85" class="line" id="l85"> 85</a> I began working on Anders tale once I finished the [Traffic Light](#traffic-light) -<a href="#l86" class="line" id="l86"> 86</a> -<a href="#l87" class="line" id="l87"> 87</a> I've primarily programmed the game, but it's a "group" project. -<a href="#l88" class="line" id="l88"> 88</a> The original vision wasn't mine. A friend came up with it. The concept has been a joke in my friend group for many years. -<a href="#l89" class="line" id="l89"> 89</a> -<a href="#l90" class="line" id="l90"> 90</a> Programming has been an on-and-off effort. The main source code is not public, but there is a [joke website](https://stelaug.github.io/) you can view (not made by me). -<a href="#l91" class="line" id="l91"> 91</a> -<a href="#l92" class="line" id="l92"> 92</a>  -<a href="#l93" class="line" id="l93"> 93</a> {: style="text-align: center;"} -<a href="#l94" class="line" id="l94"> 94</a> -<a href="#l95" class="line" id="l95"> 95</a> As a Co-Op roguelike, the campaign was supposed to be the highlight. Despite this, the PvP mode saw the most development. -<a href="#l96" class="line" id="l96"> 96</a> The free-for-all was very fun, and we genuinely played it. -<a href="#l97" class="line" id="l97"> 97</a> -<a href="#l98" class="line" id="l98"> 98</a>  -<a href="#l99" class="line" id="l99"> 99</a> {: style="text-align: center;"} -<a href="#l100" class="line" id="l100"> 100</a> -<a href="#l101" class="line" id="l101"> 101</a> The game was made in Godot 3 with GDScript. -<a href="#l102" class="line" id="l102"> 102</a> The biggest stop-point was the poor lighting performance, so the game looked plain. -<a href="#l103" class="line" id="l103"> 103</a> -<a href="#l104" class="line" id="l104"> 104</a> I picked the project up again during the end of summer break in 2024 from a clean slate in Godot 4. It was surprising how far I've matured as a programmer. -<a href="#l105" class="line" id="l105"> 105</a> I had become so used to working without game engines that it nearly felt in the way. -<a href="#l106" class="line" id="l106"> 106</a> -<a href="#l107" class="line" id="l107"> 107</a> I want to continue on it someday. -<a href="#l108" class="line" id="l108"> 108</a> -<a href="#l109" class="line" id="l109"> 109</a> ## Rick & Morty Portal Gun -<a href="#l110" class="line" id="l110"> 110</a> -<a href="#l111" class="line" id="l111"> 111</a> I made a [Rick & Morty portal gun](https://github.com/Samdal/r-and-m-portal-gun) with a friend from primary school. He led the physical design while I did the electronics. -<a href="#l112" class="line" id="l112"> 112</a> -<a href="#l113" class="line" id="l113"> 113</a> The project had a constricted time frame from late May to early June 2021. The portal gun was a parting gift my friend gave someone. -<a href="#l114" class="line" id="l114"> 114</a> -<a href="#l115" class="line" id="l115"> 115</a> It housed an Arduino, an mp3 player, a rotary encoder, a couple of AA batteries, and a three-wide 7-segment display.\ -<a href="#l116" class="line" id="l116"> 116</a> It had a boot-up sequence and allowed you to "select" different world coordinates, with a bias towards C137. -<a href="#l117" class="line" id="l117"> 117</a> Depressing the rotary encoder fired the gun, turning on the front lights and playing a sound effect. -<a href="#l118" class="line" id="l118"> 118</a> -<a href="#l119" class="line" id="l119"> 119</a>  -<a href="#l120" class="line" id="l120"> 120</a>  -<a href="#l121" class="line" id="l121"> 121</a>  -<a href="#l122" class="line" id="l122"> 122</a> {: style="text-align: center;"} -<a href="#l123" class="line" id="l123"> 123</a> -<a href="#l124" class="line" id="l124"> 124</a> ## Minesweeper -<a href="#l125" class="line" id="l125"> 125</a> -<a href="#l126" class="line" id="l126"> 126</a> [Minesweeper](https://github.com/Samdal/minesweeper) was my first C project. It marked the birth of a new era for me. I finalized it at the end of April 2021 and used Raylib to do the graphics. -<a href="#l127" class="line" id="l127"> 127</a> -<a href="#l128" class="line" id="l128"> 128</a>  -<a href="#l129" class="line" id="l129"> 129</a> {: style="text-align: center;"} -<a href="#l130" class="line" id="l130"> 130</a> -<a href="#l131" class="line" id="l131"> 131</a> ## gs_snake -<a href="#l132" class="line" id="l132"> 132</a> -<a href="#l133" class="line" id="l133"> 133</a> [gs_snake](https://github.com/Samdal/gs_snake) was a snake clone I made with [Gunsligner](https://github.com/MrFrenik/gunslinger). -<a href="#l134" class="line" id="l134"> 134</a> -<a href="#l135" class="line" id="l135"> 135</a> I have since programmed a lot with Gunslinger. I am active in its discord server. -<a href="#l136" class="line" id="l136"> 136</a> Discovering Gunslinger was a critical part of my development as an early programmer. -<a href="#l137" class="line" id="l137"> 137</a> It made me discover new ways to program. I uncovered a lot from reading John's code, and I learned about Jonathan Blow, Casey Muratory, Handmade Hero, and Ryan Fleury. -<a href="#l138" class="line" id="l138"> 138</a> -<a href="#l139" class="line" id="l139"> 139</a>  -<a href="#l140" class="line" id="l140"> 140</a> {: style="text-align: center;"} -<a href="#l141" class="line" id="l141"> 141</a> -<a href="#l142" class="line" id="l142"> 142</a> ## HS -<a href="#l143" class="line" id="l143"> 143</a> -<a href="#l144" class="line" id="l144"> 144</a> [HS](https://github.com/Samdal/hs) is an OpenGL wrapper. It simplifies resource creation and usage. -<a href="#l145" class="line" id="l145"> 145</a> -<a href="#l146" class="line" id="l146"> 146</a> I wanted to try making a library while following along [Learn OpenGL](https://learnopengl.com/). -<a href="#l147" class="line" id="l147"> 147</a> The project remains incomplete, and I never made anything proper with it. -<a href="#l148" class="line" id="l148"> 148</a> -<a href="#l149" class="line" id="l149"> 149</a>  -<a href="#l150" class="line" id="l150"> 150</a> {: style="text-align: center;"} -<a href="#l151" class="line" id="l151"> 151</a> -<a href="#l152" class="line" id="l152"> 152</a> -<a href="#l153" class="line" id="l153"> 153</a> ## Anders Tale (C version) -<a href="#l154" class="line" id="l154"> 154</a> -<a href="#l155" class="line" id="l155"> 155</a> I figured I could use [HS](#hs) to make something, and re-making Anders Tale seemed fun. It would be a pleasant way to have some focus. -<a href="#l156" class="line" id="l156"> 156</a> -<a href="#l157" class="line" id="l157"> 157</a> The notable part about the game was its simplistic tile-map system and an AABB collision. It supported "allowed-areas". Instead of mapping each wall as large collision shapes, they pushed the player inside a room. -<a href="#l158" class="line" id="l158"> 158</a> -<a href="#l159" class="line" id="l159"> 159</a> I never got far with this version of Anders Tale. -<a href="#l160" class="line" id="l160"> 160</a> -<a href="#l161" class="line" id="l161"> 161</a> ## Anders Tale Room editor -<a href="#l162" class="line" id="l162"> 162</a> -<a href="#l163" class="line" id="l163"> 163</a> [Anders Tale Room editor](https://github.com/Samdal/anders_tale_room_editor) was the tile-map editor for the C variant of Anders Tale. -<a href="#l164" class="line" id="l164"> 164</a> -<a href="#l165" class="line" id="l165"> 165</a> It was another project made with [HS](#HS), and it used [Nuklear](https://github.com/Immediate-Mode-UI/Nuklear) for the Gui. -<a href="#l166" class="line" id="l166"> 166</a> -<a href="#l167" class="line" id="l167"> 167</a> This project was my first real introduction to serialization and de-serialization, and I made a custom file format for the tile maps. -<a href="#l168" class="line" id="l168"> 168</a> I added font rendering through STB TrueType, which taught me a lot. -<a href="#l169" class="line" id="l169"> 169</a> -<a href="#l170" class="line" id="l170"> 170</a>  -<a href="#l171" class="line" id="l171"> 171</a> {: style="text-align: center;"} -<a href="#l172" class="line" id="l172"> 172</a> -<a href="#l173" class="line" id="l173"> 173</a> ## Ghostbusters Costume -<a href="#l174" class="line" id="l174"> 174</a> -<a href="#l175" class="line" id="l175"> 175</a> The [Ghostbusters Costume](https://github.com/Samdal/ProtonPack) is another undertaking with my friend from primary school. The proton pack is the main project we've had together. -<a href="#l176" class="line" id="l176"> 176</a> -<a href="#l177" class="line" id="l177"> 177</a> We are both avid Ghostbusters fans and the earliest dreams of our very own costume came during fourth grade. -<a href="#l178" class="line" id="l178"> 178</a> We made many revisions over the years. Naturally, all the early attempts were awful, as we were very young. -<a href="#l179" class="line" id="l179"> 179</a> -<a href="#l180" class="line" id="l180"> 180</a> As with the [Rick & Morty Portal Gun](#rick--morty-portal-gun), my friend did most of the prop design, and I did the electronics. -<a href="#l181" class="line" id="l181"> 181</a> -<a href="#l182" class="line" id="l182"> 182</a> -<a href="#l183" class="line" id="l183"> 183</a> The final variant used an Arduino mega connected to an mp3 player, neopixels, LEDs of different colors, an audio amplifier, a lithium drill battery, both a 12V and 5V supply, a vibrator motor in the gun, a bunch of buttons and switches and a rotary encoder. -<a href="#l184" class="line" id="l184"> 184</a> The realistic exterior, lights, sounds, and effects made it even more awesome and movie-accurate than I ever imagined. -<a href="#l185" class="line" id="l185"> 185</a> -<a href="#l186" class="line" id="l186"> 186</a>  -<a href="#l187" class="line" id="l187"> 187</a>  -<a href="#l188" class="line" id="l188"> 188</a>  -<a href="#l189" class="line" id="l189"> 189</a> {: style="text-align: center;"} -<a href="#l190" class="line" id="l190"> 190</a> -<a href="#l191" class="line" id="l191"> 191</a> ## SE -<a href="#l192" class="line" id="l192"> 192</a> -<a href="#l193" class="line" id="l193"> 193</a> [SE](https://github.com/Samdal/se), the *Simple Editor* -<a href="#l194" class="line" id="l194"> 194</a> -<a href="#l195" class="line" id="l195"> 195</a> SE was a decently sized project I predominantly worked on during December 2021 and early 2022. -<a href="#l196" class="line" id="l196"> 196</a> -<a href="#l197" class="line" id="l197"> 197</a> My editor was (and still is) Doom Emacs. Emacs is extremely slow, and I envisioned an editor with features I used without the bloat. -<a href="#l198" class="line" id="l198"> 198</a> -<a href="#l199" class="line" id="l199"> 199</a> I started with the code base of [ST, the Suckless Terminal](https://st.suckless.org/). Ripping out the terminal part left me with a minimal X11/Xft monospace text renderer. -<a href="#l200" class="line" id="l200"> 200</a> -<a href="#l201" class="line" id="l201"> 201</a> SE continued in a simple and Suckless fashion. You configured it by changing `config.c`. It had a callback interface where you registered extensions without inserting code into core files. -<a href="#l202" class="line" id="l202"> 202</a> -<a href="#l203" class="line" id="l203"> 203</a> The syntax highlighting and auto-indents employed a custom state-machine-like rule system. -<a href="#l204" class="line" id="l204"> 204</a> -<a href="#l205" class="line" id="l205"> 205</a> I implemented a reasonably complete Vim support. It was a big undertaking, but I got quite far. The main missing features were only macros and markers. -<a href="#l206" class="line" id="l206"> 206</a> -<a href="#l207" class="line" id="l207"> 207</a>  -<a href="#l208" class="line" id="l208"> 208</a>  -<a href="#l209" class="line" id="l209"> 209</a>  -<a href="#l210" class="line" id="l210"> 210</a> {: style="text-align: center;"} -<a href="#l211" class="line" id="l211"> 211</a> -<a href="#l212" class="line" id="l212"> 212</a> ## ArduinoNative -<a href="#l213" class="line" id="l213"> 213</a> -<a href="#l214" class="line" id="l214"> 214</a> [ArduinoNative](https://github.com/Samdal/ArduinoNative) was a header-only C++ project implementing the same top-level features as the Arduino library. -<a href="#l215" class="line" id="l215"> 215</a> It used the console to expose a virtual board interface and monitoring functionality. -<a href="#l216" class="line" id="l216"> 216</a> -<a href="#l217" class="line" id="l217"> 217</a> ArduinoNative is probably the most usable of my projects. The code isn't that great, but the interface is clean. -<a href="#l218" class="line" id="l218"> 218</a> Compared to other ways of simulating an Arduino, using ArduinoNative is very simple. -<a href="#l219" class="line" id="l219"> 219</a> -<a href="#l220" class="line" id="l220"> 220</a> Serial and AnalogRead Example -<a href="#l221" class="line" id="l221"> 221</a> ```c -<a href="#l222" class="line" id="l222"> 222</a> #define AN_BOARD_NANO -<a href="#l223" class="line" id="l223"> 223</a> #define AN_IMPL -<a href="#l224" class="line" id="l224"> 224</a> #include "ArduinoNative.hpp" -<a href="#l225" class="line" id="l225"> 225</a> -<a href="#l226" class="line" id="l226"> 226</a> int analogpin = A7; -<a href="#l227" class="line" id="l227"> 227</a> -<a href="#l228" class="line" id="l228"> 228</a> void setup() -<a href="#l229" class="line" id="l229"> 229</a> { -<a href="#l230" class="line" id="l230"> 230</a> Serial.begin(9600); -<a href="#l231" class="line" id="l231"> 231</a> pinMode(analogpin, INPUT); -<a href="#l232" class="line" id="l232"> 232</a> } -<a href="#l233" class="line" id="l233"> 233</a> -<a href="#l234" class="line" id="l234"> 234</a> void loop() -<a href="#l235" class="line" id="l235"> 235</a> { -<a href="#l236" class="line" id="l236"> 236</a> #ifdef ArduinoNative -<a href="#l237" class="line" id="l237"> 237</a> an_request_voltage(analogpin); -<a href="#l238" class="line" id="l238"> 238</a> #endif -<a href="#l239" class="line" id="l239"> 239</a> unsigned val = analogRead(analogpin); -<a href="#l240" class="line" id="l240"> 240</a> Serial.print("Read value "); -<a href="#l241" class="line" id="l241"> 241</a> Serial.println(val); -<a href="#l242" class="line" id="l242"> 242</a> float voltage = map(val, 0, 1023, 0.0, 5.0); -<a href="#l243" class="line" id="l243"> 243</a> Serial.print("Voltage on pin is: "); -<a href="#l244" class="line" id="l244"> 244</a> Serial.println(voltage, 2); -<a href="#l245" class="line" id="l245"> 245</a> delay(30); -<a href="#l246" class="line" id="l246"> 246</a> } -<a href="#l247" class="line" id="l247"> 247</a> ``` -<a href="#l248" class="line" id="l248"> 248</a> Output: -<a href="#l249" class="line" id="l249"> 249</a> ``` -<a href="#l250" class="line" id="l250"> 250</a> set voltage of pin 21 to: 3.2 -<a href="#l251" class="line" id="l251"> 251</a> Read value 654 -<a href="#l252" class="line" id="l252"> 252</a> Voltage on pin is: 3.20 -<a href="#l253" class="line" id="l253"> 253</a> ... -<a href="#l254" class="line" id="l254"> 254</a> ``` -<a href="#l255" class="line" id="l255"> 255</a> -<a href="#l256" class="line" id="l256"> 256</a> ## nisse -<a href="#l257" class="line" id="l257"> 257</a> -<a href="#l258" class="line" id="l258"> 258</a> [nisse](https://github.com/Samdal/nisse), the ***n**ot **i**ntricate **s**erialised **s** **e**xpressions* -<a href="#l259" class="line" id="l259"> 259</a> ``` -<a href="#l260" class="line" id="l260"> 260</a> nisse __ -<a href="#l261" class="line" id="l261"> 261</a> .-' | -<a href="#l262" class="line" id="l262"> 262</a> / <\| -<a href="#l263" class="line" id="l263"> 263</a> / \' -<a href="#l264" class="line" id="l264"> 264</a> |_.- o-o -<a href="#l265" class="line" id="l265"> 265</a> / C -._)\ -<a href="#l266" class="line" id="l266"> 266</a> /', | -<a href="#l267" class="line" id="l267"> 267</a> | `-,_,__,' -<a href="#l268" class="line" id="l268"> 268</a> (,,)====[_]=| -<a href="#l269" class="line" id="l269"> 269</a> '. ____/ -<a href="#l270" class="line" id="l270"> 270</a> | -|-|_ -<a href="#l271" class="line" id="l271"> 271</a> |____)_) -<a href="#l272" class="line" id="l272"> 272</a> ``` -<a href="#l273" class="line" id="l273"> 273</a> -<a href="#l274" class="line" id="l274"> 274</a> An evening in November of 2022 inspired me to make a simpler version of JSON. It's essentially an S expression parser with some helper macros. -<a href="#l275" class="line" id="l275"> 275</a> Like my previous parsing projects, it's made raw without a tokenizer. -<a href="#l276" class="line" id="l276"> 276</a> It doesn't support escaped characters, which is probably the primary feature it lacks. -<a href="#l277" class="line" id="l277"> 277</a> -<a href="#l278" class="line" id="l278"> 278</a> I have considered creating a new version with slice-based strings, an arena allocator, and a tokenizer. -<a href="#l279" class="line" id="l279"> 279</a> It would be a good exercise. -<a href="#l280" class="line" id="l280"> 280</a> -<a href="#l281" class="line" id="l281"> 281</a> ## gs_ddt -<a href="#l282" class="line" id="l282"> 282</a> -<a href="#l283" class="line" id="l283"> 283</a> [Gunsligner Drop-Down Terminal](https://github.com/Samdal/gs_ddt) was a simple debug terminal I decided to write when I started college. -<a href="#l284" class="line" id="l284"> 284</a> It allowed you to invoke custom commands inside your game. It's been a helpful tool, and I've had it in all my Gunslinger projects since. -<a href="#l285" class="line" id="l285"> 285</a> -<a href="#l286" class="line" id="l286"> 286</a> I made an [example program](https://github.com/Samdal/gs_ddt_ex) for it. -<a href="#l287" class="line" id="l287"> 287</a> -<a href="#l288" class="line" id="l288"> 288</a>  -<a href="#l289" class="line" id="l289"> 289</a> {: style="text-align: center;"} -<a href="#l290" class="line" id="l290"> 290</a> -<a href="#l291" class="line" id="l291"> 291</a> ## gs_avdecode -<a href="#l292" class="line" id="l292"> 292</a> -<a href="#l293" class="line" id="l293"> 293</a> [gs_avdecode](https://github.com/Samdal/gs_avdecode) was a media decoder for playing videos in Gunslinger using the avcodec API from ffmpeg. -<a href="#l294" class="line" id="l294"> 294</a> -<a href="#l295" class="line" id="l295"> 295</a> I also created an [example program](https://github.com/Samdal/gs_avdecode_ex) for this utility. -<a href="#l296" class="line" id="l296"> 296</a> -<a href="#l297" class="line" id="l297"> 297</a> The latest revision of the program isn't the one GitHub, as I decided to keep it private (it's a bit more integrated into work code now). -<a href="#l298" class="line" id="l298"> 298</a> -<a href="#l299" class="line" id="l299"> 299</a> I still think `gs_avdecode` is an alright reference if you wish to learn avcodec. -<a href="#l300" class="line" id="l300"> 300</a> -<a href="#l301" class="line" id="l301"> 301</a> ## gs_bucket_array -<a href="#l302" class="line" id="l302"> 302</a> [gs_bucket_array](https://github.com/Samdal/gs_bucket_array) was a generic data structure I made for Gunslinger. -<a href="#l303" class="line" id="l303"> 303</a> -<a href="#l304" class="line" id="l304"> 304</a> It operates similarly to `std::deque`. It's a dynamic array that contains pointers to *chunks* or *buckets*. The array grows by appending a fixed-size bucket, which gives a good compromise between size and insert/delete/iterate times while retaining pointer stability. -<a href="#l305" class="line" id="l305"> 305</a> -<a href="#l306" class="line" id="l306"> 306</a> The implementation additionally came with an optional packed free-list. -<a href="#l307" class="line" id="l307"> 307</a> -<a href="#l308" class="line" id="l308"> 308</a> I don't use this project anymore. I would rather use a linked list or static allocation. -<a href="#l309" class="line" id="l309"> 309</a> -<a href="#l310" class="line" id="l310"> 310</a> ```c -<a href="#l311" class="line" id="l311"> 311</a> gs_bucket_array(float) ba = gs_bucket_array_new(float, 100); // Bucket array with internal 'float' data, where each bucket is 100 floats -<a href="#l312" class="line" id="l312"> 312</a> gs_bucket_array_reserve(ba, 2); // Reserves 2 buckets -<a href="#l313" class="line" id="l313"> 313</a> gs_bucket_array_push(ba, 3.145f); // Pushes 3.145 onto the end of the bucket array -<a href="#l314" class="line" id="l314"> 314</a> float* val_p = gs_bucket_array_getp(ba, index); // Returns a pointer to your data -<a href="#l315" class="line" id="l315"> 315</a> float val = gs_bucket_array_get(ba, index); // Dereferences your data as well -<a href="#l316" class="line" id="l316"> 316</a> -<a href="#l317" class="line" id="l317"> 317</a> uint32_t bs = gs_bucket_array_bucket_size(ba) // Returns initialized bucket size -<a href="#l318" class="line" id="l318"> 318</a> uint32_t bc = gs_bucket_array_bucket_count(ba) // Returns the amount of buckets allocated -<a href="#l319" class="line" id="l319"> 319</a> uint32_t ba_cap = gs_bucket_array_capacity(ba) // Returns bucket_size * bucket_count -<a href="#l320" class="line" id="l320"> 320</a> uint32_t ba_size = gs_bucket_array_size(ba) // returns index+1 of the last element -<a href="#l321" class="line" id="l321"> 321</a> gs_bucket_array_free(ba) // Free's the entire array, make sure your elements are free'd first -<a href="#l322" class="line" id="l322"> 322</a> ``` -<a href="#l323" class="line" id="l323"> 323</a> -<a href="#l324" class="line" id="l324"> 324</a> ## awaC -<a href="#l325" class="line" id="l325"> 325</a> -<a href="#l326" class="line" id="l326"> 326</a> [AWA5.0](https://github.com/TempTempai/AWA5.0) is a stack-based [esoteric programming language](https://en.wikipedia.org/wiki/Esoteric_programming_language) where you manually write the bits with `wa` or `awa`. -<a href="#l327" class="line" id="l327"> 327</a> -<a href="#l328" class="line" id="l328"> 328</a>  -<a href="#l329" class="line" id="l329"> 329</a> {: style="text-align: center;"} -<a href="#l330" class="line" id="l330"> 330</a> -<a href="#l331" class="line" id="l331"> 331</a> JavaScript was the chosen language for the original implementation. Others have also made their interpreters and compilers for it. I made mine in C and called it [awaC](https://github.com/Samdal/awaC?tab=readme-ov-file) -<a href="#l332" class="line" id="l332"> 332</a> -<a href="#l333" class="line" id="l333"> 333</a> I originally planned to use awaC as an excuse to make a graphical debugger, but I never got to that part. -<a href="#l334" class="line" id="l334"> 334</a> The interpreter only provided debug printing of the stack and program counter. -<a href="#l335" class="line" id="l335"> 335</a> -<a href="#l336" class="line" id="l336"> 336</a> After watching a Tsoding stream about making a web server in the flat assembler, I knew I wanted to do that with AWA5.0. All I needed was to extend the instruction set with `syscall`, and painstakingly write over a kilobyte of `awa awawaw awawaw awawa`. -<a href="#l337" class="line" id="l337"> 337</a> The website I ended up hosting was a JavaScript interpreter of AWA5.0. -<a href="#l338" class="line" id="l338"> 338</a> -<a href="#l339" class="line" id="l339"> 339</a>  -<a href="#l340" class="line" id="l340"> 340</a> {: style="text-align: center;"} -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/_posts/2025-02-28-build-sh.md.html b/git/n-channel/file/_posts/2025-02-28-build-sh.md.html @@ -1,186 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>2025-02-28-build-sh.md - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../"><img src="../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../log.html">Log</a> | <a href="../../files.html">Files</a> | <a href="../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> 2025-02-28-build-sh.md (4957B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> --- -<a href="#l2" class="line" id="l2"> 2</a> layout: post -<a href="#l3" class="line" id="l3"> 3</a> title: "Compiling C on Unix: build.sh" -<a href="#l4" class="line" id="l4"> 4</a> description: The no bullshit way to compile C (on Unix) -<a href="#l5" class="line" id="l5"> 5</a> comments: true -<a href="#l6" class="line" id="l6"> 6</a> tags: [misc, programming, C] -<a href="#l7" class="line" id="l7"> 7</a> --- -<a href="#l8" class="line" id="l8"> 8</a> -<a href="#l9" class="line" id="l9"> 9</a> ## What do I want from a build system? -<a href="#l10" class="line" id="l10"> 10</a> -<a href="#l11" class="line" id="l11"> 11</a> I want a build system to be: -<a href="#l12" class="line" id="l12"> 12</a> - Easy to maintain -<a href="#l13" class="line" id="l13"> 13</a> - Minimal dependencies -<a href="#l14" class="line" id="l14"> 14</a> - Configurable -<a href="#l15" class="line" id="l15"> 15</a> -<a href="#l16" class="line" id="l16"> 16</a> And optionally: -<a href="#l17" class="line" id="l17"> 17</a> - multi-threaded / incremental -<a href="#l18" class="line" id="l18"> 18</a> -<a href="#l19" class="line" id="l19"> 19</a> ## The unity build -<a href="#l20" class="line" id="l20"> 20</a> -<a href="#l21" class="line" id="l21"> 21</a> Unity builds are not incremental. They work by `#include`-ing all source code into one file and compiling it as a single translation unit. -<a href="#l22" class="line" id="l22"> 22</a> -<a href="#l23" class="line" id="l23"> 23</a> ```c -<a href="#l24" class="line" id="l24"> 24</a> // unity.c -<a href="#l25" class="line" id="l25"> 25</a> #include "utils.h" -<a href="#l26" class="line" id="l26"> 26</a> #include "utils.c" -<a href="#l27" class="line" id="l27"> 27</a> #include "fs.h" -<a href="#l28" class="line" id="l28"> 28</a> #include "fs.c" -<a href="#l29" class="line" id="l29"> 29</a> #include "main.c" -<a href="#l30" class="line" id="l30"> 30</a> ``` -<a href="#l31" class="line" id="l31"> 31</a> ```sh -<a href="#l32" class="line" id="l32"> 32</a> #!/bin/bash -<a href="#l33" class="line" id="l33"> 33</a> -<a href="#l34" class="line" id="l34"> 34</a> CC="clang" -<a href="#l35" class="line" id="l35"> 35</a> output=(./bin/App) -<a href="#l36" class="line" id="l36"> 36</a> sources=(./src/unity.c) -<a href="#l37" class="line" id="l37"> 37</a> compiler_flags=(-Wall -pedantic -std=c99 -Isrc/) -<a href="#l38" class="line" id="l38"> 38</a> linker_flags=(-fuse-ld=mold) -<a href="#l39" class="line" id="l39"> 39</a> -<a href="#l40" class="line" id="l40"> 40</a> ${CC} ${compiler_flags[*]} ${sources[*]} ${linker_flags[*]} -o ${output} -<a href="#l41" class="line" id="l41"> 41</a> ``` -<a href="#l42" class="line" id="l42"> 42</a> -<a href="#l43" class="line" id="l43"> 43</a> If all your exposure is from "real build systems," you might find this baffling. -<a href="#l44" class="line" id="l44"> 44</a> My advice is to form your own opinions—don't accept the gospel of others without a second thought. -<a href="#l45" class="line" id="l45"> 45</a> -<a href="#l46" class="line" id="l46"> 46</a> Unity builds have numerous benefits and should be the go-to for shipping. Builds of this kind are easy to port and give the compiler more opportunities for optimization. It is also by far the simplest method. -<a href="#l47" class="line" id="l47"> 47</a> -<a href="#l48" class="line" id="l48"> 48</a> Structuring your program with the knowledge that it will use a unity build lets us do some tricks. Source files aren't compiled separately, and we control their inclusion order. Exploiting this removes messy `#include` statements. You can even disregard header guards if you dare. -<a href="#l49" class="line" id="l49"> 49</a> -<a href="#l50" class="line" id="l50"> 50</a> The benefit is less clutter in your header and source files. Less includes also means less work for the compiler. In some cases, unity builds have shorter clean-build times. -<a href="#l51" class="line" id="l51"> 51</a> Doing this will make LSPs or editor linting less effective, but that's not a big deal. The only real problem is symbol collisions inside the single translation unit, which may or may not be trivial. -<a href="#l52" class="line" id="l52"> 52</a> -<a href="#l53" class="line" id="l53"> 53</a> ## The incremental build -<a href="#l54" class="line" id="l54"> 54</a> -<a href="#l55" class="line" id="l55"> 55</a> Although unity builds provide many benefits, you may want to do an incremental build if your project is "too complex." -<a href="#l56" class="line" id="l56"> 56</a> -<a href="#l57" class="line" id="l57"> 57</a> Before we start, if your project is too complex, your first attempt should be to fix the core problem. Incremental builds are not an excuse to spread source code across hundreds of files and to create cyclic dependencies. -<a href="#l58" class="line" id="l58"> 58</a> -<a href="#l59" class="line" id="l59"> 59</a> With that out of the way, here is a `build.sh` for multiple source files built in parallel. -<a href="#l60" class="line" id="l60"> 60</a> ```sh -<a href="#l61" class="line" id="l61"> 61</a> #!/bin/bash -<a href="#l62" class="line" id="l62"> 62</a> set -e -<a href="#l63" class="line" id="l63"> 63</a> -<a href="#l64" class="line" id="l64"> 64</a> CC="ccache clang" -<a href="#l65" class="line" id="l65"> 65</a> output=(./bin/App) -<a href="#l66" class="line" id="l66"> 66</a> sources=(src/main.c src/fs.c) -<a href="#l67" class="line" id="l67"> 67</a> compiler_flags=(-Wall -Wextra -pedantic -std=c99 -Isrc/) -<a href="#l68" class="line" id="l68"> 68</a> linker_flags=(-fuse-ld=mold) -<a href="#l69" class="line" id="l69"> 69</a> objects=() -<a href="#l70" class="line" id="l70"> 70</a> -<a href="#l71" class="line" id="l71"> 71</a> for s in "${sources[@]}"; do -<a href="#l72" class="line" id="l72"> 72</a> mkdir -p $(dirname ".obj/${s}.o") -<a href="#l73" class="line" id="l73"> 73</a> ${CC} -c ${compiler_flags[*]} ${s} -o .obj/${s}.o & -<a href="#l74" class="line" id="l74"> 74</a> objects+=".obj/${s}.o " -<a href="#l75" class="line" id="l75"> 75</a> done -<a href="#l76" class="line" id="l76"> 76</a> -<a href="#l77" class="line" id="l77"> 77</a> wait $BACK_PID # wait for compile to finish -<a href="#l78" class="line" id="l78"> 78</a> ${CC} ${linker_flags[*]} ${objects[*]} -o ${output} -<a href="#l79" class="line" id="l79"> 79</a> ``` -<a href="#l80" class="line" id="l80"> 80</a> -<a href="#l81" class="line" id="l81"> 81</a> On top of sometimes being faster due to multi-threading, incremental builds let us leverage `ccache` to prevent recompiling unchanged code. Since we still have to re-link, using `mold` as our linker will further increase speeds. -<a href="#l82" class="line" id="l82"> 82</a> -<a href="#l83" class="line" id="l83"> 83</a> -<a href="#l84" class="line" id="l84"> 84</a> ## Adding complexity -<a href="#l85" class="line" id="l85"> 85</a> -<a href="#l86" class="line" id="l86"> 86</a> Let's build upon the incremental build by adding the following: -<a href="#l87" class="line" id="l87"> 87</a> - Ensure `./bin/` is created -<a href="#l88" class="line" id="l88"> 88</a> - Automatically find source files -<a href="#l89" class="line" id="l89"> 89</a> - More compiler flags -<a href="#l90" class="line" id="l90"> 90</a> - User-specific compiler flags -<a href="#l91" class="line" id="l91"> 91</a> - Metaprogram or custom pre-processor -<a href="#l92" class="line" id="l92"> 92</a> - Echo state of the program -<a href="#l93" class="line" id="l93"> 93</a> -<a href="#l94" class="line" id="l94"> 94</a> ```sh -<a href="#l95" class="line" id="l95"> 95</a> #!/bin/bash -<a href="#l96" class="line" id="l96"> 96</a> set -e -<a href="#l97" class="line" id="l97"> 97</a> -<a href="#l98" class="line" id="l98"> 98</a> ### find and filter sources ### -<a href="#l99" class="line" id="l99"> 99</a> -<a href="#l100" class="line" id="l100"> 100</a> mapfile -t sources < <(find -name *.c | sed\ -<a href="#l101" class="line" id="l101"> 101</a> -e "\|./game/config.*|d" \ -<a href="#l102" class="line" id="l102"> 102</a> -e "\|./gs/.*|d" \ -<a href="#l103" class="line" id="l103"> 103</a> -e "\|.*impl.*|d" \ -<a href="#l104" class="line" id="l104"> 104</a> -e "\|.*third_party.*|d" \ -<a href="#l105" class="line" id="l105"> 105</a> -e "\|./codegen/.*|d" \ -<a href="#l106" class="line" id="l106"> 106</a> ) -<a href="#l107" class="line" id="l107"> 107</a> -<a href="#l108" class="line" id="l108"> 108</a> ### flags ### -<a href="#l109" class="line" id="l109"> 109</a> -<a href="#l110" class="line" id="l110"> 110</a> CC="ccache clang" -<a href="#l111" class="line" id="l111"> 111</a> output=(./bin/App) -<a href="#l112" class="line" id="l112"> 112</a> compiler_flags=( -<a href="#l113" class="line" id="l113"> 113</a> -O0 -march=native -ffast-math -<a href="#l114" class="line" id="l114"> 114</a> -I./game/source -<a href="#l115" class="line" id="l115"> 115</a> -Wall -Wno-missing-braces -Wno-unused-function -Wno-unused-variable -Wno-unused-but-set-variable -Wno-initializer-overrides -Wfatal-errors -<a href="#l116" class="line" id="l116"> 116</a> -g -<a href="#l117" class="line" id="l117"> 117</a> ) -<a href="#l118" class="line" id="l118"> 118</a> linker_flags=( -<a href="#l119" class="line" id="l119"> 119</a> -fuse-ld=mold -ldl -lX11 -lXi -lm -lpthread -lavformat -lavcodec -lswscale -lavutil -ludev -lomp -lz -lcurl -luv -lssl -lcrypto -<a href="#l120" class="line" id="l120"> 120</a> ) -<a href="#l121" class="line" id="l121"> 121</a> common_flags=( -<a href="#l122" class="line" id="l122"> 122</a> -pthread -fopenmp -<a href="#l123" class="line" id="l123"> 123</a> ) -<a href="#l124" class="line" id="l124"> 124</a> if [ $(whoami) = "halvard" ]; then -<a href="#l125" class="line" id="l125"> 125</a> common_flags+=( -<a href="#l126" class="line" id="l126"> 126</a> -fsanitize=address,float-divide-by-zero,float-cast-overflow -fno-sanitize=null,alignment -fno-sanitize-recover=all -fno-omit-frame-pointer -<a href="#l127" class="line" id="l127"> 127</a> ) -<a href="#l128" class="line" id="l128"> 128</a> else -<a href="#l129" class="line" id="l129"> 129</a> # ... -<a href="#l130" class="line" id="l130"> 130</a> fi -<a href="#l131" class="line" id="l131"> 131</a> -<a href="#l132" class="line" id="l132"> 132</a> mkdir -p $(dirname "${output}") -<a href="#l133" class="line" id="l133"> 133</a> -<a href="#l134" class="line" id="l134"> 134</a> ### Compile and run metaprogram ### -<a href="#l135" class="line" id="l135"> 135</a> -<a href="#l136" class="line" id="l136"> 136</a> if [ ! -f "./bin/codegen" ] || [ "./codegen/codegen.c" -nt "./bin/codegen" ]; then -<a href="#l137" class="line" id="l137"> 137</a> ${CC} -g ./codegen/codegen.c -fuse-ld=mold -o ./bin/codegen -<a href="#l138" class="line" id="l138"> 138</a> fi -<a href="#l139" class="line" id="l139"> 139</a> -<a href="#l140" class="line" id="l140"> 140</a> ./bin/codegen -<a href="#l141" class="line" id="l141"> 141</a> -<a href="#l142" class="line" id="l142"> 142</a> ### compile program ### -<a href="#l143" class="line" id="l143"> 143</a> -<a href="#l144" class="line" id="l144"> 144</a> objects=() -<a href="#l145" class="line" id="l145"> 145</a> -<a href="#l146" class="line" id="l146"> 146</a> for i in "${!sources[@]}"; do -<a href="#l147" class="line" id="l147"> 147</a> #echo "adding source file ${sources[i]}..." -<a href="#l148" class="line" id="l148"> 148</a> mkdir -p $(dirname ".obj/${sources[i]}.o") -<a href="#l149" class="line" id="l149"> 149</a> ${CC} -c ${compiler_flags[*]} ${common_flags[*]} ${sources[i]} -o .obj/${sources[i]}.o & -<a href="#l150" class="line" id="l150"> 150</a> objects+=".obj/${sources[i]}.o " -<a href="#l151" class="line" id="l151"> 151</a> done -<a href="#l152" class="line" id="l152"> 152</a> -<a href="#l153" class="line" id="l153"> 153</a> echo "Compiling..." -<a href="#l154" class="line" id="l154"> 154</a> wait $BACK_PID # wait for compile to finish -<a href="#l155" class="line" id="l155"> 155</a> -<a href="#l156" class="line" id="l156"> 156</a> ### link program ### -<a href="#l157" class="line" id="l157"> 157</a> -<a href="#l158" class="line" id="l158"> 158</a> echo "Linking..." -<a href="#l159" class="line" id="l159"> 159</a> ${CC} ${linker_flags[*]} ${common_flags[*]} ${objects[*]} -o ${output} -<a href="#l160" class="line" id="l160"> 160</a> echo "Done!" -<a href="#l161" class="line" id="l161"> 161</a> ``` -<a href="#l162" class="line" id="l162"> 162</a> -<a href="#l163" class="line" id="l163"> 163</a> -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/_posts/2025-02-28-soldering-tutorial.md.html b/git/n-channel/file/_posts/2025-02-28-soldering-tutorial.md.html @@ -1,106 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>2025-02-28-soldering-tutorial.md - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../"><img src="../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../log.html">Log</a> | <a href="../../files.html">Files</a> | <a href="../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> 2025-02-28-soldering-tutorial.md (3089B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> --- -<a href="#l2" class="line" id="l2"> 2</a> layout: post -<a href="#l3" class="line" id="l3"> 3</a> title: "How to Solder [Quick Tutorial]" -<a href="#l4" class="line" id="l4"> 4</a> description: Quick simple soldering tutorial -<a href="#l5" class="line" id="l5"> 5</a> comments: true -<a href="#l6" class="line" id="l6"> 6</a> tags: [writing, tutorial, electroincs] -<a href="#l7" class="line" id="l7"> 7</a> --- -<a href="#l8" class="line" id="l8"> 8</a> -<a href="#l9" class="line" id="l9"> 9</a> ## 1. Equipment -<a href="#l10" class="line" id="l10"> 10</a> -<a href="#l11" class="line" id="l11"> 11</a> -<a href="#l12" class="line" id="l12"> 12</a> ### Essential Equipment -<a href="#l13" class="line" id="l13"> 13</a> -<a href="#l14" class="line" id="l14"> 14</a> -<a href="#l15" class="line" id="l15"> 15</a> \ -<a href="#l16" class="line" id="l16"> 16</a> Soldering Iron\ -<a href="#l17" class="line" id="l17"> 17</a> Solder -<a href="#l18" class="line" id="l18"> 18</a> {: style="text-align: center;"} -<a href="#l19" class="line" id="l19"> 19</a> -<a href="#l20" class="line" id="l20"> 20</a> *(A temperature-controlled soldering station is better, but the non-regulated ones work fine)* -<a href="#l21" class="line" id="l21"> 21</a> {: style="text-align: center;"} -<a href="#l22" class="line" id="l22"> 22</a> -<a href="#l23" class="line" id="l23"> 23</a> ### Recommended Equipment -<a href="#l24" class="line" id="l24"> 24</a> -<a href="#l25" class="line" id="l25"> 25</a> -<a href="#l26" class="line" id="l26"> 26</a> \ -<a href="#l27" class="line" id="l27"> 27</a> Tweezers\ -<a href="#l28" class="line" id="l28"> 28</a> No-clean Flux\ -<a href="#l29" class="line" id="l29"> 29</a> Solder Sucker\ -<a href="#l30" class="line" id="l30"> 30</a> Helping Hands\ -<a href="#l31" class="line" id="l31"> 31</a> Brass Wool\ -<a href="#l32" class="line" id="l32"> 32</a> Solder Wick -<a href="#l33" class="line" id="l33"> 33</a> {: style="text-align: center;"} -<a href="#l34" class="line" id="l34"> 34</a> -<a href="#l35" class="line" id="l35"> 35</a> -<a href="#l36" class="line" id="l36"> 36</a> ## 2. Don't put solder on the iron itself -<a href="#l37" class="line" id="l37"> 37</a> -<a href="#l38" class="line" id="l38"> 38</a> **Flux is essential for soldering**. It cleans up surface oxide. Without it, your solder joints will be terrible. -<a href="#l39" class="line" id="l39"> 39</a> The solder has flux inside it. Putting it on the iron itself makes the flux evaporate. -<a href="#l40" class="line" id="l40"> 40</a> To avoid this, heat the joint from one angle and apply the solder from another. -<a href="#l41" class="line" id="l41"> 41</a> -<a href="#l42" class="line" id="l42"> 42</a>  -<a href="#l43" class="line" id="l43"> 43</a> {: style="text-align: center;"} -<a href="#l44" class="line" id="l44"> 44</a> -<a href="#l45" class="line" id="l45"> 45</a>  -<a href="#l46" class="line" id="l46"> 46</a>  -<a href="#l47" class="line" id="l47"> 47</a> {: style="text-align: center;"} -<a href="#l48" class="line" id="l48"> 48</a> -<a href="#l49" class="line" id="l49"> 49</a> Look, it's a perfect joint! -<a href="#l50" class="line" id="l50"> 50</a> -<a href="#l51" class="line" id="l51"> 51</a> Occasionally, it's hard or impossible to apply solder on the joint separately. In that case, you need to supply the joint with extra flux, either with external flux or touching up the joint again later. -<a href="#l52" class="line" id="l52"> 52</a> -<a href="#l53" class="line" id="l53"> 53</a> If you have trouble heating the joint, apply a tiny amount of solder to the iron to help transfer heat. The liquid solder will increase the surface area and bond the iron and the joint. -<a href="#l54" class="line" id="l54"> 54</a> -<a href="#l55" class="line" id="l55"> 55</a> -<a href="#l56" class="line" id="l56"> 56</a> ## 3. Use plenty of flux -<a href="#l57" class="line" id="l57"> 57</a> -<a href="#l58" class="line" id="l58"> 58</a> You usually get away with only the flux in the solder for through-hole components. With surface-mount components, having external flux makes a daunting task become a breeze. -<a href="#l59" class="line" id="l59"> 59</a> Even so, don't be afraid of using flux on through-hole devices. It helps improve bad and tricky junctions. -<a href="#l60" class="line" id="l60"> 60</a> -<a href="#l61" class="line" id="l61"> 61</a>  -<a href="#l62" class="line" id="l62"> 62</a>  -<a href="#l63" class="line" id="l63"> 63</a>  -<a href="#l64" class="line" id="l64"> 64</a> {: style="text-align: center;"} -<a href="#l65" class="line" id="l65"> 65</a> -<a href="#l66" class="line" id="l66"> 66</a> -<a href="#l67" class="line" id="l67"> 67</a> ## 4. Extra tips -<a href="#l68" class="line" id="l68"> 68</a> -<a href="#l69" class="line" id="l69"> 69</a> - Assemble smaller components first. Doing so makes components more accessible and easier to hold in place. -<a href="#l70" class="line" id="l70"> 70</a> - Bending the leads on through-hole components makes the friction hold them in place. -<a href="#l71" class="line" id="l71"> 71</a> -<a href="#l72" class="line" id="l72"> 72</a>  -<a href="#l73" class="line" id="l73"> 73</a> {: style="text-align: center;"} -<a href="#l74" class="line" id="l74"> 74</a> -<a href="#l75" class="line" id="l75"> 75</a> - Joining two wires through a mechanical connection will make it stronger and easier to solder. -<a href="#l76" class="line" id="l76"> 76</a> -<a href="#l77" class="line" id="l77"> 77</a>  -<a href="#l78" class="line" id="l78"> 78</a> {: style="text-align: center;"} -<a href="#l79" class="line" id="l79"> 79</a> -<a href="#l80" class="line" id="l80"> 80</a> - When doing surface-mount components, it can be beneficial to poorly attach one or two legs of the IC. You can fix them later. -<a href="#l81" class="line" id="l81"> 81</a> - Isopropyl alcohol is good at cleaning flux residue. -<a href="#l82" class="line" id="l82"> 82</a> - Use brass wool or a damp cellulose sponge to clean the tip if it has too much solder on it. -<a href="#l83" class="line" id="l83"> 83</a> - To help perserve the tip, make sure the iron is coated in solder before you turn it off. -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/_posts/2025-03-02-productivity-through-simplicity.md.html b/git/n-channel/file/_posts/2025-03-02-productivity-through-simplicity.md.html @@ -1,101 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>2025-03-02-productivity-through-simplicity.md - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../"><img src="../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../log.html">Log</a> | <a href="../../files.html">Files</a> | <a href="../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> 2025-03-02-productivity-through-simplicity.md (4910B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> --- -<a href="#l2" class="line" id="l2"> 2</a> layout: post -<a href="#l3" class="line" id="l3"> 3</a> title: "Productivity through simplicity: How to be productive as programmer" -<a href="#l4" class="line" id="l4"> 4</a> description: How to be productive? Here are my tips for productivy, especially with programming. -<a href="#l5" class="line" id="l5"> 5</a> comments: true -<a href="#l6" class="line" id="l6"> 6</a> tags: [writing, programming] -<a href="#l7" class="line" id="l7"> 7</a> --- -<a href="#l8" class="line" id="l8"> 8</a> -<a href="#l9" class="line" id="l9"> 9</a> ## Preface -<a href="#l10" class="line" id="l10"> 10</a> -<a href="#l11" class="line" id="l11"> 11</a> Since I started programming, I have changed my setup many times. I began with Windows and Visual Studio. I have since then switched to Linux. -<a href="#l12" class="line" id="l12"> 12</a> -<a href="#l13" class="line" id="l13"> 13</a> This post will explore my productivity journey and why I believe I'm in a good spot. -<a href="#l14" class="line" id="l14"> 14</a> -<a href="#l15" class="line" id="l15"> 15</a> ## Monitors -<a href="#l16" class="line" id="l16"> 16</a> -<a href="#l17" class="line" id="l17"> 17</a> I wanted to get a second monitor when I first got into coding. -<a href="#l18" class="line" id="l18"> 18</a> I figured I could use it to have both Unreal Engine and Visual Studio open simultaneously. -<a href="#l19" class="line" id="l19"> 19</a> I could even watch a tutorial at the same time! -<a href="#l20" class="line" id="l20"> 20</a> -<a href="#l21" class="line" id="l21"> 21</a> In reality, this monitor predominantly spent its days displaying Discord. -<a href="#l22" class="line" id="l22"> 22</a> -<a href="#l23" class="line" id="l23"> 23</a> Down the line, I replaced my primary monitor while keeping the old one. Now I had three monitors: one for Discord, music/docs/browsing, and my main work. -<a href="#l24" class="line" id="l24"> 24</a> -<a href="#l25" class="line" id="l25"> 25</a> Eventually, I changed direction. I now only have a single monitor. -<a href="#l26" class="line" id="l26"> 26</a> -<a href="#l27" class="line" id="l27"> 27</a> Two features made me change my mind: workspaces and tiling window managers. -<a href="#l28" class="line" id="l28"> 28</a> -<a href="#l29" class="line" id="l29"> 29</a> ## Workspaces -<a href="#l30" class="line" id="l30"> 30</a> -<a href="#l31" class="line" id="l31"> 31</a> Instead of having tabs and minimizing windows, workspaces allow you to separate and sort windows manually. -<a href="#l32" class="line" id="l32"> 32</a> -<a href="#l33" class="line" id="l33"> 33</a> Most operating systems and window managers have workspace support. I prefer systems where switching between workspaces is a single keypress, which is one of the reasons I use [DWM](https://dwm.suckless.org/). -<a href="#l34" class="line" id="l34"> 34</a> Simple key binds make switching between workspaces nearly instant. It's almost faster than rotating your neck to look at a different monitor. -<a href="#l35" class="line" id="l35"> 35</a> -<a href="#l36" class="line" id="l36"> 36</a> Usually, I have a debugger and target program on workspace 1, an editor on workspace 2, a web browser on workspace 3, and Discord on workspace 4. The rest don't follow a convention. -<a href="#l37" class="line" id="l37"> 37</a> -<a href="#l38" class="line" id="l38"> 38</a> ## Tiling window managers -<a href="#l39" class="line" id="l39"> 39</a> -<a href="#l40" class="line" id="l40"> 40</a> Tiling window managers are over-hyped, and many people will preach about them for no reason. -<a href="#l41" class="line" id="l41"> 41</a> I'm not here to do that. On a small screen, I sometimes find tiling window managers cumbersome. -<a href="#l42" class="line" id="l42"> 42</a> -<a href="#l43" class="line" id="l43"> 43</a> I use a tiling WM because they make the good aspect of managing windows easier while making the bad ones harder. -<a href="#l44" class="line" id="l44"> 44</a> Floating WMs make it easy to hide away your window mess. Meanwhile, tiling WMs force you to move windows to a different workspace to prevent cluttering. -<a href="#l45" class="line" id="l45"> 45</a> -<a href="#l46" class="line" id="l46"> 46</a> I usually favor having one window per workspace, so it wouldn't be that different if I didn't use a tiling WM. The cases where I fully appreciate applications automatically showing up side by side are rare, but they do happen. -<a href="#l47" class="line" id="l47"> 47</a> -<a href="#l48" class="line" id="l48"> 48</a> ## Tabs are less helpful than you think -<a href="#l49" class="line" id="l49"> 49</a> -<a href="#l50" class="line" id="l50"> 50</a> Don't get me wrong. Tabs are occasionally pleasant to work with. However, they often do more harm than you realize. -<a href="#l51" class="line" id="l51"> 51</a> -<a href="#l52" class="line" id="l52"> 52</a> ### Editors -<a href="#l53" class="line" id="l53"> 53</a> The standard workflow for text editors is to have a tab for each open buffer at the top and a tree view on the side. I have found this inefficient. It is much better to be able to search for files with an arbitrary query. -<a href="#l54" class="line" id="l54"> 54</a> -<a href="#l55" class="line" id="l55"> 55</a> Browsing through the folder tree or tab bar for the correct file wastes time. I would rather input any substring of a document path and have my editor search all files in my current project. Numerous editors can also list and search through open buffers, removing the need for the tab bar entirely. -<a href="#l56" class="line" id="l56"> 56</a> -<a href="#l57" class="line" id="l57"> 57</a> ### Web browser -<a href="#l58" class="line" id="l58"> 58</a> On my desktop, I use the [I hate tabs extension](https://addons.mozilla.org/en-US/firefox/addon/i-hate-tabs-sdi-for-firefox/) in Firefox. It helps me stay focused and organized. When a tab has accomplished its task, I close it. If I need a tab for later, it will take up space as a reminder. -<a href="#l59" class="line" id="l59"> 59</a> -<a href="#l60" class="line" id="l60"> 60</a> Some tasks become slightly bothersome, like browsing electronics distributors, which often requires many tabs. Splitting away tabs doesn't work well on my laptop, as it doesn't have such a large screen. -<a href="#l61" class="line" id="l61"> 61</a> -<a href="#l62" class="line" id="l62"> 62</a> ## Become fluent in your editor -<a href="#l63" class="line" id="l63"> 63</a> -<a href="#l64" class="line" id="l64"> 64</a> I use Vim key binds. Vim works well, but I see others shooting away with other setups. If you have yet to learn how to do everyday operations fast in your editor, you should. Whether it's auto-complete, auto-indent, cutting a line, grepping, or navigating quickly with just your keyboard, it's all worth it. -<a href="#l65" class="line" id="l65"> 65</a> -<a href="#l66" class="line" id="l66"> 66</a> However, don't waste your life trying to become a "Vim enthusiast." Yes, learning key bindings takes time. Some people are rightfully daunted by switching to something like Vim, but you don't have to go that far. Learning to be fast in a more typical editor like VS Code will go a long way. -<a href="#l67" class="line" id="l67"> 67</a> -<a href="#l68" class="line" id="l68"> 68</a> -<a href="#l69" class="line" id="l69"> 69</a> ## Conclusion -<a href="#l70" class="line" id="l70"> 70</a> -<a href="#l71" class="line" id="l71"> 71</a> Find tools that suit you, and learn them well. I highly recommend exploring workspaces. Become as fluent as you can in the tools you end up using. Be self-conscious, and have a mindset where you strive toward higher efficiency. -<a href="#l72" class="line" id="l72"> 72</a> -<a href="#l73" class="line" id="l73"> 73</a> Simplicity over complexity. Tabs are less advantageous than you think, so don't overuse them. -<a href="#l74" class="line" id="l74"> 74</a> Opt for keyboard actions over mouse actions when it makes sense, but don't let that mindset extremeify you. -<a href="#l75" class="line" id="l75"> 75</a> -<a href="#l76" class="line" id="l76"> 76</a> Keep yourself level-headed. Make thoughtful decisions. You will eventually find out what works for you. -<a href="#l77" class="line" id="l77"> 77</a> -<a href="#l78" class="line" id="l78"> 78</a> Oh, and also, use a debugger. Stop writing print statements everywhere. -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/_sass/_main.scss.html b/git/n-channel/file/_sass/_main.scss.html @@ -1,345 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>_main.scss - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../"><img src="../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../log.html">Log</a> | <a href="../../files.html">Files</a> | <a href="../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> _main.scss (4635B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> e,:after,:before { -<a href="#l2" class="line" id="l2"> 2</a> box-sizing:border-box; -<a href="#l3" class="line" id="l3"> 3</a> background-color:inherit; -<a href="#l4" class="line" id="l4"> 4</a> color:inherit; -<a href="#l5" class="line" id="l5"> 5</a> margin:0; -<a href="#l6" class="line" id="l6"> 6</a> padding:0; -<a href="#l7" class="line" id="l7"> 7</a> } -<a href="#l8" class="line" id="l8"> 8</a> -<a href="#l9" class="line" id="l9"> 9</a> /*********** fonts ************/ -<a href="#l10" class="line" id="l10"> 10</a> -<a href="#l11" class="line" id="l11"> 11</a> @font-face { -<a href="#l12" class="line" id="l12"> 12</a> font-family: "Iosevka"; -<a href="#l13" class="line" id="l13"> 13</a> src: url("/assets/fonts/Iosevka-Etoile.ttf"); -<a href="#l14" class="line" id="l14"> 14</a> } -<a href="#l15" class="line" id="l15"> 15</a> -<a href="#l16" class="line" id="l16"> 16</a> /*********** syntax highlighting ************/ -<a href="#l17" class="line" id="l17"> 17</a> -<a href="#l18" class="line" id="l18"> 18</a> @import "/assets/css/vs.css"; -<a href="#l19" class="line" id="l19"> 19</a> -<a href="#l20" class="line" id="l20"> 20</a> /*********** body ************/ -<a href="#l21" class="line" id="l21"> 21</a> -<a href="#l22" class="line" id="l22"> 22</a> html { -<a href="#l23" class="line" id="l23"> 23</a> font-size: 22px; -<a href="#l24" class="line" id="l24"> 24</a> } -<a href="#l25" class="line" id="l25"> 25</a> -<a href="#l26" class="line" id="l26"> 26</a> body { -<a href="#l27" class="line" id="l27"> 27</a> display: flex; -<a href="#l28" class="line" id="l28"> 28</a> flex-direction: column; -<a href="#l29" class="line" id="l29"> 29</a> -<a href="#l30" class="line" id="l30"> 30</a> min-height: 100vh; -<a href="#l31" class="line" id="l31"> 31</a> margin: 0; -<a href="#l32" class="line" id="l32"> 32</a> -<a href="#l33" class="line" id="l33"> 33</a> font-family: noto-serfi, serif; -<a href="#l34" class="line" id="l34"> 34</a> -webkit-font-smoothing: antialiased; -<a href="#l35" class="line" id="l35"> 35</a> text-rendering: optimizeLegibility; -<a href="#l36" class="line" id="l36"> 36</a> color: rgb(22, 23, 26); -<a href="#l37" class="line" id="l37"> 37</a> background-color: #faf9ee; -<a href="#l38" class="line" id="l38"> 38</a> } -<a href="#l39" class="line" id="l39"> 39</a> -<a href="#l40" class="line" id="l40"> 40</a> /*********** main ************/ -<a href="#l41" class="line" id="l41"> 41</a> -<a href="#l42" class="line" id="l42"> 42</a> main { -<a href="#l43" class="line" id="l43"> 43</a> flex: 1; -<a href="#l44" class="line" id="l44"> 44</a> padding:1rem; -<a href="#l45" class="line" id="l45"> 45</a> background-color: transparent; -<a href="#l46" class="line" id="l46"> 46</a> } -<a href="#l47" class="line" id="l47"> 47</a> -<a href="#l48" class="line" id="l48"> 48</a> .main-title { -<a href="#l49" class="line" id="l49"> 49</a> max-width:60rem; -<a href="#l50" class="line" id="l50"> 50</a> margin:0px auto; -<a href="#l51" class="line" id="l51"> 51</a> } -<a href="#l52" class="line" id="l52"> 52</a> -<a href="#l53" class="line" id="l53"> 53</a> .main-content { -<a href="#l54" class="line" id="l54"> 54</a> max-width:60rem; -<a href="#l55" class="line" id="l55"> 55</a> margin: 0.5rem auto; -<a href="#l56" class="line" id="l56"> 56</a> display:flex; -<a href="#l57" class="line" id="l57"> 57</a> flex-wrap:wrap; -<a href="#l58" class="line" id="l58"> 58</a> } -<a href="#l59" class="line" id="l59"> 59</a> -<a href="#l60" class="line" id="l60"> 60</a> .main-title-columns { -<a href="#l61" class="line" id="l61"> 61</a> display:flex; -<a href="#l62" class="line" id="l62"> 62</a> } -<a href="#l63" class="line" id="l63"> 63</a> -<a href="#l64" class="line" id="l64"> 64</a> section { -<a href="#l65" class="line" id="l65"> 65</a> flex-basis:0; -<a href="#l66" class="line" id="l66"> 66</a> flex-grow:999; -<a href="#l67" class="line" id="l67"> 67</a> min-width:70%; -<a href="#l68" class="line" id="l68"> 68</a> display:flex; -<a href="#l69" class="line" id="l69"> 69</a> flex-direction:column; -<a href="#l70" class="line" id="l70"> 70</a> } -<a href="#l71" class="line" id="l71"> 71</a> -<a href="#l72" class="line" id="l72"> 72</a> /*********** footer ************/ -<a href="#l73" class="line" id="l73"> 73</a> -<a href="#l74" class="line" id="l74"> 74</a> .footer { -<a href="#l75" class="line" id="l75"> 75</a> max-height: 150px; -<a href="#l76" class="line" id="l76"> 76</a> width: 100%; -<a href="#l77" class="line" id="l77"> 77</a> overflow-x: hidden; -<a href="#l78" class="line" id="l78"> 78</a> overflow-y: hidden; -<a href="#l79" class="line" id="l79"> 79</a> aspect-ratio: 1920 / 493; -<a href="#l80" class="line" id="l80"> 80</a> background-size: 100% default; -<a href="#l81" class="line" id="l81"> 81</a> background-repeat: repeat-x; -<a href="#l82" class="line" id="l82"> 82</a> background-position: center 0%; -<a href="#l83" class="line" id="l83"> 83</a> background-image: url("/assets/images/modified_stolen_art/grass.png"); -<a href="#l84" class="line" id="l84"> 84</a> } -<a href="#l85" class="line" id="l85"> 85</a> -<a href="#l86" class="line" id="l86"> 86</a> /*********** header ************/ -<a href="#l87" class="line" id="l87"> 87</a> -<a href="#l88" class="line" id="l88"> 88</a> header { -<a href="#l89" class="line" id="l89"> 89</a> margin-top: 0px; -<a href="#l90" class="line" id="l90"> 90</a> flex-basis:8rem; -<a href="#l91" class="line" id="l91"> 91</a> max-width: 8rem; -<a href="#l92" class="line" id="l92"> 92</a> flex-grow:1; -<a href="#l93" class="line" id="l93"> 93</a> position:relative; -<a href="#l94" class="line" id="l94"> 94</a> word-break: keep-all; -<a href="#l95" class="line" id="l95"> 95</a> padding-right:1rem; -<a href="#l96" class="line" id="l96"> 96</a> } -<a href="#l97" class="line" id="l97"> 97</a> -<a href="#l98" class="line" id="l98"> 98</a> header a { -<a href="#l99" class="line" id="l99"> 99</a> text-decoration: none; -<a href="#l100" class="line" id="l100"> 100</a> } -<a href="#l101" class="line" id="l101"> 101</a> -<a href="#l102" class="line" id="l102"> 102</a> header li { -<a href="#l103" class="line" id="l103"> 103</a> margin-bottom: 0px; -<a href="#l104" class="line" id="l104"> 104</a> text-align: right; -<a href="#l105" class="line" id="l105"> 105</a> margin-right: 1rem; -<a href="#l106" class="line" id="l106"> 106</a> } -<a href="#l107" class="line" id="l107"> 107</a> -<a href="#l108" class="line" id="l108"> 108</a> header ul { -<a href="#l109" class="line" id="l109"> 109</a> border-right: 3px solid #bcd1cf99; -<a href="#l110" class="line" id="l110"> 110</a> margin: 0px; -<a href="#l111" class="line" id="l111"> 111</a> } -<a href="#l112" class="line" id="l112"> 112</a> -<a href="#l113" class="line" id="l113"> 113</a> header a.active { -<a href="#l114" class="line" id="l114"> 114</a> font-weight: bold; -<a href="#l115" class="line" id="l115"> 115</a> } -<a href="#l116" class="line" id="l116"> 116</a> -<a href="#l117" class="line" id="l117"> 117</a> .header-img { -<a href="#l118" class="line" id="l118"> 118</a> width: 100%; -<a href="#l119" class="line" id="l119"> 119</a> height: 100%; -<a href="#l120" class="line" id="l120"> 120</a> } -<a href="#l121" class="line" id="l121"> 121</a> -<a href="#l122" class="line" id="l122"> 122</a> header,section { -<a href="#l123" class="line" id="l123"> 123</a> padding-top:0px; -<a href="#l124" class="line" id="l124"> 124</a> } -<a href="#l125" class="line" id="l125"> 125</a> -<a href="#l126" class="line" id="l126"> 126</a> /*********** text ************/ -<a href="#l127" class="line" id="l127"> 127</a> -<a href="#l128" class="line" id="l128"> 128</a> a { -<a href="#l129" class="line" id="l129"> 129</a> color: #000; -<a href="#l130" class="line" id="l130"> 130</a> text-decoration-skip-ink: auto; -<a href="#l131" class="line" id="l131"> 131</a> text-decoration: underline; -<a href="#l132" class="line" id="l132"> 132</a> } -<a href="#l133" class="line" id="l133"> 133</a> -<a href="#l134" class="line" id="l134"> 134</a> .post p { -<a href="#l135" class="line" id="l135"> 135</a> margin: .5rem 0; -<a href="#l136" class="line" id="l136"> 136</a> } -<a href="#l137" class="line" id="l137"> 137</a> -<a href="#l138" class="line" id="l138"> 138</a> .post p img { -<a href="#l139" class="line" id="l139"> 139</a> max-height: 600px; -<a href="#l140" class="line" id="l140"> 140</a> max-width: min(800px, 90%); -<a href="#l141" class="line" id="l141"> 141</a> } -<a href="#l142" class="line" id="l142"> 142</a> -<a href="#l143" class="line" id="l143"> 143</a> h1,h2,h3,h4 { -<a href="#l144" class="line" id="l144"> 144</a> margin: 1.0rem 0 0.5rem 0; -<a href="#l145" class="line" id="l145"> 145</a> font-weight: bold; -<a href="#l146" class="line" id="l146"> 146</a> } -<a href="#l147" class="line" id="l147"> 147</a> -<a href="#l148" class="line" id="l148"> 148</a> h1 {font-size: 2.0rem; color: #f4ca96;} -<a href="#l149" class="line" id="l149"> 149</a> h2 {font-size: 1.8rem; color: #bcd1cf;} -<a href="#l150" class="line" id="l150"> 150</a> h3 {font-size: 1.5rem; color: #a3bfa3;} -<a href="#l151" class="line" id="l151"> 151</a> h4 {font-size: 1.2rem; color: inherit; } -<a href="#l152" class="line" id="l152"> 152</a> -<a href="#l153" class="line" id="l153"> 153</a> .post h2:first-child, .project h2:first-child, .photo h2:first-child section h1:first-child { -<a href="#l154" class="line" id="l154"> 154</a> margin-top: 0; -<a href="#l155" class="line" id="l155"> 155</a> } -<a href="#l156" class="line" id="l156"> 156</a> -<a href="#l157" class="line" id="l157"> 157</a> .meta { -<a href="#l158" class="line" id="l158"> 158</a> margin: 2rem 0; -<a href="#l159" class="line" id="l159"> 159</a> } -<a href="#l160" class="line" id="l160"> 160</a> -<a href="#l161" class="line" id="l161"> 161</a> code, pre { -<a href="#l162" class="line" id="l162"> 162</a> background: rgb(236, 237, 238); -<a href="#l163" class="line" id="l163"> 163</a> } -<a href="#l164" class="line" id="l164"> 164</a> -<a href="#l165" class="line" id="l165"> 165</a> code, pre #blob { -<a href="#l166" class="line" id="l166"> 166</a> padding: 0px; -<a href="#l167" class="line" id="l167"> 167</a> font-family: "Iosevka"; -<a href="#l168" class="line" id="l168"> 168</a> font-size: 80%; -<a href="#l169" class="line" id="l169"> 169</a> padding: 0.1rem; -<a href="#l170" class="line" id="l170"> 170</a> } -<a href="#l171" class="line" id="l171"> 171</a> -<a href="#l172" class="line" id="l172"> 172</a> pre { -<a href="#l173" class="line" id="l173"> 173</a> margin: .3rem 0; -<a href="#l174" class="line" id="l174"> 174</a> padding: 0.5rem; -<a href="#l175" class="line" id="l175"> 175</a> overflow-x: auto; -<a href="#l176" class="line" id="l176"> 176</a> font-size: 80%; -<a href="#l177" class="line" id="l177"> 177</a> } -<a href="#l178" class="line" id="l178"> 178</a> -<a href="#l179" class="line" id="l179"> 179</a> pre code { -<a href="#l180" class="line" id="l180"> 180</a> border: none; -<a href="#l181" class="line" id="l181"> 181</a> background: transparent; -<a href="#l182" class="line" id="l182"> 182</a> font-size: inherit; -<a href="#l183" class="line" id="l183"> 183</a> padding: 0; -<a href="#l184" class="line" id="l184"> 184</a> } -<a href="#l185" class="line" id="l185"> 185</a> -<a href="#l186" class="line" id="l186"> 186</a> -<a href="#l187" class="line" id="l187"> 187</a> hr { -<a href="#l188" class="line" id="l188"> 188</a> background: #bcd1cf99; -<a href="#l189" class="line" id="l189"> 189</a> height: 3px; -<a href="#l190" class="line" id="l190"> 190</a> border: 0; -<a href="#l191" class="line" id="l191"> 191</a> margin-left: 1rem; -<a href="#l192" class="line" id="l192"> 192</a> margin-right: 1rem; -<a href="#l193" class="line" id="l193"> 193</a> } -<a href="#l194" class="line" id="l194"> 194</a> -<a href="#l195" class="line" id="l195"> 195</a> blockquote { -<a href="#l196" class="line" id="l196"> 196</a> font-style: italic; -<a href="#l197" class="line" id="l197"> 197</a> border-left: 5px solid #bcd1cf99; -<a href="#l198" class="line" id="l198"> 198</a> padding-left: 1rem; -<a href="#l199" class="line" id="l199"> 199</a> } -<a href="#l200" class="line" id="l200"> 200</a> .quote-cite { -<a href="#l201" class="line" id="l201"> 201</a> border-left: none; -<a href="#l202" class="line" id="l202"> 202</a> padding-left: 2rem; -<a href="#l203" class="line" id="l203"> 203</a> margin-bottom: 0px; -<a href="#l204" class="line" id="l204"> 204</a> margin: 0px; -<a href="#l205" class="line" id="l205"> 205</a> } -<a href="#l206" class="line" id="l206"> 206</a> -<a href="#l207" class="line" id="l207"> 207</a> strong, b { -<a href="#l208" class="line" id="l208"> 208</a> font-weight: bold; -<a href="#l209" class="line" id="l209"> 209</a> } -<a href="#l210" class="line" id="l210"> 210</a> -<a href="#l211" class="line" id="l211"> 211</a> .photos ul { -<a href="#l212" class="line" id="l212"> 212</a> list-style: none; -<a href="#l213" class="line" id="l213"> 213</a> } -<a href="#l214" class="line" id="l214"> 214</a> -<a href="#l215" class="line" id="l215"> 215</a> .photos li { -<a href="#l216" class="line" id="l216"> 216</a> margin-bottom: 1.5rem; -<a href="#l217" class="line" id="l217"> 217</a> } -<a href="#l218" class="line" id="l218"> 218</a> -<a href="#l219" class="line" id="l219"> 219</a> .photo picture, .project picture { -<a href="#l220" class="line" id="l220"> 220</a> margin-bottom: 0.5rem; -<a href="#l221" class="line" id="l221"> 221</a> } -<a href="#l222" class="line" id="l222"> 222</a> -<a href="#l223" class="line" id="l223"> 223</a> ul { -<a href="#l224" class="line" id="l224"> 224</a> padding-left: 1.5rem; -<a href="#l225" class="line" id="l225"> 225</a> margin-top: 0.5rem; -<a href="#l226" class="line" id="l226"> 226</a> margin-bottom: 0.5rem; -<a href="#l227" class="line" id="l227"> 227</a> } -<a href="#l228" class="line" id="l228"> 228</a> -<a href="#l229" class="line" id="l229"> 229</a> li { -<a href="#l230" class="line" id="l230"> 230</a> list-style-position: inside; -<a href="#l231" class="line" id="l231"> 231</a> } -<a href="#l232" class="line" id="l232"> 232</a> -<a href="#l233" class="line" id="l233"> 233</a> -<a href="#l234" class="line" id="l234"> 234</a> /*********** posts ************/ -<a href="#l235" class="line" id="l235"> 235</a> -<a href="#l236" class="line" id="l236"> 236</a> .posts ul,header ul { -<a href="#l237" class="line" id="l237"> 237</a> list-style:none; -<a href="#l238" class="line" id="l238"> 238</a> padding-left: 1rem; -<a href="#l239" class="line" id="l239"> 239</a> } -<a href="#l240" class="line" id="l240"> 240</a> .posts li { -<a href="#l241" class="line" id="l241"> 241</a> align-items:center; -<a href="#l242" class="line" id="l242"> 242</a> display:flex; -<a href="#l243" class="line" id="l243"> 243</a> justify-content:space-between; -<a href="#l244" class="line" id="l244"> 244</a> margin-bottom: .5rem; -<a href="#l245" class="line" id="l245"> 245</a> } -<a href="#l246" class="line" id="l246"> 246</a> -<a href="#l247" class="line" id="l247"> 247</a> .posts li a, .posts li div, .projects li a { -<a href="#l248" class="line" id="l248"> 248</a> white-space:nowrap; -<a href="#l249" class="line" id="l249"> 249</a> overflow:hidden; -<a href="#l250" class="line" id="l250"> 250</a> text-overflow:ellipsis; -<a href="#l251" class="line" id="l251"> 251</a> text-decoration: none; -<a href="#l252" class="line" id="l252"> 252</a> } -<a href="#l253" class="line" id="l253"> 253</a> -<a href="#l254" class="line" id="l254"> 254</a> .posts li time, .projects li time { -<a href="#l255" class="line" id="l255"> 255</a> padding-left: 1rem; -<a href="#l256" class="line" id="l256"> 256</a> white-space: nowrap; -<a href="#l257" class="line" id="l257"> 257</a> font-variant-numeric: tabular-nums; -<a href="#l258" class="line" id="l258"> 258</a> } -<a href="#l259" class="line" id="l259"> 259</a> -<a href="#l260" class="line" id="l260"> 260</a> /*********** phone mode ************/ -<a href="#l261" class="line" id="l261"> 261</a> -<a href="#l262" class="line" id="l262"> 262</a> @media screen and (max-width: 45rem) { -<a href="#l263" class="line" id="l263"> 263</a> header { -<a href="#l264" class="line" id="l264"> 264</a> max-width: 100%; -<a href="#l265" class="line" id="l265"> 265</a> } -<a href="#l266" class="line" id="l266"> 266</a> .header-img { -<a href="#l267" class="line" id="l267"> 267</a> margin-left: 1.0rem; -<a href="#l268" class="line" id="l268"> 268</a> margin-bottom: 0rem; -<a href="#l269" class="line" id="l269"> 269</a> width: auto; -<a href="#l270" class="line" id="l270"> 270</a> } -<a href="#l271" class="line" id="l271"> 271</a> .header-img-outer { -<a href="#l272" class="line" id="l272"> 272</a> display:flex; -<a href="#l273" class="line" id="l273"> 273</a> flex-direction:row; -<a href="#l274" class="line" id="l274"> 274</a> } -<a href="#l275" class="line" id="l275"> 275</a> header li { -<a href="#l276" class="line" id="l276"> 276</a> display: inline; -<a href="#l277" class="line" id="l277"> 277</a> margin-right: 1rem; -<a href="#l278" class="line" id="l278"> 278</a> } -<a href="#l279" class="line" id="l279"> 279</a> header ul { -<a href="#l280" class="line" id="l280"> 280</a> border-bottom: 3px solid #bcd1cf99; -<a href="#l281" class="line" id="l281"> 281</a> border-right: 0px; -<a href="#l282" class="line" id="l282"> 282</a> padding-bottom: .5rem; -<a href="#l283" class="line" id="l283"> 283</a> padding-left: .5rem; -<a href="#l284" class="line" id="l284"> 284</a> } -<a href="#l285" class="line" id="l285"> 285</a> -<a href="#l286" class="line" id="l286"> 286</a> .photos ul { -<a href="#l287" class="line" id="l287"> 287</a> margin-top: 0.5rem; -<a href="#l288" class="line" id="l288"> 288</a> } -<a href="#l289" class="line" id="l289"> 289</a> -<a href="#l290" class="line" id="l290"> 290</a> html { -<a href="#l291" class="line" id="l291"> 291</a> font-size: 16px; -<a href="#l292" class="line" id="l292"> 292</a> } -<a href="#l293" class="line" id="l293"> 293</a> } -<a href="#l294" class="line" id="l294"> 294</a> -<a href="#l295" class="line" id="l295"> 295</a> /*********** dark theme ************/ -<a href="#l296" class="line" id="l296"> 296</a> -<a href="#l297" class="line" id="l297"> 297</a> @media (prefers-color-scheme: dark) { -<a href="#l298" class="line" id="l298"> 298</a> a { -<a href="#l299" class="line" id="l299"> 299</a> color: #fff; -<a href="#l300" class="line" id="l300"> 300</a> } -<a href="#l301" class="line" id="l301"> 301</a> body { -<a href="#l302" class="line" id="l302"> 302</a> background-color: #181a1b; -<a href="#l303" class="line" id="l303"> 303</a> color: #fff -<a href="#l304" class="line" id="l304"> 304</a> } -<a href="#l305" class="line" id="l305"> 305</a> -<a href="#l306" class="line" id="l306"> 306</a> code,pre { -<a href="#l307" class="line" id="l307"> 307</a> background: #222; -<a href="#l308" class="line" id="l308"> 308</a> } -<a href="#l309" class="line" id="l309"> 309</a> .invertable-image { -<a href="#l310" class="line" id="l310"> 310</a> filter: invert(0.6); -<a href="#l311" class="line" id="l311"> 311</a> } -<a href="#l312" class="line" id="l312"> 312</a> } -<a href="#l313" class="line" id="l313"> 313</a> -<a href="#l314" class="line" id="l314"> 314</a> /*********** print ************/ -<a href="#l315" class="line" id="l315"> 315</a> -<a href="#l316" class="line" id="l316"> 316</a> @media print -<a href="#l317" class="line" id="l317"> 317</a> { -<a href="#l318" class="line" id="l318"> 318</a> .no-print, .no-print * -<a href="#l319" class="line" id="l319"> 319</a> { -<a href="#l320" class="line" id="l320"> 320</a> display: none !important; -<a href="#l321" class="line" id="l321"> 321</a> } -<a href="#l322" class="line" id="l322"> 322</a> } -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/_todo.md.html b/git/n-channel/file/_todo.md.html @@ -1,44 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>_todo.md - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../style.css" /> -</head> -<body> -<table><tr><td><a href="../../"><img src="../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../log.html">Log</a> | <a href="../files.html">Files</a> | <a href="../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> _todo.md (380B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> # TODO -<a href="#l2" class="line" id="l2"> 2</a> -<a href="#l3" class="line" id="l3"> 3</a> ## MISC: -<a href="#l4" class="line" id="l4"> 4</a> - improve SEO and descriptions -<a href="#l5" class="line" id="l5"> 5</a> -<a href="#l6" class="line" id="l6"> 6</a> ## Blog ideas: -<a href="#l7" class="line" id="l7"> 7</a> -<a href="#l8" class="line" id="l8"> 8</a> ### electronics -<a href="#l9" class="line" id="l9"> 9</a> - Chicken door -<a href="#l10" class="line" id="l10"> 10</a> - Learning tips for electronics -<a href="#l11" class="line" id="l11"> 11</a> - modelsim FLI tutorial (VHDL) -<a href="#l12" class="line" id="l12"> 12</a> - vhdl SPI tutorial -<a href="#l13" class="line" id="l13"> 13</a> - vhdl fifo tutorial -<a href="#l14" class="line" id="l14"> 14</a> - dealing with high power noise (basically om coil kontroller) -<a href="#l15" class="line" id="l15"> 15</a> -<a href="#l16" class="line" id="l16"> 16</a> ### other -<a href="#l17" class="line" id="l17"> 17</a> - Camping -<a href="#l18" class="line" id="l18"> 18</a> -<a href="#l19" class="line" id="l19"> 19</a> ### programming -<a href="#l20" class="line" id="l20"> 20</a> - Tips for programmers -<a href="#l21" class="line" id="l21"> 21</a> - How to organize software projects (Folders are magic) -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/css/vs.css.html b/git/n-channel/file/assets/css/vs.css.html @@ -1,55 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>vs.css - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../"><img src="../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../log.html">Log</a> | <a href="../../../files.html">Files</a> | <a href="../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> vs.css (1848B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> .highlight .hll { background-color: #ffffcc } -<a href="#l2" class="line" id="l2"> 2</a> .highlight .c { color: #AC4426 } /* Comment */ -<a href="#l3" class="line" id="l3"> 3</a> .highlight .err { border: 1px solid #FF0000 } /* Error */ -<a href="#l4" class="line" id="l4"> 4</a> .highlight .k { color: #3B6EA8 } /* Keyword */ -<a href="#l5" class="line" id="l5"> 5</a> .highlight .cm { color: #AC4426 } /* Comment.Multiline */ -<a href="#l6" class="line" id="l6"> 6</a> .highlight .cp { color: #AC4426 } /* Comment.Preproc */ -<a href="#l7" class="line" id="l7"> 7</a> .highlight .c1 { color: #AC4426 } /* Comment.Single */ -<a href="#l8" class="line" id="l8"> 8</a> .highlight .cs { color: #AC4426 } /* Comment.Special */ -<a href="#l9" class="line" id="l9"> 9</a> .highlight .ge { font-style: italic } /* Generic.Emph */ -<a href="#l10" class="line" id="l10"> 10</a> .highlight .gh { font-weight: bold } /* Generic.Heading */ -<a href="#l11" class="line" id="l11"> 11</a> .highlight .gp { font-weight: bold } /* Generic.Prompt */ -<a href="#l12" class="line" id="l12"> 12</a> .highlight .gs { font-weight: bold } /* Generic.Strong */ -<a href="#l13" class="line" id="l13"> 13</a> .highlight .gu { font-weight: bold } /* Generic.Subheading */ -<a href="#l14" class="line" id="l14"> 14</a> .highlight .mi { color: #97365B } /* Literal.Integer */ -<a href="#l15" class="line" id="l15"> 15</a> .highlight .kc { color: #97365B } /* Keyword.Constant */ -<a href="#l16" class="line" id="l16"> 16</a> .highlight .kd { color: #3B6EA8 } /* Keyword.Declaration */ -<a href="#l17" class="line" id="l17"> 17</a> .highlight .kn { color: #3B6EA8 } /* Keyword.Namespace */ -<a href="#l18" class="line" id="l18"> 18</a> .highlight .kp { color: #3B6EA8 } /* Keyword.Pseudo */ -<a href="#l19" class="line" id="l19"> 19</a> .highlight .kr { color: #3B6EA8 } /* Keyword.Reserved */ -<a href="#l20" class="line" id="l20"> 20</a> .highlight .s { color: #4F894C } /* Literal.String */ -<a href="#l21" class="line" id="l21"> 21</a> .highlight .ow { color: #3B6EA8 } /* Operator.Word */ -<a href="#l22" class="line" id="l22"> 22</a> .highlight .sb { color: #4F894C } /* Literal.String.Backtick */ -<a href="#l23" class="line" id="l23"> 23</a> .highlight .sc { color: #4F894C } /* Literal.String.Char */ -<a href="#l24" class="line" id="l24"> 24</a> .highlight .sd { color: #4F894C } /* Literal.String.Doc */ -<a href="#l25" class="line" id="l25"> 25</a> .highlight .s2 { color: #4F894C } /* Literal.String.Double */ -<a href="#l26" class="line" id="l26"> 26</a> .highlight .se { color: #4F894C } /* Literal.String.Escape */ -<a href="#l27" class="line" id="l27"> 27</a> .highlight .sh { color: #4F894C } /* Literal.String.Heredoc */ -<a href="#l28" class="line" id="l28"> 28</a> .highlight .si { color: #4F894C } /* Literal.String.Interpol */ -<a href="#l29" class="line" id="l29"> 29</a> .highlight .sx { color: #4F894C } /* Literal.String.Other */ -<a href="#l30" class="line" id="l30"> 30</a> .highlight .sr { color: #4F894C } /* Literal.String.Regex */ -<a href="#l31" class="line" id="l31"> 31</a> .highlight .s1 { color: #4F894C } /* Literal.String.Single */ -<a href="#l32" class="line" id="l32"> 32</a> .highlight .ss { color: #4F894C } /* Literal.String.Symbol */ -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/fonts/Iosevka-Etoile.ttf.html b/git/n-channel/file/assets/fonts/Iosevka-Etoile.ttf.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>Iosevka-Etoile.ttf - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../"><img src="../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../log.html">Log</a> | <a href="../../../files.html">Files</a> | <a href="../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> Iosevka-Etoile.ttf (68556B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/VGA/VGA_fig1.jpeg.html b/git/n-channel/file/assets/images/VGA/VGA_fig1.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>VGA_fig1.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> VGA_fig1.jpeg (44202B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/VGA/VGA_fig10.jpeg.html b/git/n-channel/file/assets/images/VGA/VGA_fig10.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>VGA_fig10.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> VGA_fig10.jpeg (18885B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/VGA/VGA_fig11.jpeg.html b/git/n-channel/file/assets/images/VGA/VGA_fig11.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>VGA_fig11.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> VGA_fig11.jpeg (80864B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/VGA/VGA_fig12.jpeg.html b/git/n-channel/file/assets/images/VGA/VGA_fig12.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>VGA_fig12.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> VGA_fig12.jpeg (11933B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/VGA/VGA_fig13.jpeg.html b/git/n-channel/file/assets/images/VGA/VGA_fig13.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>VGA_fig13.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> VGA_fig13.jpeg (15547B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/VGA/VGA_fig14.jpeg.html b/git/n-channel/file/assets/images/VGA/VGA_fig14.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>VGA_fig14.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> VGA_fig14.jpeg (11185B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/VGA/VGA_fig15.jpeg.html b/git/n-channel/file/assets/images/VGA/VGA_fig15.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>VGA_fig15.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> VGA_fig15.jpeg (15747B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/VGA/VGA_fig16.jpeg.html b/git/n-channel/file/assets/images/VGA/VGA_fig16.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>VGA_fig16.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> VGA_fig16.jpeg (63021B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/VGA/VGA_fig17.jpeg.html b/git/n-channel/file/assets/images/VGA/VGA_fig17.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>VGA_fig17.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> VGA_fig17.jpeg (16216B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/VGA/VGA_fig18.jpeg.html b/git/n-channel/file/assets/images/VGA/VGA_fig18.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>VGA_fig18.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> VGA_fig18.jpeg (71917B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/VGA/VGA_fig19.jpeg.html b/git/n-channel/file/assets/images/VGA/VGA_fig19.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>VGA_fig19.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> VGA_fig19.jpeg (22676B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/VGA/VGA_fig2.jpeg.html b/git/n-channel/file/assets/images/VGA/VGA_fig2.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>VGA_fig2.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> VGA_fig2.jpeg (24851B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/VGA/VGA_fig3.jpeg.html b/git/n-channel/file/assets/images/VGA/VGA_fig3.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>VGA_fig3.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> VGA_fig3.jpeg (13591B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/VGA/VGA_fig4.jpeg.html b/git/n-channel/file/assets/images/VGA/VGA_fig4.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>VGA_fig4.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> VGA_fig4.jpeg (51948B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/VGA/VGA_fig5.jpeg.html b/git/n-channel/file/assets/images/VGA/VGA_fig5.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>VGA_fig5.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> VGA_fig5.jpeg (20830B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/VGA/VGA_fig6.jpeg.html b/git/n-channel/file/assets/images/VGA/VGA_fig6.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>VGA_fig6.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> VGA_fig6.jpeg (26596B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/VGA/VGA_fig7.jpeg.html b/git/n-channel/file/assets/images/VGA/VGA_fig7.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>VGA_fig7.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> VGA_fig7.jpeg (30728B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/VGA/VGA_fig8.jpeg.html b/git/n-channel/file/assets/images/VGA/VGA_fig8.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>VGA_fig8.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> VGA_fig8.jpeg (9252B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/VGA/VGA_fig9.jpeg.html b/git/n-channel/file/assets/images/VGA/VGA_fig9.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>VGA_fig9.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> VGA_fig9.jpeg (34655B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/modified_stolen_art/c-programming-language-chito.png.html b/git/n-channel/file/assets/images/modified_stolen_art/c-programming-language-chito.png.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>c-programming-language-chito.png - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> c-programming-language-chito.png (34822B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/modified_stolen_art/couch.png.html b/git/n-channel/file/assets/images/modified_stolen_art/couch.png.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>couch.png - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> couch.png (62786B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/modified_stolen_art/cursor.png.html b/git/n-channel/file/assets/images/modified_stolen_art/cursor.png.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>cursor.png - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> cursor.png (939B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/modified_stolen_art/grass.png.html b/git/n-channel/file/assets/images/modified_stolen_art/grass.png.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>grass.png - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> grass.png (136561B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/modified_stolen_art/kettenkrad.gif.html b/git/n-channel/file/assets/images/modified_stolen_art/kettenkrad.gif.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>kettenkrad.gif - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> kettenkrad.gif (44637B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/modified_stolen_art/nuko_calm.png.html b/git/n-channel/file/assets/images/modified_stolen_art/nuko_calm.png.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>nuko_calm.png - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> nuko_calm.png (4150B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/modified_stolen_art/silly.png.html b/git/n-channel/file/assets/images/modified_stolen_art/silly.png.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>silly.png - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> silly.png (185251B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/modified_stolen_art/templeos.jpeg.html b/git/n-channel/file/assets/images/modified_stolen_art/templeos.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>templeos.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> templeos.jpeg (34084B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/nisse-collection.jpeg.html b/git/n-channel/file/assets/images/nisse-collection.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>nisse-collection.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../"><img src="../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../log.html">Log</a> | <a href="../../../files.html">Files</a> | <a href="../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> nisse-collection.jpeg (406370B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/old_projects/anders_web.jpeg.html b/git/n-channel/file/assets/images/old_projects/anders_web.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>anders_web.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> anders_web.jpeg (22085B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/old_projects/awaC.jpeg.html b/git/n-channel/file/assets/images/old_projects/awaC.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>awaC.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> awaC.jpeg (24588B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/old_projects/awaC2.jpeg.html b/git/n-channel/file/assets/images/old_projects/awaC2.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>awaC2.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> awaC2.jpeg (54461B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/old_projects/gb.jpeg.html b/git/n-channel/file/assets/images/old_projects/gb.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>gb.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> gb.jpeg (272486B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/old_projects/gb_pinball.jpeg.html b/git/n-channel/file/assets/images/old_projects/gb_pinball.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>gb_pinball.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> gb_pinball.jpeg (235478B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/old_projects/gb_unpainted.jpeg.html b/git/n-channel/file/assets/images/old_projects/gb_unpainted.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>gb_unpainted.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> gb_unpainted.jpeg (100569B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/old_projects/gs_ddt.jpeg.html b/git/n-channel/file/assets/images/old_projects/gs_ddt.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>gs_ddt.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> gs_ddt.jpeg (74455B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/old_projects/hs.jpeg.html b/git/n-channel/file/assets/images/old_projects/hs.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>hs.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> hs.jpeg (19333B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/old_projects/lidar.png.html b/git/n-channel/file/assets/images/old_projects/lidar.png.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>lidar.png - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> lidar.png (48991B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/old_projects/minesweeper.jpeg.html b/git/n-channel/file/assets/images/old_projects/minesweeper.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>minesweeper.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> minesweeper.jpeg (25756B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/old_projects/rnm1.jpeg.html b/git/n-channel/file/assets/images/old_projects/rnm1.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>rnm1.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> rnm1.jpeg (60451B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/old_projects/rnm2.jpeg.html b/git/n-channel/file/assets/images/old_projects/rnm2.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>rnm2.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> rnm2.jpeg (118014B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/old_projects/rnm3.jpeg.html b/git/n-channel/file/assets/images/old_projects/rnm3.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>rnm3.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> rnm3.jpeg (54075B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/old_projects/traffic_light.jpeg.html b/git/n-channel/file/assets/images/old_projects/traffic_light.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>traffic_light.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> traffic_light.jpeg (61076B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/old_projects/weebbot.jpeg.html b/git/n-channel/file/assets/images/old_projects/weebbot.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>weebbot.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> weebbot.jpeg (31922B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/soldering_tutorial/essentials.jpeg.html b/git/n-channel/file/assets/images/soldering_tutorial/essentials.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>essentials.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> essentials.jpeg (120034B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/soldering_tutorial/recommended.jpeg.html b/git/n-channel/file/assets/images/soldering_tutorial/recommended.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>recommended.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> recommended.jpeg (188314B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/soldering_tutorial/solder1.jpeg.html b/git/n-channel/file/assets/images/soldering_tutorial/solder1.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>solder1.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> solder1.jpeg (217662B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/soldering_tutorial/solder2.jpeg.html b/git/n-channel/file/assets/images/soldering_tutorial/solder2.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>solder2.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> solder2.jpeg (188704B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/soldering_tutorial/solder3.jpeg.html b/git/n-channel/file/assets/images/soldering_tutorial/solder3.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>solder3.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> solder3.jpeg (184354B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/soldering_tutorial/solder4.jpeg.html b/git/n-channel/file/assets/images/soldering_tutorial/solder4.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>solder4.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> solder4.jpeg (167982B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/soldering_tutorial/solder5.jpeg.html b/git/n-channel/file/assets/images/soldering_tutorial/solder5.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>solder5.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> solder5.jpeg (176100B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/soldering_tutorial/solder6.jpeg.html b/git/n-channel/file/assets/images/soldering_tutorial/solder6.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>solder6.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> solder6.jpeg (165948B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/soldering_tutorial/solder7.jpeg.html b/git/n-channel/file/assets/images/soldering_tutorial/solder7.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>solder7.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> solder7.jpeg (93059B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/images/soldering_tutorial/solder8.jpeg.html b/git/n-channel/file/assets/images/soldering_tutorial/solder8.jpeg.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>solder8.jpeg - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../../"><img src="../../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../../log.html">Log</a> | <a href="../../../../files.html">Files</a> | <a href="../../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> solder8.jpeg (83558B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/assets/js/search-script.min.js.html b/git/n-channel/file/assets/js/search-script.min.js.html @@ -1,29 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>search-script.min.js - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../../../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../../../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../../../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../../../style.css" /> -</head> -<body> -<table><tr><td><a href="../../../../"><img src="../../../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../../../log.html">Log</a> | <a href="../../../files.html">Files</a> | <a href="../../../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> search-script.min.js (4734B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> /*! -<a href="#l2" class="line" id="l2"> 2</a> * Simple-Jekyll-Search v1.7.2 (https://github.com/christian-fei/Simple-Jekyll-Search) -<a href="#l3" class="line" id="l3"> 3</a> * Copyright 2015-2018, Christian Fei -<a href="#l4" class="line" id="l4"> 4</a> * Licensed under the MIT License. -<a href="#l5" class="line" id="l5"> 5</a> */ -<a href="#l6" class="line" id="l6"> 6</a> !function(){"use strict";var f={load:function w(t,e){var n=function r(){return window.XMLHttpRequest?new window.XMLHttpRequest:new ActiveXObject("Microsoft.XMLHTTP")}();n.open("GET",t,!0),n.onreadystatechange=function i(e,n){return function(){if(4===e.readyState&&200===e.status)try{n(null,JSON.parse(e.responseText))}catch(t){n(t,null)}}}(n,e),n.send()}};(function y(t){if(!function e(t){return!!t&&"undefined"!=typeof t.required&&t.required instanceof Array}(t))throw new Error("-- OptionsValidator: required options missing");if(!(this instanceof y))return new y(t);var r=t.required;this.getRequiredOptions=function(){return r},this.validate=function(e){var n=[];return r.forEach(function(t){"undefined"==typeof e[t]&&n.push(t)}),n}});var n=function g(t,e){var n=e.length,r=t.length;if(n<r)return!1;if(r===n)return t===e;t:for(var i=0,o=0;i<r;i++){for(var u=t.charCodeAt(i);o<n;)if(e.charCodeAt(o++)===u)continue t;return!1}return!0},e=new function t(){this.matches=function(t,e){return n(e.toLowerCase(),t.toLowerCase())}};var r=new function O(){this.matches=function(e,t){return!!e&&(e=e.trim().toLowerCase(),(t=t.trim().toLowerCase()).split(" ").filter(function(t){return 0<=e.indexOf(t)}).length===t.split(" ").length)}};var l={put:function z(t){if(c(t))return s(t);if(function e(t){return Boolean(t)&&"[object Array]"===Object.prototype.toString.call(t)}(t))return function i(t){var e=[];a();for(var n=0,r=t.length;n<r;n++)c(t[n])&&e.push(s(t[n]));return e}(t);return undefined},clear:a,search:function S(t){return t?function a(t,e,n,r){for(var i=[],o=0;o<t.length&&i.length<r.limit;o++){var u=d(t[o],e,n,r);u&&i.push(u)}return i}(o,t,u.searchStrategy,u).sort(u.sort):[]},setOptions:function q(t){(u=t||{}).fuzzy=t.fuzzy||!1,u.limit=t.limit||10,u.searchStrategy=t.fuzzy?e:r,u.sort=t.sort||i}};function i(){return 0}var o=[],u={};function a(){return o.length=0,o}function c(t){return Boolean(t)&&"[object Object]"===Object.prototype.toString.call(t)}function s(t){return o.push(t),o}function d(t,e,n,r){for(var i in t)if(!p(t[i],r.exclude)&&n.matches(t[i],e))return t}function p(t,e){for(var n=!1,r=0,i=(e=e||[]).length;r<i;r++){var o=e[r];!n&&new RegExp(t).test(o)&&(n=!0)}return n}u.fuzzy=!1,u.limit=10,u.searchStrategy=u.fuzzy?e:r,u.sort=i;var h={compile:function j(r){return m.template.replace(m.pattern,function(t,e){var n=m.middleware(e,r[e],m.template);return void 0!==n?n:r[e]||t})},setOptions:function C(t){m.pattern=t.pattern||m.pattern,m.template=t.template||m.template,"function"==typeof t.middleware&&(m.middleware=t.middleware)}},m={};m.pattern=/\{(.*?)\}/g,m.template="",m.middleware=function(){};var v={merge:function L(t,e){var n={};for(var r in t)n[r]=t[r],"undefined"!=typeof e[r]&&(n[r]=e[r]);return n},isJSON:function M(t){try{return!!(t instanceof Object&&JSON.parse(JSON.stringify(t)))}catch(e){return!1}}};!function(t){var o={searchInput:null,resultsContainer:null,json:[],success:Function.prototype,searchResultTemplate:'<li><a href="{url}" title="{description}">{title}</a></li>',templateMiddleware:Function.prototype,sortMiddleware:function(){return 0},noResultsText:"No results found",limit:10,fuzzy:!1,exclude:[]},n=["searchInput","resultsContainer","json"],r=function y(e){if(!function n(t){return!!t&&"undefined"!=typeof t.required&&t.required instanceof Array}(e))throw new Error("-- OptionsValidator: required options missing");if(!(this instanceof y))return new y(e);var r=e.required;this.getRequiredOptions=function(){return r},this.validate=function(e){var n=[];return r.forEach(function(t){"undefined"==typeof e[t]&&n.push(t)}),n}}({required:n});function i(t){o.success(t),l.put(t),function e(){o.searchInput.addEventListener("keyup",function(t){(function e(t){return-1===[13,16,20,37,38,39,40,91].indexOf(t)})(t.which)&&(u(),c(t.target.value))})}()}function u(){o.resultsContainer.innerHTML=""}function a(t){o.resultsContainer.innerHTML+=t}function c(t){(function e(t){return t&&0<t.length})(t)&&(u(),function i(t,e){var n=t.length;if(0===n)return a(o.noResultsText);for(var r=0;r<n;r++)t[r].query=e,a(h.compile(t[r]))}(l.search(t),t))}function s(t){throw new Error("SimpleJekyllSearch --- "+t)}t.SimpleJekyllSearch=function(t){return 0<r.validate(t).length&&s("You must specify the following required options: "+n),o=v.merge(o,t),h.setOptions({template:o.searchResultTemplate,middleware:o.templateMiddleware}),l.setOptions({fuzzy:o.fuzzy,limit:o.limit,sort:o.sortMiddleware}),v.isJSON(o.json)?i(o.json):function e(n){f.load(n,function(t,e){t&&s("failed to get JSON ("+n+")"),i(e)})}(o.json),{search:c}}}(window)}(); -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/atom.xml.html b/git/n-channel/file/atom.xml.html @@ -1,1225 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>atom.xml - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../style.css" /> -</head> -<body> -<table><tr><td><a href="../../"><img src="../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../log.html">Log</a> | <a href="../files.html">Files</a> | <a href="../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> atom.xml (39718B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> <?xml version="1.0" encoding="UTF-8"?> -<a href="#l2" class="line" id="l2"> 2</a> <feed xmlns="http://www.w3.org/2005/Atom"> -<a href="#l3" class="line" id="l3"> 3</a> <title>n-channel, branch HEAD</title> -<a href="#l4" class="line" id="l4"> 4</a> <subtitle>Unnamed repository; edit this file &#39;description&#39; to name the repository. -<a href="#l5" class="line" id="l5"> 5</a> </subtitle> -<a href="#l6" class="line" id="l6"> 6</a> <entry> -<a href="#l7" class="line" id="l7"> 7</a> <id>06ba862d987b84a903c9cf7ffcca03013ffb6090</id> -<a href="#l8" class="line" id="l8"> 8</a> <published>2025-03-02T01:30:15Z</published> -<a href="#l9" class="line" id="l9"> 9</a> <updated>2025-03-02T01:30:15Z</updated> -<a href="#l10" class="line" id="l10"> 10</a> <title type="text">fix typo in old projects description</title> -<a href="#l11" class="line" id="l11"> 11</a> <link rel="alternate" type="text/html" href="commit/06ba862d987b84a903c9cf7ffcca03013ffb6090.html" /> -<a href="#l12" class="line" id="l12"> 12</a> <author> -<a href="#l13" class="line" id="l13"> 13</a> <name>Samdal</name> -<a href="#l14" class="line" id="l14"> 14</a> <email>samdal@protonmail.com</email> -<a href="#l15" class="line" id="l15"> 15</a> </author> -<a href="#l16" class="line" id="l16"> 16</a> <content type="text">commit 06ba862d987b84a903c9cf7ffcca03013ffb6090 -<a href="#l17" class="line" id="l17"> 17</a> parent 960604b722cec6ed64fcbddc434b554fb6d978c1 -<a href="#l18" class="line" id="l18"> 18</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l19" class="line" id="l19"> 19</a> Date: Sun, 2 Mar 2025 02:30:15 +0100 -<a href="#l20" class="line" id="l20"> 20</a> -<a href="#l21" class="line" id="l21"> 21</a> fix typo in old projects description -<a href="#l22" class="line" id="l22"> 22</a> -<a href="#l23" class="line" id="l23"> 23</a> </content> -<a href="#l24" class="line" id="l24"> 24</a> </entry> -<a href="#l25" class="line" id="l25"> 25</a> <entry> -<a href="#l26" class="line" id="l26"> 26</a> <id>960604b722cec6ed64fcbddc434b554fb6d978c1</id> -<a href="#l27" class="line" id="l27"> 27</a> <published>2025-03-02T01:29:38Z</published> -<a href="#l28" class="line" id="l28"> 28</a> <updated>2025-03-02T01:29:38Z</updated> -<a href="#l29" class="line" id="l29"> 29</a> <title type="text">fix description fish mode</title> -<a href="#l30" class="line" id="l30"> 30</a> <link rel="alternate" type="text/html" href="commit/960604b722cec6ed64fcbddc434b554fb6d978c1.html" /> -<a href="#l31" class="line" id="l31"> 31</a> <author> -<a href="#l32" class="line" id="l32"> 32</a> <name>Samdal</name> -<a href="#l33" class="line" id="l33"> 33</a> <email>samdal@protonmail.com</email> -<a href="#l34" class="line" id="l34"> 34</a> </author> -<a href="#l35" class="line" id="l35"> 35</a> <content type="text">commit 960604b722cec6ed64fcbddc434b554fb6d978c1 -<a href="#l36" class="line" id="l36"> 36</a> parent eb62611fbbe9f56d213c0b6cc2362579a6f68bf8 -<a href="#l37" class="line" id="l37"> 37</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l38" class="line" id="l38"> 38</a> Date: Sun, 2 Mar 2025 02:29:38 +0100 -<a href="#l39" class="line" id="l39"> 39</a> -<a href="#l40" class="line" id="l40"> 40</a> fix description fish mode -<a href="#l41" class="line" id="l41"> 41</a> -<a href="#l42" class="line" id="l42"> 42</a> </content> -<a href="#l43" class="line" id="l43"> 43</a> </entry> -<a href="#l44" class="line" id="l44"> 44</a> <entry> -<a href="#l45" class="line" id="l45"> 45</a> <id>eb62611fbbe9f56d213c0b6cc2362579a6f68bf8</id> -<a href="#l46" class="line" id="l46"> 46</a> <published>2025-03-02T01:24:18Z</published> -<a href="#l47" class="line" id="l47"> 47</a> <updated>2025-03-02T01:24:18Z</updated> -<a href="#l48" class="line" id="l48"> 48</a> <title type="text">update todo and productivity</title> -<a href="#l49" class="line" id="l49"> 49</a> <link rel="alternate" type="text/html" href="commit/eb62611fbbe9f56d213c0b6cc2362579a6f68bf8.html" /> -<a href="#l50" class="line" id="l50"> 50</a> <author> -<a href="#l51" class="line" id="l51"> 51</a> <name>Samdal</name> -<a href="#l52" class="line" id="l52"> 52</a> <email>samdal@protonmail.com</email> -<a href="#l53" class="line" id="l53"> 53</a> </author> -<a href="#l54" class="line" id="l54"> 54</a> <content type="text">commit eb62611fbbe9f56d213c0b6cc2362579a6f68bf8 -<a href="#l55" class="line" id="l55"> 55</a> parent 6b992a89f9e05b88a77d439b11f07addb58a841d -<a href="#l56" class="line" id="l56"> 56</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l57" class="line" id="l57"> 57</a> Date: Sun, 2 Mar 2025 02:24:18 +0100 -<a href="#l58" class="line" id="l58"> 58</a> -<a href="#l59" class="line" id="l59"> 59</a> update todo and productivity -<a href="#l60" class="line" id="l60"> 60</a> -<a href="#l61" class="line" id="l61"> 61</a> </content> -<a href="#l62" class="line" id="l62"> 62</a> </entry> -<a href="#l63" class="line" id="l63"> 63</a> <entry> -<a href="#l64" class="line" id="l64"> 64</a> <id>6b992a89f9e05b88a77d439b11f07addb58a841d</id> -<a href="#l65" class="line" id="l65"> 65</a> <published>2025-03-02T01:14:25Z</published> -<a href="#l66" class="line" id="l66"> 66</a> <updated>2025-03-02T01:14:25Z</updated> -<a href="#l67" class="line" id="l67"> 67</a> <title type="text">fish cursor easter egg</title> -<a href="#l68" class="line" id="l68"> 68</a> <link rel="alternate" type="text/html" href="commit/6b992a89f9e05b88a77d439b11f07addb58a841d.html" /> -<a href="#l69" class="line" id="l69"> 69</a> <author> -<a href="#l70" class="line" id="l70"> 70</a> <name>Samdal</name> -<a href="#l71" class="line" id="l71"> 71</a> <email>samdal@protonmail.com</email> -<a href="#l72" class="line" id="l72"> 72</a> </author> -<a href="#l73" class="line" id="l73"> 73</a> <content type="text">commit 6b992a89f9e05b88a77d439b11f07addb58a841d -<a href="#l74" class="line" id="l74"> 74</a> parent 83ec429fc6461359ebb3a79b34b4b85ce61d0b9a -<a href="#l75" class="line" id="l75"> 75</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l76" class="line" id="l76"> 76</a> Date: Sun, 2 Mar 2025 02:14:25 +0100 -<a href="#l77" class="line" id="l77"> 77</a> -<a href="#l78" class="line" id="l78"> 78</a> fish cursor easter egg -<a href="#l79" class="line" id="l79"> 79</a> -<a href="#l80" class="line" id="l80"> 80</a> </content> -<a href="#l81" class="line" id="l81"> 81</a> </entry> -<a href="#l82" class="line" id="l82"> 82</a> <entry> -<a href="#l83" class="line" id="l83"> 83</a> <id>83ec429fc6461359ebb3a79b34b4b85ce61d0b9a</id> -<a href="#l84" class="line" id="l84"> 84</a> <published>2025-03-01T23:52:35Z</published> -<a href="#l85" class="line" id="l85"> 85</a> <updated>2025-03-01T23:52:35Z</updated> -<a href="#l86" class="line" id="l86"> 86</a> <title type="text">remove images scaling with vh, use h1 IDs</title> -<a href="#l87" class="line" id="l87"> 87</a> <link rel="alternate" type="text/html" href="commit/83ec429fc6461359ebb3a79b34b4b85ce61d0b9a.html" /> -<a href="#l88" class="line" id="l88"> 88</a> <author> -<a href="#l89" class="line" id="l89"> 89</a> <name>Samdal</name> -<a href="#l90" class="line" id="l90"> 90</a> <email>samdal@protonmail.com</email> -<a href="#l91" class="line" id="l91"> 91</a> </author> -<a href="#l92" class="line" id="l92"> 92</a> <content type="text">commit 83ec429fc6461359ebb3a79b34b4b85ce61d0b9a -<a href="#l93" class="line" id="l93"> 93</a> parent 3f169f81421b491528e81e172dce83abf19dace7 -<a href="#l94" class="line" id="l94"> 94</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l95" class="line" id="l95"> 95</a> Date: Sun, 2 Mar 2025 00:52:35 +0100 -<a href="#l96" class="line" id="l96"> 96</a> -<a href="#l97" class="line" id="l97"> 97</a> remove images scaling with vh, use h1 IDs -<a href="#l98" class="line" id="l98"> 98</a> -<a href="#l99" class="line" id="l99"> 99</a> </content> -<a href="#l100" class="line" id="l100"> 100</a> </entry> -<a href="#l101" class="line" id="l101"> 101</a> <entry> -<a href="#l102" class="line" id="l102"> 102</a> <id>3f169f81421b491528e81e172dce83abf19dace7</id> -<a href="#l103" class="line" id="l103"> 103</a> <published>2025-03-01T23:44:55Z</published> -<a href="#l104" class="line" id="l104"> 104</a> <updated>2025-03-01T23:44:55Z</updated> -<a href="#l105" class="line" id="l105"> 105</a> <title type="text">productivity through simplicity, change heading sz</title> -<a href="#l106" class="line" id="l106"> 106</a> <link rel="alternate" type="text/html" href="commit/3f169f81421b491528e81e172dce83abf19dace7.html" /> -<a href="#l107" class="line" id="l107"> 107</a> <author> -<a href="#l108" class="line" id="l108"> 108</a> <name>Samdal</name> -<a href="#l109" class="line" id="l109"> 109</a> <email>samdal@protonmail.com</email> -<a href="#l110" class="line" id="l110"> 110</a> </author> -<a href="#l111" class="line" id="l111"> 111</a> <content type="text">commit 3f169f81421b491528e81e172dce83abf19dace7 -<a href="#l112" class="line" id="l112"> 112</a> parent 8af18e7816919c5a58ab886e2213707cc38db8d1 -<a href="#l113" class="line" id="l113"> 113</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l114" class="line" id="l114"> 114</a> Date: Sun, 2 Mar 2025 00:44:55 +0100 -<a href="#l115" class="line" id="l115"> 115</a> -<a href="#l116" class="line" id="l116"> 116</a> productivity through simplicity, change heading sz -<a href="#l117" class="line" id="l117"> 117</a> -<a href="#l118" class="line" id="l118"> 118</a> </content> -<a href="#l119" class="line" id="l119"> 119</a> </entry> -<a href="#l120" class="line" id="l120"> 120</a> <entry> -<a href="#l121" class="line" id="l121"> 121</a> <id>8af18e7816919c5a58ab886e2213707cc38db8d1</id> -<a href="#l122" class="line" id="l122"> 122</a> <published>2025-03-01T19:31:53Z</published> -<a href="#l123" class="line" id="l123"> 123</a> <updated>2025-03-01T19:31:53Z</updated> -<a href="#l124" class="line" id="l124"> 124</a> <title type="text">build-sh blog clarity</title> -<a href="#l125" class="line" id="l125"> 125</a> <link rel="alternate" type="text/html" href="commit/8af18e7816919c5a58ab886e2213707cc38db8d1.html" /> -<a href="#l126" class="line" id="l126"> 126</a> <author> -<a href="#l127" class="line" id="l127"> 127</a> <name>Samdal</name> -<a href="#l128" class="line" id="l128"> 128</a> <email>samdal@protonmail.com</email> -<a href="#l129" class="line" id="l129"> 129</a> </author> -<a href="#l130" class="line" id="l130"> 130</a> <content type="text">commit 8af18e7816919c5a58ab886e2213707cc38db8d1 -<a href="#l131" class="line" id="l131"> 131</a> parent a3f0f04e1d8b6b406da2d96478ce34a33bc3c267 -<a href="#l132" class="line" id="l132"> 132</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l133" class="line" id="l133"> 133</a> Date: Sat, 1 Mar 2025 20:31:53 +0100 -<a href="#l134" class="line" id="l134"> 134</a> -<a href="#l135" class="line" id="l135"> 135</a> build-sh blog clarity -<a href="#l136" class="line" id="l136"> 136</a> -<a href="#l137" class="line" id="l137"> 137</a> </content> -<a href="#l138" class="line" id="l138"> 138</a> </entry> -<a href="#l139" class="line" id="l139"> 139</a> <entry> -<a href="#l140" class="line" id="l140"> 140</a> <id>a3f0f04e1d8b6b406da2d96478ce34a33bc3c267</id> -<a href="#l141" class="line" id="l141"> 141</a> <published>2025-03-01T19:28:32Z</published> -<a href="#l142" class="line" id="l142"> 142</a> <updated>2025-03-01T19:28:32Z</updated> -<a href="#l143" class="line" id="l143"> 143</a> <title type="text">fix inline code padding, update build.sh blog</title> -<a href="#l144" class="line" id="l144"> 144</a> <link rel="alternate" type="text/html" href="commit/a3f0f04e1d8b6b406da2d96478ce34a33bc3c267.html" /> -<a href="#l145" class="line" id="l145"> 145</a> <author> -<a href="#l146" class="line" id="l146"> 146</a> <name>Samdal</name> -<a href="#l147" class="line" id="l147"> 147</a> <email>samdal@protonmail.com</email> -<a href="#l148" class="line" id="l148"> 148</a> </author> -<a href="#l149" class="line" id="l149"> 149</a> <content type="text">commit a3f0f04e1d8b6b406da2d96478ce34a33bc3c267 -<a href="#l150" class="line" id="l150"> 150</a> parent 486e42a92356606d5be10c7af556f9380d93b8e2 -<a href="#l151" class="line" id="l151"> 151</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l152" class="line" id="l152"> 152</a> Date: Sat, 1 Mar 2025 20:28:32 +0100 -<a href="#l153" class="line" id="l153"> 153</a> -<a href="#l154" class="line" id="l154"> 154</a> fix inline code padding, update build.sh blog -<a href="#l155" class="line" id="l155"> 155</a> -<a href="#l156" class="line" id="l156"> 156</a> </content> -<a href="#l157" class="line" id="l157"> 157</a> </entry> -<a href="#l158" class="line" id="l158"> 158</a> <entry> -<a href="#l159" class="line" id="l159"> 159</a> <id>486e42a92356606d5be10c7af556f9380d93b8e2</id> -<a href="#l160" class="line" id="l160"> 160</a> <published>2025-03-01T17:17:46Z</published> -<a href="#l161" class="line" id="l161"> 161</a> <updated>2025-03-01T17:17:46Z</updated> -<a href="#l162" class="line" id="l162"> 162</a> <title type="text">add image sources to about, fix code css</title> -<a href="#l163" class="line" id="l163"> 163</a> <link rel="alternate" type="text/html" href="commit/486e42a92356606d5be10c7af556f9380d93b8e2.html" /> -<a href="#l164" class="line" id="l164"> 164</a> <author> -<a href="#l165" class="line" id="l165"> 165</a> <name>Samdal</name> -<a href="#l166" class="line" id="l166"> 166</a> <email>samdal@protonmail.com</email> -<a href="#l167" class="line" id="l167"> 167</a> </author> -<a href="#l168" class="line" id="l168"> 168</a> <content type="text">commit 486e42a92356606d5be10c7af556f9380d93b8e2 -<a href="#l169" class="line" id="l169"> 169</a> parent 085efdc03ed5f32e3aa2993d42d87e34f16a4a5a -<a href="#l170" class="line" id="l170"> 170</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l171" class="line" id="l171"> 171</a> Date: Sat, 1 Mar 2025 18:17:46 +0100 -<a href="#l172" class="line" id="l172"> 172</a> -<a href="#l173" class="line" id="l173"> 173</a> add image sources to about, fix code css -<a href="#l174" class="line" id="l174"> 174</a> -<a href="#l175" class="line" id="l175"> 175</a> </content> -<a href="#l176" class="line" id="l176"> 176</a> </entry> -<a href="#l177" class="line" id="l177"> 177</a> <entry> -<a href="#l178" class="line" id="l178"> 178</a> <id>085efdc03ed5f32e3aa2993d42d87e34f16a4a5a</id> -<a href="#l179" class="line" id="l179"> 179</a> <published>2025-03-01T16:20:23Z</published> -<a href="#l180" class="line" id="l180"> 180</a> <updated>2025-03-01T16:20:23Z</updated> -<a href="#l181" class="line" id="l181"> 181</a> <title type="text">don&#39;t index tag sites, add more tips to soldering</title> -<a href="#l182" class="line" id="l182"> 182</a> <link rel="alternate" type="text/html" href="commit/085efdc03ed5f32e3aa2993d42d87e34f16a4a5a.html" /> -<a href="#l183" class="line" id="l183"> 183</a> <author> -<a href="#l184" class="line" id="l184"> 184</a> <name>Samdal</name> -<a href="#l185" class="line" id="l185"> 185</a> <email>samdal@protonmail.com</email> -<a href="#l186" class="line" id="l186"> 186</a> </author> -<a href="#l187" class="line" id="l187"> 187</a> <content type="text">commit 085efdc03ed5f32e3aa2993d42d87e34f16a4a5a -<a href="#l188" class="line" id="l188"> 188</a> parent 6231ea4beaa46825c90455eb89b1cc4399067fba -<a href="#l189" class="line" id="l189"> 189</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l190" class="line" id="l190"> 190</a> Date: Sat, 1 Mar 2025 17:20:23 +0100 -<a href="#l191" class="line" id="l191"> 191</a> -<a href="#l192" class="line" id="l192"> 192</a> don&#39;t index tag sites, add more tips to soldering -<a href="#l193" class="line" id="l193"> 193</a> -<a href="#l194" class="line" id="l194"> 194</a> </content> -<a href="#l195" class="line" id="l195"> 195</a> </entry> -<a href="#l196" class="line" id="l196"> 196</a> <entry> -<a href="#l197" class="line" id="l197"> 197</a> <id>6231ea4beaa46825c90455eb89b1cc4399067fba</id> -<a href="#l198" class="line" id="l198"> 198</a> <published>2025-03-01T01:33:25Z</published> -<a href="#l199" class="line" id="l199"> 199</a> <updated>2025-03-01T01:33:25Z</updated> -<a href="#l200" class="line" id="l200"> 200</a> <title type="text">move stolen art into folder,</title> -<a href="#l201" class="line" id="l201"> 201</a> <link rel="alternate" type="text/html" href="commit/6231ea4beaa46825c90455eb89b1cc4399067fba.html" /> -<a href="#l202" class="line" id="l202"> 202</a> <author> -<a href="#l203" class="line" id="l203"> 203</a> <name>Samdal</name> -<a href="#l204" class="line" id="l204"> 204</a> <email>samdal@protonmail.com</email> -<a href="#l205" class="line" id="l205"> 205</a> </author> -<a href="#l206" class="line" id="l206"> 206</a> <content type="text">commit 6231ea4beaa46825c90455eb89b1cc4399067fba -<a href="#l207" class="line" id="l207"> 207</a> parent 3f70ae7209a77cac19ee3ebda40bfd8a552fba7b -<a href="#l208" class="line" id="l208"> 208</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l209" class="line" id="l209"> 209</a> Date: Sat, 1 Mar 2025 02:33:25 +0100 -<a href="#l210" class="line" id="l210"> 210</a> -<a href="#l211" class="line" id="l211"> 211</a> move stolen art into folder, -<a href="#l212" class="line" id="l212"> 212</a> -<a href="#l213" class="line" id="l213"> 213</a> </content> -<a href="#l214" class="line" id="l214"> 214</a> </entry> -<a href="#l215" class="line" id="l215"> 215</a> <entry> -<a href="#l216" class="line" id="l216"> 216</a> <id>3f70ae7209a77cac19ee3ebda40bfd8a552fba7b</id> -<a href="#l217" class="line" id="l217"> 217</a> <published>2025-02-28T22:38:00Z</published> -<a href="#l218" class="line" id="l218"> 218</a> <updated>2025-02-28T22:38:00Z</updated> -<a href="#l219" class="line" id="l219"> 219</a> <title type="text">change footer image</title> -<a href="#l220" class="line" id="l220"> 220</a> <link rel="alternate" type="text/html" href="commit/3f70ae7209a77cac19ee3ebda40bfd8a552fba7b.html" /> -<a href="#l221" class="line" id="l221"> 221</a> <author> -<a href="#l222" class="line" id="l222"> 222</a> <name>Samdal</name> -<a href="#l223" class="line" id="l223"> 223</a> <email>samdal@protonmail.com</email> -<a href="#l224" class="line" id="l224"> 224</a> </author> -<a href="#l225" class="line" id="l225"> 225</a> <content type="text">commit 3f70ae7209a77cac19ee3ebda40bfd8a552fba7b -<a href="#l226" class="line" id="l226"> 226</a> parent ef58cbb80324246975b35ffa7190e370772ec672 -<a href="#l227" class="line" id="l227"> 227</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l228" class="line" id="l228"> 228</a> Date: Fri, 28 Feb 2025 23:38:00 +0100 -<a href="#l229" class="line" id="l229"> 229</a> -<a href="#l230" class="line" id="l230"> 230</a> change footer image -<a href="#l231" class="line" id="l231"> 231</a> -<a href="#l232" class="line" id="l232"> 232</a> </content> -<a href="#l233" class="line" id="l233"> 233</a> </entry> -<a href="#l234" class="line" id="l234"> 234</a> <entry> -<a href="#l235" class="line" id="l235"> 235</a> <id>ef58cbb80324246975b35ffa7190e370772ec672</id> -<a href="#l236" class="line" id="l236"> 236</a> <published>2025-02-28T21:31:05Z</published> -<a href="#l237" class="line" id="l237"> 237</a> <updated>2025-02-28T21:31:05Z</updated> -<a href="#l238" class="line" id="l238"> 238</a> <title type="text">add build sh</title> -<a href="#l239" class="line" id="l239"> 239</a> <link rel="alternate" type="text/html" href="commit/ef58cbb80324246975b35ffa7190e370772ec672.html" /> -<a href="#l240" class="line" id="l240"> 240</a> <author> -<a href="#l241" class="line" id="l241"> 241</a> <name>Samdal</name> -<a href="#l242" class="line" id="l242"> 242</a> <email>samdal@protonmail.com</email> -<a href="#l243" class="line" id="l243"> 243</a> </author> -<a href="#l244" class="line" id="l244"> 244</a> <content type="text">commit ef58cbb80324246975b35ffa7190e370772ec672 -<a href="#l245" class="line" id="l245"> 245</a> parent 4a72a4be9ded108b32e513d1a109052fce424020 -<a href="#l246" class="line" id="l246"> 246</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l247" class="line" id="l247"> 247</a> Date: Fri, 28 Feb 2025 22:31:05 +0100 -<a href="#l248" class="line" id="l248"> 248</a> -<a href="#l249" class="line" id="l249"> 249</a> add build sh -<a href="#l250" class="line" id="l250"> 250</a> -<a href="#l251" class="line" id="l251"> 251</a> </content> -<a href="#l252" class="line" id="l252"> 252</a> </entry> -<a href="#l253" class="line" id="l253"> 253</a> <entry> -<a href="#l254" class="line" id="l254"> 254</a> <id>4a72a4be9ded108b32e513d1a109052fce424020</id> -<a href="#l255" class="line" id="l255"> 255</a> <published>2025-02-28T19:23:36Z</published> -<a href="#l256" class="line" id="l256"> 256</a> <updated>2025-02-28T19:23:36Z</updated> -<a href="#l257" class="line" id="l257"> 257</a> <title type="text">update todo, add brass wool to list on solder post</title> -<a href="#l258" class="line" id="l258"> 258</a> <link rel="alternate" type="text/html" href="commit/4a72a4be9ded108b32e513d1a109052fce424020.html" /> -<a href="#l259" class="line" id="l259"> 259</a> <author> -<a href="#l260" class="line" id="l260"> 260</a> <name>Samdal</name> -<a href="#l261" class="line" id="l261"> 261</a> <email>samdal@protonmail.com</email> -<a href="#l262" class="line" id="l262"> 262</a> </author> -<a href="#l263" class="line" id="l263"> 263</a> <content type="text">commit 4a72a4be9ded108b32e513d1a109052fce424020 -<a href="#l264" class="line" id="l264"> 264</a> parent 9a80b19540dd4802ee039a164ef0fc410b7d80e4 -<a href="#l265" class="line" id="l265"> 265</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l266" class="line" id="l266"> 266</a> Date: Fri, 28 Feb 2025 20:23:36 +0100 -<a href="#l267" class="line" id="l267"> 267</a> -<a href="#l268" class="line" id="l268"> 268</a> update todo, add brass wool to list on solder post -<a href="#l269" class="line" id="l269"> 269</a> -<a href="#l270" class="line" id="l270"> 270</a> </content> -<a href="#l271" class="line" id="l271"> 271</a> </entry> -<a href="#l272" class="line" id="l272"> 272</a> <entry> -<a href="#l273" class="line" id="l273"> 273</a> <id>9a80b19540dd4802ee039a164ef0fc410b7d80e4</id> -<a href="#l274" class="line" id="l274"> 274</a> <published>2025-02-28T19:09:59Z</published> -<a href="#l275" class="line" id="l275"> 275</a> <updated>2025-02-28T19:09:59Z</updated> -<a href="#l276" class="line" id="l276"> 276</a> <title type="text">fix order of recommended list</title> -<a href="#l277" class="line" id="l277"> 277</a> <link rel="alternate" type="text/html" href="commit/9a80b19540dd4802ee039a164ef0fc410b7d80e4.html" /> -<a href="#l278" class="line" id="l278"> 278</a> <author> -<a href="#l279" class="line" id="l279"> 279</a> <name>Samdal</name> -<a href="#l280" class="line" id="l280"> 280</a> <email>samdal@protonmail.com</email> -<a href="#l281" class="line" id="l281"> 281</a> </author> -<a href="#l282" class="line" id="l282"> 282</a> <content type="text">commit 9a80b19540dd4802ee039a164ef0fc410b7d80e4 -<a href="#l283" class="line" id="l283"> 283</a> parent 7ec954addaee7b12c93520ab31b37e72c6ff69d4 -<a href="#l284" class="line" id="l284"> 284</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l285" class="line" id="l285"> 285</a> Date: Fri, 28 Feb 2025 20:09:59 +0100 -<a href="#l286" class="line" id="l286"> 286</a> -<a href="#l287" class="line" id="l287"> 287</a> fix order of recommended list -<a href="#l288" class="line" id="l288"> 288</a> -<a href="#l289" class="line" id="l289"> 289</a> </content> -<a href="#l290" class="line" id="l290"> 290</a> </entry> -<a href="#l291" class="line" id="l291"> 291</a> <entry> -<a href="#l292" class="line" id="l292"> 292</a> <id>7ec954addaee7b12c93520ab31b37e72c6ff69d4</id> -<a href="#l293" class="line" id="l293"> 293</a> <published>2025-02-28T19:08:32Z</published> -<a href="#l294" class="line" id="l294"> 294</a> <updated>2025-02-28T19:08:32Z</updated> -<a href="#l295" class="line" id="l295"> 295</a> <title type="text">soldering tutorial</title> -<a href="#l296" class="line" id="l296"> 296</a> <link rel="alternate" type="text/html" href="commit/7ec954addaee7b12c93520ab31b37e72c6ff69d4.html" /> -<a href="#l297" class="line" id="l297"> 297</a> <author> -<a href="#l298" class="line" id="l298"> 298</a> <name>Samdal</name> -<a href="#l299" class="line" id="l299"> 299</a> <email>samdal@protonmail.com</email> -<a href="#l300" class="line" id="l300"> 300</a> </author> -<a href="#l301" class="line" id="l301"> 301</a> <content type="text">commit 7ec954addaee7b12c93520ab31b37e72c6ff69d4 -<a href="#l302" class="line" id="l302"> 302</a> parent a6f143e16da19f01d0b1d60f5d03e88ec7d715a3 -<a href="#l303" class="line" id="l303"> 303</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l304" class="line" id="l304"> 304</a> Date: Fri, 28 Feb 2025 20:08:32 +0100 -<a href="#l305" class="line" id="l305"> 305</a> -<a href="#l306" class="line" id="l306"> 306</a> soldering tutorial -<a href="#l307" class="line" id="l307"> 307</a> -<a href="#l308" class="line" id="l308"> 308</a> </content> -<a href="#l309" class="line" id="l309"> 309</a> </entry> -<a href="#l310" class="line" id="l310"> 310</a> <entry> -<a href="#l311" class="line" id="l311"> 311</a> <id>a6f143e16da19f01d0b1d60f5d03e88ec7d715a3</id> -<a href="#l312" class="line" id="l312"> 312</a> <published>2025-02-28T15:31:48Z</published> -<a href="#l313" class="line" id="l313"> 313</a> <updated>2025-02-28T15:31:48Z</updated> -<a href="#l314" class="line" id="l314"> 314</a> <title type="text">change code font, add syntax highlighting</title> -<a href="#l315" class="line" id="l315"> 315</a> <link rel="alternate" type="text/html" href="commit/a6f143e16da19f01d0b1d60f5d03e88ec7d715a3.html" /> -<a href="#l316" class="line" id="l316"> 316</a> <author> -<a href="#l317" class="line" id="l317"> 317</a> <name>Samdal</name> -<a href="#l318" class="line" id="l318"> 318</a> <email>samdal@protonmail.com</email> -<a href="#l319" class="line" id="l319"> 319</a> </author> -<a href="#l320" class="line" id="l320"> 320</a> <content type="text">commit a6f143e16da19f01d0b1d60f5d03e88ec7d715a3 -<a href="#l321" class="line" id="l321"> 321</a> parent dbeda96e92915990c3c47f3032de3ca6d350901d -<a href="#l322" class="line" id="l322"> 322</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l323" class="line" id="l323"> 323</a> Date: Fri, 28 Feb 2025 16:31:48 +0100 -<a href="#l324" class="line" id="l324"> 324</a> -<a href="#l325" class="line" id="l325"> 325</a> change code font, add syntax highlighting -<a href="#l326" class="line" id="l326"> 326</a> -<a href="#l327" class="line" id="l327"> 327</a> </content> -<a href="#l328" class="line" id="l328"> 328</a> </entry> -<a href="#l329" class="line" id="l329"> 329</a> <entry> -<a href="#l330" class="line" id="l330"> 330</a> <id>dbeda96e92915990c3c47f3032de3ca6d350901d</id> -<a href="#l331" class="line" id="l331"> 331</a> <published>2025-02-25T17:25:53Z</published> -<a href="#l332" class="line" id="l332"> 332</a> <updated>2025-02-25T17:25:53Z</updated> -<a href="#l333" class="line" id="l333"> 333</a> <title type="text">try to improve vocab in old projects</title> -<a href="#l334" class="line" id="l334"> 334</a> <link rel="alternate" type="text/html" href="commit/dbeda96e92915990c3c47f3032de3ca6d350901d.html" /> -<a href="#l335" class="line" id="l335"> 335</a> <author> -<a href="#l336" class="line" id="l336"> 336</a> <name>Samdal</name> -<a href="#l337" class="line" id="l337"> 337</a> <email>samdal@protonmail.com</email> -<a href="#l338" class="line" id="l338"> 338</a> </author> -<a href="#l339" class="line" id="l339"> 339</a> <content type="text">commit dbeda96e92915990c3c47f3032de3ca6d350901d -<a href="#l340" class="line" id="l340"> 340</a> parent f64fb1e126936d9d59edf6c86048eb9f526ead70 -<a href="#l341" class="line" id="l341"> 341</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l342" class="line" id="l342"> 342</a> Date: Tue, 25 Feb 2025 18:25:53 +0100 -<a href="#l343" class="line" id="l343"> 343</a> -<a href="#l344" class="line" id="l344"> 344</a> try to improve vocab in old projects -<a href="#l345" class="line" id="l345"> 345</a> -<a href="#l346" class="line" id="l346"> 346</a> </content> -<a href="#l347" class="line" id="l347"> 347</a> </entry> -<a href="#l348" class="line" id="l348"> 348</a> <entry> -<a href="#l349" class="line" id="l349"> 349</a> <id>f64fb1e126936d9d59edf6c86048eb9f526ead70</id> -<a href="#l350" class="line" id="l350"> 350</a> <published>2025-02-24T21:20:32Z</published> -<a href="#l351" class="line" id="l351"> 351</a> <updated>2025-02-24T21:20:32Z</updated> -<a href="#l352" class="line" id="l352"> 352</a> <title type="text">update todo</title> -<a href="#l353" class="line" id="l353"> 353</a> <link rel="alternate" type="text/html" href="commit/f64fb1e126936d9d59edf6c86048eb9f526ead70.html" /> -<a href="#l354" class="line" id="l354"> 354</a> <author> -<a href="#l355" class="line" id="l355"> 355</a> <name>Samdal</name> -<a href="#l356" class="line" id="l356"> 356</a> <email>samdal@protonmail.com</email> -<a href="#l357" class="line" id="l357"> 357</a> </author> -<a href="#l358" class="line" id="l358"> 358</a> <content type="text">commit f64fb1e126936d9d59edf6c86048eb9f526ead70 -<a href="#l359" class="line" id="l359"> 359</a> parent 3b61ade596ca9f13fafaa1eb77fa40035aef9e92 -<a href="#l360" class="line" id="l360"> 360</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l361" class="line" id="l361"> 361</a> Date: Mon, 24 Feb 2025 22:20:32 +0100 -<a href="#l362" class="line" id="l362"> 362</a> -<a href="#l363" class="line" id="l363"> 363</a> update todo -<a href="#l364" class="line" id="l364"> 364</a> -<a href="#l365" class="line" id="l365"> 365</a> </content> -<a href="#l366" class="line" id="l366"> 366</a> </entry> -<a href="#l367" class="line" id="l367"> 367</a> <entry> -<a href="#l368" class="line" id="l368"> 368</a> <id>3b61ade596ca9f13fafaa1eb77fa40035aef9e92</id> -<a href="#l369" class="line" id="l369"> 369</a> <published>2025-02-24T20:44:26Z</published> -<a href="#l370" class="line" id="l370"> 370</a> <updated>2025-02-24T20:44:26Z</updated> -<a href="#l371" class="line" id="l371"> 371</a> <title type="text">grammarly update about</title> -<a href="#l372" class="line" id="l372"> 372</a> <link rel="alternate" type="text/html" href="commit/3b61ade596ca9f13fafaa1eb77fa40035aef9e92.html" /> -<a href="#l373" class="line" id="l373"> 373</a> <author> -<a href="#l374" class="line" id="l374"> 374</a> <name>Samdal</name> -<a href="#l375" class="line" id="l375"> 375</a> <email>samdal@protonmail.com</email> -<a href="#l376" class="line" id="l376"> 376</a> </author> -<a href="#l377" class="line" id="l377"> 377</a> <content type="text">commit 3b61ade596ca9f13fafaa1eb77fa40035aef9e92 -<a href="#l378" class="line" id="l378"> 378</a> parent 6f47e63edea4e5bae246e7459cc7dc4a5bb03fed -<a href="#l379" class="line" id="l379"> 379</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l380" class="line" id="l380"> 380</a> Date: Mon, 24 Feb 2025 21:44:26 +0100 -<a href="#l381" class="line" id="l381"> 381</a> -<a href="#l382" class="line" id="l382"> 382</a> grammarly update about -<a href="#l383" class="line" id="l383"> 383</a> -<a href="#l384" class="line" id="l384"> 384</a> </content> -<a href="#l385" class="line" id="l385"> 385</a> </entry> -<a href="#l386" class="line" id="l386"> 386</a> <entry> -<a href="#l387" class="line" id="l387"> 387</a> <id>6f47e63edea4e5bae246e7459cc7dc4a5bb03fed</id> -<a href="#l388" class="line" id="l388"> 388</a> <published>2025-02-24T20:40:26Z</published> -<a href="#l389" class="line" id="l389"> 389</a> <updated>2025-02-24T20:40:26Z</updated> -<a href="#l390" class="line" id="l390"> 390</a> <title type="text">Grammarly updates</title> -<a href="#l391" class="line" id="l391"> 391</a> <link rel="alternate" type="text/html" href="commit/6f47e63edea4e5bae246e7459cc7dc4a5bb03fed.html" /> -<a href="#l392" class="line" id="l392"> 392</a> <author> -<a href="#l393" class="line" id="l393"> 393</a> <name>Samdal</name> -<a href="#l394" class="line" id="l394"> 394</a> <email>samdal@protonmail.com</email> -<a href="#l395" class="line" id="l395"> 395</a> </author> -<a href="#l396" class="line" id="l396"> 396</a> <content type="text">commit 6f47e63edea4e5bae246e7459cc7dc4a5bb03fed -<a href="#l397" class="line" id="l397"> 397</a> parent 894eb5ee0608e6f151268144f7b8058f09b1aeb2 -<a href="#l398" class="line" id="l398"> 398</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l399" class="line" id="l399"> 399</a> Date: Mon, 24 Feb 2025 21:40:26 +0100 -<a href="#l400" class="line" id="l400"> 400</a> -<a href="#l401" class="line" id="l401"> 401</a> Grammarly updates -<a href="#l402" class="line" id="l402"> 402</a> -<a href="#l403" class="line" id="l403"> 403</a> </content> -<a href="#l404" class="line" id="l404"> 404</a> </entry> -<a href="#l405" class="line" id="l405"> 405</a> <entry> -<a href="#l406" class="line" id="l406"> 406</a> <id>894eb5ee0608e6f151268144f7b8058f09b1aeb2</id> -<a href="#l407" class="line" id="l407"> 407</a> <published>2025-02-24T02:56:09Z</published> -<a href="#l408" class="line" id="l408"> 408</a> <updated>2025-02-24T02:56:09Z</updated> -<a href="#l409" class="line" id="l409"> 409</a> <title type="text"> more fixes old projects</title> -<a href="#l410" class="line" id="l410"> 410</a> <link rel="alternate" type="text/html" href="commit/894eb5ee0608e6f151268144f7b8058f09b1aeb2.html" /> -<a href="#l411" class="line" id="l411"> 411</a> <author> -<a href="#l412" class="line" id="l412"> 412</a> <name>Samdal</name> -<a href="#l413" class="line" id="l413"> 413</a> <email>samdal@protonmail.com</email> -<a href="#l414" class="line" id="l414"> 414</a> </author> -<a href="#l415" class="line" id="l415"> 415</a> <content type="text">commit 894eb5ee0608e6f151268144f7b8058f09b1aeb2 -<a href="#l416" class="line" id="l416"> 416</a> parent a4f689e78cdd9a7fadda7d399cb78997c8bd7e6f -<a href="#l417" class="line" id="l417"> 417</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l418" class="line" id="l418"> 418</a> Date: Mon, 24 Feb 2025 03:56:09 +0100 -<a href="#l419" class="line" id="l419"> 419</a> -<a href="#l420" class="line" id="l420"> 420</a> more fixes old projects -<a href="#l421" class="line" id="l421"> 421</a> -<a href="#l422" class="line" id="l422"> 422</a> </content> -<a href="#l423" class="line" id="l423"> 423</a> </entry> -<a href="#l424" class="line" id="l424"> 424</a> <entry> -<a href="#l425" class="line" id="l425"> 425</a> <id>a4f689e78cdd9a7fadda7d399cb78997c8bd7e6f</id> -<a href="#l426" class="line" id="l426"> 426</a> <published>2025-02-24T02:36:35Z</published> -<a href="#l427" class="line" id="l427"> 427</a> <updated>2025-02-24T02:36:35Z</updated> -<a href="#l428" class="line" id="l428"> 428</a> <title type="text">fix old projects</title> -<a href="#l429" class="line" id="l429"> 429</a> <link rel="alternate" type="text/html" href="commit/a4f689e78cdd9a7fadda7d399cb78997c8bd7e6f.html" /> -<a href="#l430" class="line" id="l430"> 430</a> <author> -<a href="#l431" class="line" id="l431"> 431</a> <name>Samdal</name> -<a href="#l432" class="line" id="l432"> 432</a> <email>samdal@protonmail.com</email> -<a href="#l433" class="line" id="l433"> 433</a> </author> -<a href="#l434" class="line" id="l434"> 434</a> <content type="text">commit a4f689e78cdd9a7fadda7d399cb78997c8bd7e6f -<a href="#l435" class="line" id="l435"> 435</a> parent 4e86f87db8e5cd5414aa23ef87b9036df4ea47f6 -<a href="#l436" class="line" id="l436"> 436</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l437" class="line" id="l437"> 437</a> Date: Mon, 24 Feb 2025 03:36:35 +0100 -<a href="#l438" class="line" id="l438"> 438</a> -<a href="#l439" class="line" id="l439"> 439</a> fix old projects -<a href="#l440" class="line" id="l440"> 440</a> -<a href="#l441" class="line" id="l441"> 441</a> </content> -<a href="#l442" class="line" id="l442"> 442</a> </entry> -<a href="#l443" class="line" id="l443"> 443</a> <entry> -<a href="#l444" class="line" id="l444"> 444</a> <id>4e86f87db8e5cd5414aa23ef87b9036df4ea47f6</id> -<a href="#l445" class="line" id="l445"> 445</a> <published>2025-02-23T21:20:54Z</published> -<a href="#l446" class="line" id="l446"> 446</a> <updated>2025-02-23T21:20:54Z</updated> -<a href="#l447" class="line" id="l447"> 447</a> <title type="text">update old projects description</title> -<a href="#l448" class="line" id="l448"> 448</a> <link rel="alternate" type="text/html" href="commit/4e86f87db8e5cd5414aa23ef87b9036df4ea47f6.html" /> -<a href="#l449" class="line" id="l449"> 449</a> <author> -<a href="#l450" class="line" id="l450"> 450</a> <name>Samdal</name> -<a href="#l451" class="line" id="l451"> 451</a> <email>samdal@protonmail.com</email> -<a href="#l452" class="line" id="l452"> 452</a> </author> -<a href="#l453" class="line" id="l453"> 453</a> <content type="text">commit 4e86f87db8e5cd5414aa23ef87b9036df4ea47f6 -<a href="#l454" class="line" id="l454"> 454</a> parent f2b3e45ef748087d094146332d3090665379bbb2 -<a href="#l455" class="line" id="l455"> 455</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l456" class="line" id="l456"> 456</a> Date: Sun, 23 Feb 2025 22:20:54 +0100 -<a href="#l457" class="line" id="l457"> 457</a> -<a href="#l458" class="line" id="l458"> 458</a> update old projects description -<a href="#l459" class="line" id="l459"> 459</a> -<a href="#l460" class="line" id="l460"> 460</a> </content> -<a href="#l461" class="line" id="l461"> 461</a> </entry> -<a href="#l462" class="line" id="l462"> 462</a> <entry> -<a href="#l463" class="line" id="l463"> 463</a> <id>f2b3e45ef748087d094146332d3090665379bbb2</id> -<a href="#l464" class="line" id="l464"> 464</a> <published>2025-02-23T21:17:13Z</published> -<a href="#l465" class="line" id="l465"> 465</a> <updated>2025-02-23T21:17:13Z</updated> -<a href="#l466" class="line" id="l466"> 466</a> <title type="text">old projects post, css for better image sizes</title> -<a href="#l467" class="line" id="l467"> 467</a> <link rel="alternate" type="text/html" href="commit/f2b3e45ef748087d094146332d3090665379bbb2.html" /> -<a href="#l468" class="line" id="l468"> 468</a> <author> -<a href="#l469" class="line" id="l469"> 469</a> <name>Samdal</name> -<a href="#l470" class="line" id="l470"> 470</a> <email>samdal@protonmail.com</email> -<a href="#l471" class="line" id="l471"> 471</a> </author> -<a href="#l472" class="line" id="l472"> 472</a> <content type="text">commit f2b3e45ef748087d094146332d3090665379bbb2 -<a href="#l473" class="line" id="l473"> 473</a> parent cac93309d4c0b00c6d0a7f2bcafb3e46dc12c289 -<a href="#l474" class="line" id="l474"> 474</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l475" class="line" id="l475"> 475</a> Date: Sun, 23 Feb 2025 22:17:13 +0100 -<a href="#l476" class="line" id="l476"> 476</a> -<a href="#l477" class="line" id="l477"> 477</a> old projects post, css for better image sizes -<a href="#l478" class="line" id="l478"> 478</a> -<a href="#l479" class="line" id="l479"> 479</a> </content> -<a href="#l480" class="line" id="l480"> 480</a> </entry> -<a href="#l481" class="line" id="l481"> 481</a> <entry> -<a href="#l482" class="line" id="l482"> 482</a> <id>cac93309d4c0b00c6d0a7f2bcafb3e46dc12c289</id> -<a href="#l483" class="line" id="l483"> 483</a> <published>2025-02-23T14:51:14Z</published> -<a href="#l484" class="line" id="l484"> 484</a> <updated>2025-02-23T14:51:14Z</updated> -<a href="#l485" class="line" id="l485"> 485</a> <title type="text">remove oopsie</title> -<a href="#l486" class="line" id="l486"> 486</a> <link rel="alternate" type="text/html" href="commit/cac93309d4c0b00c6d0a7f2bcafb3e46dc12c289.html" /> -<a href="#l487" class="line" id="l487"> 487</a> <author> -<a href="#l488" class="line" id="l488"> 488</a> <name>Samdal</name> -<a href="#l489" class="line" id="l489"> 489</a> <email>samdal@protonmail.com</email> -<a href="#l490" class="line" id="l490"> 490</a> </author> -<a href="#l491" class="line" id="l491"> 491</a> <content type="text">commit cac93309d4c0b00c6d0a7f2bcafb3e46dc12c289 -<a href="#l492" class="line" id="l492"> 492</a> parent f09dc59da9d6d2005be869258e7693f0da1201ea -<a href="#l493" class="line" id="l493"> 493</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l494" class="line" id="l494"> 494</a> Date: Sun, 23 Feb 2025 15:51:14 +0100 -<a href="#l495" class="line" id="l495"> 495</a> -<a href="#l496" class="line" id="l496"> 496</a> remove oopsie -<a href="#l497" class="line" id="l497"> 497</a> -<a href="#l498" class="line" id="l498"> 498</a> </content> -<a href="#l499" class="line" id="l499"> 499</a> </entry> -<a href="#l500" class="line" id="l500"> 500</a> <entry> -<a href="#l501" class="line" id="l501"> 501</a> <id>f09dc59da9d6d2005be869258e7693f0da1201ea</id> -<a href="#l502" class="line" id="l502"> 502</a> <published>2025-02-23T14:49:08Z</published> -<a href="#l503" class="line" id="l503"> 503</a> <updated>2025-02-23T14:49:08Z</updated> -<a href="#l504" class="line" id="l504"> 504</a> <title type="text">improve quotes, fix some spelling</title> -<a href="#l505" class="line" id="l505"> 505</a> <link rel="alternate" type="text/html" href="commit/f09dc59da9d6d2005be869258e7693f0da1201ea.html" /> -<a href="#l506" class="line" id="l506"> 506</a> <author> -<a href="#l507" class="line" id="l507"> 507</a> <name>Samdal</name> -<a href="#l508" class="line" id="l508"> 508</a> <email>samdal@protonmail.com</email> -<a href="#l509" class="line" id="l509"> 509</a> </author> -<a href="#l510" class="line" id="l510"> 510</a> <content type="text">commit f09dc59da9d6d2005be869258e7693f0da1201ea -<a href="#l511" class="line" id="l511"> 511</a> parent eac51b353cfd6e538d7d0d047e448ea8b44ddf07 -<a href="#l512" class="line" id="l512"> 512</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l513" class="line" id="l513"> 513</a> Date: Sun, 23 Feb 2025 15:49:08 +0100 -<a href="#l514" class="line" id="l514"> 514</a> -<a href="#l515" class="line" id="l515"> 515</a> improve quotes, fix some spelling -<a href="#l516" class="line" id="l516"> 516</a> -<a href="#l517" class="line" id="l517"> 517</a> </content> -<a href="#l518" class="line" id="l518"> 518</a> </entry> -<a href="#l519" class="line" id="l519"> 519</a> <entry> -<a href="#l520" class="line" id="l520"> 520</a> <id>eac51b353cfd6e538d7d0d047e448ea8b44ddf07</id> -<a href="#l521" class="line" id="l521"> 521</a> <published>2025-02-22T14:38:43Z</published> -<a href="#l522" class="line" id="l522"> 522</a> <updated>2025-02-22T14:38:43Z</updated> -<a href="#l523" class="line" id="l523"> 523</a> <title type="text">add full screen on video embeds</title> -<a href="#l524" class="line" id="l524"> 524</a> <link rel="alternate" type="text/html" href="commit/eac51b353cfd6e538d7d0d047e448ea8b44ddf07.html" /> -<a href="#l525" class="line" id="l525"> 525</a> <author> -<a href="#l526" class="line" id="l526"> 526</a> <name>Samdal</name> -<a href="#l527" class="line" id="l527"> 527</a> <email>samdal@protonmail.com</email> -<a href="#l528" class="line" id="l528"> 528</a> </author> -<a href="#l529" class="line" id="l529"> 529</a> <content type="text">commit eac51b353cfd6e538d7d0d047e448ea8b44ddf07 -<a href="#l530" class="line" id="l530"> 530</a> parent 14327ac4e083f278ba11b7eed5f79a0f6fd2f6ab -<a href="#l531" class="line" id="l531"> 531</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l532" class="line" id="l532"> 532</a> Date: Sat, 22 Feb 2025 15:38:43 +0100 -<a href="#l533" class="line" id="l533"> 533</a> -<a href="#l534" class="line" id="l534"> 534</a> add full screen on video embeds -<a href="#l535" class="line" id="l535"> 535</a> -<a href="#l536" class="line" id="l536"> 536</a> </content> -<a href="#l537" class="line" id="l537"> 537</a> </entry> -<a href="#l538" class="line" id="l538"> 538</a> <entry> -<a href="#l539" class="line" id="l539"> 539</a> <id>14327ac4e083f278ba11b7eed5f79a0f6fd2f6ab</id> -<a href="#l540" class="line" id="l540"> 540</a> <published>2025-02-22T14:22:56Z</published> -<a href="#l541" class="line" id="l541"> 541</a> <updated>2025-02-22T14:22:56Z</updated> -<a href="#l542" class="line" id="l542"> 542</a> <title type="text">synonym</title> -<a href="#l543" class="line" id="l543"> 543</a> <link rel="alternate" type="text/html" href="commit/14327ac4e083f278ba11b7eed5f79a0f6fd2f6ab.html" /> -<a href="#l544" class="line" id="l544"> 544</a> <author> -<a href="#l545" class="line" id="l545"> 545</a> <name>Samdal</name> -<a href="#l546" class="line" id="l546"> 546</a> <email>samdal@protonmail.com</email> -<a href="#l547" class="line" id="l547"> 547</a> </author> -<a href="#l548" class="line" id="l548"> 548</a> <content type="text">commit 14327ac4e083f278ba11b7eed5f79a0f6fd2f6ab -<a href="#l549" class="line" id="l549"> 549</a> parent 3ee1cca27858a1a6267b06643bef26b5b567ae86 -<a href="#l550" class="line" id="l550"> 550</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l551" class="line" id="l551"> 551</a> Date: Sat, 22 Feb 2025 15:22:56 +0100 -<a href="#l552" class="line" id="l552"> 552</a> -<a href="#l553" class="line" id="l553"> 553</a> synonym -<a href="#l554" class="line" id="l554"> 554</a> -<a href="#l555" class="line" id="l555"> 555</a> </content> -<a href="#l556" class="line" id="l556"> 556</a> </entry> -<a href="#l557" class="line" id="l557"> 557</a> <entry> -<a href="#l558" class="line" id="l558"> 558</a> <id>3ee1cca27858a1a6267b06643bef26b5b567ae86</id> -<a href="#l559" class="line" id="l559"> 559</a> <published>2025-02-22T14:20:44Z</published> -<a href="#l560" class="line" id="l560"> 560</a> <updated>2025-02-22T14:20:44Z</updated> -<a href="#l561" class="line" id="l561"> 561</a> <title type="text">add implications of OOP</title> -<a href="#l562" class="line" id="l562"> 562</a> <link rel="alternate" type="text/html" href="commit/3ee1cca27858a1a6267b06643bef26b5b567ae86.html" /> -<a href="#l563" class="line" id="l563"> 563</a> <author> -<a href="#l564" class="line" id="l564"> 564</a> <name>Samdal</name> -<a href="#l565" class="line" id="l565"> 565</a> <email>samdal@protonmail.com</email> -<a href="#l566" class="line" id="l566"> 566</a> </author> -<a href="#l567" class="line" id="l567"> 567</a> <content type="text">commit 3ee1cca27858a1a6267b06643bef26b5b567ae86 -<a href="#l568" class="line" id="l568"> 568</a> parent 4f8c91dd5798229d604c16f6f38123d9848430ce -<a href="#l569" class="line" id="l569"> 569</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l570" class="line" id="l570"> 570</a> Date: Sat, 22 Feb 2025 15:20:44 +0100 -<a href="#l571" class="line" id="l571"> 571</a> -<a href="#l572" class="line" id="l572"> 572</a> add implications of OOP -<a href="#l573" class="line" id="l573"> 573</a> -<a href="#l574" class="line" id="l574"> 574</a> </content> -<a href="#l575" class="line" id="l575"> 575</a> </entry> -<a href="#l576" class="line" id="l576"> 576</a> <entry> -<a href="#l577" class="line" id="l577"> 577</a> <id>4f8c91dd5798229d604c16f6f38123d9848430ce</id> -<a href="#l578" class="line" id="l578"> 578</a> <published>2025-02-22T08:40:12Z</published> -<a href="#l579" class="line" id="l579"> 579</a> <updated>2025-02-22T08:40:12Z</updated> -<a href="#l580" class="line" id="l580"> 580</a> <title type="text">fix typo</title> -<a href="#l581" class="line" id="l581"> 581</a> <link rel="alternate" type="text/html" href="commit/4f8c91dd5798229d604c16f6f38123d9848430ce.html" /> -<a href="#l582" class="line" id="l582"> 582</a> <author> -<a href="#l583" class="line" id="l583"> 583</a> <name>Samdal</name> -<a href="#l584" class="line" id="l584"> 584</a> <email>samdal@protonmail.com</email> -<a href="#l585" class="line" id="l585"> 585</a> </author> -<a href="#l586" class="line" id="l586"> 586</a> <content type="text">commit 4f8c91dd5798229d604c16f6f38123d9848430ce -<a href="#l587" class="line" id="l587"> 587</a> parent b50faebb09d96ca56d360452ae4467537c7bf104 -<a href="#l588" class="line" id="l588"> 588</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l589" class="line" id="l589"> 589</a> Date: Sat, 22 Feb 2025 09:40:12 +0100 -<a href="#l590" class="line" id="l590"> 590</a> -<a href="#l591" class="line" id="l591"> 591</a> fix typo -<a href="#l592" class="line" id="l592"> 592</a> -<a href="#l593" class="line" id="l593"> 593</a> </content> -<a href="#l594" class="line" id="l594"> 594</a> </entry> -<a href="#l595" class="line" id="l595"> 595</a> <entry> -<a href="#l596" class="line" id="l596"> 596</a> <id>b50faebb09d96ca56d360452ae4467537c7bf104</id> -<a href="#l597" class="line" id="l597"> 597</a> <published>2025-02-22T08:36:54Z</published> -<a href="#l598" class="line" id="l598"> 598</a> <updated>2025-02-22T08:36:54Z</updated> -<a href="#l599" class="line" id="l599"> 599</a> <title type="text">fix typo</title> -<a href="#l600" class="line" id="l600"> 600</a> <link rel="alternate" type="text/html" href="commit/b50faebb09d96ca56d360452ae4467537c7bf104.html" /> -<a href="#l601" class="line" id="l601"> 601</a> <author> -<a href="#l602" class="line" id="l602"> 602</a> <name>Samdal</name> -<a href="#l603" class="line" id="l603"> 603</a> <email>samdal@protonmail.com</email> -<a href="#l604" class="line" id="l604"> 604</a> </author> -<a href="#l605" class="line" id="l605"> 605</a> <content type="text">commit b50faebb09d96ca56d360452ae4467537c7bf104 -<a href="#l606" class="line" id="l606"> 606</a> parent 88953dff6192486aeb136c1cfabc4abc7c350bea -<a href="#l607" class="line" id="l607"> 607</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l608" class="line" id="l608"> 608</a> Date: Sat, 22 Feb 2025 09:36:54 +0100 -<a href="#l609" class="line" id="l609"> 609</a> -<a href="#l610" class="line" id="l610"> 610</a> fix typo -<a href="#l611" class="line" id="l611"> 611</a> -<a href="#l612" class="line" id="l612"> 612</a> </content> -<a href="#l613" class="line" id="l613"> 613</a> </entry> -<a href="#l614" class="line" id="l614"> 614</a> <entry> -<a href="#l615" class="line" id="l615"> 615</a> <id>88953dff6192486aeb136c1cfabc4abc7c350bea</id> -<a href="#l616" class="line" id="l616"> 616</a> <published>2025-02-22T08:32:15Z</published> -<a href="#l617" class="line" id="l617"> 617</a> <updated>2025-02-22T08:32:15Z</updated> -<a href="#l618" class="line" id="l618"> 618</a> <title type="text">fix typos</title> -<a href="#l619" class="line" id="l619"> 619</a> <link rel="alternate" type="text/html" href="commit/88953dff6192486aeb136c1cfabc4abc7c350bea.html" /> -<a href="#l620" class="line" id="l620"> 620</a> <author> -<a href="#l621" class="line" id="l621"> 621</a> <name>Samdal</name> -<a href="#l622" class="line" id="l622"> 622</a> <email>samdal@protonmail.com</email> -<a href="#l623" class="line" id="l623"> 623</a> </author> -<a href="#l624" class="line" id="l624"> 624</a> <content type="text">commit 88953dff6192486aeb136c1cfabc4abc7c350bea -<a href="#l625" class="line" id="l625"> 625</a> parent c16d21c43716c22ff6777dbccde5fbdfd8d67dd2 -<a href="#l626" class="line" id="l626"> 626</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l627" class="line" id="l627"> 627</a> Date: Sat, 22 Feb 2025 09:32:15 +0100 -<a href="#l628" class="line" id="l628"> 628</a> -<a href="#l629" class="line" id="l629"> 629</a> fix typos -<a href="#l630" class="line" id="l630"> 630</a> -<a href="#l631" class="line" id="l631"> 631</a> </content> -<a href="#l632" class="line" id="l632"> 632</a> </entry> -<a href="#l633" class="line" id="l633"> 633</a> <entry> -<a href="#l634" class="line" id="l634"> 634</a> <id>c16d21c43716c22ff6777dbccde5fbdfd8d67dd2</id> -<a href="#l635" class="line" id="l635"> 635</a> <published>2025-02-22T01:26:29Z</published> -<a href="#l636" class="line" id="l636"> 636</a> <updated>2025-02-22T01:26:29Z</updated> -<a href="#l637" class="line" id="l637"> 637</a> <title type="text">fix typos</title> -<a href="#l638" class="line" id="l638"> 638</a> <link rel="alternate" type="text/html" href="commit/c16d21c43716c22ff6777dbccde5fbdfd8d67dd2.html" /> -<a href="#l639" class="line" id="l639"> 639</a> <author> -<a href="#l640" class="line" id="l640"> 640</a> <name>Samdal</name> -<a href="#l641" class="line" id="l641"> 641</a> <email>samdal@protonmail.com</email> -<a href="#l642" class="line" id="l642"> 642</a> </author> -<a href="#l643" class="line" id="l643"> 643</a> <content type="text">commit c16d21c43716c22ff6777dbccde5fbdfd8d67dd2 -<a href="#l644" class="line" id="l644"> 644</a> parent cc1b9da20219fc14e6d7b8e6072b65bf6f961118 -<a href="#l645" class="line" id="l645"> 645</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l646" class="line" id="l646"> 646</a> Date: Sat, 22 Feb 2025 02:26:29 +0100 -<a href="#l647" class="line" id="l647"> 647</a> -<a href="#l648" class="line" id="l648"> 648</a> fix typos -<a href="#l649" class="line" id="l649"> 649</a> -<a href="#l650" class="line" id="l650"> 650</a> </content> -<a href="#l651" class="line" id="l651"> 651</a> </entry> -<a href="#l652" class="line" id="l652"> 652</a> <entry> -<a href="#l653" class="line" id="l653"> 653</a> <id>cc1b9da20219fc14e6d7b8e6072b65bf6f961118</id> -<a href="#l654" class="line" id="l654"> 654</a> <published>2025-02-22T00:38:04Z</published> -<a href="#l655" class="line" id="l655"> 655</a> <updated>2025-02-22T00:38:04Z</updated> -<a href="#l656" class="line" id="l656"> 656</a> <title type="text">add width and height to nav images</title> -<a href="#l657" class="line" id="l657"> 657</a> <link rel="alternate" type="text/html" href="commit/cc1b9da20219fc14e6d7b8e6072b65bf6f961118.html" /> -<a href="#l658" class="line" id="l658"> 658</a> <author> -<a href="#l659" class="line" id="l659"> 659</a> <name>Samdal</name> -<a href="#l660" class="line" id="l660"> 660</a> <email>samdal@protonmail.com</email> -<a href="#l661" class="line" id="l661"> 661</a> </author> -<a href="#l662" class="line" id="l662"> 662</a> <content type="text">commit cc1b9da20219fc14e6d7b8e6072b65bf6f961118 -<a href="#l663" class="line" id="l663"> 663</a> parent d3f007efed3ebdff0397246afbf48f019c9ed002 -<a href="#l664" class="line" id="l664"> 664</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l665" class="line" id="l665"> 665</a> Date: Sat, 22 Feb 2025 01:38:04 +0100 -<a href="#l666" class="line" id="l666"> 666</a> -<a href="#l667" class="line" id="l667"> 667</a> add width and height to nav images -<a href="#l668" class="line" id="l668"> 668</a> -<a href="#l669" class="line" id="l669"> 669</a> </content> -<a href="#l670" class="line" id="l670"> 670</a> </entry> -<a href="#l671" class="line" id="l671"> 671</a> <entry> -<a href="#l672" class="line" id="l672"> 672</a> <id>d3f007efed3ebdff0397246afbf48f019c9ed002</id> -<a href="#l673" class="line" id="l673"> 673</a> <published>2025-02-22T00:34:21Z</published> -<a href="#l674" class="line" id="l674"> 674</a> <updated>2025-02-22T00:34:21Z</updated> -<a href="#l675" class="line" id="l675"> 675</a> <title type="text">update nav images</title> -<a href="#l676" class="line" id="l676"> 676</a> <link rel="alternate" type="text/html" href="commit/d3f007efed3ebdff0397246afbf48f019c9ed002.html" /> -<a href="#l677" class="line" id="l677"> 677</a> <author> -<a href="#l678" class="line" id="l678"> 678</a> <name>Samdal</name> -<a href="#l679" class="line" id="l679"> 679</a> <email>samdal@protonmail.com</email> -<a href="#l680" class="line" id="l680"> 680</a> </author> -<a href="#l681" class="line" id="l681"> 681</a> <content type="text">commit d3f007efed3ebdff0397246afbf48f019c9ed002 -<a href="#l682" class="line" id="l682"> 682</a> parent c3a13a427fe7a966a9c8d5912b2ed713bebf61c9 -<a href="#l683" class="line" id="l683"> 683</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l684" class="line" id="l684"> 684</a> Date: Sat, 22 Feb 2025 01:34:21 +0100 -<a href="#l685" class="line" id="l685"> 685</a> -<a href="#l686" class="line" id="l686"> 686</a> update nav images -<a href="#l687" class="line" id="l687"> 687</a> -<a href="#l688" class="line" id="l688"> 688</a> </content> -<a href="#l689" class="line" id="l689"> 689</a> </entry> -<a href="#l690" class="line" id="l690"> 690</a> <entry> -<a href="#l691" class="line" id="l691"> 691</a> <id>c3a13a427fe7a966a9c8d5912b2ed713bebf61c9</id> -<a href="#l692" class="line" id="l692"> 692</a> <published>2025-02-21T23:36:57Z</published> -<a href="#l693" class="line" id="l693"> 693</a> <updated>2025-02-21T23:36:57Z</updated> -<a href="#l694" class="line" id="l694"> 694</a> <title type="text">change data structures description</title> -<a href="#l695" class="line" id="l695"> 695</a> <link rel="alternate" type="text/html" href="commit/c3a13a427fe7a966a9c8d5912b2ed713bebf61c9.html" /> -<a href="#l696" class="line" id="l696"> 696</a> <author> -<a href="#l697" class="line" id="l697"> 697</a> <name>Samdal</name> -<a href="#l698" class="line" id="l698"> 698</a> <email>samdal@protonmail.com</email> -<a href="#l699" class="line" id="l699"> 699</a> </author> -<a href="#l700" class="line" id="l700"> 700</a> <content type="text">commit c3a13a427fe7a966a9c8d5912b2ed713bebf61c9 -<a href="#l701" class="line" id="l701"> 701</a> parent bfc181b3241a11eeaf611bac39786b0aa68ac0f2 -<a href="#l702" class="line" id="l702"> 702</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l703" class="line" id="l703"> 703</a> Date: Sat, 22 Feb 2025 00:36:57 +0100 -<a href="#l704" class="line" id="l704"> 704</a> -<a href="#l705" class="line" id="l705"> 705</a> change data structures description -<a href="#l706" class="line" id="l706"> 706</a> -<a href="#l707" class="line" id="l707"> 707</a> </content> -<a href="#l708" class="line" id="l708"> 708</a> </entry> -<a href="#l709" class="line" id="l709"> 709</a> <entry> -<a href="#l710" class="line" id="l710"> 710</a> <id>bfc181b3241a11eeaf611bac39786b0aa68ac0f2</id> -<a href="#l711" class="line" id="l711"> 711</a> <published>2025-02-21T23:33:18Z</published> -<a href="#l712" class="line" id="l712"> 712</a> <updated>2025-02-21T23:33:18Z</updated> -<a href="#l713" class="line" id="l713"> 713</a> <title type="text">change name and default of disable comments (now show comments)</title> -<a href="#l714" class="line" id="l714"> 714</a> <link rel="alternate" type="text/html" href="commit/bfc181b3241a11eeaf611bac39786b0aa68ac0f2.html" /> -<a href="#l715" class="line" id="l715"> 715</a> <author> -<a href="#l716" class="line" id="l716"> 716</a> <name>Samdal</name> -<a href="#l717" class="line" id="l717"> 717</a> <email>samdal@protonmail.com</email> -<a href="#l718" class="line" id="l718"> 718</a> </author> -<a href="#l719" class="line" id="l719"> 719</a> <content type="text">commit bfc181b3241a11eeaf611bac39786b0aa68ac0f2 -<a href="#l720" class="line" id="l720"> 720</a> parent c6c6dd75dccea60ba8211844a6873507a11ad19a -<a href="#l721" class="line" id="l721"> 721</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l722" class="line" id="l722"> 722</a> Date: Sat, 22 Feb 2025 00:33:18 +0100 -<a href="#l723" class="line" id="l723"> 723</a> -<a href="#l724" class="line" id="l724"> 724</a> change name and default of disable comments (now show comments) -<a href="#l725" class="line" id="l725"> 725</a> -<a href="#l726" class="line" id="l726"> 726</a> </content> -<a href="#l727" class="line" id="l727"> 727</a> </entry> -<a href="#l728" class="line" id="l728"> 728</a> <entry> -<a href="#l729" class="line" id="l729"> 729</a> <id>c6c6dd75dccea60ba8211844a6873507a11ad19a</id> -<a href="#l730" class="line" id="l730"> 730</a> <published>2025-02-21T23:27:21Z</published> -<a href="#l731" class="line" id="l731"> 731</a> <updated>2025-02-21T23:27:21Z</updated> -<a href="#l732" class="line" id="l732"> 732</a> <title type="text">increase header image sizes, change margins of main-content</title> -<a href="#l733" class="line" id="l733"> 733</a> <link rel="alternate" type="text/html" href="commit/c6c6dd75dccea60ba8211844a6873507a11ad19a.html" /> -<a href="#l734" class="line" id="l734"> 734</a> <author> -<a href="#l735" class="line" id="l735"> 735</a> <name>Samdal</name> -<a href="#l736" class="line" id="l736"> 736</a> <email>samdal@protonmail.com</email> -<a href="#l737" class="line" id="l737"> 737</a> </author> -<a href="#l738" class="line" id="l738"> 738</a> <content type="text">commit c6c6dd75dccea60ba8211844a6873507a11ad19a -<a href="#l739" class="line" id="l739"> 739</a> parent f9791fff7b18267241b2f22feec68b5c71f677c8 -<a href="#l740" class="line" id="l740"> 740</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l741" class="line" id="l741"> 741</a> Date: Sat, 22 Feb 2025 00:27:21 +0100 -<a href="#l742" class="line" id="l742"> 742</a> -<a href="#l743" class="line" id="l743"> 743</a> increase header image sizes, change margins of main-content -<a href="#l744" class="line" id="l744"> 744</a> -<a href="#l745" class="line" id="l745"> 745</a> </content> -<a href="#l746" class="line" id="l746"> 746</a> </entry> -<a href="#l747" class="line" id="l747"> 747</a> <entry> -<a href="#l748" class="line" id="l748"> 748</a> <id>f9791fff7b18267241b2f22feec68b5c71f677c8</id> -<a href="#l749" class="line" id="l749"> 749</a> <published>2025-02-21T23:13:32Z</published> -<a href="#l750" class="line" id="l750"> 750</a> <updated>2025-02-21T23:13:32Z</updated> -<a href="#l751" class="line" id="l751"> 751</a> <title type="text">add generic data structures post</title> -<a href="#l752" class="line" id="l752"> 752</a> <link rel="alternate" type="text/html" href="commit/f9791fff7b18267241b2f22feec68b5c71f677c8.html" /> -<a href="#l753" class="line" id="l753"> 753</a> <author> -<a href="#l754" class="line" id="l754"> 754</a> <name>Samdal</name> -<a href="#l755" class="line" id="l755"> 755</a> <email>samdal@protonmail.com</email> -<a href="#l756" class="line" id="l756"> 756</a> </author> -<a href="#l757" class="line" id="l757"> 757</a> <content type="text">commit f9791fff7b18267241b2f22feec68b5c71f677c8 -<a href="#l758" class="line" id="l758"> 758</a> parent 19f5f4f9f49c3218525f3221c995785609ef043b -<a href="#l759" class="line" id="l759"> 759</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l760" class="line" id="l760"> 760</a> Date: Sat, 22 Feb 2025 00:13:32 +0100 -<a href="#l761" class="line" id="l761"> 761</a> -<a href="#l762" class="line" id="l762"> 762</a> add generic data structures post -<a href="#l763" class="line" id="l763"> 763</a> -<a href="#l764" class="line" id="l764"> 764</a> </content> -<a href="#l765" class="line" id="l765"> 765</a> </entry> -<a href="#l766" class="line" id="l766"> 766</a> <entry> -<a href="#l767" class="line" id="l767"> 767</a> <id>19f5f4f9f49c3218525f3221c995785609ef043b</id> -<a href="#l768" class="line" id="l768"> 768</a> <published>2025-02-21T19:51:24Z</published> -<a href="#l769" class="line" id="l769"> 769</a> <updated>2025-02-21T19:51:24Z</updated> -<a href="#l770" class="line" id="l770"> 770</a> <title type="text">update navigation css, update todo</title> -<a href="#l771" class="line" id="l771"> 771</a> <link rel="alternate" type="text/html" href="commit/19f5f4f9f49c3218525f3221c995785609ef043b.html" /> -<a href="#l772" class="line" id="l772"> 772</a> <author> -<a href="#l773" class="line" id="l773"> 773</a> <name>Samdal</name> -<a href="#l774" class="line" id="l774"> 774</a> <email>samdal@protonmail.com</email> -<a href="#l775" class="line" id="l775"> 775</a> </author> -<a href="#l776" class="line" id="l776"> 776</a> <content type="text">commit 19f5f4f9f49c3218525f3221c995785609ef043b -<a href="#l777" class="line" id="l777"> 777</a> parent 09a44900d23da8a34fb8ee3eab7940f96330fd2d -<a href="#l778" class="line" id="l778"> 778</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l779" class="line" id="l779"> 779</a> Date: Fri, 21 Feb 2025 20:51:24 +0100 -<a href="#l780" class="line" id="l780"> 780</a> -<a href="#l781" class="line" id="l781"> 781</a> update navigation css, update todo -<a href="#l782" class="line" id="l782"> 782</a> -<a href="#l783" class="line" id="l783"> 783</a> </content> -<a href="#l784" class="line" id="l784"> 784</a> </entry> -<a href="#l785" class="line" id="l785"> 785</a> <entry> -<a href="#l786" class="line" id="l786"> 786</a> <id>09a44900d23da8a34fb8ee3eab7940f96330fd2d</id> -<a href="#l787" class="line" id="l787"> 787</a> <published>2025-02-21T19:30:53Z</published> -<a href="#l788" class="line" id="l788"> 788</a> <updated>2025-02-21T19:30:53Z</updated> -<a href="#l789" class="line" id="l789"> 789</a> <title type="text">clean up css</title> -<a href="#l790" class="line" id="l790"> 790</a> <link rel="alternate" type="text/html" href="commit/09a44900d23da8a34fb8ee3eab7940f96330fd2d.html" /> -<a href="#l791" class="line" id="l791"> 791</a> <author> -<a href="#l792" class="line" id="l792"> 792</a> <name>Samdal</name> -<a href="#l793" class="line" id="l793"> 793</a> <email>samdal@protonmail.com</email> -<a href="#l794" class="line" id="l794"> 794</a> </author> -<a href="#l795" class="line" id="l795"> 795</a> <content type="text">commit 09a44900d23da8a34fb8ee3eab7940f96330fd2d -<a href="#l796" class="line" id="l796"> 796</a> parent 4eac4e96e8637490bd133d92e5b83f9b9849a405 -<a href="#l797" class="line" id="l797"> 797</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l798" class="line" id="l798"> 798</a> Date: Fri, 21 Feb 2025 20:30:53 +0100 -<a href="#l799" class="line" id="l799"> 799</a> -<a href="#l800" class="line" id="l800"> 800</a> clean up css -<a href="#l801" class="line" id="l801"> 801</a> -<a href="#l802" class="line" id="l802"> 802</a> </content> -<a href="#l803" class="line" id="l803"> 803</a> </entry> -<a href="#l804" class="line" id="l804"> 804</a> <entry> -<a href="#l805" class="line" id="l805"> 805</a> <id>4eac4e96e8637490bd133d92e5b83f9b9849a405</id> -<a href="#l806" class="line" id="l806"> 806</a> <published>2025-02-21T19:07:27Z</published> -<a href="#l807" class="line" id="l807"> 807</a> <updated>2025-02-21T19:07:27Z</updated> -<a href="#l808" class="line" id="l808"> 808</a> <title type="text">update todo, fix footer having small transparent area at bottom</title> -<a href="#l809" class="line" id="l809"> 809</a> <link rel="alternate" type="text/html" href="commit/4eac4e96e8637490bd133d92e5b83f9b9849a405.html" /> -<a href="#l810" class="line" id="l810"> 810</a> <author> -<a href="#l811" class="line" id="l811"> 811</a> <name>Samdal</name> -<a href="#l812" class="line" id="l812"> 812</a> <email>samdal@protonmail.com</email> -<a href="#l813" class="line" id="l813"> 813</a> </author> -<a href="#l814" class="line" id="l814"> 814</a> <content type="text">commit 4eac4e96e8637490bd133d92e5b83f9b9849a405 -<a href="#l815" class="line" id="l815"> 815</a> parent 6550ae94c75ec8b02fd8d8b99cb17c9b28a748b1 -<a href="#l816" class="line" id="l816"> 816</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l817" class="line" id="l817"> 817</a> Date: Fri, 21 Feb 2025 20:07:27 +0100 -<a href="#l818" class="line" id="l818"> 818</a> -<a href="#l819" class="line" id="l819"> 819</a> update todo, fix footer having small transparent area at bottom -<a href="#l820" class="line" id="l820"> 820</a> -<a href="#l821" class="line" id="l821"> 821</a> </content> -<a href="#l822" class="line" id="l822"> 822</a> </entry> -<a href="#l823" class="line" id="l823"> 823</a> <entry> -<a href="#l824" class="line" id="l824"> 824</a> <id>6550ae94c75ec8b02fd8d8b99cb17c9b28a748b1</id> -<a href="#l825" class="line" id="l825"> 825</a> <published>2025-02-21T17:43:32Z</published> -<a href="#l826" class="line" id="l826"> 826</a> <updated>2025-02-21T17:43:32Z</updated> -<a href="#l827" class="line" id="l827"> 827</a> <title type="text">add comment section</title> -<a href="#l828" class="line" id="l828"> 828</a> <link rel="alternate" type="text/html" href="commit/6550ae94c75ec8b02fd8d8b99cb17c9b28a748b1.html" /> -<a href="#l829" class="line" id="l829"> 829</a> <author> -<a href="#l830" class="line" id="l830"> 830</a> <name>Samdal</name> -<a href="#l831" class="line" id="l831"> 831</a> <email>samdal@protonmail.com</email> -<a href="#l832" class="line" id="l832"> 832</a> </author> -<a href="#l833" class="line" id="l833"> 833</a> <content type="text">commit 6550ae94c75ec8b02fd8d8b99cb17c9b28a748b1 -<a href="#l834" class="line" id="l834"> 834</a> parent dbb53826b0cef3e311cb541c197ae543cab2cdf3 -<a href="#l835" class="line" id="l835"> 835</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l836" class="line" id="l836"> 836</a> Date: Fri, 21 Feb 2025 18:43:32 +0100 -<a href="#l837" class="line" id="l837"> 837</a> -<a href="#l838" class="line" id="l838"> 838</a> add comment section -<a href="#l839" class="line" id="l839"> 839</a> -<a href="#l840" class="line" id="l840"> 840</a> </content> -<a href="#l841" class="line" id="l841"> 841</a> </entry> -<a href="#l842" class="line" id="l842"> 842</a> <entry> -<a href="#l843" class="line" id="l843"> 843</a> <id>dbb53826b0cef3e311cb541c197ae543cab2cdf3</id> -<a href="#l844" class="line" id="l844"> 844</a> <published>2025-02-21T16:17:08Z</published> -<a href="#l845" class="line" id="l845"> 845</a> <updated>2025-02-21T16:17:08Z</updated> -<a href="#l846" class="line" id="l846"> 846</a> <title type="text">change main title</title> -<a href="#l847" class="line" id="l847"> 847</a> <link rel="alternate" type="text/html" href="commit/dbb53826b0cef3e311cb541c197ae543cab2cdf3.html" /> -<a href="#l848" class="line" id="l848"> 848</a> <author> -<a href="#l849" class="line" id="l849"> 849</a> <name>Samdal</name> -<a href="#l850" class="line" id="l850"> 850</a> <email>samdal@protonmail.com</email> -<a href="#l851" class="line" id="l851"> 851</a> </author> -<a href="#l852" class="line" id="l852"> 852</a> <content type="text">commit dbb53826b0cef3e311cb541c197ae543cab2cdf3 -<a href="#l853" class="line" id="l853"> 853</a> parent 8f42aaf5761674a9615e66f4d1e2b03757df443c -<a href="#l854" class="line" id="l854"> 854</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l855" class="line" id="l855"> 855</a> Date: Fri, 21 Feb 2025 17:17:08 +0100 -<a href="#l856" class="line" id="l856"> 856</a> -<a href="#l857" class="line" id="l857"> 857</a> change main title -<a href="#l858" class="line" id="l858"> 858</a> -<a href="#l859" class="line" id="l859"> 859</a> </content> -<a href="#l860" class="line" id="l860"> 860</a> </entry> -<a href="#l861" class="line" id="l861"> 861</a> <entry> -<a href="#l862" class="line" id="l862"> 862</a> <id>8f42aaf5761674a9615e66f4d1e2b03757df443c</id> -<a href="#l863" class="line" id="l863"> 863</a> <published>2025-02-21T15:44:04Z</published> -<a href="#l864" class="line" id="l864"> 864</a> <updated>2025-02-21T15:44:04Z</updated> -<a href="#l865" class="line" id="l865"> 865</a> <title type="text">fix typo</title> -<a href="#l866" class="line" id="l866"> 866</a> <link rel="alternate" type="text/html" href="commit/8f42aaf5761674a9615e66f4d1e2b03757df443c.html" /> -<a href="#l867" class="line" id="l867"> 867</a> <author> -<a href="#l868" class="line" id="l868"> 868</a> <name>Samdal</name> -<a href="#l869" class="line" id="l869"> 869</a> <email>samdal@protonmail.com</email> -<a href="#l870" class="line" id="l870"> 870</a> </author> -<a href="#l871" class="line" id="l871"> 871</a> <content type="text">commit 8f42aaf5761674a9615e66f4d1e2b03757df443c -<a href="#l872" class="line" id="l872"> 872</a> parent 045befeb14ed0cf4891b2642f65065d07d6eeed1 -<a href="#l873" class="line" id="l873"> 873</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l874" class="line" id="l874"> 874</a> Date: Fri, 21 Feb 2025 16:44:04 +0100 -<a href="#l875" class="line" id="l875"> 875</a> -<a href="#l876" class="line" id="l876"> 876</a> fix typo -<a href="#l877" class="line" id="l877"> 877</a> -<a href="#l878" class="line" id="l878"> 878</a> </content> -<a href="#l879" class="line" id="l879"> 879</a> </entry> -<a href="#l880" class="line" id="l880"> 880</a> <entry> -<a href="#l881" class="line" id="l881"> 881</a> <id>045befeb14ed0cf4891b2642f65065d07d6eeed1</id> -<a href="#l882" class="line" id="l882"> 882</a> <published>2025-02-21T15:36:46Z</published> -<a href="#l883" class="line" id="l883"> 883</a> <updated>2025-02-21T15:36:46Z</updated> -<a href="#l884" class="line" id="l884"> 884</a> <title type="text">Software rant compilation, more images</title> -<a href="#l885" class="line" id="l885"> 885</a> <link rel="alternate" type="text/html" href="commit/045befeb14ed0cf4891b2642f65065d07d6eeed1.html" /> -<a href="#l886" class="line" id="l886"> 886</a> <author> -<a href="#l887" class="line" id="l887"> 887</a> <name>Samdal</name> -<a href="#l888" class="line" id="l888"> 888</a> <email>samdal@protonmail.com</email> -<a href="#l889" class="line" id="l889"> 889</a> </author> -<a href="#l890" class="line" id="l890"> 890</a> <content type="text">commit 045befeb14ed0cf4891b2642f65065d07d6eeed1 -<a href="#l891" class="line" id="l891"> 891</a> parent 5b6ba253aa561807f37b4cbf5e3442d6ab4d5d82 -<a href="#l892" class="line" id="l892"> 892</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l893" class="line" id="l893"> 893</a> Date: Fri, 21 Feb 2025 16:36:46 +0100 -<a href="#l894" class="line" id="l894"> 894</a> -<a href="#l895" class="line" id="l895"> 895</a> Software rant compilation, more images -<a href="#l896" class="line" id="l896"> 896</a> -<a href="#l897" class="line" id="l897"> 897</a> </content> -<a href="#l898" class="line" id="l898"> 898</a> </entry> -<a href="#l899" class="line" id="l899"> 899</a> <entry> -<a href="#l900" class="line" id="l900"> 900</a> <id>5b6ba253aa561807f37b4cbf5e3442d6ab4d5d82</id> -<a href="#l901" class="line" id="l901"> 901</a> <published>2025-02-21T02:03:30Z</published> -<a href="#l902" class="line" id="l902"> 902</a> <updated>2025-02-21T02:03:30Z</updated> -<a href="#l903" class="line" id="l903"> 903</a> <title type="text">make navigation tab fixed in size</title> -<a href="#l904" class="line" id="l904"> 904</a> <link rel="alternate" type="text/html" href="commit/5b6ba253aa561807f37b4cbf5e3442d6ab4d5d82.html" /> -<a href="#l905" class="line" id="l905"> 905</a> <author> -<a href="#l906" class="line" id="l906"> 906</a> <name>Samdal</name> -<a href="#l907" class="line" id="l907"> 907</a> <email>samdal@protonmail.com</email> -<a href="#l908" class="line" id="l908"> 908</a> </author> -<a href="#l909" class="line" id="l909"> 909</a> <content type="text">commit 5b6ba253aa561807f37b4cbf5e3442d6ab4d5d82 -<a href="#l910" class="line" id="l910"> 910</a> parent 660f730f3886465d1602d9e2df34605bdf57f002 -<a href="#l911" class="line" id="l911"> 911</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l912" class="line" id="l912"> 912</a> Date: Fri, 21 Feb 2025 03:03:30 +0100 -<a href="#l913" class="line" id="l913"> 913</a> -<a href="#l914" class="line" id="l914"> 914</a> make navigation tab fixed in size -<a href="#l915" class="line" id="l915"> 915</a> -<a href="#l916" class="line" id="l916"> 916</a> </content> -<a href="#l917" class="line" id="l917"> 917</a> </entry> -<a href="#l918" class="line" id="l918"> 918</a> <entry> -<a href="#l919" class="line" id="l919"> 919</a> <id>660f730f3886465d1602d9e2df34605bdf57f002</id> -<a href="#l920" class="line" id="l920"> 920</a> <published>2025-02-21T01:37:42Z</published> -<a href="#l921" class="line" id="l921"> 921</a> <updated>2025-02-21T01:37:42Z</updated> -<a href="#l922" class="line" id="l922"> 922</a> <title type="text">add templeos.jpeg</title> -<a href="#l923" class="line" id="l923"> 923</a> <link rel="alternate" type="text/html" href="commit/660f730f3886465d1602d9e2df34605bdf57f002.html" /> -<a href="#l924" class="line" id="l924"> 924</a> <author> -<a href="#l925" class="line" id="l925"> 925</a> <name>Samdal</name> -<a href="#l926" class="line" id="l926"> 926</a> <email>samdal@protonmail.com</email> -<a href="#l927" class="line" id="l927"> 927</a> </author> -<a href="#l928" class="line" id="l928"> 928</a> <content type="text">commit 660f730f3886465d1602d9e2df34605bdf57f002 -<a href="#l929" class="line" id="l929"> 929</a> parent 4d60836412609813168f12c0f901afe615746ace -<a href="#l930" class="line" id="l930"> 930</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l931" class="line" id="l931"> 931</a> Date: Fri, 21 Feb 2025 02:37:42 +0100 -<a href="#l932" class="line" id="l932"> 932</a> -<a href="#l933" class="line" id="l933"> 933</a> add templeos.jpeg -<a href="#l934" class="line" id="l934"> 934</a> -<a href="#l935" class="line" id="l935"> 935</a> </content> -<a href="#l936" class="line" id="l936"> 936</a> </entry> -<a href="#l937" class="line" id="l937"> 937</a> <entry> -<a href="#l938" class="line" id="l938"> 938</a> <id>4d60836412609813168f12c0f901afe615746ace</id> -<a href="#l939" class="line" id="l939"> 939</a> <published>2025-02-20T22:14:18Z</published> -<a href="#l940" class="line" id="l940"> 940</a> <updated>2025-02-20T22:14:18Z</updated> -<a href="#l941" class="line" id="l941"> 941</a> <title type="text">add favicon.png</title> -<a href="#l942" class="line" id="l942"> 942</a> <link rel="alternate" type="text/html" href="commit/4d60836412609813168f12c0f901afe615746ace.html" /> -<a href="#l943" class="line" id="l943"> 943</a> <author> -<a href="#l944" class="line" id="l944"> 944</a> <name>Samdal</name> -<a href="#l945" class="line" id="l945"> 945</a> <email>samdal@protonmail.com</email> -<a href="#l946" class="line" id="l946"> 946</a> </author> -<a href="#l947" class="line" id="l947"> 947</a> <content type="text">commit 4d60836412609813168f12c0f901afe615746ace -<a href="#l948" class="line" id="l948"> 948</a> parent 06fe09d98f4732799d095df5d9e82723e6424057 -<a href="#l949" class="line" id="l949"> 949</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l950" class="line" id="l950"> 950</a> Date: Thu, 20 Feb 2025 23:14:18 +0100 -<a href="#l951" class="line" id="l951"> 951</a> -<a href="#l952" class="line" id="l952"> 952</a> add favicon.png -<a href="#l953" class="line" id="l953"> 953</a> -<a href="#l954" class="line" id="l954"> 954</a> </content> -<a href="#l955" class="line" id="l955"> 955</a> </entry> -<a href="#l956" class="line" id="l956"> 956</a> <entry> -<a href="#l957" class="line" id="l957"> 957</a> <id>06fe09d98f4732799d095df5d9e82723e6424057</id> -<a href="#l958" class="line" id="l958"> 958</a> <published>2025-02-20T21:49:10Z</published> -<a href="#l959" class="line" id="l959"> 959</a> <updated>2025-02-20T21:49:10Z</updated> -<a href="#l960" class="line" id="l960"> 960</a> <title type="text">add dark theme</title> -<a href="#l961" class="line" id="l961"> 961</a> <link rel="alternate" type="text/html" href="commit/06fe09d98f4732799d095df5d9e82723e6424057.html" /> -<a href="#l962" class="line" id="l962"> 962</a> <author> -<a href="#l963" class="line" id="l963"> 963</a> <name>Samdal</name> -<a href="#l964" class="line" id="l964"> 964</a> <email>samdal@protonmail.com</email> -<a href="#l965" class="line" id="l965"> 965</a> </author> -<a href="#l966" class="line" id="l966"> 966</a> <content type="text">commit 06fe09d98f4732799d095df5d9e82723e6424057 -<a href="#l967" class="line" id="l967"> 967</a> parent aa561a57a12eb31e5d31dd90bf7ed209282d1cad -<a href="#l968" class="line" id="l968"> 968</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l969" class="line" id="l969"> 969</a> Date: Thu, 20 Feb 2025 22:49:10 +0100 -<a href="#l970" class="line" id="l970"> 970</a> -<a href="#l971" class="line" id="l971"> 971</a> add dark theme -<a href="#l972" class="line" id="l972"> 972</a> -<a href="#l973" class="line" id="l973"> 973</a> </content> -<a href="#l974" class="line" id="l974"> 974</a> </entry> -<a href="#l975" class="line" id="l975"> 975</a> <entry> -<a href="#l976" class="line" id="l976"> 976</a> <id>aa561a57a12eb31e5d31dd90bf7ed209282d1cad</id> -<a href="#l977" class="line" id="l977"> 977</a> <published>2025-02-20T21:37:04Z</published> -<a href="#l978" class="line" id="l978"> 978</a> <updated>2025-02-20T21:37:04Z</updated> -<a href="#l979" class="line" id="l979"> 979</a> <title type="text">update heading colors in post, change grass.png</title> -<a href="#l980" class="line" id="l980"> 980</a> <link rel="alternate" type="text/html" href="commit/aa561a57a12eb31e5d31dd90bf7ed209282d1cad.html" /> -<a href="#l981" class="line" id="l981"> 981</a> <author> -<a href="#l982" class="line" id="l982"> 982</a> <name>Samdal</name> -<a href="#l983" class="line" id="l983"> 983</a> <email>samdal@protonmail.com</email> -<a href="#l984" class="line" id="l984"> 984</a> </author> -<a href="#l985" class="line" id="l985"> 985</a> <content type="text">commit aa561a57a12eb31e5d31dd90bf7ed209282d1cad -<a href="#l986" class="line" id="l986"> 986</a> parent 6828f5eb44f0b0eec4f885b0c60dae307b5b4d1a -<a href="#l987" class="line" id="l987"> 987</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l988" class="line" id="l988"> 988</a> Date: Thu, 20 Feb 2025 22:37:04 +0100 -<a href="#l989" class="line" id="l989"> 989</a> -<a href="#l990" class="line" id="l990"> 990</a> update heading colors in post, change grass.png -<a href="#l991" class="line" id="l991"> 991</a> -<a href="#l992" class="line" id="l992"> 992</a> </content> -<a href="#l993" class="line" id="l993"> 993</a> </entry> -<a href="#l994" class="line" id="l994"> 994</a> <entry> -<a href="#l995" class="line" id="l995"> 995</a> <id>6828f5eb44f0b0eec4f885b0c60dae307b5b4d1a</id> -<a href="#l996" class="line" id="l996"> 996</a> <published>2025-02-20T21:26:50Z</published> -<a href="#l997" class="line" id="l997"> 997</a> <updated>2025-02-20T21:26:50Z</updated> -<a href="#l998" class="line" id="l998"> 998</a> <title type="text">remove forced word break</title> -<a href="#l999" class="line" id="l999"> 999</a> <link rel="alternate" type="text/html" href="commit/6828f5eb44f0b0eec4f885b0c60dae307b5b4d1a.html" /> -<a href="#l1000" class="line" id="l1000"> 1000</a> <author> -<a href="#l1001" class="line" id="l1001"> 1001</a> <name>Samdal</name> -<a href="#l1002" class="line" id="l1002"> 1002</a> <email>samdal@protonmail.com</email> -<a href="#l1003" class="line" id="l1003"> 1003</a> </author> -<a href="#l1004" class="line" id="l1004"> 1004</a> <content type="text">commit 6828f5eb44f0b0eec4f885b0c60dae307b5b4d1a -<a href="#l1005" class="line" id="l1005"> 1005</a> parent 31f89756447af3eb9c1f7b8ab6b9b7fa40833f02 -<a href="#l1006" class="line" id="l1006"> 1006</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l1007" class="line" id="l1007"> 1007</a> Date: Thu, 20 Feb 2025 22:26:50 +0100 -<a href="#l1008" class="line" id="l1008"> 1008</a> -<a href="#l1009" class="line" id="l1009"> 1009</a> remove forced word break -<a href="#l1010" class="line" id="l1010"> 1010</a> -<a href="#l1011" class="line" id="l1011"> 1011</a> </content> -<a href="#l1012" class="line" id="l1012"> 1012</a> </entry> -<a href="#l1013" class="line" id="l1013"> 1013</a> <entry> -<a href="#l1014" class="line" id="l1014"> 1014</a> <id>31f89756447af3eb9c1f7b8ab6b9b7fa40833f02</id> -<a href="#l1015" class="line" id="l1015"> 1015</a> <published>2025-02-20T21:24:56Z</published> -<a href="#l1016" class="line" id="l1016"> 1016</a> <updated>2025-02-20T21:24:56Z</updated> -<a href="#l1017" class="line" id="l1017"> 1017</a> <title type="text">make font relative, fix screen adjustment</title> -<a href="#l1018" class="line" id="l1018"> 1018</a> <link rel="alternate" type="text/html" href="commit/31f89756447af3eb9c1f7b8ab6b9b7fa40833f02.html" /> -<a href="#l1019" class="line" id="l1019"> 1019</a> <author> -<a href="#l1020" class="line" id="l1020"> 1020</a> <name>Samdal</name> -<a href="#l1021" class="line" id="l1021"> 1021</a> <email>samdal@protonmail.com</email> -<a href="#l1022" class="line" id="l1022"> 1022</a> </author> -<a href="#l1023" class="line" id="l1023"> 1023</a> <content type="text">commit 31f89756447af3eb9c1f7b8ab6b9b7fa40833f02 -<a href="#l1024" class="line" id="l1024"> 1024</a> parent 8675a2e83990ffccdd2521d4f9eb4c4f7d836df6 -<a href="#l1025" class="line" id="l1025"> 1025</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l1026" class="line" id="l1026"> 1026</a> Date: Thu, 20 Feb 2025 22:24:56 +0100 -<a href="#l1027" class="line" id="l1027"> 1027</a> -<a href="#l1028" class="line" id="l1028"> 1028</a> make font relative, fix screen adjustment -<a href="#l1029" class="line" id="l1029"> 1029</a> -<a href="#l1030" class="line" id="l1030"> 1030</a> </content> -<a href="#l1031" class="line" id="l1031"> 1031</a> </entry> -<a href="#l1032" class="line" id="l1032"> 1032</a> <entry> -<a href="#l1033" class="line" id="l1033"> 1033</a> <id>8675a2e83990ffccdd2521d4f9eb4c4f7d836df6</id> -<a href="#l1034" class="line" id="l1034"> 1034</a> <published>2025-02-20T20:55:58Z</published> -<a href="#l1035" class="line" id="l1035"> 1035</a> <updated>2025-02-20T20:55:58Z</updated> -<a href="#l1036" class="line" id="l1036"> 1036</a> <title type="text">fix chrome issues</title> -<a href="#l1037" class="line" id="l1037"> 1037</a> <link rel="alternate" type="text/html" href="commit/8675a2e83990ffccdd2521d4f9eb4c4f7d836df6.html" /> -<a href="#l1038" class="line" id="l1038"> 1038</a> <author> -<a href="#l1039" class="line" id="l1039"> 1039</a> <name>Samdal</name> -<a href="#l1040" class="line" id="l1040"> 1040</a> <email>samdal@protonmail.com</email> -<a href="#l1041" class="line" id="l1041"> 1041</a> </author> -<a href="#l1042" class="line" id="l1042"> 1042</a> <content type="text">commit 8675a2e83990ffccdd2521d4f9eb4c4f7d836df6 -<a href="#l1043" class="line" id="l1043"> 1043</a> parent c484d016c7cbe979a4b8068b8184ab308e0ec03c -<a href="#l1044" class="line" id="l1044"> 1044</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l1045" class="line" id="l1045"> 1045</a> Date: Thu, 20 Feb 2025 21:55:58 +0100 -<a href="#l1046" class="line" id="l1046"> 1046</a> -<a href="#l1047" class="line" id="l1047"> 1047</a> fix chrome issues -<a href="#l1048" class="line" id="l1048"> 1048</a> -<a href="#l1049" class="line" id="l1049"> 1049</a> </content> -<a href="#l1050" class="line" id="l1050"> 1050</a> </entry> -<a href="#l1051" class="line" id="l1051"> 1051</a> <entry> -<a href="#l1052" class="line" id="l1052"> 1052</a> <id>c484d016c7cbe979a4b8068b8184ab308e0ec03c</id> -<a href="#l1053" class="line" id="l1053"> 1053</a> <published>2025-02-20T20:30:38Z</published> -<a href="#l1054" class="line" id="l1054"> 1054</a> <updated>2025-02-20T20:30:38Z</updated> -<a href="#l1055" class="line" id="l1055"> 1055</a> <title type="text">add size guides to mosfet image</title> -<a href="#l1056" class="line" id="l1056"> 1056</a> <link rel="alternate" type="text/html" href="commit/c484d016c7cbe979a4b8068b8184ab308e0ec03c.html" /> -<a href="#l1057" class="line" id="l1057"> 1057</a> <author> -<a href="#l1058" class="line" id="l1058"> 1058</a> <name>Samdal</name> -<a href="#l1059" class="line" id="l1059"> 1059</a> <email>samdal@protonmail.com</email> -<a href="#l1060" class="line" id="l1060"> 1060</a> </author> -<a href="#l1061" class="line" id="l1061"> 1061</a> <content type="text">commit c484d016c7cbe979a4b8068b8184ab308e0ec03c -<a href="#l1062" class="line" id="l1062"> 1062</a> parent 46cbdcd13fa6c2ac62aa80b1ce1dd751e327e4d0 -<a href="#l1063" class="line" id="l1063"> 1063</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l1064" class="line" id="l1064"> 1064</a> Date: Thu, 20 Feb 2025 21:30:38 +0100 -<a href="#l1065" class="line" id="l1065"> 1065</a> -<a href="#l1066" class="line" id="l1066"> 1066</a> add size guides to mosfet image -<a href="#l1067" class="line" id="l1067"> 1067</a> -<a href="#l1068" class="line" id="l1068"> 1068</a> </content> -<a href="#l1069" class="line" id="l1069"> 1069</a> </entry> -<a href="#l1070" class="line" id="l1070"> 1070</a> <entry> -<a href="#l1071" class="line" id="l1071"> 1071</a> <id>46cbdcd13fa6c2ac62aa80b1ce1dd751e327e4d0</id> -<a href="#l1072" class="line" id="l1072"> 1072</a> <published>2025-02-20T20:28:42Z</published> -<a href="#l1073" class="line" id="l1073"> 1073</a> <updated>2025-02-20T20:28:42Z</updated> -<a href="#l1074" class="line" id="l1074"> 1074</a> <title type="text">update _config.yml</title> -<a href="#l1075" class="line" id="l1075"> 1075</a> <link rel="alternate" type="text/html" href="commit/46cbdcd13fa6c2ac62aa80b1ce1dd751e327e4d0.html" /> -<a href="#l1076" class="line" id="l1076"> 1076</a> <author> -<a href="#l1077" class="line" id="l1077"> 1077</a> <name>Samdal</name> -<a href="#l1078" class="line" id="l1078"> 1078</a> <email>samdal@protonmail.com</email> -<a href="#l1079" class="line" id="l1079"> 1079</a> </author> -<a href="#l1080" class="line" id="l1080"> 1080</a> <content type="text">commit 46cbdcd13fa6c2ac62aa80b1ce1dd751e327e4d0 -<a href="#l1081" class="line" id="l1081"> 1081</a> parent 6bdc0d083185815414d1b5268115d2dae6f72676 -<a href="#l1082" class="line" id="l1082"> 1082</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l1083" class="line" id="l1083"> 1083</a> Date: Thu, 20 Feb 2025 21:28:42 +0100 -<a href="#l1084" class="line" id="l1084"> 1084</a> -<a href="#l1085" class="line" id="l1085"> 1085</a> update _config.yml -<a href="#l1086" class="line" id="l1086"> 1086</a> -<a href="#l1087" class="line" id="l1087"> 1087</a> </content> -<a href="#l1088" class="line" id="l1088"> 1088</a> </entry> -<a href="#l1089" class="line" id="l1089"> 1089</a> <entry> -<a href="#l1090" class="line" id="l1090"> 1090</a> <id>6bdc0d083185815414d1b5268115d2dae6f72676</id> -<a href="#l1091" class="line" id="l1091"> 1091</a> <published>2025-02-20T20:25:02Z</published> -<a href="#l1092" class="line" id="l1092"> 1092</a> <updated>2025-02-20T20:25:02Z</updated> -<a href="#l1093" class="line" id="l1093"> 1093</a> <title type="text">change font size, add mosfet image</title> -<a href="#l1094" class="line" id="l1094"> 1094</a> <link rel="alternate" type="text/html" href="commit/6bdc0d083185815414d1b5268115d2dae6f72676.html" /> -<a href="#l1095" class="line" id="l1095"> 1095</a> <author> -<a href="#l1096" class="line" id="l1096"> 1096</a> <name>Samdal</name> -<a href="#l1097" class="line" id="l1097"> 1097</a> <email>samdal@protonmail.com</email> -<a href="#l1098" class="line" id="l1098"> 1098</a> </author> -<a href="#l1099" class="line" id="l1099"> 1099</a> <content type="text">commit 6bdc0d083185815414d1b5268115d2dae6f72676 -<a href="#l1100" class="line" id="l1100"> 1100</a> parent b4f30645592194893cdd2d4da4115809689e91d0 -<a href="#l1101" class="line" id="l1101"> 1101</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l1102" class="line" id="l1102"> 1102</a> Date: Thu, 20 Feb 2025 21:25:02 +0100 -<a href="#l1103" class="line" id="l1103"> 1103</a> -<a href="#l1104" class="line" id="l1104"> 1104</a> change font size, add mosfet image -<a href="#l1105" class="line" id="l1105"> 1105</a> -<a href="#l1106" class="line" id="l1106"> 1106</a> </content> -<a href="#l1107" class="line" id="l1107"> 1107</a> </entry> -<a href="#l1108" class="line" id="l1108"> 1108</a> <entry> -<a href="#l1109" class="line" id="l1109"> 1109</a> <id>b4f30645592194893cdd2d4da4115809689e91d0</id> -<a href="#l1110" class="line" id="l1110"> 1110</a> <published>2025-02-20T19:37:00Z</published> -<a href="#l1111" class="line" id="l1111"> 1111</a> <updated>2025-02-20T19:37:00Z</updated> -<a href="#l1112" class="line" id="l1112"> 1112</a> <title type="text">fix resize</title> -<a href="#l1113" class="line" id="l1113"> 1113</a> <link rel="alternate" type="text/html" href="commit/b4f30645592194893cdd2d4da4115809689e91d0.html" /> -<a href="#l1114" class="line" id="l1114"> 1114</a> <author> -<a href="#l1115" class="line" id="l1115"> 1115</a> <name>Samdal</name> -<a href="#l1116" class="line" id="l1116"> 1116</a> <email>samdal@protonmail.com</email> -<a href="#l1117" class="line" id="l1117"> 1117</a> </author> -<a href="#l1118" class="line" id="l1118"> 1118</a> <content type="text">commit b4f30645592194893cdd2d4da4115809689e91d0 -<a href="#l1119" class="line" id="l1119"> 1119</a> parent 84ccfd7a16a48321628e8159540308ea79463cdd -<a href="#l1120" class="line" id="l1120"> 1120</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l1121" class="line" id="l1121"> 1121</a> Date: Thu, 20 Feb 2025 20:37:00 +0100 -<a href="#l1122" class="line" id="l1122"> 1122</a> -<a href="#l1123" class="line" id="l1123"> 1123</a> fix resize -<a href="#l1124" class="line" id="l1124"> 1124</a> -<a href="#l1125" class="line" id="l1125"> 1125</a> </content> -<a href="#l1126" class="line" id="l1126"> 1126</a> </entry> -<a href="#l1127" class="line" id="l1127"> 1127</a> <entry> -<a href="#l1128" class="line" id="l1128"> 1128</a> <id>84ccfd7a16a48321628e8159540308ea79463cdd</id> -<a href="#l1129" class="line" id="l1129"> 1129</a> <published>2025-02-20T19:19:46Z</published> -<a href="#l1130" class="line" id="l1130"> 1130</a> <updated>2025-02-20T19:19:46Z</updated> -<a href="#l1131" class="line" id="l1131"> 1131</a> <title type="text">add footer</title> -<a href="#l1132" class="line" id="l1132"> 1132</a> <link rel="alternate" type="text/html" href="commit/84ccfd7a16a48321628e8159540308ea79463cdd.html" /> -<a href="#l1133" class="line" id="l1133"> 1133</a> <author> -<a href="#l1134" class="line" id="l1134"> 1134</a> <name>Samdal</name> -<a href="#l1135" class="line" id="l1135"> 1135</a> <email>samdal@protonmail.com</email> -<a href="#l1136" class="line" id="l1136"> 1136</a> </author> -<a href="#l1137" class="line" id="l1137"> 1137</a> <content type="text">commit 84ccfd7a16a48321628e8159540308ea79463cdd -<a href="#l1138" class="line" id="l1138"> 1138</a> parent 5d11c8c45652ec7ed0c731d39716eb6a963a3d82 -<a href="#l1139" class="line" id="l1139"> 1139</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l1140" class="line" id="l1140"> 1140</a> Date: Thu, 20 Feb 2025 20:19:46 +0100 -<a href="#l1141" class="line" id="l1141"> 1141</a> -<a href="#l1142" class="line" id="l1142"> 1142</a> add footer -<a href="#l1143" class="line" id="l1143"> 1143</a> -<a href="#l1144" class="line" id="l1144"> 1144</a> </content> -<a href="#l1145" class="line" id="l1145"> 1145</a> </entry> -<a href="#l1146" class="line" id="l1146"> 1146</a> <entry> -<a href="#l1147" class="line" id="l1147"> 1147</a> <id>5d11c8c45652ec7ed0c731d39716eb6a963a3d82</id> -<a href="#l1148" class="line" id="l1148"> 1148</a> <published>2025-02-20T18:27:54Z</published> -<a href="#l1149" class="line" id="l1149"> 1149</a> <updated>2025-02-20T18:27:54Z</updated> -<a href="#l1150" class="line" id="l1150"> 1150</a> <title type="text">remove extra hello worlds</title> -<a href="#l1151" class="line" id="l1151"> 1151</a> <link rel="alternate" type="text/html" href="commit/5d11c8c45652ec7ed0c731d39716eb6a963a3d82.html" /> -<a href="#l1152" class="line" id="l1152"> 1152</a> <author> -<a href="#l1153" class="line" id="l1153"> 1153</a> <name>Samdal</name> -<a href="#l1154" class="line" id="l1154"> 1154</a> <email>samdal@protonmail.com</email> -<a href="#l1155" class="line" id="l1155"> 1155</a> </author> -<a href="#l1156" class="line" id="l1156"> 1156</a> <content type="text">commit 5d11c8c45652ec7ed0c731d39716eb6a963a3d82 -<a href="#l1157" class="line" id="l1157"> 1157</a> parent aac558f8a7a7670e1965637a5f8a64b011039259 -<a href="#l1158" class="line" id="l1158"> 1158</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l1159" class="line" id="l1159"> 1159</a> Date: Thu, 20 Feb 2025 19:27:54 +0100 -<a href="#l1160" class="line" id="l1160"> 1160</a> -<a href="#l1161" class="line" id="l1161"> 1161</a> remove extra hello worlds -<a href="#l1162" class="line" id="l1162"> 1162</a> -<a href="#l1163" class="line" id="l1163"> 1163</a> </content> -<a href="#l1164" class="line" id="l1164"> 1164</a> </entry> -<a href="#l1165" class="line" id="l1165"> 1165</a> <entry> -<a href="#l1166" class="line" id="l1166"> 1166</a> <id>aac558f8a7a7670e1965637a5f8a64b011039259</id> -<a href="#l1167" class="line" id="l1167"> 1167</a> <published>2025-02-20T18:25:26Z</published> -<a href="#l1168" class="line" id="l1168"> 1168</a> <updated>2025-02-20T18:25:26Z</updated> -<a href="#l1169" class="line" id="l1169"> 1169</a> <title type="text">add terminal seksjon i vga kontroller</title> -<a href="#l1170" class="line" id="l1170"> 1170</a> <link rel="alternate" type="text/html" href="commit/aac558f8a7a7670e1965637a5f8a64b011039259.html" /> -<a href="#l1171" class="line" id="l1171"> 1171</a> <author> -<a href="#l1172" class="line" id="l1172"> 1172</a> <name>Samdal</name> -<a href="#l1173" class="line" id="l1173"> 1173</a> <email>samdal@protonmail.com</email> -<a href="#l1174" class="line" id="l1174"> 1174</a> </author> -<a href="#l1175" class="line" id="l1175"> 1175</a> <content type="text">commit aac558f8a7a7670e1965637a5f8a64b011039259 -<a href="#l1176" class="line" id="l1176"> 1176</a> parent 3c1904252a6c0afedb50ce154067f734b0087867 -<a href="#l1177" class="line" id="l1177"> 1177</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l1178" class="line" id="l1178"> 1178</a> Date: Thu, 20 Feb 2025 19:25:26 +0100 -<a href="#l1179" class="line" id="l1179"> 1179</a> -<a href="#l1180" class="line" id="l1180"> 1180</a> add terminal seksjon i vga kontroller -<a href="#l1181" class="line" id="l1181"> 1181</a> -<a href="#l1182" class="line" id="l1182"> 1182</a> </content> -<a href="#l1183" class="line" id="l1183"> 1183</a> </entry> -<a href="#l1184" class="line" id="l1184"> 1184</a> <entry> -<a href="#l1185" class="line" id="l1185"> 1185</a> <id>3c1904252a6c0afedb50ce154067f734b0087867</id> -<a href="#l1186" class="line" id="l1186"> 1186</a> <published>2025-02-20T18:19:11Z</published> -<a href="#l1187" class="line" id="l1187"> 1187</a> <updated>2025-02-20T18:19:11Z</updated> -<a href="#l1188" class="line" id="l1188"> 1188</a> <title type="text">initial commit</title> -<a href="#l1189" class="line" id="l1189"> 1189</a> <link rel="alternate" type="text/html" href="commit/3c1904252a6c0afedb50ce154067f734b0087867.html" /> -<a href="#l1190" class="line" id="l1190"> 1190</a> <author> -<a href="#l1191" class="line" id="l1191"> 1191</a> <name>Samdal</name> -<a href="#l1192" class="line" id="l1192"> 1192</a> <email>samdal@protonmail.com</email> -<a href="#l1193" class="line" id="l1193"> 1193</a> </author> -<a href="#l1194" class="line" id="l1194"> 1194</a> <content type="text">commit 3c1904252a6c0afedb50ce154067f734b0087867 -<a href="#l1195" class="line" id="l1195"> 1195</a> Author: Samdal &lt;samdal@protonmail.com&gt; -<a href="#l1196" class="line" id="l1196"> 1196</a> Date: Thu, 20 Feb 2025 19:19:11 +0100 -<a href="#l1197" class="line" id="l1197"> 1197</a> -<a href="#l1198" class="line" id="l1198"> 1198</a> initial commit -<a href="#l1199" class="line" id="l1199"> 1199</a> -<a href="#l1200" class="line" id="l1200"> 1200</a> </content> -<a href="#l1201" class="line" id="l1201"> 1201</a> </entry> -<a href="#l1202" class="line" id="l1202"> 1202</a> </feed> -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/favicon.png.html b/git/n-channel/file/favicon.png.html @@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>favicon.png - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../style.css" /> -</head> -<body> -<table><tr><td><a href="../../"><img src="../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../log.html">Log</a> | <a href="../files.html">Files</a> | <a href="../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> favicon.png (3930B)</p><hr/><p>Binary file.</p> -</div> -</body> -</html> diff --git a/git/n-channel/file/feed.json.html b/git/n-channel/file/feed.json.html @@ -1,82 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>feed.json - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../style.css" /> -</head> -<body> -<table><tr><td><a href="../../"><img src="../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../log.html">Log</a> | <a href="../files.html">Files</a> | <a href="../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> feed.json (2897B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> --- -<a href="#l2" class="line" id="l2"> 2</a> layout: null -<a href="#l3" class="line" id="l3"> 3</a> --- -<a href="#l4" class="line" id="l4"> 4</a> { -<a href="#l5" class="line" id="l5"> 5</a> "version": "https://jsonfeed.org/version/1", -<a href="#l6" class="line" id="l6"> 6</a> "title": "{{ site.title | xml_escape }}", -<a href="#l7" class="line" id="l7"> 7</a> "home_page_url": "{{ "/" | absolute_url }}", -<a href="#l8" class="line" id="l8"> 8</a> "feed_url": "{{ "/feed.json" | absolute_url }}", -<a href="#l9" class="line" id="l9"> 9</a> "description": {{ site.description | jsonify }}, -<a href="#l10" class="line" id="l10"> 10</a> "icon": "{{ "/apple-touch-icon.png" | absolute_url }}", -<a href="#l11" class="line" id="l11"> 11</a> "favicon": "{{ "/favicon.ico" | absolute_url }}", -<a href="#l12" class="line" id="l12"> 12</a> "expired": false, -<a href="#l13" class="line" id="l13"> 13</a> {% if site.author %} -<a href="#l14" class="line" id="l14"> 14</a> "author": {% if site.author.name %} { -<a href="#l15" class="line" id="l15"> 15</a> "name": "{{ site.author.name }}", -<a href="#l16" class="line" id="l16"> 16</a> "url": {% if site.author.url %}"{{ site.author.url }}"{% else %}null{% endif %}, -<a href="#l17" class="line" id="l17"> 17</a> "avatar": {% if site.author.avatar %}"{{ site.author.avatar }}"{% else %}null{% endif %} -<a href="#l18" class="line" id="l18"> 18</a> },{% else %}"{{ site.author }}",{% endif %} -<a href="#l19" class="line" id="l19"> 19</a> {% endif %} -<a href="#l20" class="line" id="l20"> 20</a> "items": [ -<a href="#l21" class="line" id="l21"> 21</a> {% for post in site.posts limit:36 %} -<a href="#l22" class="line" id="l22"> 22</a> { -<a href="#l23" class="line" id="l23"> 23</a> "id": "{{ post.url | absolute_url | sha1 }}", -<a href="#l24" class="line" id="l24"> 24</a> "title": {{ post.title | jsonify }}, -<a href="#l25" class="line" id="l25"> 25</a> "summary": {{ post.description | jsonify }}, -<a href="#l26" class="line" id="l26"> 26</a> "content_text": {{ post.content | strip_html | strip_newlines | jsonify }}, -<a href="#l27" class="line" id="l27"> 27</a> "content_html": {{ post.content | strip_newlines | jsonify }}, -<a href="#l28" class="line" id="l28"> 28</a> "url": "{{ post.url | absolute_url }}", -<a href="#l29" class="line" id="l29"> 29</a> {% if post.image.size > 1 %}"image": {{ post.image | jsonify }},{% endif %} -<a href="#l30" class="line" id="l30"> 30</a> {% if post.link.size > 1 %}"external_url": "{{ post.link }}",{% endif %} -<a href="#l31" class="line" id="l31"> 31</a> {% if post.banner.size > 1 %}"banner_image": "{{ post.banner }}",{% endif %} -<a href="#l32" class="line" id="l32"> 32</a> {% if post.tags.size > 1 %}"tags": {{ post.tags | jsonify }},{% endif %} -<a href="#l33" class="line" id="l33"> 33</a> {% if post.enclosure.size > 1 %}"attachments": [ { -<a href="#l34" class="line" id="l34"> 34</a> "url": "{{ post.enclosure }}", -<a href="#l35" class="line" id="l35"> 35</a> "mime_type": "{{ post.enclosure_type }}", -<a href="#l36" class="line" id="l36"> 36</a> "size_in_bytes": "{{ post.enclosure_length }}" -<a href="#l37" class="line" id="l37"> 37</a> },{% endif %} -<a href="#l38" class="line" id="l38"> 38</a> "date_published": "{{ post.date | date_to_xmlschema }}", -<a href="#l39" class="line" id="l39"> 39</a> "date_modified": "{{ post.date | date_to_xmlschema }}", -<a href="#l40" class="line" id="l40"> 40</a> {% if post.author %} -<a href="#l41" class="line" id="l41"> 41</a> "author": {% if post.author.name %} { -<a href="#l42" class="line" id="l42"> 42</a> "name": "{{ post.author.name }}", -<a href="#l43" class="line" id="l43"> 43</a> "url": {% if post.author.url %}"{{ post.author.url }}"{% else %}null{% endif %}, -<a href="#l44" class="line" id="l44"> 44</a> "avatar": {% if post.author.avatar %}"{{ post.author.avatar }}"{% else %}null{% endif %} -<a href="#l45" class="line" id="l45"> 45</a> } -<a href="#l46" class="line" id="l46"> 46</a> {% else %}"{{ post.author }}"{% endif %} -<a href="#l47" class="line" id="l47"> 47</a> {% else %} -<a href="#l48" class="line" id="l48"> 48</a> "author": {% if site.author.name %} { -<a href="#l49" class="line" id="l49"> 49</a> "name": "{{ site.author.name }}", -<a href="#l50" class="line" id="l50"> 50</a> "url": {% if site.author.url %}"{{ site.author.url }}"{% else %}null{% endif %}, -<a href="#l51" class="line" id="l51"> 51</a> "avatar": {% if site.author.avatar %}"{{ site.author.avatar }}"{% else %}null{% endif %} -<a href="#l52" class="line" id="l52"> 52</a> } -<a href="#l53" class="line" id="l53"> 53</a> {% else %} -<a href="#l54" class="line" id="l54"> 54</a> "{{ site.author }}" -<a href="#l55" class="line" id="l55"> 55</a> {% endif %} -<a href="#l56" class="line" id="l56"> 56</a> {% endif %} -<a href="#l57" class="line" id="l57"> 57</a> }{% if forloop.last == false %},{% endif %} -<a href="#l58" class="line" id="l58"> 58</a> {% endfor %} -<a href="#l59" class="line" id="l59"> 59</a> ] -<a href="#l60" class="line" id="l60"> 60</a> }</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/index.html.html b/git/n-channel/file/index.html.html @@ -1,44 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>index.html - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../style.css" /> -</head> -<body> -<table><tr><td><a href="../../"><img src="../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../log.html">Log</a> | <a href="../files.html">Files</a> | <a href="../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> index.html (918B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> --- -<a href="#l2" class="line" id="l2"> 2</a> layout: default -<a href="#l3" class="line" id="l3"> 3</a> --- -<a href="#l4" class="line" id="l4"> 4</a> -<a href="#l5" class="line" id="l5"> 5</a> <section class="posts"> -<a href="#l6" class="line" id="l6"> 6</a> -<a href="#l7" class="line" id="l7"> 7</a> <img class="invertable-image" style="margin-left: 1.5rem; margin-top: 0.5rem; margin-bottom: 0.5rem; height: auto;" src="/assets/images/modified_stolen_art/kettenkrad.gif" width=200 height=200> -<a href="#l8" class="line" id="l8"> 8</a> <ul style="padding: 0px; margin: 0px;"> -<a href="#l9" class="line" id="l9"> 9</a> {% for post in site.posts %} -<a href="#l10" class="line" id="l10"> 10</a> <li {% cycle 'alternate-color': 'style="color: #799f7c;"', 'style="color: #b3b781;"'%} > -<a href="#l11" class="line" id="l11"> 11</a> <a style="color: inherit" href="{{ site.baseurl }}{{ post.url }}">{{ post.title }}</a> -<a href="#l12" class="line" id="l12"> 12</a> <time datetime="{{ post.date | date_to_xmlschema }}">{{ post.date | date: "%m-%d-%Y" }}</time> -<a href="#l13" class="line" id="l13"> 13</a> </li> -<a href="#l14" class="line" id="l14"> 14</a> {% endfor %} -<a href="#l15" class="line" id="l15"> 15</a> </ul> -<a href="#l16" class="line" id="l16"> 16</a> -<a href="#l17" class="line" id="l17"> 17</a> <img style="margin: 2rem auto 0px auto; max-width: 150px; width: 100%; height: auto;" src="/assets/images/modified_stolen_art/silly.png" width=200 height=200> -<a href="#l18" class="line" id="l18"> 18</a> <p style="margin: 0px; text-align: center; font-size: 90%; color:gray;"><i>You've reached the bottom of the stack</i></p> -<a href="#l19" class="line" id="l19"> 19</a> -<a href="#l20" class="line" id="l20"> 20</a> </section> -<a href="#l21" class="line" id="l21"> 21</a> -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/package-lock.json.html b/git/n-channel/file/package-lock.json.html @@ -1,50 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>package-lock.json - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../style.css" /> -</head> -<body> -<table><tr><td><a href="../../"><img src="../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../log.html">Log</a> | <a href="../files.html">Files</a> | <a href="../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> package-lock.json (859B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> { -<a href="#l2" class="line" id="l2"> 2</a> "name": "n-channel", -<a href="#l3" class="line" id="l3"> 3</a> "lockfileVersion": 3, -<a href="#l4" class="line" id="l4"> 4</a> "requires": true, -<a href="#l5" class="line" id="l5"> 5</a> "packages": { -<a href="#l6" class="line" id="l6"> 6</a> "": { -<a href="#l7" class="line" id="l7"> 7</a> "dependencies": { -<a href="#l8" class="line" id="l8"> 8</a> "simple-jekyll-search": "^1.10.0" -<a href="#l9" class="line" id="l9"> 9</a> } -<a href="#l10" class="line" id="l10"> 10</a> }, -<a href="#l11" class="line" id="l11"> 11</a> "node_modules/fuzzysearch": { -<a href="#l12" class="line" id="l12"> 12</a> "version": "1.0.3", -<a href="#l13" class="line" id="l13"> 13</a> "resolved": "https://registry.npmjs.org/fuzzysearch/-/fuzzysearch-1.0.3.tgz", -<a href="#l14" class="line" id="l14"> 14</a> "integrity": "sha512-s+kNWQuI3mo9OALw0HJ6YGmMbLqEufCh2nX/zzV5CrICQ/y4AwPxM+6TIiF9ItFCHXFCyM/BfCCmN57NTIJuPg==", -<a href="#l15" class="line" id="l15"> 15</a> "license": "MIT" -<a href="#l16" class="line" id="l16"> 16</a> }, -<a href="#l17" class="line" id="l17"> 17</a> "node_modules/simple-jekyll-search": { -<a href="#l18" class="line" id="l18"> 18</a> "version": "1.10.0", -<a href="#l19" class="line" id="l19"> 19</a> "resolved": "https://registry.npmjs.org/simple-jekyll-search/-/simple-jekyll-search-1.10.0.tgz", -<a href="#l20" class="line" id="l20"> 20</a> "integrity": "sha512-4SdHfAjEe9mngvj4wt8A7OsF9Rl3+onHY1ruQC+bUnecbNbdvzVcAbL+UH5mE+v2CWgUb95dyZjHhyqUGSa2hA==", -<a href="#l21" class="line" id="l21"> 21</a> "license": "MIT", -<a href="#l22" class="line" id="l22"> 22</a> "dependencies": { -<a href="#l23" class="line" id="l23"> 23</a> "fuzzysearch": "^1.0.3" -<a href="#l24" class="line" id="l24"> 24</a> } -<a href="#l25" class="line" id="l25"> 25</a> } -<a href="#l26" class="line" id="l26"> 26</a> } -<a href="#l27" class="line" id="l27"> 27</a> } -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/package.json.html b/git/n-channel/file/package.json.html @@ -1,28 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>package.json - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../style.css" /> -</head> -<body> -<table><tr><td><a href="../../"><img src="../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../log.html">Log</a> | <a href="../files.html">Files</a> | <a href="../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> package.json (66B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> { -<a href="#l2" class="line" id="l2"> 2</a> "dependencies": { -<a href="#l3" class="line" id="l3"> 3</a> "simple-jekyll-search": "^1.10.0" -<a href="#l4" class="line" id="l4"> 4</a> } -<a href="#l5" class="line" id="l5"> 5</a> } -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/search.js.html b/git/n-channel/file/search.js.html @@ -1,29 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>search.js - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../style.css" /> -</head> -<body> -<table><tr><td><a href="../../"><img src="../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../log.html">Log</a> | <a href="../files.html">Files</a> | <a href="../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> search.js (4734B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> /*! -<a href="#l2" class="line" id="l2"> 2</a> * Simple-Jekyll-Search v1.7.2 (https://github.com/christian-fei/Simple-Jekyll-Search) -<a href="#l3" class="line" id="l3"> 3</a> * Copyright 2015-2018, Christian Fei -<a href="#l4" class="line" id="l4"> 4</a> * Licensed under the MIT License. -<a href="#l5" class="line" id="l5"> 5</a> */ -<a href="#l6" class="line" id="l6"> 6</a> !function(){"use strict";var f={load:function w(t,e){var n=function r(){return window.XMLHttpRequest?new window.XMLHttpRequest:new ActiveXObject("Microsoft.XMLHTTP")}();n.open("GET",t,!0),n.onreadystatechange=function i(e,n){return function(){if(4===e.readyState&&200===e.status)try{n(null,JSON.parse(e.responseText))}catch(t){n(t,null)}}}(n,e),n.send()}};(function y(t){if(!function e(t){return!!t&&"undefined"!=typeof t.required&&t.required instanceof Array}(t))throw new Error("-- OptionsValidator: required options missing");if(!(this instanceof y))return new y(t);var r=t.required;this.getRequiredOptions=function(){return r},this.validate=function(e){var n=[];return r.forEach(function(t){"undefined"==typeof e[t]&&n.push(t)}),n}});var n=function g(t,e){var n=e.length,r=t.length;if(n<r)return!1;if(r===n)return t===e;t:for(var i=0,o=0;i<r;i++){for(var u=t.charCodeAt(i);o<n;)if(e.charCodeAt(o++)===u)continue t;return!1}return!0},e=new function t(){this.matches=function(t,e){return n(e.toLowerCase(),t.toLowerCase())}};var r=new function O(){this.matches=function(e,t){return!!e&&(e=e.trim().toLowerCase(),(t=t.trim().toLowerCase()).split(" ").filter(function(t){return 0<=e.indexOf(t)}).length===t.split(" ").length)}};var l={put:function z(t){if(c(t))return s(t);if(function e(t){return Boolean(t)&&"[object Array]"===Object.prototype.toString.call(t)}(t))return function i(t){var e=[];a();for(var n=0,r=t.length;n<r;n++)c(t[n])&&e.push(s(t[n]));return e}(t);return undefined},clear:a,search:function S(t){return t?function a(t,e,n,r){for(var i=[],o=0;o<t.length&&i.length<r.limit;o++){var u=d(t[o],e,n,r);u&&i.push(u)}return i}(o,t,u.searchStrategy,u).sort(u.sort):[]},setOptions:function q(t){(u=t||{}).fuzzy=t.fuzzy||!1,u.limit=t.limit||10,u.searchStrategy=t.fuzzy?e:r,u.sort=t.sort||i}};function i(){return 0}var o=[],u={};function a(){return o.length=0,o}function c(t){return Boolean(t)&&"[object Object]"===Object.prototype.toString.call(t)}function s(t){return o.push(t),o}function d(t,e,n,r){for(var i in t)if(!p(t[i],r.exclude)&&n.matches(t[i],e))return t}function p(t,e){for(var n=!1,r=0,i=(e=e||[]).length;r<i;r++){var o=e[r];!n&&new RegExp(t).test(o)&&(n=!0)}return n}u.fuzzy=!1,u.limit=10,u.searchStrategy=u.fuzzy?e:r,u.sort=i;var h={compile:function j(r){return m.template.replace(m.pattern,function(t,e){var n=m.middleware(e,r[e],m.template);return void 0!==n?n:r[e]||t})},setOptions:function C(t){m.pattern=t.pattern||m.pattern,m.template=t.template||m.template,"function"==typeof t.middleware&&(m.middleware=t.middleware)}},m={};m.pattern=/\{(.*?)\}/g,m.template="",m.middleware=function(){};var v={merge:function L(t,e){var n={};for(var r in t)n[r]=t[r],"undefined"!=typeof e[r]&&(n[r]=e[r]);return n},isJSON:function M(t){try{return!!(t instanceof Object&&JSON.parse(JSON.stringify(t)))}catch(e){return!1}}};!function(t){var o={searchInput:null,resultsContainer:null,json:[],success:Function.prototype,searchResultTemplate:'<li><a href="{url}" title="{description}">{title}</a></li>',templateMiddleware:Function.prototype,sortMiddleware:function(){return 0},noResultsText:"No results found",limit:10,fuzzy:!1,exclude:[]},n=["searchInput","resultsContainer","json"],r=function y(e){if(!function n(t){return!!t&&"undefined"!=typeof t.required&&t.required instanceof Array}(e))throw new Error("-- OptionsValidator: required options missing");if(!(this instanceof y))return new y(e);var r=e.required;this.getRequiredOptions=function(){return r},this.validate=function(e){var n=[];return r.forEach(function(t){"undefined"==typeof e[t]&&n.push(t)}),n}}({required:n});function i(t){o.success(t),l.put(t),function e(){o.searchInput.addEventListener("keyup",function(t){(function e(t){return-1===[13,16,20,37,38,39,40,91].indexOf(t)})(t.which)&&(u(),c(t.target.value))})}()}function u(){o.resultsContainer.innerHTML=""}function a(t){o.resultsContainer.innerHTML+=t}function c(t){(function e(t){return t&&0<t.length})(t)&&(u(),function i(t,e){var n=t.length;if(0===n)return a(o.noResultsText);for(var r=0;r<n;r++)t[r].query=e,a(h.compile(t[r]))}(l.search(t),t))}function s(t){throw new Error("SimpleJekyllSearch --- "+t)}t.SimpleJekyllSearch=function(t){return 0<r.validate(t).length&&s("You must specify the following required options: "+n),o=v.merge(o,t),h.setOptions({template:o.searchResultTemplate,middleware:o.templateMiddleware}),l.setOptions({fuzzy:o.fuzzy,limit:o.limit,sort:o.sortMiddleware}),v.isJSON(o.json)?i(o.json):function e(n){f.load(n,function(t,e){t&&s("failed to get JSON ("+n+")"),i(e)})}(o.json),{search:c}}}(window)}(); -</pre> -</div> -</body> -</html> diff --git a/git/n-channel/file/search.json.html b/git/n-channel/file/search.json.html @@ -1,40 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta name="viewport" content="width=device-width, initial-scale=1" /> -<title>search.json - n-channel - Unnamed repository; edit this file 'description' to name the repository. -</title> -<link rel="icon" type="image/png" href="../favicon.png" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed" href="../atom.xml" /> -<link rel="alternate" type="application/atom+xml" title="n-channel Atom Feed (tags)" href="../tags.xml" /> -<link rel="stylesheet" type="text/css" href="../style.css" /> -</head> -<body> -<table><tr><td><a href="../../"><img src="../logo.png" alt="" width="32" height="32" /></a></td><td><h1>n-channel</h1><span class="desc">Unnamed repository; edit this file 'description' to name the repository. -</span></td></tr><tr><td></td><td> -<a href="../log.html">Log</a> | <a href="../files.html">Files</a> | <a href="../refs.html">Refs</a></td></tr></table> -<hr/> -<div id="content"> -<p> search.json (443B)</p><hr/><pre id="blob"> -<a href="#l1" class="line" id="l1"> 1</a> --- -<a href="#l2" class="line" id="l2"> 2</a> layout: null -<a href="#l3" class="line" id="l3"> 3</a> --- -<a href="#l4" class="line" id="l4"> 4</a> [ -<a href="#l5" class="line" id="l5"> 5</a> {% for post in site.posts %} -<a href="#l6" class="line" id="l6"> 6</a> { -<a href="#l7" class="line" id="l7"> 7</a> -<a href="#l8" class="line" id="l8"> 8</a> "title" : "{{ post.title | strip_html | escape }}", -<a href="#l9" class="line" id="l9"> 9</a> "description" : "{{ post.description | escape }}", -<a href="#l10" class="line" id="l10"> 10</a> "url" : "{{ site.baseurl }}{{ post.url }}", -<a href="#l11" class="line" id="l11"> 11</a> "category" : "{{post.categories | join: ', '}}", -<a href="#l12" class="line" id="l12"> 12</a> "tags" : "{{ post.tags | join: ', ' }}", -<a href="#l13" class="line" id="l13"> 13</a> "date" : "{{ post.date }}" -<a href="#l14" class="line" id="l14"> 14</a> -<a href="#l15" class="line" id="l15"> 15</a> } {% unless forloop.last %},{% endunless %} -<a href="#l16" class="line" id="l16"> 16</a> {% endfor %} -<a href="#l17" class="line" id="l17"> 17</a> ] -</pre> -</div> -</body> -</html>