Summary
I love learning and have a wide range of skills. With 20+ years of experience, my primary strengths are an ability to learn new domains quickly, a natural talent for synthesizing large amounts of information, strong self-motivation, and excellent communication skills. I seek challenges that inspire me to learn. I love being in a room full of people that challenge me.
Find me on GitHub & LinkedIn & Toptal
Work History
Freelance Senior Software Engineer / Web App Developer
Toptal
2015 – Present
- As a contractor for Toptal, I’ve worked with a large number of clients: Okta, Auth0, Zendesk, Split, Sonos, Colorado University, as well as individuals
- See my Toptal profile for a more complete list of clients and projects
Kudos & Accomplishments
- Requested by name by clients such as Zendesk, Okta, and Split
Technologies: Java, Spring Boot, React Native, Node, Vue, PHP web frameworks
Freelance Web App Developer / Technical Content Developer
Okta
2018 – 2023
- Developed 40+ example projects and authored technical blog posts for their Developer Blog (you can see them here)
- Take a look at an example blog post:
- Each post required creating an example project and Git repository. Technologies focused on Okta’s OAuth, SSO, and security features
Kudos & Accomplishments
- Okta became my longest client through Toptal. Okta gave me a promotion by requesting to increase my hourly rate. My Toptal recruiter said this was the first time a client has ever requested to pay a contractor more
- Okta also invited me to Oktane, all expenses paid. I was one of two contractors they did this for, as an expression of gratitude
Technologies: Java, Spring Boot, OAuth, SSO, JHipster, AWS, Kubernetes, Netty, Gradle, React Native, Vue
Senior Software Engineer / Web App Developer
Personal Community Projects
2018 – Present
- Tibetan dictionary
- English, Sanskrit, and Tibetan dictionary with improved search options as compared to existing dictionaries
- Translation tool feature that breaks a block of Tibetan into dictionary words
- Fullstack Node + Vue app Dockerized and hosted on Heroku
- Tibetan pronunciation app
- Helps Tibetan language learners by playing Tibetan consonants with a variety of native speakers
- Node and Vue applications deployed with Docker on AWS servers
- Tibetan language wiki
- Tibetan language and grammar wiki to engender collaboration, community, and updates
- Wiki.js wiki deployed with Docker on AWS EC2 instance
- Tibetan electronic text search tool
- Internal tool created to ease searching Tibetan texts in pdf format
- OCR using OCRmyPDF
- Full-text search using Node and Elasticsearch with Vue front-end
- learntibetanlanguage.org website
- Collect resources for learning Tibetan in a single place (this did not exist previously and was a hindrance to my learning process)
- WordPress
Kudos & Accomplishments
- Tibetan dictionary is being used as a primary resource for the translation of the Lamrim Chenmo (a seminal text in Gelug Tibetan Buddhism) into French
- Learntibetanlanguage.org has 700 to 1000 hits per month — big news in the Tibetan language world!
Technologies: Node, Vue, Docker, Wiki,js, AWS, Heroku, Elasticsearch, WordPress
Senior Software Engineer / Java Server Engineer
Younity / Entangled Media
2015 – 2016, Boulder, CO
- Created a Pub/Sub messaging system on Amazon AWS using Vertx.io with a Hazelcast back-end
- Assisted in managing a complex AWS server environment
- Refactored various older Spring API functions to more modern Spring
Technologies: AWS, Vert.x, Groovy, Spring, Java
Senior Software Engineer / Owner
MoksaMedia LLA
2001 to Present
- My software development company for personal projects and contract work
- React Native mobile apps for both iOS and Android
- iOS native apps
- Direct contracting work for Sea Kayak Baja Mexico, Peppod, Pulsar Web Works
Technologies: React Native, Expo, Cocoa, Swift, AWS, Google Cloud Services, PHP, WordPress
Software Engineer / Java Server Engineer
University of Texas
2012 – 2017, Austin, Texas
- Identity and Access Management department
- Built and maintained middleware that sat between external facing applications and the university’s large SQL databases and legacy mainframe systems
- Assisted in migration and management of build server running Jenkins, Nexus, Crucible, and Sonar; also helped maintained build system infrastructure
Kudos & Accomplishments
- Promoted and given a raise within the first year
Technologies: Java, Groovy, Gradle, Maven, SQL
Narrative
Lifelong avocation
I began programming as a child. I sat by myself at an old Apple II and learned Basic. Later, I taught myself C and C++. Back then, living in a small Texas town, pre-internet, there were few resources to learn. I spent many hours flipping through very large books looking for answers to questions, and just as many hours carefully reading them page-by-page.
Throughout college and my early 20s, software development remained more an avocation than a vocation. I majored in Biochemistry, and after graduation, attended two years of medical school in an MD / PhD program. In 2003, after quitting medical school and choosing not to pursue a career in medical research, I worked in Iraq as a contractor. This was a way to quickly save money and have an interesting experience.
Upon returning to the United States, I dreamed of becoming a writer. Living on my savings in Austin, TX, I began to learn to write. While writing my two novels, I discovered that the software available for writing books was terrible. I wrote a custom word processor that I used to write my books (the main feature being that it presented the structure of a book in a left-side panel and allowed for the creation of an arbitrary hierarchical structure that could be quickly navigated, somewhat like an IDE).

