Welcome to my Website!






Here is where I showcase past, present, and future projects that I'm excited about. Please use the navigation above to check out my projects!







My Blog of Recent Investigations:


[Oct 01 2022] Simple Trusting Balance Sheet

As I've been learning more about Rust, I've become progressively more interested in the FFI aspect and have begun to play with web development more and more. This time, I have developed a small webapp with yew that connects to an actix backend with a mongoDB database.

This app allows you to create a shared "sheet" of transactions that anyone with the url can edit. The idea is to reduce the amount of signup overhead that users have to go through in order to initially begin tracking transactions. It has a few visual bugs that I know about but none of those should impact the accuracy of the calculations.

One of the nice things about this project is that with serde, and a rust backend and frontend, I can go from a Rust object on the backend directly to a Rust object on the frontend with no risk of confusion between the two types. I really enjoyed creating messages via shared structs in this manner.

If you have a moment, you should go check it out at balancesheet.latticeanimal.com

(Do not use this for things that require high financial accuracy as I do not have extensive tests and use floating point values for math which can accumulate error.)

[Sep 08 2022] Librr_rs progress

Today I am (officially) saying that I have made enough progress on librr_rs to make a blog post about it.
For my senior thesis project, I am going to use parts of the rr debugger. Unfortunately, this is a C++ project that is built as an executable.
As such, for the past month or so, I have been working to bend it to my will and get a nice rust API. While I am still very far from publishing it or even versioning it, I have made enough progress to record and replay programs all from rust.

Check it out here: here

I will be making a full post and writing about this at length for my senior thesis so I will save my words for then.

[Jul 27 2022] War Card Game Simulation

Today I made a simulator for the classic card game war. It doesn't reveal any grand truths or really say all that much about the game, but a friend and I had a dispute so I decided to settle it. Here are a few statistics about the game:
Mean rounds per game = 178.0
Stddev of rounds per game = 135.98
Mean wars per game = 13.3
Probability that player1 will win: 0.4955
Check it out on Github: https://github.com/zaporter/war_simulator

[Jul 19 2022] co2meter-rs

Today I have published my first Rust crate to crates.io! It is a simple library that allows you to interact with C02 monitors sold by co2meter.com. Please check it out here!

[Jan 10 2022] GitRepoSyncer

Today I have created a simple python script that allows you to install git repositories and then sync them all at once. It seems useless and perhaps dangerous, however it is very useful for me as I don't enjoy having to ssh into my EC2 instance just to run a git pull command.

This project allows me to set up a github webook to call this script on my remote server and update all my repositories automatically whenever I push to them. It doesn't save that much time, but it makes maintaining old projects much easier.

Check it out here

[Oct 01 2020] Simple Rust Project

This is just a simple announcement of a 1-day coding project that I used to experiment with Rust and A*.

If you have a moment, check out my simple dungeon-esque pathfinding demonstration here

Note: I drew inspiration from DwarfFortress for this small project

[Sep 12 2019] ZBox Announcement

This post is announcing the work that I have done on one of my most ambitious projects yet.
This project is my attempt to create my own version of Dropbox (hence the very clever name ZBox). With this project, I am able to designate any folder on my operating system and then to have that folder synced to an AWS S3 bucket where other clients can then update their local copies of the folders. This allows me to keep both my laptops and my desktop up to date on any files that I create.

The inspiration of this project comes after Dropbox removed the 1TB option and instead forced users to either pay for 2GB, 2TB, or 3TB (Dropbox pricing) which made me irritated as I only really use dropbox for 20-30GB of items.
Of course there are plenty of other opensource programs that offer this service but I had no interest in those, for I wanted to learn how to do it myself.

I will have a page up for this project as soon as I finish writing a description and have created some cool graphis( and have finished the code that installs it on your computer (Linux and macOS only)).
Look forward to it!
Edit: Check it out here

[Jul 22 2019] Speaker boxes

