Johnny

Jonathan Marler

Software Engineer

johnnymarler@gmail.com

ABOUT ME

I'm a driven person who enjoys solving problems through programming. I develop many types of software, from low level operating systems to high level web applications. I was a software engineer at HP for 11 years and currently work on a pair programming application called Tuple. I program both for my job and as a hobby which has granted me experience in many areas. I enjoy new challenges and love to learn.





SCHOOL


University of Idaho
College of Science and College of Engineering
BS General Mathematics and BS Computer Science
Graduation Date: May, 2010 GPA: 3.9




Talks


  • 2023 - YouTube How to Use Abstraction to Kill Your API
  • 2022 - YouTube Ziglibc: Sweeping out the rug from underneath C
  • 2021 - YouTube Showing Zig how to see through Bill Gate's Windows




  • JOBS


    (2021 - Present) Software Engineer at Tuple

    Ported the remote pair programming application Tuple from MacOS to both Linux and Windows.
    (2010 - 2021) Software Engineer at HP

    Worked on a vast array of projects including low level drivers, operating system infrastructure, the USB stack, the msbuild system, databases, interactive web sites with JQuery/ASP.Net/PHP etc., and a large set of .NET tools.
    (2008 - 2010) Internship at University of Idaho

    Worked on code analysis software written in LISP (ACL2). This was for professor James Alves Foss who was writing static code analysis software for Wind River.
    I also do contract work that includes:
    • Creating websites. I've created websites using HTML, CSS, Javascript, PHP, ASP.NET, D/vibe.d, C/C++, Perl, Ruby, and other scripting languages. I'm also familair with Microsoft SQL Server, MySQL, and PostgresSQL.
    • Server maintenance and configuration. I've put together and configured servers for to host a few large websites/android apps

    LANGUAGES


    NameProficiency
    CVery High
    C#Very High
    DVery High
    HTML/CSSVery High
    ZigVery High
    PythonHigh
    C++High
    JavaHigh
    PHPHigh
    ASPXHigh
    LISPHigh
    JavaScriptHigh
    BashMedium
    BatchMedium
    PerlLow
    RubyLow
    RLow
    • Low: Spent some time programming in the language. Have likely coded some small projects in the language but would need to brush up on the standard libraries.
    • Medium: Dozens of hours spent with this language.
    • High: Hundreds of hours of programming experience. Likely had to use advanced techniques of the language to interoperate with other languages, interface with different operating systems, etc.
    • Very High: Thousands of hours of programming experience. A very deep knowledge of the language. A good amount of knowledge of the compiler as well.



    NOTABLE WORK


    I've tried to include at least 1 project in each general area that I've worked in. I provide more detail for projects that span more areas. Some of my open source work can also be viewed on my github profile: https://github.com/marler8997

  • Tracked down an issue in the Go runtime, a project I don't have experience with, and identified a bug in the runtime assembly code that occured in the exception handler on arm64. This was a difficult problem to root cause and showcases my flexibility to work in unfamilair domains using fundamental engineering principles. Resulted in this small fix to the Go runtime: https://go-review.googlesource.com/c/go/+/381775/4
  • I created/maintain the zigwin32 project, a "projection" of the Win32 API for the Zig programming language. I gave a talk on it here: https://www.youtube.com/watch?v=HsnWZxrf5VE and the project can be found here: https://github.com/marlersoft/zigwin32
  • I was the primary developer in creating and maintaining HP's linux distribution for our new enterprise firmware. HP chose to use the extensive and powerful Yocto framework to create our distribution. I received training for Yocto from bootlin and spent hundreds of hours developing and maintaining a full linux distribution with it.
  • I developed a small linux distribution. https://github.com/marler8997/maros and https://github.com/marler8997/mar The purpose was to familiarize myself with linux at the kernel interface level. It also provides a fast development platform for kernel modules. This also included writing an x86-64 bootloader https://github.com/marler8997/crystal
  • At HP before we switched to linux I helped maintain an instance of Windows CE for our enterprise printers. This involved writing drivers, triaging issues with the OS and maintaining a transparent multi-stack network architecture.
  • At HP our printers had a unique network architecture. It contained 3 network stacks which presented some challenges. To help accomodate this pre-existing design, I developed a tool called "MultiStackProxy". This tool was able to facilitate proxying data between network stacks through simple commands and configuration. It ran in the "application" layer and thus I created a general-purpose framework for creating asynchronous network applications on our old Windows CE operating system. Because of this, we were able to leverage it so solve other problems as well. I added an HTTP file server, a SOCKSv4 and SOCKSv5 proxy server and a custom protocol server used for authentication between processors. With the framework I designed, these extra protocols were able to be implemented an a few hundred lines of code. The framework encapsulated the threading model from the application code so we could run it in as little or as many threads as we needed.
  • A linux block device driver that communicates with a server running on Windows that allows linux to share a Disk with another processor on the same ASIC. Unlike a remote file-system, this protocol never transferred actual disk data between processors. Instead, the client would only send DMA lists which meant that performance was almost as good has having exclusive access to its own disk. This enabled HP printers to be able to run Android on a secondary processor and share the disk with our existing Windows CE operating system. This meant we didn't need to ship an extra disk to support Android and we still maintained high performance disk speed on an embedded device.
  • Developed many tools and framework in order to build and run Android on our printers. This included implementing runtime block device verification "dmverity", image signing, image verification inside EFI, a linux module that forwards open ports from Android to Windows in order for Windows to be able to forward communication from the external network interface to Android, and developing a SOCKS proxy server that runs on Windows CE (This is the Socks Proxy server that I added to MultiStackProxy).
  • I developed an NfsServer that ran on Windows.
  • Throughout my first 5 years at HP, I developed a large set of common C# libraries. I went through HP's "Open Source Review Board" (OSRB) to get it approved as an open source project that can be found here: https://github.com/hpinc/More.
  • Contributions to the D Programming Language Compiler. My most notable contributions would be the addition of the -i command-line option which directs the compiler to include imported modules in compilation, the addition of the __FILE_FULL_PATH__ token to the language, and a new command-line tool that runs and caches D programs from source (https://github.com/dragon-lang/rund). It runs about twice as fast as the community's existing version of the tool because I was able to design it to perform proper dependency checking without invoking the compiler twice. A list of my contributions to the compiler can be seen on github here: marler8997 dmd merged pull requests
  • Developed web services and tools that monitor hundreds of printer emulators for HP. I developed a website in ASP.NET, a database in SQL, and other tools accross a fleet of machines. Languages used in this project included ASP.NET/PHP/JavaScript/SQL/PHP/C# and C
  • Developed a simulator for finisher devices for HP printers. This device uses a protocol to communicate with the printer to manage paper handling and finishing options in real-time. The simulator supported dozens of finisher products and configurations. It was a year-long effort to develop, with the final product being about 80,000 lines of code. I was the sole developer. It's been used for about 6 years and the number of bugs found in it can be represented with a single digit.
  • Developed a replacement for Windows networking library (ws2_32.dll) that allowed applications to interact with multiple network stack without being aware of it. This piece of software is crucial in HP enterprise products to support both internal Windows networking and the external-facing Jetdirect network stack.
  • I've created a handful of websites for businesses and friends. For these I mainly use HTML/D/Javascript/PHP/C/C++/SQL.


  • Public Projects


    This is a list of some of my public projects on github that I've created and maintained over the years.

  • Experimental Linux Distro: https://github.com/marler8997/maros
  • Remote Keyboard/Mouse sharing application: https://github.com/marler8997/windows-remote-control
  • Zig Compiler Manager: https://github.com/marler8997/zigup
  • Zig HTTP Client: https://github.com/marler8997/ziget
  • Audio synthesis application/tools: https://github.com/marler8997/audio
  • Netpunch, networking tools/libraries: https://github.com/marler8997/netpunch
  • A re-implementation of the "slime volleyball" Java game in HTML5/Javascript: https://github.com/marler8997/SlimeJavascript
  • Irc Logging Client/Publisher: https://github.com/marler8997/zig-irc-logger
  • X11 library for Zig: https://github.com/marler8997/zigx
  • Experimental scripting language: https://github.com/stitchlang/stitch
  • Experimental Architecture for Distro-Agnostic Dynamic Executables on Linux: https://github.com/marler8997/reloader
  • Play synchronized streaming content accross multiple clients: https://github.com/marler8997/streamshare
  • Command-Line Disk Imaging tool for Windows: https://github.com/marler8997/windows-imager