This commit is contained in:
Nicholas Orlowsky 2025-01-31 19:29:54 -05:00
parent c46822bf9a
commit c07f9f5738
Signed by: nickorlow
GPG key ID: 838827D8C4611687
17 changed files with 105 additions and 104 deletions

View file

@ -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}"

View file

@ -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 &#169; Nicholas Orlowsky 2023</p>
<p style="margin-bottom: 0px;">Copyright &#169; 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>

View file

@ -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&#39;s the end of this post. To whom it may concern, don&#39;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 &#39;Just In Time&#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&#39;t consider this a good idea (Not to mention it&#39;s super boring). </p>
<p>The better solution is to use .NET&#39;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&#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">&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> /&gt;
</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&#39;ll have a full-fledged C# application compiled directly to your target runtime&#39;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&#39;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&#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>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 = &amp;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 &#169; Nicholas Orlowsky 2023</p>
<p style="margin-bottom: 0px;">Copyright &#169; 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>

View file

@ -104,7 +104,7 @@
<footer>
<hr />
<p style="margin-bottom: 0px;">Copyright &#169; Nicholas Orlowsky 2023</p>
<p style="margin-bottom: 0px;">Copyright &#169; 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>

View file

@ -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 &#169; Nicholas Orlowsky 2023</p>
<p style="margin-bottom: 0px;">Copyright &#169; 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>

View file

@ -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&#39;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&#39;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&#39;ve gained an appreciation for
Rust&#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&#39;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 &#169; Nicholas Orlowsky 2023</p>
<p style="margin-bottom: 0px;">Copyright &#169; 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>

View file

@ -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&#39;s website with a more elegant UI, and using
SEPTA&#39;s new &quot;SEPTA Metro&quot; 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&#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&#39;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&#39;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 &#169; Nicholas Orlowsky 2023</p>
<p style="margin-bottom: 0px;">Copyright &#169; 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>

View file

@ -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&#39;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&#39;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&#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&#39;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&#39;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 &#169; Nicholas Orlowsky 2023</p>
<p style="margin-bottom: 0px;">Copyright &#169; 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>

View file

@ -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&#39;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&#39;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&#39;d like to revise this solution such that it doesn&#39;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&#39;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&#39;s running on all of our k8s clusters and is HA) instead of running as a standalone docker container.
I&#39;ll have SSLiaison use some distributed database (probably CockroachDB) to store the HTTP challenges so that it doesn&#39;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&#39;d like to
make it so that this isn&#39;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&#39;d like every NWS machine to run Proxmox and then have Terraform &amp; 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&#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&#39;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&#39;t fit into other categories. It includes making
hardware upgrades (mostly adding more storage), make management more accessible (such as Dell IDRAC&#39;s WebSerial), some load testing to
identify painpoints, run an NWS machine in a cloud VM so I can say it&#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&#39;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&#39;d still have to jump through hoops to get an Autonomous System number from an RIR. I&#39;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&#39;s a bit better for the job. Some features I&#39;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&#39;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 &#169; Nicholas Orlowsky 2023</p>
<p style="margin-bottom: 0px;">Copyright &#169; 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>

View file

@ -75,7 +75,7 @@
<footer>
<hr />
<p style="margin-bottom: 0px;">Copyright &#169; Nicholas Orlowsky 2023</p>
<p style="margin-bottom: 0px;">Copyright &#169; 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>

View file

@ -80,7 +80,7 @@
<footer>
<hr />
<p style="margin-bottom: 0px;">Copyright &#169; Nicholas Orlowsky 2023</p>
<p style="margin-bottom: 0px;">Copyright &#169; 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>

View file

@ -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&#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>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&#39;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&#39;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&#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>
<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&#39;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&#39;d be nice to have competitions with custom rules and lengths so that you&#39;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&#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
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&#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
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&#39;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&#39;t want to use SSL or you use Cloudflare&#39;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&#39;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&#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>.
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&#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&#39;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&#39;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&#39;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&#39;s Website</a>. I&#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&#39;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&#39;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&#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 &#39;*-board&#39; channels where you can create multiple star-board
like channels but with custom emojis. I&#39;m writing it in Rust and I&#39;m just hoping to use this project to get more acquainted with the language.</p>
<footer>
<hr />
<p style="margin-bottom: 0px;">Copyright &#169; Nicholas Orlowsky 2023</p>
<p style="margin-bottom: 0px;">Copyright &#169; 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>

View file

@ -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 &#169; Nicholas Orlowsky 2023</p>
<p style="margin-bottom: 0px;">Copyright &#169; 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>

View file

@ -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 &#169; Nicholas Orlowsky 2023</p>
<p style="margin-bottom: 0px;">Copyright &#169; 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>

View file

@ -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 &copy; Nicholas Orlowsky</p>
<footer>
<hr />
<p style="margin-bottom: 0px;">Copyright &#169; Nicholas Orlowsky 2023</p>
<p style="margin-bottom: 0px;">Copyright &#169; 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>

View file

@ -34,12 +34,12 @@
<div>
<h2>Anthracite Web Server</h2>
<p><i>C++ {{ body_area }}amp; Python</i></p>
<p><i>C++ &amp; 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 &amp; 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 &#169; Nicholas Orlowsky 2023</p>
<p style="margin-bottom: 0px;">Copyright &#169; 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>

View file

@ -20,7 +20,7 @@
<div>
<h2>Anthracite Web Server</h2>
<p><i>C++ and Python</i></p>
<p><i>C++ &amp; 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.