Peer to Peer Projects
Over the years, I've liked theorizing about a number of exotic networking ideas involving P2P. These are some of the ideas I've had, but many are very incomplete if even implemented in code.
I've also since learned that part of the reason I've been so ineffective is because of my choice of language (C). Henceforth, if I were to keep developing these, I would want to use Rust, C++, or maybe Go, with a leaning towards Rust especially for secure applications.
If you want to view code, feel free to click on thes.
File Sharing Utility
If I was going to continue working on any one of these, I would choose this one first. It is by far the most useful to me personally in this list, so much so that I keep getting somewhat frustrated I haven't made it yet. I often work on 2-3 computers at any given time, and sometimes I wish they could just sync, so that I don't have to worry about things like uploading and downloading from/to Google Drive, USB drives, GitHub for file storage, Bluetooth, or any other method. The most effective method I have is KDEConnect, which can pair (KDE) systems and allow them to access each other's functionality. You can do stuff like run remote commands, type on one computer with another computer, and yes, you can share files. They even have a companion app for Android, which I actually use somewhat regularly. It does not, however have a sync functionality, and in the end, this particular implementation isn't that much better than Bluetooth.
But what if the computers could just sync? What if I could just set something up one time that gave my other systems access to folders on the system I'm using right now, or vice versa? Then I can go out, do some edits on a file, and once I'm at home and using my home WiFi, the laptop can connect to the others (securely) and sync the changes. Of course, you only exclusively want to do this on your home network, and you only want to do this with computers that you specifically authorize, so you can do a preliminary check with MAC addresses or hostnames (In my experience, DHCP Routers (that dynamically allocate IPs instead of a static router) usually retain the IPs of recurring devices on the network, but best not to take chances and lock yourself out). Then, you can authenticate using public key encryption, where each of the chosen systems (peers) has a key pair (or just simply do this first). Thus, each peer on the network would have to first check if they're on the right network, and then reach out to other computers and issue their challenge. After the peers pass the challenge, they then will wait (in a non busy way, no while loops with sleep) for either their files to update or an incoming file from another peer.
I've tested and written components of this project. I've sent files using sockets and developed a command line parser for it. The project, though, is quite an undertaking despite having those small wins.
Video Sharing Idea
Video servers need a huge amount of storage and bandwidth to make their systems work, which is one of the reasons why there are so few social media industries, especially those involving video. But what if you, a company, didn't even need to host any video? What if you could just let the users of your platform do the hosting? Hence the idea. The site and app themselves would be free to use provided you set up a server to help out the network (which is really the cost of the network).
Technically, this idea would prove to be incredibly ambitious, with a high amount of concurrency involved, not to mention data integrity, compression, and load balancing to worry about. I could perhaps use rust libraries to help with some of these challenges, as recently I've decided to embrace rust, but even still, the
There are also a lot of other issues with this; the biggest one being the fact that most people would probably rather just watch ads than set up what is essentially a home server and watch ads. There is not much unique about the service to get people to use it rather than other alternatives, including other existing P2P video sharing sites. The challenge here would be to innovate and attract enough people to make this worthwhile.
I have some ideas, such as a better feed algorithm. Youtube is designed for maximum watch time, but not necessarily quality, and it blends all of your watching preferences into your landing page. If one could have better selection of their content, including "watching modes" that you could go into (I don't want to see gaming videos when I'm studying), that would be nice. But, this alone wouldn't justify completely overhauling the Youtube platform, indeed you could probably create a separate website that interfaces with Youtube to create an alternate frontend.
Chat Server
This is one of the very first projects I came up with. The premise was to develop a secure, multithreaded P2P chat application. It's also the one I got the farthest into implementation wise; I even managed to successfully create an app that creates a thread (using clone, not pthread) for each incoming client, granted it is riddled with bugs. I learned a decent amount about linux system calls and signals while doing this.
I would call this particular project more of a learning exercise than something intended to be functional, and I did learn a lot from it.
Programming Language Projects
MLang
I have wanted to make a language that has a traditional, imperative-like interface, but is semi-functional in nature and can run massively parallely using a compiler to compile to bytecode and a scheduler to run the bytecode on various different processors (that also acts as a JIT and caches compiled code/performance data for quick subsequent startups and faster performance). This is a tall order, so I thought I would make a programming language first. Thus far, I have made a lexer for said programming language.
Lexers
I've made a few lexers in the past--one in Haskell, one in Go, one in C (though I don't know where that one is), and one in OCaml as part of a school project (I also made a parser, though similarly I don't know where it is. I have repeatedly reinstalled Linux over the past five years, so my files before 2021 are a slight mess). I regard writing a lexer in a coding language as a good intermediate project for learning; it touches on several subjects such as file IO, branching, looping, management of state, and custom objects. I have also tried to make parsers for ASTs, but I don't have one to showcase yet.
Other Projects
Finance Bot Experimentation
I have had some ideas about using NLP to predict stocks in the medium to long term instead of the short term by extracting dates, key words, and sentiment, but it seems like others lately have been doing similar things. This is something I am thinking about implementing in the future more thoroughly, but for now, I haven't written anything involving AI or strategies.
What I have written is a neat little automatic proxy configurer and user agent spoofer that rotates between free proxies from three different websites. Each site has an API that fetches a list of proxies in a text file, as I didn't want to use BeautifulSoup to create a custom parser for each site, though I could have. I then go through the list and check whether the proxy is 'valid,' meaning it does actually connect to a host and it replaces my IP with the proxy server's. Once I find a valid proxy, I send a request to the target server. Subsequent requests can be sent, or if the request didn't go through, you can just pick a new, working proxy and try again.
Bittorrent Client
A simple bittorrent client that I started writing in C. The idea was to be able to handle many, many different kinds of torrents and be as compatible as possible. I started writing a bigint library and a bencoding parser, but I stopped. I might come back to this in the future if I feel like coding as a hobby again.
"C Interpreter"
I started out with wanting a neat, convenient way to test out C code. Originally, I would either write a file, a lot of boilerplate, save the file, compile the file, run it, and then either delete the file or forget about it, or I would search for a C compiler online that would take time, be tempermental (if I accidentally closed the tab), and I would still have to write boilerplate. Why couldn't there be a simple, one-command-one-key way to just type a phrase, drop down to an editor that has a customized template, and Then, I realized I needed a text editor. Not thinking writing one was too bad (in C), I decided to go for it, but the terminal's default operating mode wasn't sufficient, so I quickly fell down a mini rabbit hole of escape sequences and segmentation faults. I didn't think to use a debugger until the very end of the project, but at that point, I made a very buggy (don't use the enter key too much) but technically useable text editor. My original goal escaped me for a while, but coming back to it, I just decided to use Nano instead to create a functional application.
This Site
Design History
I knew I wanted to make my site with WebGL from the start to test my abilities. At the very beginning, I was just beginning to learn the general workflow of WebGL bit by bit, and it seemed very foreign, as I didn't quite understand the low-level GL calls. It took me a while to get even an image to display on a screen, but I kept persevering and fixing various GL errors, and it finally worked. GL has a particular workflow with pushing buffers to be rendered and labeling correctly. It was a learning process to get GL to work well, and as I learned more, I was able to do more things, such as drawing circles on the screen.
Once I got the GL components secured, I then began working on the JavaScript controller that processes inputs, resizes the window, etc. I had particular difficulty trying to get the circles to display correctly and smoothly, behave well, and perhaps most of all, arranging them. What I did to arrange them in nice, non-conflicting groups is first select the best out of a series of random generations (gen_circles in code), and then move them away from each other and the wall iteratively (fix_circles). I can also fix the circle configuration when resizing as well, without having to go through a (costly) re-generation process.
Difficulties
As I said, working with raw WebGL calls was the first major difficulty in this project, mainly because of the limited debugging available. The second problem I ran into (and still have trouble with) is Firefox. For some weird reason, Chrome (and Chromium) seem to work like a charm with WebGL related projects, but though Firefox will run them semanticly correctly, it is severely limited in performance. It runs 20-30 FPS on a system that should be more than capable of pushing at least 120-130 (actually it gets >160 on Chrome). What is more mysterious is that Firefox actually seems to be using the GPU correctly, according to GPU monitors like nvidia-smi. I will also note that this only happens on Ubuntu, not on Windows, so it seems likely that Firefox's OpenGL backend is inefficient and meant as little more than a fallback. This also affects the Wasted site (below), and other applications that use WebGL, so there seems to be little I can do about it, other than advise users to use Chrome, which works consistently well.
By the way, if you encounter an issue using this site, please make a Github issue or email me.
What I would change if I did it over
At this point WebGL is great, but for something simple like this, I would opt for pure CSS3 animations. Either that, or if I wanted to specifically use WebGL, I should have done something that could only be done with WebGL (such as using dynamic post processing effects). Stay tuned for updates on that. CSS animations, on the other hand, aren't necessarily as smooth and bouncy, like the Euler's method models I implemented, but they would work adequately and be much simpler to implement. Perhaps using only CSS3 animations would increase performance on Firefox as well. Another thing I will do is split my JS into compartments and classes for easier access. A final idea that I have for the future is using React; React, while initlally somewhat cumbersome (in my opinion), is acutally quite handy for abstracting repetitive features of websites into their own 'components', which can then be rendered cohesively in different layouts.
Welcome to the messthat is this project.
History
Long ago, when I was just a budding high schooler, I wanted to make an operating system. I actually don't know why I thought this was an appropriate project, other than the fact that I generally like to understand how things work, and I was fascinated with computers. Before this, I played with various sorts of things, like circuitry. I was particularly fascinated with how SR latches worked, and I even implemented my own little SR latch with transistors on a breadboard. After I got comfortable with latches, and addition on computers, I tried to create processors in simulations. At first, I did this in Minecraft, where I built a horifically slow and incomplete processor. Then, I moved to a software called Logicly, which was great, but turned out to be very inefficient and single threaded, which proved to be a bottleneck as I tried to create 1 KB of byte addressible SRAM. I actually have videos about these topics on a really old youtube channel that I have not updated in a long time. Once I get less busy, I plan to make more videos about different sorts of topics. I stopped using Logicly, and then I attended a Hackathon with a friend where we both worked together to create a small bootloader. And that is where the Operating System project started, it took until my junior year in high school to see it to where it is today.
'Features'

The 'Operating System' is basically a terminal interface to absolutely nothing. However, it is a functioning terminal interface, complete with keypress interrupts, a working terminal, commands such as 'help' and 'echo', and even the ability to change the color. To get to this point took an arduous while, and by then, I wanted to get started on task management and creating processes. Unfortunately, I didn't have much of an idea of what I was doing, so I was somewhat lost as to how to implement memory and task management. I even tried to write my own form of malloc (without using page tables) at one point, but even then, I thought that exercise was stupid, as the program could just ignore the artificially set boundaries (or crash). I had to implement paging at some level to bootstrap the OS into protected (32 bit) mode, but I was unaware that this feature was actually intended for use on programs and not just another annoying thing I had to set up at boot time. Needless to say, the task management never came to fruition, and the last I worked on it, I remember trying to read the intel developer's manual entry on the TSS and being confused.
Future?
If I were to embark on this again, I would probably just start from scratch. For one, I wouldn't code the entire thing in Assembly. I would at least use C, and maybe, if I could get a stable kernel working, incorporate Rust code. Rust is great because, when you're working in 'safe' mode, the compiler catches many common erroneous glitches. The problem, though, is that a good chunk of the code would still be unsafe because of the nature of drivers and other things, but it's still an improvement, as you can strictly differentiate between safe and unsafe code. The problem is, at the kernel level, practically everything you would be doing is unsafe, and Rust's aggressive type checking system would do litte more than get in the way. Still, I would probably write Rust functions in a static library and call them in the C code, or maybe even vice versa. The first real thing I would implement (besides basic interrupt and exception handling) is probably a PCI driver for getting information about memory mapped devices. Next, I would implement a memory / time allocator that can create, run, and kill tasks concurrently and multi-threaded. That itself is going to be an incredibly tall order, but provided I get that done, the next logical step would be implementing a shell so the user can launch tasks (that itself is a task) and then a USB driver for accessing disk storage (I would probably be booting this thing off of a USB drive). I could also thrown in a S/ATA driver for accessing hard disks. That would probably take about a year, but all told, I would have a neat little functioning operating system that could be expanded on further.

The Joys of Sunvox

Sunvox is a free, modular synth that allows for the creation of rich, complex instruments from relatively simple building blocks. It has a minimalist interface with just four main windows, in contrast with something like a DAW, like FL Studio or LMMS. While it is a synth, you can also edit samples and create tracker patterns to create and edit full songs, so it could be considered a DAW in it's own right (though it does not support VSTs and is minimalistic in it's feature set). I personally have used Sunvox mostly to create EDM style music, such as dubstep, house, trap, and other kinds of groves that really don't have a category. I have also used it to import and edit live samples of me playing other instruments, such as guitar or bass, in a way that you would use audacity to accomplish something similar. Recently, I used it to synthesize sound effects, specifically gunshot sounds from 'sinephium' weapons, for Tales of the Wasted West (I also made the website). Once you learn the interface, it becomes a really powerful and simple tool to do most anything you need with not just music but sound design in general.
Other than just synths, I also play a few string instruments. I was in orchestra for around 6 years. I started out playing the viola, an instrument that is slightly larger, lower pitched, and perhaps mellower than the violin. It was designed to fill out the middle ranges of pitch and bridge the gap between the violins and the cellos, so parts for viola are often supporting roles. Eventually, I discovered that I would rather play cello, as I find it to be a beautiful instrument, and it has a tremendous amount of presence and depth. I switched in my last year in orchestra, and I had a cello at home, but my family returned it. Recently, though, we got a cello again, and I have been practicing again and am hoping to master some solos with it, in particular Vivaldi's Winter (the solo was written for a violin, but it sounds better on a cello). I also play guitar and electric bass, but I mostly improvise on the spot and fiddle around rather than practice 'real music', much to the disappointment of people at parties who love to request songs.


Hi, I'm Daniel Moylan, a senior at the Universtiy of Maryland majoring in computer science and mathematics (grad. Fall 2023). I am fundamentally a tinkerer, interested in learning and understanding complicated gadgets, tools, and software. From 12 years old, I have fiddled with electrical circuits, taken apart and repaired laptops, read engineering books, and learned about many facets of software development. I was always interested in understanding how computers work at a fundamental level. I slowly built up my understanding, learning about electronics, logic gates, various types of latches, control logic, processors, assembly, and then operating systems. This ultimately culminated into a few designs for 4 bit processors (which I don't have anymore ☹️) and my attempt at building my own operating system in assembly, which you can read more about in 'OS Dev'.
My urge to understand everything led me to develop in minimalist languages, i.e. C and Assembly (to a limited extent C++), because I wanted to precisely control how my applications worked. I was in for a rude awakening though, as I discovered that doing things in a really hard, difficult, and esoteric way to have complete authority over a program was not only inefficient with my time, it was actualy bad for computational efficiency, security, scalability, and just overall maintainability. Eventually, I have matured as a developer and adopted higher level languages, like Rust and Python, and tools, like Node.js, to automate some things. My experiences have taught me that, sometimes, complete understanding is not the goal, and getting stuff done is.
If you would like to learn more about my skills as a professional, you can check out my resume.
Other things that I like to do with my time are preform music and work out. I've also taken up reading novels recently; I got to the fourth book of The Dark Tower series, I've started to read Game of Thrones for the first time, and I've begun reading Piers Anthony's Virtual Mode, which is just something I found on the bookshelf (it's pretty good, and uplifting, which is nice). I would really like to get into car modding and other mechanical things, but a lack of equiptment and a 'project car' (no; I'm not using my own car to do anything except maybe change the air filter and rotate tires) makes this rather difficult.
Github
Discord
Daniel Moylan
Chrome is the preferred browser for this website.
WARNING: WebGL context was inexplicably lost and had to be restart. You may want to consider switching browsers!
Other Projects
Web Dev
OS Dev
Music
About Me
Contact