<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="http://wiki.nathancampos.me/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="http://wiki.nathancampos.me/feed.php">
        <title>Nathan&#039;s KB - idea</title>
        <description>Hello</description>
        <link>http://wiki.nathancampos.me/</link>
        <image rdf:resource="http://wiki.nathancampos.me/lib/exe/fetch.php?media=wiki:dokuwiki.svg" />
       <dc:date>2026-05-13T09:02:09+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="http://wiki.nathancampos.me/doku.php?id=idea:emacs-cheatsheet"/>
                <rdf:li rdf:resource="http://wiki.nathancampos.me/doku.php?id=idea:tonw"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="http://wiki.nathancampos.me/lib/exe/fetch.php?media=wiki:dokuwiki.svg">
        <title>Nathan's KB</title>
        <link>http://wiki.nathancampos.me/</link>
        <url>http://wiki.nathancampos.me/lib/exe/fetch.php?media=wiki:dokuwiki.svg</url>
    </image>
    <item rdf:about="http://wiki.nathancampos.me/doku.php?id=idea:emacs-cheatsheet">
        <dc:format>text/html</dc:format>
        <dc:date>2023-05-10T01:48:10+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>emacs-cheatsheet</title>
        <link>http://wiki.nathancampos.me/doku.php?id=idea:emacs-cheatsheet</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;emacs_cheatsheet&quot;&gt;Emacs Cheatsheet&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
One of the worst things about learning Emacs is to memorize and get that muscle memory regarding the chords required to do simple things like move half a page, yank this text, etc.
&lt;/p&gt;

&lt;p&gt;
One of the ways that a lot of people get over this is by either downloading a cheatsheet poster or creating their own. This is nice and all, but you always have to leave Emacs in order to consult something, breaking your flow and making you less likely to check it.
&lt;/p&gt;

&lt;p&gt;
We plan on fixing that by writing a tiny package where you define the commands you want executed, we grab the chrod associated with that from the help, and even allow you to set a small description about that chord. Then whenever you want to consult your own personalized cheatsheet we open a minibuf, or a small bottom buffer like help does, and display a nice tabular view with your cheatsheet. 
&lt;/p&gt;

&lt;/div&gt;
</description>
    </item>
    <item rdf:about="http://wiki.nathancampos.me/doku.php?id=idea:tonw">
        <dc:format>text/html</dc:format>
        <dc:date>2023-08-07T13:05:33+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>tonw</title>
        <link>http://wiki.nathancampos.me/doku.php?id=idea:tonw</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;the_old_new_web&quot;&gt;The Old New Web&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
A proxy server that acts in the same manner as an AdBlocker where you can define rules to remove blocks of &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt; from a page, but it&amp;#039;ll also allow you to add blocks to a page and even to replace its &lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt; with your own, creating a way to “recreate” new websites in a way that can be rendered by old browsers. This is kind of the next evolution of things like &lt;a href=&quot;https://github.com/atauenis/webone&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/atauenis/webone&quot; rel=&quot;ugc nofollow&quot;&gt;WebOne&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;The Old New Web&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;the_old_new_web&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-435&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;inspiration&quot;&gt;Inspiration&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
The inspiration for this project came after I was literally unable to browse most websites on an iPad 2 with iOS 9, an &lt;abbr title=&quot;Operating System&quot;&gt;OS&lt;/abbr&gt; from 2015 with a proper WebKit-based browser for its day, and a new set of SSL certificates struggled to do anything useful with modern websites. It was utterly unacceptable.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Inspiration&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;inspiration&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;436-758&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;the_social_aspect&quot;&gt;The Social Aspect&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
We probably want this to be a self hosted solution in order to avoid high bandwidth costs, but we should have a public page where users can contribute their own mods to websites so that people won&amp;#039;t have to be modifying every single one on their own.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;The Social Aspect&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;the_social_aspect&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;759-1041&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;materialization_of_the_idea&quot;&gt;Materialization of the Idea&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Have a fixes folder in the repo that contains the files that will be used to “fix” a webpage.
&lt;/p&gt;

&lt;p&gt;
That directory will have subfolders with the domain name of the website to fix. You can also have subdomains there. The app will first try to match a subdomain and will then move to the top level and try that before giving up.
&lt;/p&gt;

&lt;p&gt;
Fixes will have levels, so that you can serve a page to a modernish browser and also serve a similar page to a completely ancient Netscape thing. These levels will execute different scripts. These levels will be represented by a priority number and will be passed by the client. If the number isn&amp;#039;t available it&amp;#039;ll move to the closest one and if none are available it&amp;#039;ll just pass the raw page after fully loading it.
&lt;/p&gt;

&lt;p&gt;
Each fix folder will contain a config file (YAML?) that&amp;#039;ll list a bunch of things to do. First it&amp;#039;ll have a block(deny?)list that&amp;#039;ll function as an AdBlocker for our renders to be easier and faster. This will simply be in the form of a list of regular expressions, if the href matches it&amp;#039;ll block before passing to the driver.
&lt;/p&gt;

&lt;p&gt;
Another part of this config will be the scripts definition which will contain a series of regex for hrefs and a script associated with the expression, if it matches the script will be executed on the page. The app will go through all of the items on the list since more than one script may have to be executed.
&lt;/p&gt;

&lt;p&gt;
This approach makes it super simple to implement everything that we want.
&lt;/p&gt;

&lt;p&gt;
Also think of a good and maintainable way to implement the levels in the config file.
&lt;/p&gt;

&lt;p&gt;
Maybe have a list called replace where if a href matches a regex that asset will be replaced by our proxy on the fly.
&lt;/p&gt;

&lt;p&gt;
Do TLS termination of course.
&lt;/p&gt;

&lt;p&gt;
Ensure that the Chrome engine is only spawned when there&amp;#039;s a script associated with the request, otherwise handle everything internally without resorting to Selenium. Either this or have some sort of configuration that selects which URLs match that will pass straight through, this way we won&amp;#039;t be spawning a full Chrome instance just to fetch a &lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt; file. Another approach could be of passing everything straight through and only spawn Chrome for matches in scripts or in a special “must use Chrome” match list.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Materialization of the Idea&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;materialization_of_the_idea&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;1042-3289&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;architecture&quot;&gt;Architecture&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Our stack will be built using several technologies glued together in order to achieve the goal we want in the easiest and fastest way possible that still leaves space for us to improve in the future.
&lt;/p&gt;

&lt;p&gt;
We&amp;#039;ll have the SOCKS4 proxy server that will redirect all the requests to an internal Java HttpServer (or HttpsServer if the requested port is 443). That server will do the SSL termination if needed and will get reconstruct the original request &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; and gather all of the request headers. If the request is a GET it&amp;#039;ll be passed to Selenium in order to fetch whatever is needed in a modern way and BrowserMob Proxy will replace the request headers with the ones from our original request (just don&amp;#039;t mess with the User-Agent). If the request is anything else we&amp;#039;ll do the query ourselves using Java&amp;#039;s HTTP client library. The response of all of this will be sent back to the proxy client.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Architecture&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;architecture&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;3290-&amp;quot;} --&gt;</description>
    </item>
</rdf:RDF>
