fix &
This commit is contained in:
parent
c46822bf9a
commit
c07f9f5738
|
@ -23,6 +23,7 @@ process_filler_file() {
|
|||
|
||||
# Read the contents of the filler file
|
||||
filler_content=$(<"$filler_file")
|
||||
filler_content=$(echo "$filler_content" | sed "s/\&/\\\&/g")
|
||||
|
||||
# Replace "{{ body_area }}" in the template with filler content
|
||||
modified_content="${template_content/\{\{ body_area \}\}/$filler_content}"
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<div>
|
||||
<h1 style="margin-bottom: 0px;">Blog</h1>
|
||||
<p style="margin-top: 0px;">A collection of my thoughts, some of them may be interesting</p>
|
||||
<p><a href="./blogs/fpga-fun.html">[ FPGA Fun (CHIP-8 in hardware) ]</a> - April 205h, 2024</p>
|
||||
<p><a href="./blogs/fpga-fun.html">[ FPGA Fun (CHIP-8 in hardware) ]</a> - April 20th, 2024</p>
|
||||
<p><a href="./blogs/nws-postmortem-11-8-23.html">[ NWS Postmortem 11/08/23 ]</a> - November 16th, 2023</p>
|
||||
<p><a href="./blogs/side-project-10-20-23.html">[ Side Project Log 10/20/23 ]</a> - October 20th, 2023</p>
|
||||
<p><a href="./blogs/side-project-8-15-23.html">[ Side Project Log 8/15/23 ]</a> - August 15th, 2023</p>
|
||||
|
@ -30,7 +30,7 @@
|
|||
|
||||
<footer>
|
||||
<hr />
|
||||
<p style="margin-bottom: 0px;">Copyright © Nicholas Orlowsky 2023</p>
|
||||
<p style="margin-bottom: 0px;">Copyright © Nicholas Orlowsky 2025</p>
|
||||
<p style="margin-top: 0px; margin-bottom: 0px;">Hosting provided by <a href="https://nws.nickorlow.com">NWS</a></p>
|
||||
<p style="margin-top: 0px;">Powered by <a href="https://github.com/nickorlow/anthracite">Anthracite Web Server</a></p>
|
||||
</footer>
|
||||
|
|
|
@ -16,25 +16,25 @@
|
|||
<p>Thanks to Arpan Dhatt for doing most of the work on this (his blog here: <a href="https://arpan.one/posts/messing-with-gradescope/">https://arpan.one/posts/messing-with-gradescope/</a>)</p>
|
||||
<p>At the end, he made this comment:</p>
|
||||
<blockquote>
|
||||
<p>And so, that{{ body_area }}#39;s the end of this post. To whom it may concern, don{{ body_area }}#39;t try doing your C assignment in C# (you know who you are).</p>
|
||||
<p>And so, that's the end of this post. To whom it may concern, don't try doing your C assignment in C# (you know who you are).</p>
|
||||
</blockquote>
|
||||
<p>The reason for this comment (besides the fact that I talk about C# a lot) is due to the fact that C# requires a runtime to be installed for it to work. This is because C# does not compile to native bytecode but rather compiles to an intermediary language (dubbed CIL by Microsoft) and is then translated {{ body_area }}#39;Just In Time{{ body_area }}#39; by the runtime. </p>
|
||||
<p>This makes running assignments in a docker container where the runtime is not already installed considerably hard. One option we have is that we could just include the runtime in our submission. Sounds easy, right? Well it would be non-trivial to do but due to the fact that the .NET runtime is very large, I wouldn{{ body_area }}#39;t consider this a good idea (Not to mention it{{ body_area }}#39;s super boring). </p>
|
||||
<p>The better solution is to use .NET{{ body_area }}#39;s (experimental) AOT compilation feature (formerly called CoreRT). C# has had a number of attempts at an AOT compiler such as :</p>
|
||||
<p>The reason for this comment (besides the fact that I talk about C# a lot) is due to the fact that C# requires a runtime to be installed for it to work. This is because C# does not compile to native bytecode but rather compiles to an intermediary language (dubbed CIL by Microsoft) and is then translated 'Just In Time' by the runtime. </p>
|
||||
<p>This makes running assignments in a docker container where the runtime is not already installed considerably hard. One option we have is that we could just include the runtime in our submission. Sounds easy, right? Well it would be non-trivial to do but due to the fact that the .NET runtime is very large, I wouldn't consider this a good idea (Not to mention it's super boring). </p>
|
||||
<p>The better solution is to use .NET's (experimental) AOT compilation feature (formerly called CoreRT). C# has had a number of attempts at an AOT compiler such as :</p>
|
||||
<ul>
|
||||
<li><a href="https://www.mono-project.com/docs/advanced/aot/">AOT</a> by Mono</li>
|
||||
<li>LLD2CPP built by Unity</li>
|
||||
<li><a href="https://docs.microsoft.com/en-us/dotnet/core/deploying/ready-to-run">Ready2Run</a> by Microsoft</li>
|
||||
</ul>
|
||||
<p>We{{ body_area }}#39;ll be using the official Ready2Run AOT compilation built by Microsoft. In order to use it, all you have to do is add the following to your <code>nuget.config</code>:</p>
|
||||
<pre><code class="lang-xml">{{ body_area }}lt;<span class="hljs-keyword">add</span> key=<span class="hljs-string">"nuget.org"</span> <span class="hljs-keyword">value</span>=<span class="hljs-string">"https://api.nuget.org/v3/index.json"</span> protocolVersion=<span class="hljs-string">"3"</span> /{{ body_area }}gt;
|
||||
<p>We'll be using the official Ready2Run AOT compilation built by Microsoft. In order to use it, all you have to do is add the following to your <code>nuget.config</code>:</p>
|
||||
<pre><code class="lang-xml"><<span class="hljs-keyword">add</span> key=<span class="hljs-string">"nuget.org"</span> <span class="hljs-keyword">value</span>=<span class="hljs-string">"https://api.nuget.org/v3/index.json"</span> protocolVersion=<span class="hljs-string">"3"</span> />
|
||||
</code></pre>
|
||||
<p>and then install the package: <code>Microsoft.DotNet.ILCompiler</code>. After doing that if you run the command: <code>dotnet publish -r [Runtime] -c [Config]</code> and after waiting a considerable amount of time, you{{ body_area }}#39;ll have a full-fledged C# application compiled directly to your target runtime{{ body_area }}#39;s bytecode!</p>
|
||||
<p>and then install the package: <code>Microsoft.DotNet.ILCompiler</code>. After doing that if you run the command: <code>dotnet publish -r [Runtime] -c [Config]</code> and after waiting a considerable amount of time, you'll have a full-fledged C# application compiled directly to your target runtime's bytecode!</p>
|
||||
<p>Compiling my simple Hello, Wold test to linux-x64 (<code>dotnet publish -r linux-x64 -c Release</code>) and adding it to my project files should let me run it using the same method Arpan used in his blog.</p>
|
||||
<p>After doing that, we can follow the instructions followed by Arpan and viola! C# runs on Gradescope!</p>
|
||||
<p>I don{{ body_area }}#39;t recommend this but it was fun to do and I needed stuff to write in a blog. </p>
|
||||
<p>I don't recommend this but it was fun to do and I needed stuff to write in a blog. </p>
|
||||
<h2 id="other-interesting-low-level-c-net-features">Other Interesting (Low Level) C#/.NET Features</h2>
|
||||
<p>C# actually has many lower level features people don{{ body_area }}#39;t expect it to have. Some of these include pointers and direct memory management. Pointers can be enabled by encasing your code in an unsafe code block.</p>
|
||||
<p>C# actually has many lower level features people don't expect it to have. Some of these include pointers and direct memory management. Pointers can be enabled by encasing your code in an unsafe code block.</p>
|
||||
<p>Example (Written by <a href="https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/unsafe-code">Microsoft</a>)</p>
|
||||
<pre><code class="lang-csharp">
|
||||
<span class="hljs-comment">// Normal pointer to an object.</span>
|
||||
|
@ -43,7 +43,7 @@
|
|||
unsafe
|
||||
{
|
||||
<span class="hljs-comment">// Must pin object on heap so that it doesn't move while using interior pointers.</span>
|
||||
fixed (<span class="hljs-keyword">int</span>* p = {{ body_area }}amp;a[<span class="hljs-number">0</span>])
|
||||
fixed (<span class="hljs-keyword">int</span>* p = &a[<span class="hljs-number">0</span>])
|
||||
{
|
||||
<span class="hljs-comment">// p is pinned as well as object, so create another pointer to show incrementing it.</span>
|
||||
<span class="hljs-keyword">int</span>* p2 = p;
|
||||
|
@ -72,7 +72,7 @@ unsafe
|
|||
|
||||
<footer>
|
||||
<hr />
|
||||
<p style="margin-bottom: 0px;">Copyright © Nicholas Orlowsky 2023</p>
|
||||
<p style="margin-bottom: 0px;">Copyright © Nicholas Orlowsky 2025</p>
|
||||
<p style="margin-top: 0px; margin-bottom: 0px;">Hosting provided by <a href="https://nws.nickorlow.com">NWS</a></p>
|
||||
<p style="margin-top: 0px;">Powered by <a href="https://github.com/nickorlow/anthracite">Anthracite Web Server</a></p>
|
||||
</footer>
|
||||
|
|
|
@ -104,7 +104,7 @@
|
|||
|
||||
<footer>
|
||||
<hr />
|
||||
<p style="margin-bottom: 0px;">Copyright © Nicholas Orlowsky 2023</p>
|
||||
<p style="margin-bottom: 0px;">Copyright © Nicholas Orlowsky 2025</p>
|
||||
<p style="margin-top: 0px; margin-bottom: 0px;">Hosting provided by <a href="https://nws.nickorlow.com">NWS</a></p>
|
||||
<p style="margin-top: 0px;">Powered by <a href="https://github.com/nickorlow/anthracite">Anthracite Web Server</a></p>
|
||||
</footer>
|
||||
|
|
|
@ -85,13 +85,13 @@ echo Starting container...
|
|||
cur_dir=`pwd`
|
||||
container_name=${cur_dir////$'_'}
|
||||
container_name="${container_name:1}_$RANDOM"
|
||||
docker run --name $container_name --network host -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --mount type=bind,source="$(pwd)",target=/work -d nick-vim {{ body_area }}> /dev/null
|
||||
docker run --name $container_name --network host -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --mount type=bind,source="$(pwd)",target=/work -d nick-vim &> /dev/null
|
||||
|
||||
echo Execing into container...
|
||||
docker exec -w /work -it $container_name bash
|
||||
|
||||
echo Stopping container in background...
|
||||
docker stop $container_name {{ body_area }}> /dev/null {{ body_area }}
|
||||
docker stop $container_name &> /dev/null &
|
||||
</code>
|
||||
|
||||
<p>
|
||||
|
@ -114,7 +114,7 @@ docker stop $container_name {{ body_area }}> /dev/null {{ body_area }}
|
|||
|
||||
<footer>
|
||||
<hr />
|
||||
<p style="margin-bottom: 0px;">Copyright © Nicholas Orlowsky 2023</p>
|
||||
<p style="margin-bottom: 0px;">Copyright © Nicholas Orlowsky 2025</p>
|
||||
<p style="margin-top: 0px; margin-bottom: 0px;">Hosting provided by <a href="https://nws.nickorlow.com">NWS</a></p>
|
||||
<p style="margin-top: 0px;">Powered by <a href="https://github.com/nickorlow/anthracite">Anthracite Web Server</a></p>
|
||||
</footer>
|
||||
|
|
|
@ -14,25 +14,25 @@
|
|||
|
||||
<h1>Side Project Log 3/20/2023</h1>
|
||||
<p>Spring break just wrapped up. I wrote a <a href="">blog</a> last week about the side projects that I was planning on
|
||||
doing. I wanted to provide an update on what I got done, and figured I{{ body_area }}#39;d turn it into a recurring thing.</p>
|
||||
doing. I wanted to provide an update on what I got done, and figured I'd turn it into a recurring thing.</p>
|
||||
<p>This side project log covers work done from 3/13/2023 - 3/20/2023</p>
|
||||
<h2 id="-personal-website-facelift-https-github-com-nickorlow-personal-site-"><a href="https://github.com/nickorlow/personal-site">Personal Website Facelift</a></h2>
|
||||
<p>I managed to move my website over to tab-based navigation pretty early on in the break. It just involved setting
|
||||
up a navbar component and then using react-navigation to navigate between pages. I also managed to
|
||||
update my projects page to be more compact and readable. </p>
|
||||
<p>There is still work to be done on making it look better, but I mostly believe that
|
||||
it{{ body_area }}#39;s just going to be somewhat minor tweaks.</p>
|
||||
it's just going to be somewhat minor tweaks.</p>
|
||||
<h2 id="-mahantongo-https-github-com-nickorlow-mahantongo-"><a href="https://github.com/nickorlow/mahantongo">Mahantongo</a></h2>
|
||||
<p>I managed to finish this one. I learned a lot about Rust and I{{ body_area }}#39;ve gained an appreciation for
|
||||
Rust{{ body_area }}#39;s enforcement of good programming habits, and I really like how error handling is done.</p>
|
||||
<p>Working with Serenity was pretty easy as it mirrored some of the other Discord SDKs I{{ body_area }}#39;ve used
|
||||
<p>I managed to finish this one. I learned a lot about Rust and I've gained an appreciation for
|
||||
Rust's enforcement of good programming habits, and I really like how error handling is done.</p>
|
||||
<p>Working with Serenity was pretty easy as it mirrored some of the other Discord SDKs I've used
|
||||
before.</p>
|
||||
<hr>
|
||||
<p><strong>The below projects had minimal/no work done on them:</strong> RingGold, NWS Container Deployment Service, and VerifiedBot </p>
|
||||
|
||||
<footer>
|
||||
<hr />
|
||||
<p style="margin-bottom: 0px;">Copyright © Nicholas Orlowsky 2023</p>
|
||||
<p style="margin-bottom: 0px;">Copyright © Nicholas Orlowsky 2025</p>
|
||||
<p style="margin-top: 0px; margin-bottom: 0px;">Hosting provided by <a href="https://nws.nickorlow.com">NWS</a></p>
|
||||
<p style="margin-top: 0px;">Powered by <a href="https://github.com/nickorlow/anthracite">Anthracite Web Server</a></p>
|
||||
</footer>
|
||||
|
|
|
@ -15,24 +15,24 @@
|
|||
<h1>Side Project Log 3/27/2023</h1>
|
||||
<p>This side project log covers work done from 3/20/2023 - 3/27/2023</p>
|
||||
<h2 id="septa-site">SEPTA Site</h2>
|
||||
<p>I started a new project that aimed to recreate parts of SEPTA{{ body_area }}#39;s website with a more elegant UI, and using
|
||||
SEPTA{{ body_area }}#39;s new {{ body_area }}quot;SEPTA Metro{{ body_area }}quot; wayfinding. The main goal with this project was to help me learn Svelte. I also had
|
||||
<p>I started a new project that aimed to recreate parts of SEPTA's website with a more elegant UI, and using
|
||||
SEPTA's new "SEPTA Metro" wayfinding. The main goal with this project was to help me learn Svelte. I also had
|
||||
to reverse-engineer the APIs on septakey.org in order to authenticate a user and get their trip history. </p>
|
||||
<p>In terms of Svelte, I really enjoyed working with it and overall I found it much more elegant and easier to work
|
||||
with than React. I didn{{ body_area }}#39;t like the way it handled client-server interaction with its serverside functions. </p>
|
||||
<p>I have not made this open source yet and do not intend to until it{{ body_area }}#39;s more polished.</p>
|
||||
with than React. I didn't like the way it handled client-server interaction with its serverside functions. </p>
|
||||
<p>I have not made this open source yet and do not intend to until it's more polished.</p>
|
||||
<h2 id="-verified-bot-https-github-com-benaubin-verified-bot-"><a href="https://github.com/benaubin/verified-bot">Verified Bot</a></h2>
|
||||
<p>I made all the necessary changes and tests to get VerifiedBot working. It is now waiting on my friend Ben
|
||||
to merge my PR with the changes outlined in my <a href="https://nickorlow.com/blog/spring-break-2023">spring break blog</a>.</p>
|
||||
<h2 id="-mahantongo-https-github-com-nickorlow-mahantongo-"><a href="https://github.com/nickorlow/mahantongo">Mahantongo</a></h2>
|
||||
<p>I created some QoL features, such as using Discord{{ body_area }}#39;s embeds instead of sending regular text messages, showing which board
|
||||
<p>I created some QoL features, such as using Discord's embeds instead of sending regular text messages, showing which board
|
||||
a post was on, and fixing some bugs.</p>
|
||||
<hr>
|
||||
<p><strong>The below projects had minimal/no work done on them:</strong> RingGold, and NWS Container Deployment Service </p>
|
||||
|
||||
<footer>
|
||||
<hr />
|
||||
<p style="margin-bottom: 0px;">Copyright © Nicholas Orlowsky 2023</p>
|
||||
<p style="margin-bottom: 0px;">Copyright © Nicholas Orlowsky 2025</p>
|
||||
<p style="margin-top: 0px; margin-bottom: 0px;">Hosting provided by <a href="https://nws.nickorlow.com">NWS</a></p>
|
||||
<p style="margin-top: 0px;">Powered by <a href="https://github.com/nickorlow/anthracite">Anthracite Web Server</a></p>
|
||||
</footer>
|
||||
|
|
|
@ -17,30 +17,30 @@
|
|||
<p>This side project log is a bit late due to it being a busy month of school, but today is my last day!</p>
|
||||
<h2 id="septa-site">SEPTA Site</h2>
|
||||
<p>This week, I published SEPTA Site on Github, you can find it here: <a href="https://github.com/nickorlow/septa-site">github.com/nickorlow/septa-site</a>.</p>
|
||||
<p>I made a few tweaks to it in terms of styling and also wrote a descriptive README to give people instructions on how to run it as I don{{ body_area }}#39;t want
|
||||
<p>I made a few tweaks to it in terms of styling and also wrote a descriptive README to give people instructions on how to run it as I don't want
|
||||
to host it myself since it handles credentials from another service.</p>
|
||||
<h2 id="squirrel">SQUIRREL</h2>
|
||||
<p>SQUIRREL, short for SQL Query Util-Izing Rust{{ body_area }}#39;s Reliable and Efficient Logic, is a SQL database that I am writing in Rust. Currently, it can
|
||||
<p>SQUIRREL, short for SQL Query Util-Izing Rust's Reliable and Efficient Logic, is a SQL database that I am writing in Rust. Currently, it can
|
||||
parse CREATE TABLE commands, and works with the data types varchar and int. I plan to implement basic CRUD operations, then add JOINs, and
|
||||
then try to make it wire-compatible with Postgres.</p>
|
||||
<p>This project is currently not open-sourced as I am waiting to add more features and polish it up more.</p>
|
||||
<h2 id="swole-control">Swole Control</h2>
|
||||
<p>This one isn{{ body_area }}#39;t a <em>personal</em> project, however it is a project that I worked on with a group. We began working on it in February as a part of a
|
||||
club at UT called Texas Convergent. We recently presented it at the club{{ body_area }}#39;s demo day and won the prize for having the best business.</p>
|
||||
<p>This one isn't a <em>personal</em> project, however it is a project that I worked on with a group. We began working on it in February as a part of a
|
||||
club at UT called Texas Convergent. We recently presented it at the club's demo day and won the prize for having the best business.</p>
|
||||
<p>Swole Control is an app that monitors machine usage at a gym on a machine-by-machine level, providing gym goers with information about what machines
|
||||
are free (this is a major pain point as a gym goer myself). It also provides gym owners with statistics on which machines are most popular, providing
|
||||
them valuable insights into their business.</p>
|
||||
<p>To achieve this, we built hardware that consisted of an ESP-32 micro controller and an ultrasonic distance sensor. This hardware is mounted on a gym machine
|
||||
and it measures the distance to the nearest object. It then sends this measurement to a Rust backend which stores it in a Firestore database (although we had
|
||||
a fork of it that worked with Postgres). The backend then uses these measurements and compares them to a baseline to determine if there is a user at a machine.
|
||||
Our mobile app then reads this from the Firestore database (it{{ body_area }}#39;s planned to have it read this from the API to have a better-defined application boundary). The
|
||||
Our mobile app then reads this from the Firestore database (it's planned to have it read this from the API to have a better-defined application boundary). The
|
||||
frontend is written in React Native.</p>
|
||||
<hr>
|
||||
<p><strong>These projects had minimal/no work done on them:</strong> RingGold, and NWS Container Deployment Service</p>
|
||||
|
||||
<footer>
|
||||
<hr />
|
||||
<p style="margin-bottom: 0px;">Copyright © Nicholas Orlowsky 2023</p>
|
||||
<p style="margin-bottom: 0px;">Copyright © Nicholas Orlowsky 2025</p>
|
||||
<p style="margin-top: 0px; margin-bottom: 0px;">Hosting provided by <a href="https://nws.nickorlow.com">NWS</a></p>
|
||||
<p style="margin-top: 0px;">Powered by <a href="https://github.com/nickorlow/anthracite">Anthracite Web Server</a></p>
|
||||
</footer>
|
||||
|
|
|
@ -21,12 +21,12 @@ distribution across a set of geo-distributed Kubernetes clusters. I detail the c
|
|||
I wrote</a>. In order to implement auto-created/auto-renewing SSL, I implemented the below solution:</p>
|
||||
<p><img src="/blog-images/NWS_SSL_Diagram.png" alt="Diagram of NWS SSL Architecture"></p>
|
||||
<p>First, a user creates a request to add SSL to their NWS CDS service through the web UI which calls the NWS API (not pictured)</p>
|
||||
<p>Then, the NWS API calls SSLiaison (in-house written software) which adds the domain to Caddy{{ body_area }}#39;s list of domains. Caddy will then attempt to create
|
||||
<p>Then, the NWS API calls SSLiaison (in-house written software) which adds the domain to Caddy's list of domains. Caddy will then attempt to create
|
||||
an SSL certificate from an ACME server (not pictured).</p>
|
||||
<p>The ACME server will query NWS for the challenge response by requesting a file at <code>/.well-known/acme-challenge</code> on the
|
||||
domain to be verified (this is the green arrows). </p>
|
||||
<p>HAProxy will re-route these requests to NWS Hill Country, which is where the NWS Management Engine (NWSME) lives (this is
|
||||
the orange arrows). <em>(NWSME controls what{{ body_area }}#39;s deployed on each k8s cluster on NWS)</em></p>
|
||||
the orange arrows). <em>(NWSME controls what's deployed on each k8s cluster on NWS)</em></p>
|
||||
<p>HAProxy in NWS Hill Country will then route this request to Caddy, which will solve the <a href="https://letsencrypt.org/docs/challenge-types/">http-01 challenge</a>, and then get the certificate
|
||||
from the ACME server. Once it does this, it will write the certificate to a directory that is bind-mounted to both Caddy
|
||||
and SSLiaison. </p>
|
||||
|
@ -34,38 +34,38 @@ and SSLiaison. </p>
|
|||
hosted in GitHub.</p>
|
||||
<p>From here, the certificate will be added to all the k8s clusters via Rancher Fleet.</p>
|
||||
<hr>
|
||||
<p>For next steps, I{{ body_area }}#39;d like to revise this solution such that it doesn{{ body_area }}#39;t have a single point of failure.
|
||||
<p>For next steps, I'd like to revise this solution such that it doesn't have a single point of failure.
|
||||
Currently, if NWS Hill Country is down (which it is about 0.025% of the time), then SSL certificates
|
||||
won{{ body_area }}#39;t be able to be created or renewed. </p>
|
||||
won't be able to be created or renewed. </p>
|
||||
<p>To do this, I will have SSLiaison implement the ACME client specification so that it can create and respond do ACME HTTP challenges.
|
||||
SSLiaison will run on NWS CDS (so that it{{ body_area }}#39;s running on all of our k8s clusters and is HA) instead of running as a standalone docker container.
|
||||
I{{ body_area }}#39;ll have SSLiaison use some distributed database (probably CockroachDB) to store the HTTP challenges so that it doesn{{ body_area }}#39;t matter
|
||||
SSLiaison will run on NWS CDS (so that it's running on all of our k8s clusters and is HA) instead of running as a standalone docker container.
|
||||
I'll have SSLiaison use some distributed database (probably CockroachDB) to store the HTTP challenges so that it doesn't matter
|
||||
which k8s cluster the challenge request from the ACME server is routed to.</p>
|
||||
<h2 id="next-steps-for-nws">Next Steps for NWS</h2>
|
||||
<ul>
|
||||
<li><strong>HA NWS Management Engine:</strong> Currently (as somewhat discussed above), the NWSME will go down when NWS Hill Country goes down. I{{ body_area }}#39;d like to
|
||||
make it so that this isn{{ body_area }}#39;t the case. This would likely just require that each NWS cluster runs its own instance of Rancher Fleet instead
|
||||
<li><strong>HA NWS Management Engine:</strong> Currently (as somewhat discussed above), the NWSME will go down when NWS Hill Country goes down. I'd like to
|
||||
make it so that this isn't the case. This would likely just require that each NWS cluster runs its own instance of Rancher Fleet instead
|
||||
of one central Rancher Fleet that manages all the clusters. It would also require the HA SSLiaison.</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li><strong>IaC for Everything:</strong> Currently, all NWS CDS services are defined in yaml files in a git repo, however the underlying infrastructure that
|
||||
it runs on is not. Ideally, I{{ body_area }}#39;d like every NWS machine to run Proxmox and then have Terraform {{ body_area }}amp; Ansible configs to define how to set up
|
||||
it runs on is not. Ideally, I'd like every NWS machine to run Proxmox and then have Terraform & Ansible configs to define how to set up
|
||||
vms on proxmox that will run the k8s clusters that support CDS services. This should eliminate my headaches of sshing into each machine
|
||||
to apply config changes and make sure everything is standardized. It should also make the process of setting up new servers easy.</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li><strong>Monitoring:</strong> I{{ body_area }}#39;ve been working on setting up monitoring on a lot of our services at my current internship using the TIG stack (Telegraf,
|
||||
InfluxDB, and Grafana). Now that I{{ body_area }}#39;ve been exposed to the usefulness of having a bunch of metrics on hand, I think it would be nice to have
|
||||
<li><strong>Monitoring:</strong> I've been working on setting up monitoring on a lot of our services at my current internship using the TIG stack (Telegraf,
|
||||
InfluxDB, and Grafana). Now that I've been exposed to the usefulness of having a bunch of metrics on hand, I think it would be nice to have
|
||||
some dashboards setup for NWS to monitor speed, resource usage, uptime, and traffic. Doing this would also make it possible to expose resource usage in the
|
||||
NWS dashboard.</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li><p><strong>Enhanced Infrastructure:</strong> This is kind of a blanket one for things I want to do that don{{ body_area }}#39;t fit into other categories. It includes making
|
||||
hardware upgrades (mostly adding more storage), make management more accessible (such as Dell IDRAC{{ body_area }}#39;s WebSerial), some load testing to
|
||||
identify painpoints, run an NWS machine in a cloud VM so I can say it{{ body_area }}#39;s cross cloud (although my friends have told me this is cheating at creating
|
||||
my own cloud), and trying to figure out how to set up an Anycast network. I don{{ body_area }}#39;t think I can setup an Anycast network without selling
|
||||
<li><p><strong>Enhanced Infrastructure:</strong> This is kind of a blanket one for things I want to do that don't fit into other categories. It includes making
|
||||
hardware upgrades (mostly adding more storage), make management more accessible (such as Dell IDRAC's WebSerial), some load testing to
|
||||
identify painpoints, run an NWS machine in a cloud VM so I can say it's cross cloud (although my friends have told me this is cheating at creating
|
||||
my own cloud), and trying to figure out how to set up an Anycast network. I don't think I can setup an Anycast network without selling
|
||||
a kidney first. Renting a /24 CIDR alone would be more than I want to spend on a side project. I may look into setting it up with ipv6 only,
|
||||
however I{{ body_area }}#39;d still have to jump through hoops to get an Autonomous System number from an RIR. I{{ body_area }}#39;ll probably write a whole blog about Anycast
|
||||
however I'd still have to jump through hoops to get an Autonomous System number from an RIR. I'll probably write a whole blog about Anycast
|
||||
in the coming weeks.</p>
|
||||
</li>
|
||||
<li><p><strong>Reduced External Dependence:</strong> The main goal of NWS is to have no external dependence. In theory, everything but core internet infrastructure
|
||||
|
@ -76,16 +76,16 @@ should </p>
|
|||
<p><code>Rust, ActixWeb, PostgreSQL</code></p>
|
||||
<p>Olney is a new project I am starting with my friend <a href="https://sridharnandigam.com/">Sridhar Nandigam</a>. It aims to make
|
||||
tracking your job applications easier. Most of my friends either use spreadsheets or Trello to track their job applications, I
|
||||
think that we can make something that{{ body_area }}#39;s a bit better for the job. Some features I{{ body_area }}#39;d like to have are: resume version attached to
|
||||
think that we can make something that's a bit better for the job. Some features I'd like to have are: resume version attached to
|
||||
your application, job posting notifications from job boards such as <a href="github.com/pittcsc/summer2024-internships">pittcsc</a>, and watching
|
||||
your email for emails from recruiters. Currently, I have part of the backend setup with basic CRUD operations. Now that I{{ body_area }}#39;m done with
|
||||
your email for emails from recruiters. Currently, I have part of the backend setup with basic CRUD operations. Now that I'm done with
|
||||
the latest batch of NWS work, this is next on my list to work on.</p>
|
||||
<hr>
|
||||
<p><strong>These projects had minimal/no work done on them:</strong> RingGold, SQUIRREL</p>
|
||||
|
||||
<footer>
|
||||
<hr />
|
||||
<p style="margin-bottom: 0px;">Copyright © Nicholas Orlowsky 2023</p>
|
||||
<p style="margin-bottom: 0px;">Copyright © Nicholas Orlowsky 2025</p>
|
||||
<p style="margin-top: 0px; margin-bottom: 0px;">Hosting provided by <a href="https://nws.nickorlow.com">NWS</a></p>
|
||||
<p style="margin-top: 0px;">Powered by <a href="https://github.com/nickorlow/anthracite">Anthracite Web Server</a></p>
|
||||
</footer>
|
||||
|
|
|
@ -75,7 +75,7 @@
|
|||
|
||||
<footer>
|
||||
<hr />
|
||||
<p style="margin-bottom: 0px;">Copyright © Nicholas Orlowsky 2023</p>
|
||||
<p style="margin-bottom: 0px;">Copyright © Nicholas Orlowsky 2025</p>
|
||||
<p style="margin-top: 0px; margin-bottom: 0px;">Hosting provided by <a href="https://nws.nickorlow.com">NWS</a></p>
|
||||
<p style="margin-top: 0px;">Powered by <a href="https://github.com/nickorlow/anthracite">Anthracite Web Server</a></p>
|
||||
</footer>
|
||||
|
|
|
@ -80,7 +80,7 @@
|
|||
|
||||
<footer>
|
||||
<hr />
|
||||
<p style="margin-bottom: 0px;">Copyright © Nicholas Orlowsky 2023</p>
|
||||
<p style="margin-bottom: 0px;">Copyright © Nicholas Orlowsky 2025</p>
|
||||
<p style="margin-top: 0px; margin-bottom: 0px;">Hosting provided by <a href="https://nws.nickorlow.com">NWS</a></p>
|
||||
<p style="margin-top: 0px;">Powered by <a href="https://github.com/nickorlow/anthracite">Anthracite Web Server</a></p>
|
||||
</footer>
|
||||
|
|
|
@ -13,66 +13,66 @@
|
|||
</nav>
|
||||
|
||||
<h1>Spring Break 2023</h1>
|
||||
<p>It{{ body_area }}#39;s Spring Break, and that means I finally have time to spend all day working on side projects without having to worry about school.</p>
|
||||
<p>It's Spring Break, and that means I finally have time to spend all day working on side projects without having to worry about school.</p>
|
||||
<p>I figured I should write out the side projects I plan to work on over the break</p>
|
||||
<h2 id="ringgold">RingGold</h2>
|
||||
<p><code>Rust, Swift, PostgreSQL</code></p>
|
||||
<p>Last week, me and my cousin wanted to try out Apple{{ body_area }}#39;s fitness competition feature that works with Apple Watch. It works
|
||||
<p>Last week, me and my cousin wanted to try out Apple's fitness competition feature that works with Apple Watch. It works
|
||||
by giving you 1 point for every percent you complete of your move, exercise, and stand goals with a point cap of 600
|
||||
per day. The issue with it was that it didn{{ body_area }}#39;t work at all, not syncing on time if at all. I want to build a clone of it
|
||||
per day. The issue with it was that it didn't work at all, not syncing on time if at all. I want to build a clone of it
|
||||
with some additional features such as:</p>
|
||||
<ul>
|
||||
<li><p><strong>Notifications:</strong> I didn{{ body_area }}#39;t like how it was possible to workout and gain a bunch of points and just completely blindside your opponent. Hopefully this would encourage users to workout even more.</p>
|
||||
<li><p><strong>Notifications:</strong> I didn't like how it was possible to workout and gain a bunch of points and just completely blindside your opponent. Hopefully this would encourage users to workout even more.</p>
|
||||
</li>
|
||||
<li><p><strong>Widget/Watch Complication:</strong> Similar to the above, adding a homescreen widget or a watch complication would make it easier to keep up with your competitor{{ body_area }}#39;s progress. </p>
|
||||
<li><p><strong>Widget/Watch Complication:</strong> Similar to the above, adding a homescreen widget or a watch complication would make it easier to keep up with your competitor's progress. </p>
|
||||
</li>
|
||||
<li><p><strong>Custom Competitions:</strong> I think it{{ body_area }}#39;d be nice to have competitions with custom rules and lengths so that you{{ body_area }}#39;re not stuck with only one setting. Settings could include custom duration and custom caps on points.</p>
|
||||
<li><p><strong>Custom Competitions:</strong> I think it'd be nice to have competitions with custom rules and lengths so that you're not stuck with only one setting. Settings could include custom duration and custom caps on points.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>I{{ body_area }}#39;m building the web API for it in Rust and the mobile app in Swift. I chose these languages to gain more exposure to them, also
|
||||
<p>I'm building the web API for it in Rust and the mobile app in Swift. I chose these languages to gain more exposure to them, also
|
||||
Swift was a good choice since the app is going to be platform specific to iOS due to its need to integrate with Apple Watch.
|
||||
<em>(this is named after New Ringgold, PA)</em></p>
|
||||
<h2 id="nws-container-deployment-service">NWS Container Deployment Service</h2>
|
||||
<p><code>C#, Rancher</code></p>
|
||||
<p>I{{ body_area }}#39;ve created my own hosting/cloud service called <a href="https://nws.nickorlow.com">Nick Web Services</a>. It currently allows people to deploy
|
||||
<p>I've created my own hosting/cloud service called <a href="https://nws.nickorlow.com">Nick Web Services</a>. It currently allows people to deploy
|
||||
dockerized applications on my geo-distributed k8s clusters running on Dell Poweredge servers. In order to actually deploy this, I
|
||||
had to manually create the Kubernetes manifest files and then ssh into each individual server and apply them. I{{ body_area }}#39;ve setup
|
||||
had to manually create the Kubernetes manifest files and then ssh into each individual server and apply them. I've setup
|
||||
Rancher Fleet to automate this process by pulling the manifest from a git repo (this is something called gitops). I also
|
||||
wrote an API to generate the manifest files and then upload them to a git repo. I have a video demo of this working that
|
||||
you can watch <a href="https://youtu.be/WHdXWMFHuqA">here</a>.</p>
|
||||
<p>Currently, the service works for deployment but only if you don{{ body_area }}#39;t want to use SSL or you use Cloudflare{{ body_area }}#39;s flexible SSL
|
||||
<p>Currently, the service works for deployment but only if you don't want to use SSL or you use Cloudflare's flexible SSL
|
||||
technology. I wrote a separate blog post <a href="http://nickorlow.com/blog/ssl-in-nws-cds">here</a> about the challenges of doing this and how I plan on implementing it.
|
||||
I{{ body_area }}#39;d like to complete part of this implementation during the break.</p>
|
||||
I'd like to complete part of this implementation during the break.</p>
|
||||
<h2 id="verifiedbot">VerifiedBot</h2>
|
||||
<p><code>JavaScript, Rust</code></p>
|
||||
<p>This project isn{{ body_area }}#39;t a personal project, as a lot of it was built by my friends <a href="https://arpan.one">Arpan</a> and <a href="https://benaubin.com/">Ben</a>.
|
||||
<p>This project isn't a personal project, as a lot of it was built by my friends <a href="https://arpan.one">Arpan</a> and <a href="https://benaubin.com/">Ben</a>.
|
||||
A little over a year ago, we wanted to make a Discord bot to verify that people on some Discord servers we ran
|
||||
went to the University of Texas. Initially, it worked by verifying you had a utexas.edu email address and then verifying
|
||||
some additional information via LDAP. A few months ago Ben found out that using the SaaS survey software that the university uses
|
||||
(qualtrics), we could have users verify themselves by using the university{{ body_area }}#39;s SSO system. This works because qualtrics can send
|
||||
data to a webhook when a survey is complete, and it can also require signing in with the university{{ body_area }}#39;s SSO before filling out a survey.
|
||||
(qualtrics), we could have users verify themselves by using the university's SSO system. This works because qualtrics can send
|
||||
data to a webhook when a survey is complete, and it can also require signing in with the university's SSO before filling out a survey.
|
||||
It required that I write a <a href="https://github.com/Verified-Bot/aes-gcm-siv-wasm">wasm wrapper for an encryption library</a>. I wrote almost all the code for this function last year, but
|
||||
due to a bug in qualtrics, it wasn{{ body_area }}#39;t working properly. It seems that this bug has been fixed and we can start rolling it out.</p>
|
||||
due to a bug in qualtrics, it wasn't working properly. It seems that this bug has been fixed and we can start rolling it out.</p>
|
||||
<h2 id="personal-website-facelift">Personal Website Facelift</h2>
|
||||
<p><code>Typescript, React</code></p>
|
||||
<p>My personal website (this one) is a little overdue for some design updates. My main focus will be making it more mobile
|
||||
friendly. Last year, I made some improvements to make it usable on mobile but it still doesn{{ body_area }}#39;t feel quite right. I also
|
||||
friendly. Last year, I made some improvements to make it usable on mobile but it still doesn't feel quite right. I also
|
||||
think that it has some information overload in some areas such as the projects section. I think that to mitigate this I
|
||||
might just have a small summary of each project and then you can click into each to learn more about it, similar to my
|
||||
friend <a href="https://raulhigareda.com">Raul{{ body_area }}#39;s Website</a>. I{{ body_area }}#39;m also considering a move to tab-based navigation so that I can have
|
||||
more information in each section. Further down the line, I think I might re-write it using Svelte as I{{ body_area }}#39;m seeing it being used more and more
|
||||
friend <a href="https://raulhigareda.com">Raul's Website</a>. I'm also considering a move to tab-based navigation so that I can have
|
||||
more information in each section. Further down the line, I think I might re-write it using Svelte as I'm seeing it being used more and more
|
||||
and would like to get some exposure to it.</p>
|
||||
<h2 id="mahantongo">Mahantongo</h2>
|
||||
<p><code>Rust, PostgreSQL</code></p>
|
||||
<p>I{{ body_area }}#39;m one of the members of the Community Team that runs some UT Computer Science community Discord servers.
|
||||
<p>I'm one of the members of the Community Team that runs some UT Computer Science community Discord servers.
|
||||
Currently, a Discord bot called Carlbot provides us a star-board, which is a specific channel where messages that 5 or more people
|
||||
react to with a star emoji get posted. It{{ body_area }}#39;s supposed to be a collection of the funniest and best messages sent on the server.
|
||||
One of the things our server members have wanted is the addition of more {{ body_area }}#39;*-board{{ body_area }}#39; channels where you can create multiple star-board
|
||||
like channels but with custom emojis. I{{ body_area }}#39;m writing it in Rust and I{{ body_area }}#39;m just hoping to use this project to get more acquainted with the language.</p>
|
||||
react to with a star emoji get posted. It's supposed to be a collection of the funniest and best messages sent on the server.
|
||||
One of the things our server members have wanted is the addition of more '*-board' channels where you can create multiple star-board
|
||||
like channels but with custom emojis. I'm writing it in Rust and I'm just hoping to use this project to get more acquainted with the language.</p>
|
||||
|
||||
<footer>
|
||||
<hr />
|
||||
<p style="margin-bottom: 0px;">Copyright © Nicholas Orlowsky 2023</p>
|
||||
<p style="margin-bottom: 0px;">Copyright © Nicholas Orlowsky 2025</p>
|
||||
<p style="margin-top: 0px; margin-bottom: 0px;">Hosting provided by <a href="https://nws.nickorlow.com">NWS</a></p>
|
||||
<p style="margin-top: 0px;">Powered by <a href="https://github.com/nickorlow/anthracite">Anthracite Web Server</a></p>
|
||||
</footer>
|
||||
|
|
|
@ -16,12 +16,12 @@
|
|||
<h1 style="margin-bottom: 0px;">Extra</h1>
|
||||
<p style="margin-top: 0px;">Extra bits of information about me</p>
|
||||
|
||||
<!--<h2>Rail Photography</h2>
|
||||
<h2>Rail Photography</h2>
|
||||
<p>
|
||||
I take photos of trains and train stations fairly often.
|
||||
If you would like to see these pictures, they are avaliable
|
||||
<a href="/on-rails.html">here</a>
|
||||
</p>-->
|
||||
<a href="https://www.instagram.com/nickorlow.on.rails/">here</a>
|
||||
</p>
|
||||
|
||||
<h2>Bowling</h2>
|
||||
<p>
|
||||
|
@ -65,9 +65,9 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td>Bench Press</td>
|
||||
<td>280 Lbs</td>
|
||||
<td>August 10th, 2023</td>
|
||||
<td>FUTO HQ</td>
|
||||
<td>280.5 Lbs</td>
|
||||
<td>December 31st, 2024</td>
|
||||
<td>Anytime Fitness - Pottsville, PA</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Squat</td>
|
||||
|
@ -81,12 +81,18 @@
|
|||
<td>Augist 10th, 2023</td>
|
||||
<td>FUTO HQ</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bowling</td>
|
||||
<td>170</td>
|
||||
<td>April 19th, 2024</td>
|
||||
<td>Texas Union Underground</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<footer>
|
||||
<hr />
|
||||
<p style="margin-bottom: 0px;">Copyright © Nicholas Orlowsky 2023</p>
|
||||
<p style="margin-bottom: 0px;">Copyright © Nicholas Orlowsky 2025</p>
|
||||
<p style="margin-top: 0px; margin-bottom: 0px;">Hosting provided by <a href="https://nws.nickorlow.com">NWS</a></p>
|
||||
<p style="margin-top: 0px;">Powered by <a href="https://github.com/nickorlow/anthracite">Anthracite Web Server</a></p>
|
||||
</footer>
|
||||
|
|
|
@ -13,25 +13,19 @@
|
|||
</nav>
|
||||
|
||||
<div>
|
||||
<script>
|
||||
var url = new URL(window.location.href);
|
||||
var af = url.searchParams.get("af");
|
||||
if (af == null || af == "true") {
|
||||
window.location.href = "./april-fools.html";
|
||||
}
|
||||
</script>
|
||||
<h1 style="margin-bottom: 0px;">Nicholas Orlowsky</h1>
|
||||
<p style="margin-top: 0px;">Software Engineer - Austin, TX</p>
|
||||
<p>
|
||||
<a href="https://github.com/nickorlow">[ GitHub ]</a>
|
||||
<a href="https://git.nickorlow.com/nickorlow">[ Forgejo ]</a>
|
||||
<a href="https://github.com/nickorlow">[ GitHub (mirrors) ]</a>
|
||||
<a href="https://www.linkedin.com/in/nickorlow/">[ LinkedIn ]</a>
|
||||
<a href="mailto:nickorlow@nickorlow.com">[ E-Mail ]</a>
|
||||
<a href="https://github.com/nickorlow/resume/releases/download/latest/resume-nickorlow.pdf">[ Resume ]</a>
|
||||
<a href="https://old.nickorlow.com">[ My Old Website ]</a>
|
||||
<!--<a href="https://old.nickorlow.com">[ My Old Website ]</a>-->
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href="https://open.spotify.com/episode/7f0lB2alMuvpfsQfwtRpJB?si=a55a62f6921a4671">[ Listen to me on the Azure DevOps podcast! ]</a>
|
||||
<a href="https://azuredevopspodcast.clear-measure.com/nick-orlowsky-deciding-to-major-in-computer-science-episode-197">[ Listen to me on the Azure DevOps podcast! ]</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
|
@ -42,7 +36,7 @@
|
|||
<p>
|
||||
I run <a href="https://nws.nickorlow.com">Nick Web Services (NWS)</a>, a side project
|
||||
that provides geo-distributed container hosting using Kubernetes on bare metal servers.
|
||||
It currently has 100% uptime YTD, surpassing the uptime percentage of competitor GitHub pages.
|
||||
It achieved 100% uptime for over a year.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
|
@ -53,7 +47,7 @@
|
|||
|
||||
<footer>
|
||||
<hr />
|
||||
<p style="margin-bottom: 0px;">Copyright © Nicholas Orlowsky 2023</p>
|
||||
<p style="margin-bottom: 0px;">Copyright © Nicholas Orlowsky 2025</p>
|
||||
<p style="margin-top: 0px; margin-bottom: 0px;">Hosting provided by <a href="https://nws.nickorlow.com">NWS</a></p>
|
||||
<p style="margin-top: 0px;">Powered by <a href="https://github.com/nickorlow/anthracite">Anthracite Web Server</a></p>
|
||||
</footer>
|
||||
|
|
|
@ -13,11 +13,11 @@
|
|||
</nav>
|
||||
|
||||
<h1>Rail Pictures</h1>
|
||||
<p>All photos are Copyright {{ body_area }}copy; Nicholas Orlowsky</p>
|
||||
<p>All photos are Copyright © Nicholas Orlowsky</p>
|
||||
|
||||
<footer>
|
||||
<hr />
|
||||
<p style="margin-bottom: 0px;">Copyright © Nicholas Orlowsky 2023</p>
|
||||
<p style="margin-bottom: 0px;">Copyright © Nicholas Orlowsky 2025</p>
|
||||
<p style="margin-top: 0px; margin-bottom: 0px;">Hosting provided by <a href="https://nws.nickorlow.com">NWS</a></p>
|
||||
<p style="margin-top: 0px;">Powered by <a href="https://github.com/nickorlow/anthracite">Anthracite Web Server</a></p>
|
||||
</footer>
|
||||
|
|
|
@ -34,12 +34,12 @@
|
|||
|
||||
<div>
|
||||
<h2>Anthracite Web Server</h2>
|
||||
<p><i>C++ {{ body_area }}amp; Python</i></p>
|
||||
<p><i>C++ & Python</i></p>
|
||||
<a href="https://github.com/nickorlow/anthracite">[ GitHub Repo ]</a>
|
||||
<p>
|
||||
Anthracite is a simple web server written in C++. It currently supports HTTP/1.0 and HTTP/1.1.
|
||||
The benchmarking tools for Anthracite are written in Python. Anthracite is optimized for performance
|
||||
and rivals the performance of NGINX {{ body_area }}amp; Apache in our testing. It uses a thread-per-connection
|
||||
and rivals the performance of NGINX & Apache in our testing. It uses a thread-per-connection
|
||||
architecture, allowing it to process many requests in paralell. Additionally, it caches all
|
||||
files that it serves in memory to ensure that added latency from disk reads do not slow down requests.
|
||||
Through writing Anthracite, I have learned to use different C++ profilers as well as some general
|
||||
|
@ -110,7 +110,7 @@
|
|||
|
||||
<footer>
|
||||
<hr />
|
||||
<p style="margin-bottom: 0px;">Copyright © Nicholas Orlowsky 2023</p>
|
||||
<p style="margin-bottom: 0px;">Copyright © Nicholas Orlowsky 2025</p>
|
||||
<p style="margin-top: 0px; margin-bottom: 0px;">Hosting provided by <a href="https://nws.nickorlow.com">NWS</a></p>
|
||||
<p style="margin-top: 0px;">Powered by <a href="https://github.com/nickorlow/anthracite">Anthracite Web Server</a></p>
|
||||
</footer>
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
<div>
|
||||
<h2>Anthracite Web Server</h2>
|
||||
<p><i>C++ and Python</i></p>
|
||||
<p><i>C++ & Python</i></p>
|
||||
<a href="https://github.com/nickorlow/anthracite">[ GitHub Repo ]</a>
|
||||
<p>
|
||||
Anthracite is a simple web server written in C++. It currently supports HTTP/1.0 and HTTP/1.1.
|
||||
|
|
Loading…
Reference in a new issue