css and posts
This commit is contained in:
@@ -1,64 +0,0 @@
|
||||
<h1>Servers & Networking</h1>
|
||||
<p>
|
||||
Open source and networking hobbies led me to depoly a set of
|
||||
interconnected Linux servers:
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<h3>NGINX Reverse Proxy and VPN Server</h3>
|
||||
<p>
|
||||
This server is the internets access to all of my other servers,
|
||||
and the glue holding them together. I was using IPTables briefly
|
||||
but have moved to NGINX to forward traffic from specified ports
|
||||
onto private servers connected to it. This device doubles as a <a
|
||||
href="https://www.wireguard.com/">Wireguard VPN</a
|
||||
> server which in the past connected servers on the same virtual
|
||||
network, however I have switched to reverse ssh tunnels to connect
|
||||
other servers to this one. The VPN is still useful for odd networking
|
||||
tasks and troubleshooting.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>Lightweight Server</h3>
|
||||
<p>
|
||||
Running on Raspberry Pi, this servers main job is to run
|
||||
Subterstrike servers, Minecraft servers, other game servers, and
|
||||
this website you're looking at.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>AI & FTP Server</h3>
|
||||
<p>
|
||||
A powerful computer with an RX 6950 XT GPU runs my local
|
||||
generative AI servers including <a
|
||||
href="https://invoke-ai.github.io/InvokeAI/">Invoke AI</a
|
||||
>
|
||||
for Image Generation,
|
||||
<a href="https://ollama.com/?ref=useaiforit">Ollama</a>
|
||||
and <a href="https://docs.openwebui.com/">Open-WebUI</a> for LLM
|
||||
services. As this is also my primary device with a few spare
|
||||
terabytes of NVMe storage it contains a
|
||||
<a href="https://en.wikipedia.org/wiki/Vsftpd"
|
||||
>VSFTPD file server</a
|
||||
>. By the way, this server runs on
|
||||
<a href="https://archlinux.org/"><i>Arch Linux</i></a> :)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<h3>Derelict Laptop Promoted to Server</h3>
|
||||
<p>
|
||||
An ancient gaming laptop with significantly more computational
|
||||
performance than physical durability was promoted to server,
|
||||
where it runs my <a href="https://nextcloud.com/about/"
|
||||
>Nextcloud</a
|
||||
>
|
||||
self hosted office suite. While originally this was a 'because I
|
||||
can' project, I felt justified when I later saw
|
||||
<a
|
||||
href="https://www.digitaljournal.com/tech-science/microsoft-says-u-s-law-takes-precedence-over-canadian-data-sovereignty/article"
|
||||
>Microsoft announcing USA demands come before Canadian
|
||||
privacy</a
|
||||
>.
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -1,53 +0,0 @@
|
||||
<h1>Phobos</h1>
|
||||
<p>
|
||||
One of the coolest things I've developed is a game, fully written in
|
||||
assembly.<br /><br />
|
||||
I say this because it is the perfect intersection of many things I enjoy;
|
||||
low level programming, physics, space, simulation development, and game design.
|
||||
Also small enough of a project that I could complete it in under a couple
|
||||
of months, so another win. I even named the game based on the emulator, as
|
||||
Phobos is a moon of Mars <br /><br />The instructions for this
|
||||
assignment were very broad, to develop a platformer game in assembly.
|
||||
This left a lot of room for creative freedom, especially due to the
|
||||
loose definition of platformer. With infinite time I would have
|
||||
developed a whole rocket simulator, and used the justification that the
|
||||
launchpad was a platform.
|
||||
<br />
|
||||
<br /> On the technical side this was a very difficult project. There are
|
||||
only about 16 variables actually usable in MIPS, and a lot of them are reserved
|
||||
to specific logical controls under best practice. Then following the many
|
||||
loops and recursive, real-time functionality required extensive and efficient
|
||||
use of the stack. Ideally accessing a few bytes shouldn't strike the fear
|
||||
of low framerates to mind, but the Mars-MIPS emulator I was using was far
|
||||
from efficient.
|
||||
</p>
|
||||
<h3>Notable Features</h3>
|
||||
<ul>
|
||||
<li>Raycast collision detection and repositioning</li>
|
||||
<li>Sub-pixel velocity and positioning</li>
|
||||
<li>Awesome pixel graphics (the rocket shoots fire!)</li>
|
||||
<li>High framerates (for a low-performance emulator)</li>
|
||||
<li>Enemies shooting at you!</li>
|
||||
<li>Loot pickups</li>
|
||||
</ul>
|
||||
<p>
|
||||
Probably the most annoying part of this was that the emulator couldn't
|
||||
handle simutaineous key inputs. Fortunately I have over a thousand hours
|
||||
experience landing rockets on the <a
|
||||
href="https://kerbalspaceprogram.fandom.com/wiki/Mun">Mün</a
|
||||
>
|
||||
so I was comfortable giving a few unique key inputs per second. I never imagined
|
||||
this is something I would be proud, and I still don't think I am. However,
|
||||
it works.<br /><br />At this point you may have realized I am a bit of a
|
||||
space nerd. Enjoy this recording I made at 1am demonstrating the
|
||||
features of my game to a TA, compressed to the point that the audio has
|
||||
texture.
|
||||
</p>
|
||||
<video width="90%" controls>
|
||||
<track kind="captions" />
|
||||
<source src="src/lib/phobos/demo.mp4" type="video/mp4" />
|
||||
Your browser does not support the video.
|
||||
</video><br />
|
||||
The
|
||||
<a href="https://github.com/jjanella/Phobos">source code</a> is also available
|
||||
for your enjoyment.
|
||||
@@ -1,6 +1,8 @@
|
||||
#let post_title = "Game Dev"
|
||||
#let post_preview_image = "flying.webp"
|
||||
#let post_summary = "Creating an open world multiplayer terrain destruction game in Godot and Rust"
|
||||
|
||||
= Game Development
|
||||
|
||||
I am currently developing an underground-submarine openworld multiplayer
|
||||
physics inspired game. As a gamer and enjoyer of large, rich maps and
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
<h1>Building a UAV</h1>
|
||||
<p>
|
||||
I chose to build a drone from scratch for my AP Physics final project.
|
||||
We were given an open ended assignment to <i>build something cool</i>
|
||||
and I wanted a drone. My choice was much more ambitious than the course required,
|
||||
and took quite a while to complete.<br /><br />
|
||||
|
||||
For the drones frame I finally had an excuse to purchase a 3d printer. I
|
||||
modelled the frame and arms modularly to support future upgrades and
|
||||
replacements from damage, reducing the cost of operation. Initially I
|
||||
was using some 3d printed torodial propellers due to their higher
|
||||
efficiency and lower sounds usage. Due to safety concerns of the
|
||||
propellers not withstanding tension at higher RPMs and exploding I
|
||||
switched to some generic acrylic propellers I bought. A challenge in
|
||||
designing the frame was leaving enough room to contain the volume of the
|
||||
wires. I went with the Elegoo Neptune 3 as the printer was open-source
|
||||
and had a much better cost-to-utility than proprietary printers such as
|
||||
the Ender series. I am not sponsored I just really like the printer.<br
|
||||
/><br />
|
||||
|
||||
The flight computer was the most difficult part to program. Using an
|
||||
ultrasonic distance sensor, gyroscope, and accelerometer the drone has
|
||||
enough information to probably never crash. The autopilot is implemented
|
||||
on an Arduino UNO using a
|
||||
<a
|
||||
href="https://en.wikipedia.org/wiki/Proportional%E2%80%93integral%E2%80%93derivative_controller"
|
||||
>PID controller</a
|
||||
>
|
||||
for stabolization. The autopilot quality is currently impacted every time
|
||||
the drones mass distribution changes, which can be fixed with a reinforcement
|
||||
machine learning algorithm. For the higher level programming such as flight
|
||||
automation, video transmission and WiFi communications I used a Raspberry
|
||||
Pi Pico. There is also a 2.4GHz line of sight receiver for manual control.
|
||||
A future upgrade may contain a SIM card for near-infinite remote control
|
||||
connection, but drone regulations would make this difficult.<br /><br />
|
||||
|
||||
The power system is the most physically challenging portion of the
|
||||
drone. The motors took 14.6 Volts, while the UNO microcontroller took 5
|
||||
Volts, and the Pico and most sensors run at 3.3 Volts. All of the power
|
||||
to the motors ran through the power distribution board, which I modified
|
||||
to also output the lower voltages and used Bidirectional Logic Level
|
||||
Converters to shift between 3.3 and 5V signals where needed. A potential
|
||||
flaw with having all the power coming from the same source is spikes in
|
||||
energy consumption to the motors may cause the microcomputers to receive
|
||||
too little power, which could be fixed with a capacitor. Luckily, I
|
||||
haven't experienced this yet as the 2C discharge rate on the 2.5Ah
|
||||
capacity battery is more than enough. Having a battery this big does
|
||||
mean it takes up about half the internal electronics volume and is half
|
||||
of the drones mass, but it can also maintain full throttle for half an
|
||||
hour making for long flights.<br /><br />
|
||||
|
||||
The motors I used were a bit overkill for a 1.1kg drone, as going past
|
||||
20% throttle sends it shooting through the sky -- which is not a bad
|
||||
issue to have. Here's the technical numbers behind that: I have
|
||||
propellers with a 6cm radius on motors with a 2450KV rating (2450 rpm
|
||||
per volt) at peaking at 14.6 Volts. From this the tip speed is computed
|
||||
to be ~225m/s under no load at max throttle, quite a lot more than what
|
||||
is safe or necessary to get into the air.
|
||||
</p>
|
||||
@@ -1,58 +0,0 @@
|
||||
<h1>Work Experience</h1>
|
||||
<ul>
|
||||
<li>
|
||||
<h3>Cybersecurity Analyst for Equifax</h3>
|
||||
<ul>
|
||||
<li>Analyzed Security Posture, Business Risk, Compliance</li>
|
||||
<li>
|
||||
Supported Vulnerability Management sourced from Penetration
|
||||
Tests & automated tools
|
||||
</li>
|
||||
<li>Handled issues, exceptions, and deviations</li>
|
||||
<li>
|
||||
Provided Security Advisment Services for infrastructure and
|
||||
code development
|
||||
</li>
|
||||
<li>
|
||||
Used automated scanning tools, GCP, AWS, shell scripts,
|
||||
Linux
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<h3>Software Developer for Parkside Pool</h3>
|
||||
<p>
|
||||
This is a role that didn't exist before me. I was a lifeguard
|
||||
and swim instructor here, and the pool I worked at was being
|
||||
swamped with administrative work. Eventually I took on this work
|
||||
for the money that came with it. For ten hours each week, I
|
||||
would be reading emails, co-ordinating lessons, and sending out
|
||||
schedules. Creating the schedules was a tedious task, with
|
||||
siblings at different levels needing back to back lessons,
|
||||
people not available some days or times, and other various soft
|
||||
and hard requirements. <br /><br /> Soon I found out there is no
|
||||
easy algorithm known for finding solutions to problems with many
|
||||
soft and hard requirements. This is a NP-hard and is described
|
||||
in the
|
||||
<a href="https://en.wikipedia.org/wiki/Nurse_scheduling_problem"
|
||||
>Nurse Scheduling Problem</a
|
||||
>. Fortunately there was a cap of 128 students I could fit into
|
||||
classes per week and the final algorithm was around O(n³) for n
|
||||
swimmers, so the runtime wasn't horrible. <br /><br />
|
||||
Implementing the reception and confirmation of lessons was straightforward
|
||||
enough with a Flask site using Stripe for payments, and Firebase
|
||||
service for sending confirmation emails.
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="align-right card">
|
||||
<h1>Volunteering</h1>
|
||||
<p>
|
||||
I volunteer within the Computer Science, Mathematics, and Statistics
|
||||
department at the University of Toronto as a Computer Science Ambassador
|
||||
to help cultivate interest in the Mathematical Sciences in high school
|
||||
students, as well as providing direction for first year students within
|
||||
the programs.
|
||||
</p>
|
||||
Reference in New Issue
Block a user