This summer I decided that I would dedicate myself to more personal projects and fun adventures rather than work as it would be my one of my few last summers in which I will have the opportunity to do so. One of the fun projects that I decided to embark upon was to find a new set of speakers for college. Long story short, I ended up building a set of boxes for these in-wall AIM LCR3 speakers:

Speaker sitting open:




Speaker closed:




[Mar 8 2019] My idea of AI

Go check out my new big project here. In this project I attempt to reinvision what I think AI could look like if I had never heard of Neural Networks and instead of building brains, I built algorithms.
Please go check it out!

[Feb 17 2019] New Sled and OpenGL Updates

This project is on the smaller and more fun side of things as lately I have been busy with rewriting my 3D graphics tool in C++, applying to college, and creating a remote control for my computer. This blog is more of a 'Look what I built!' kind of thing though.

Seattle has had a kind of impromtu snow-storm this last week, meaning that every understocked store was completally out of sleds so, look what me and my sister built! :



Sled fast!

P.S: I will be updating my 'OpenGL Explorations' project soon with some pretty awesome algorithms for physics space-partitions and realtime connected-node graph to object properties calculations. It is quite exciting! (I am also rewriting it in C++ because it was stupid to do it in Java)

[Nov 1 2018] Website updates

Hello everyone. This post describes some updates done on the website in the past few weeks. I have been trying to made it easier to develop new modules for my blog while trying to spice up the homepage.

Homepage Improvements:

The major improvement right now is the introduction of the "Welcome to my website" animation that plays when the page is loaded and is deleted after the video finishes. The animation was created using some of my image-to-particle software (I have not yet created a page for it yet but I think that I will soon). Right now my biggest problem is that if I lower the quality too far, it looks awful yet will load, but if I go the other route and try and just send the high quality image, the page takes far too long to load. Right now, I am compromising and simply sending a different video based on browser (mobile vs desktop) and assuming that mobile will have slower connections and smaller screens so I can serve them a smaller video. Though, this adds page-bloat and doesn't really solve the problem. (If only there was a way to nicely integrate youtube's highly optimized streaming software... ;/ (It doesn't render well if I do.)) As for right now though, I think I will keep it as it is and maybe make it a bit shorter. I like it though, I think that it adds a nice personal touch to the start of the website.


Blog Improvements:

The visual improvement is simply that there are now rounded rectangles around each post. Behind the scenes though, the entire structure has been revamped. It is now almost ready to support dynamic loading of posts. Meaning that the user can choose to expand certain posts when they want to and only load images for those blog posts when the user chooses to. This should help reduce the front page loading time signifigantly and allow for more resources to be spent on important things -- like the welcome animation and the images for the navigation bar.


General Improvements:

I have finally added support to view my sourcecode on most projects! All the physical ones and some of the math ones do not have source code links. But otherwise, all of my finished digital projects should now have links in the upper right hand corner to gitlab where I host all my projects. Feel free to go check them out!




Those are all the improvements that I have for now. Though, I have been meaning to find a way to make the navigation bar more exciting and inviting. After looking through some auto-generated paths of where people click, it seems that far fewer people than I would like choose to use the bar above. If you have any ideas of suggestions, please send me an email

~Zack

[Sep 10 2018] CFDP 4 J Annoucement and goal setting



CFDP 4 J is designed to integrate all the power of the CCSDS protocol for space file-transfers, CFDP(documentation) into a java-native application. Right now, C and C++ versions of the software exist and are in circulation at NASA and its affiliates. The issue is that the ground-systems (commonly written in Java (YAMCS)) which leaves users with the option of either developing JNI based software, or interacting with the C libraries through system ports (Protobuff is not supported and so all data must be entered through bitwise operations into CCSDS packets). Both of which are less than ideal options and leave space for easy mistakes. As such, CFDP4J aims to combat this through java-native development of the protocol. All code is opensource and is available on gitlab here

CFDP has the following benefits:
• High level and ignores device file-system and restraits
• Peers can act as a distributed network to pass files from client to client
• Decentralized
• CCSDS certified
• Error-redundant and Error-accepting transfer modes
• Remote filesystem control


Any support on the project is greatly appreciated. Please let me know if you are interested in using my tool and you can get earlier releases on the software in exchange for testing the code on your workload.

[Apr 19 2018] WAS Low Orbit Hydrogen Body Electromagnetic Booster



This blog post is just a shoutout to my work on my hydrogen booster designed for keeping light objects in LEO indefinetly with electrical power. Please go check it out here.

[Jan 15 2018] Exploration of cyphers and the Zimmerman Telegram in particular

This project came along to me via a Freelancer job. These projects, while not always incredibly difficult, provide me with both experience and money. Both of which are great to have in a high-school setting. The idea of a cypher is that each word is mapped to a list of unique possible integer representations. The way this works is that imagine you have a list of the most commonly used English words. Now, for each of these words, map them 20 different unique 5-digit numbers. In your coded message, you can now simply write one of the 20 secret unique numbers, and then decode the message by finding which word that number represents. Words that are higher on the word-list indicate that they are more common, and will actually get more numbers to help lower the repetition of these generated numbers, making it harder to crack. It is not necessarily a hard problem, but it has some fun results, especially when you play with larger word-lists. You can see an example below.

The original Zimmerman Telegram is this:
"We intend to begin on the first of February unrestricted submarine warfare. We shall endeavor in spite of this to keep the United States of America neutral. In the event of this not succeeding, we make Mexico a proposal or alliance on the following basis: make war together, make peace together, generous financial support and an understanding on our part that Mexico is to reconquer the lost territory in Texas, New Mexico, and Arizona. The settlement in detail is left to you. You will inform the President of the above most secretly as soon as the outbreak of war with the United States of America is certain and add the suggestion that he should, on his own initiative, invite Japan to immediate adherence and at the same time mediate between Japan and ourselves. Please call the President's attention to the fact that the ruthless employment of our submarines now offers the prospect of compelling England in a few months to make peace."


After encoding and decoding the message, we get:
"we intend to begin on the first of february [unmappedword] [unmappedword] [unmappedword] we shall [unmappedword] in [unmappedword] of this to keep the united states of america neutral in the event of this not [unmappedword] we make mexico a proposal or alliance on the following basis make war together make peace together generous financial support and an understanding on our part that mexico is to [unmappedword] the lost territory in texas new mexico and arizona the settlement in detail is left to you you will inform the president of the above most [unmappedword] as soon as the [unmappedword] of war with the united states of america is certain and add the suggestion that he should on his own initiative invite japan to immediate [unmappedword] and at the same time [unmappedword] between japan and ourselves please call the [unmappedword] attention to the fact that the [unmappedword] employment of our [unmappedword] now offers the prospect of [unmappedword] england in a few months to make peace"

This can be stored in true Zimmerman fashion of 10 codes per line, as:
"13714 24182 10112 93539 45403 74516 61355 64764 69758 49852
87362 49852 82111 53761 87362 62953 49852 90050 33027 62151
10752 51188 80088 31849 88151 98031 76152 45715 46383 49895
54270 85800 19706 87362 23947 69544 21385 60866 25896 99370
38409 37459 60903 58806 46154 31844 22383 11805 48607 36915
36912 88799 66867 10276 59933 30375 80159 83560 95526 44394
15968 14292 44145 83683 49852 31223 92964 97595 57583 79606
21726 21385 57766 19125 66986 61503 51796 46403 83447 43608
57908 87515 83983 88323 18409 33602 41788 40884 54244 19551
80245 87362 72394 95717 67972 71391 49852 48880 24919 99390
76283 47480 34511 11705 67498 53750 89949 67321 55496 22408
56583 69658 52340 18950 67976 96464 29056 65125 33552 43564
33358 62941 87362 81186 70968 42568 18089 42668 49852 40972
72036 89486 39070 74949 50067 92334 87362 51824 94181 21178
96109 99670 56415 49852 25774 70796 32741 87362 10688 69650
72010 17590 88355 49852 88584 88625 95399 12909 64856 64091
33921 18023
"
The seed for this is 146748527069418 if you want to try decoding the message with my tool.


If you want to play with this yourself, please feel free to download the file (and read the README) from this link (working as of Jan 15 2018)


This was just a fun introduction to cyphers as a day project. I think there is a lot to say for a better random number generator, as mine was quite inefficient, but it worked for the project. Please contact me if you have any questions or any concerns that I may not be generating a proper cypher.

[Oct 7 2017] y/x | x,y are within the set of integers and within the interval [0,k] and x>=y

This problem came to me when I was on a walk, and was thinking about varying ways to approximate non-integer rational numbers on a computer. Most interesting to me is the relationship between k and the mean distance from any value l on the interval [0,1] to the nearest representable fraction defined by y/x with x and y less than or equal to k. This project examines representational-efficiency of various numerical distributions with size k^2. Of course, in terms of efficiency (space- and computation-wise), the standard 24bit mantissisa has the optimal distribution of numbers and the most basic computational complexity.

Here is the distribution of y/x, k=64:

And here is if you shrink the range to [0,1]:



This graph analyses the repetition of points. It is displaying the number of times a point was able to be represented on the vertical axis, and the value itself on the horizontal axis. The default y/x presents is a simple triangle fractal. Here the rule is (if y>=x, x^2/y^2, else y/x) and we can see the efficiency of this pattern, with 1598 combinations of x and y being repeats:



Finally, the graph you may have been looking for, is below. This graph shows the distance from any value m to the nearest approximate fraction made from y/x. Most interesting to me was the values for which the distribution of points is well able to represent any value m, for example, y/x is able to represent 0.5 exactly yet finds it difficult to represent the numbers immediately adjacent in either direction. This is that graph for k=64:




Average absolute difference between m and y/x with varying k's:
k=10: 0.0138462
k=50: 0.00076586
k=64: 0.000496681
k=128: 0.000135122

These are cool graphs that I found intuitive once I saw them, but I found hard to predict before actually calculating them. If you find this intersting and want to know more, feel free to contact me from my contact page.

[Jul 11 2017] Koch Snowflake Generation with Thue-Morse sequences

Recently, while browsing Wikipedia for information on Geometric Combinatorics, I ran into a cool subset of Combinatorics on words, called the Thue-Morse infinite word. This word (a binary sequence) is derived by starting with 0, taking the boolean complement of the current sequence, and adding it onto the word, then repeat. Ex: 0+!0=01, 01+!0+!1=0110, 0110+!0+!1+!1+!0 = 01101001. This word is defined after infinite iterations, and starts with: 01101001100101101001011001101001.... (sequence A010060 in the OEIS)

This sequence has a ton of cool properties, but one of them is that as the sequence gets bigger, it can be put through a turtle graphics program to arrive at the Koch Snowflake. The Koch Snowflake is one of the earliest fractals, with an infinite perimeter but finite surface area.

In fact, this cool sequence can be put through a simple turtle program:

Iterate through number n in the Koch Snowflake word:

  • - if (n == 0): move forward one unit

  • - if (n == 1): rotate by pi/3


With a small number of iterations this will produce images like:

And as you keep increasing the size of the provided sequence, you end up with images that look like


Just a pretty beautiful mathematical fact.

[Older blogs hidden in order to keep page load-time down]





Please contact me if you wish to get your hands on the code behind any of my projects, as I would be happy to provide it. Also, since I generate this website using my own HTML-builder, please let me know if you see any display errors.

All content on this page belongs to Zachary Porter. You may use, reproduce, or modify anything from this website, provided that you give credit to zackporter.com in your usage.