I was deejaying at this time, and I also wrote an application that allowed me to quickly and intelligently navigate my collection of digital music files.

University of Texas
The writing career never earned money. I worked for several years as a sound engineer for films. Finally, in 2012, I began working at the University of Texas as a software engineer. Because of my non-traditional background, I almost didn’t get the job. But, as I found out later, due to the insistence of a close friend they hired me.

Within the year, I was promoted, Later, my friend told me that a few months after they hired me, they had a meeting to review their hiring procedures because, as my friend said, they had almost not hired me. He told me they wanted to review their interview process to see how they almost missed hiring “a developer as skilled” as me.
At the University of Texas, I worked in the Identity and Access Management department of their larger IT department. The department maintained multiple identity providers and business process layers that sat between the very large SQL databases and the user-facing programs. We also developed and maintained a variety of internal tooling used by IT departments to administer the database and identity systems.

I was very fortunate to work with several very sharp and kind professional mentors who taught me how to be a professional developer. I was smart, I had skills, but I had no idea about working in groups or at a large organization that pushes code used by hundreds of thousands of users and a database with millions of entries. They introduced me to new technologies such as Docker, AWS, GIT, Spring, Maven, continuous integration, and the new breed of scripting languages popular at that time, such as Groovy. I learned the value of unit and integration testing in an environment where you’re pushing changes to a complex system with potentially hundreds of thousands of real-time users and with low fault tolerance.
Contract work
In 2015, after three years of full-time work at University of Texas, I switched to working remotely with the school on a contract basis. I also took on new clients. I helped a friend develop a custom PHP backend to manage her sea kayaking business in Baja. I also worked with a couple clients writing custom backend code for Magento ecommerce websites and custom frontend templates for WordPress and Magento.
Toptal

Later that year, in 2015, I interviewed for Toptal and was accepted as one of their developers. At Toptal, worked with a huge variety of clients. From Velocitek, where I helped develop a Cocoa app to interface with an embedded GPS system that tracks racing sailboats; to working with Sonos, where I helped them develop an internal tool that used Google Maps data to optimize their commuting times. I also worked on a variety of React Native based mobile application contracts. I frequently switched between PHP, Java, Javascript, Node, Cocoa, and Swift. I developed both for browsers and for mobile platforms.
Okta
The longest relationship I had through Toptal was with Okta, and later with Auth0. I started working with them in 2017 and continued up until I came to India to begin the Tibetan language interpretation studies (the intensity of the studies did not allow me to continue working concurrently).
I worked on the developer content blog team at Okta, creating example programs and writing blogs posts to document and advertise features of their systems. You can see a list of my blog posts here. The job with Okta reinforced my background in identity and access management, and continued the development of both my Java backend skills and my Javascript/Node fullstack development skills.
I worked with a variety of technologies, such as Spring Boot, JHipster, Kubernetes, Azure, and Quarkus. For much of my time working with Okta, I was also studying Buddhism full-time at Maitripa College in Portland. I also did similar work for Zendesk and Split, as some of the people I worked for at Okta left and began work at those companies.

This job fit me very well at this time for two reasons. First, I dove into a whole host of new technologies. I love learning, and each project was a new little world. One of my talents is immersing myself in a new context, quickly assimilating it, and being able to synthesize it on a higher level. This work leveraged that. Second, the work was low-stress and flexible. Because I was busy with studies, I did not have enough time available for the clients who were developing web applications or mobile apps as they demanded a faster pace than I was able to commit to with my studies.

At Okta, I received a raise in my hourly rate through Toptal at their request. The recruiter called me one afternoon and said that Okta asked to increase my rate. He laughed and said that this was the only time they’ve ever had a client request to pay a contractor more.
Mobile Applications
Sravasti Abbey
On a volunteer basis, I helped Sravasti Abbey develop and publish a daily motivation app. The app was developed in React Native and published to both the Apple Mac and Google Play store.

Piano Tuner Assistant
This application was written in Objective-C and Swift for the iPhone. It was published to the Mac App store but is not longer available. It had a total of 11,000 downloads on the app store.

Piano Temperament Assistant helps a student of piano tuning visualize the partials and beat rates that are important for tuning a piano by ear. Currently all note values assume standard Equal Temperament.
Select two keys in the piano keyboards at the bottom of the screen and see a simulated visualization of the component partials, both on the keyboard and on the graph view. If a partial is detuned from the actual equal temperament note value, a small line marks the amount detuned flat or sharp.

Yellow keys mark where two partials coincide close enough to have a useful beat frequency (less than 20 hz). The beat frequency is also shown in Hertz above the corresponding partials. Tap near a beat in the graph view and the program will play a simulated beat at the exact rate and pitch.
Wind Chime Calc
This app was built in React Native. Although now no longer available, it was published on both the Mac App store and the Google Play store.

Have you ever wanted to build a set of wind chimes? Wind Chime Calc can help! Given a type of metal (Aluminum, Steel, Brass, or Copper) and the outside diameter and inside diameter of the tubing, the calculator will tell you the approximate length you need to cut the tube to achieve a specific note/frequency. Many thanks to Lee Hite for his amazing website with instructions on all things wind chime.

Call2Power

Call2Power uses GPS location or address to find the contact information for the user’s state, national, and local representatives. I wrote this app during the first Trump administration’s attempts to repeal the Affordable Care Act as a way to support efforts to block the repeal. The application, written in React Native, uses GPS data and calls to Google Civics, Google Geocode, and OpenStates APIs to retrieve data on the user’s representatives. The app did not track or retain any data. Calls could be made by pushing a button to one’s reps after searching.

Buddhist language tools
Tibetan dictionary
While studying Buddhism and Tibetan language, I also worked on a number of tools. I created a Tibetan dictionary that allowed improved searching flexibility as compared to the other dictionaries available. The dictionary project used Vue as a front-end and Node.js as a back-end. It runs in a Docker container using Docker Compose. The server is hosted on Heroku while the front-end is hosted on my personal Fastcomet hosting account. You can see the dictionary here.

Tibetan pronunciation app
I also created an application to support people learning how to pronounce the Tibetan alphabet. Tibetan has 30 consonants, including a number of sounds that do not exist in English. The consonants vary by aspiration and tone in ways that are not used in English. The application has a variety of spoken voices that can be selected.
I had a very rewarding moment sitting in a cafe in Dharamshala, India, last year. I met a young woman who said she was studying Tibetan and was just learning the language. I pulled up my webpage and showed it to her. Surprised, she stared at me. “You made that!” She had already been using it. Take a look at the “gakha” app here.

learntibetanlanguage.org
When I first began studying Tibetan, I was shocked at how few resources were available. As I continued, I began to realize that there were more resources available than first appeared (while still far fewer than other, more common, languages). I created a website, https://learntibetanlanguage.org/, whose purpose is to gather all of the resources in one place so that others can access them. This website now has thousands of hits a week — big news in the Tibetan language studies world!
Tibetan language PDF search tool
Tibetan studies is awash with PDFs of texts in Tibetan that are unsearchable. Partially, this is due to the PDFs having been created before Unicode was a standard, so various custom font encodings were used. Recently, this is due to efforts at copy protection. However, being unable to search these texts greatly limits their usefulness. In response to this, I created an internal tool that I use that allows me to search PDFs.
To make the PDFs searchable takes a number of steps.
- Split the PDF into pages
- OCR each page and output the Unicode text for each page, correlated with page number
- Feed the paginated full-text Unicode into a Node & Elasticsearch server
- Add the original PDF to the Vue front-end
The result of this is that I can run searches on the Elasticsearch instance that will return the PDF name, page number, and text extract of the hit for each result. This is presented in a Vue front-end that can also open the original PDF to the appropriate page.
Tibetan language wiki
I’ll mention one last tool I created for Tibetan studies. When I started studying, there was almost no information about Tibetan grammar available online. Everything was in large, old, textbooks. This had two major drawbacks. First, they were not searchable, and some of them were not particularly well organized nor had a great index. This really slowed down the learning process. Second, the books had mistakes in them. Western understanding of the Tibetan language has evolved greatly since the 70s and 80s when these books were made. The books, however, are no longer being updated.
In response to this, I created a Tibetan language wiki. You can see it here: https://wiki.learntibetanlanguage.org/ It has the great benefit of encouraging other contributors, allowing for updates and corrections, and being searchable. While most of the content I personally typed in from the textbooks, there are five other contributors on the site as well. The wiki uses the Node.js platform. It is hosted on an AWS EC2 instance and deployed using Docker.

