Skip to content
View jonasraoni's full-sized avatar
Do what you want cause a pirate is free! You are a pirate!
Do what you want cause a pirate is free! You are a pirate!
Block or Report

Block or report jonasraoni

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Add an optional note:
Please don't include any personal information such as legal names or email addresses. Maximum 100 characters, markdown supported. This note will be visible to only you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse

About Me

🤵 Software engineer with +20 years of experience (first job in ~2001), check out my LinkedIn or CV for more professional information.

I'm a persistent hardhead (I'll try again and again, until I succeed!), natural saver, proactive, challenge lover, bug hunter, dad of two boys (🔥🧊), soccer player wannabe, lego builder, fan of Italian food and desserts 🍨

I don't think I've contributed much to open-source, but it was enough to make "jonas raoni" and "jsfromhell" bring respectively +26K and +35K records just in GitHub, probably due to my old project (online for historic purposes). These little pieces of text have the power to transcend my own existence 😵

💼 Work: Systems Developer at SFU University, working with open-source publishing platforms.

🛠 Skills: My key languages are JavaScript, C# and PHP. On a daily basis I deal with microservices, REST APIs, message queues, tests, build SPAs in Vue.js, general optimizations and support users. About storage/messages, I'm normally using Microsoft SQL Server, PostgreSQL, MySQL, Kafka and RabbitMQ.

At this moment I'm thinking about moving back into Node/React or maybe something new, such as Rust/Go

⌛ Past: C/C++, Object Pascal (Delphi), a bit of Java, jQuery, AngularJS and dead tech.

How I Code/Solve Problems

I'm a practical person, who doesn't like slow, long and repetitive things, so I naturally try to be concise and short in my codes, I also try to write things as performatic as possible. Since I like small challenges, I've started solving the tasks below in my micro spare time:

Codility solutions in C# LeetCode solutions in JavaScript Chutes/snakes and ladders HackerRank solutions in JavaScript

General Beliefs/Rants About Programming

  • Personal rule of thumb: Every now and then we're surrounded by new ideas and technologies, which means that everything we're building is already a kind of legacy, which will be dumped (errr transformed) a couple of years ahead.

    I think it's part of our job to make the transition easier, by minimizing the amount of code, complex architectures and customizations to the minimum. Choosing long-standing libraries and avoiding being an early-adopter of tools/frameworks might be helpful.

  • Code fragmentation: The less code the better! Naturally the same applies to the number of files, classes, tools, services, etc.

    I guess that everybody agrees simple and small functions/classes (implicitly fragmented across several files) are easier to test, reuse, understand and less likely to be broken. But debugging/reading such code full of indirections highly increases my cognitive load, I feel like reading a book where each paragraph sends me to a random page, with no context, and switching between these pages is painful (unless I'm the creator 😁).

    This way I generally prefer to avoid fragmenting the code/creating too many abstractions... Basically, I think that a god method/class is horrible, but the inverse is not less cruel.

  • Micro-optimizations: My favourite stuff! But it's not fruitful to spend time nitpicking (micro-optimizations) and sharpening your knife (overengineering) for a war that may never come, better to spend some time on macro-optimizations using a profiler ¯\(ツ)

  • Code complexity: Everything in life needs equilibrium, especially when a piece of code becomes so complex, that even its creator can't fully understand it without reading the code throughly. As there's no specific rule here (what is simple for you, might be complex for another), I think it's enough to just align the complexity with your team, always giving preference to the simplicity.

  • Dependencies: I'm against depending too much on specific features from closed source products/vendors, everything should be replaceable. On the other hand, I fully support using popular open-source projects, as you get support, documentation, testers and upgrades for free.

    After having some experience modernizing large legacy code bases, I'd say it's much better to use ready packages than hand-made code, even if you can do a better job.

    p.s.: I'm still trying to swallow micro-dependencies (hello node_modules), but well, as long as it saves you some lines of code, it should be ok...

  • Slow vs fast languages: I enjoy using the fastest language available, but in the end processing speed is overrated. For general applications, what really matter is having an effective data transfer/structure, as the key to performance is avoiding/delaying/throttling the resource usage.

  • Coding patterns: I see coding as a kind of art, so I'm not a big fan of materials spitting coding rules. Some people end up using those as a kind of "horse eye patch", which limits their alternatives, while the truth is that a problem might have N different (and equally great) solutions. But yeah, things are easier when everybody speaks the same language :)

  • Reinventing the wheel: Traditional jobs, require standard approaches. Despite that, I think reinventing the wheel is the best way to evolve something, it gives us freedom to filter out bad decisions and merge in the good ones, that's how disruptive tools/approaches are born.

  • Hiring in IT: We're often looking for our clone. Someone that thinks and knows the same things as us, and in this process a lot of great professionals are lost... And I think it's not possible to fix it.

    Big companies can afford to add more people/steps into the hiring process, to make it less biased (but more stressful for the interviewee), or to raise the bar with complex requirements, to ensure they are hiring an exceptional brain (hopefully they are not grabbing bazookas to kill ants, that's bad for the society).

    For smaller companies I'd follow these priorities: indication from someone I trust > previous experiences/personal projects AND/OR offline coding/implementation test (not huge, but complex enough to allow the person to show his organization, reasoning and resource management skills) > soft-skills.

Random Facts

  • I've been working remotely since 2015, and I fully recommend it.
  • I got my first computer when I was around 10 years old, a 486-DX2. I've learned how to use it by spying my cousin giving classes about DOS (not DoS 👀), so I still remember something about: devicehigh=xyz, deltree, typing win to start the Windows 3.11, turbo button, sound blaster kit, cleaning the mouse ball, zipdrive, SCSI (the super fast disk that nobody had 😁), etc.
  • I've got access to the computer after finding the key (yeah, computers had locks) and discovering the password (which was errrrr "password" in my language 🤦‍♂️).
  • I've joined the internet after listening to some guys discussing about it and HTML in the classroom when I was ~14... I've got curious and once I arrived at home, I found an AOL CD and installed it, but well, it required a modem... Hopefully I remembered my cousin was talking about this device, when he was setting up a Dial-Up connection to play Duke Nukem online againt my other cousin (a real WTF at the time and, I still don't know from where he took all this knowledge haha)... So I found a great 13.4 Kbps modem in a box with old hardware pieces, cut some cables and it just worked! I still remember about using the internet at night to save money, losing the connection when someone was calling and the introduction of "download resumers" was awesome 😎
  • I still feel proud about my old codes, since I've created a binary parser (which was used by the MongoDB Driver, exactly here:, a big number library and other things in JS, some years before they were introduced to the language, it's cool when you get random (as I totally didn't need these things) ideas and make them work =]
  • Given that frontend has changed a lot these days, I don't have a specific preference to work in the backend/frontend anymore (it used to be the backend).
  • I took part into the contest where the creator of JQuery (John Resig) was starting to become popular haha (our entry is the number #2, John's entry is #3).
  • I've started reading about web stuff around 1997... It was the time when everybody was using AOL, chatting rooms (who knew how to write rainbow texts was considered a hacker haha), Yahoo Groups, SubSeven (o_O) and etc... I've got a 30-50 pages Word document and it was just enough to learn HTML/CSS. It was also talking about JavaScript, but I didn't grasp it at first (why do I need this crap?)... Errrrrr, not until I discovered it was used to create those cool mouse trails, blinking radios, etc. 😂
  • I've won a video game championship when I was a child (and others at my working place). The older guys (which lost for me by scores of 10x0), were praising me as a god 😂🏆
  • My first paid task was converting handwritten monographies to Word when I was around 13. I have nothing to complain, any amount of money is a treasure for a teenager haha.
  • My first programming language was JavaScript.
  • My favorite type of task is improving performance and diving into weird bugs.
  • My first home page is still accessible through the, but I'll never reveal its address! Some close friends must still remember about it 👀
  • I've got my first programming job around 2001, a kind of freelance job to work on the integration of a machine to test the cushioning system of cars using Object Pascal/Delphi (I didn't receive my last paycheck 😑). After that I've moved to another company which was building hardware to teach children, doing the same type of job... At a certain time, I've decided to join a university (which I just finished around 2014 with the introduction of remote courses)... There I was solving the exercises using minified codes in C, the teacher got interested in my skills and indicated me to work in a company which was developing mobile applications in C/C++. After that I've moved to a digital agency and I've been working with web related technology since then, mostly using C#, PHP and JavaScript.
  • I've been once a victim of a kind of social engineering attack... When I was 16, a friend of mine asked me to take a look on a game that he made and it had a hidden keylogger haha (that day I realized how ineffective antivirus were against unknown threats haha)... Hopefully he warned me later! These days I was looking for him in internet and looks like he became famous for earning prizes in online promotions, such as a CAR haha... I have a small guess about how he got the prizes 👀
  • I've been once a victim of a ransomware as well! Someone connected to my MySQL database years ago and renamed the databases to form a message asking for money (after that I've finally became a bit psycho with security) 💩
  • My favorite PC games were Euro Fighter 2000 (a flight simulator), Full Throttle, Indiana Jones, Quake, Duke Nukem and Warcraft, countless hours spent on them... The most revolutionary one was Carmageddon, my family was just shocked! Then it came a lot of trash games + the infinite Battlefield/Counter-Strike (I was the AK guy) seasons, which were then replaced by eternal (successful, but full of hatred against the game's AI) FIFA seasons, until I got retired from games 😂
  • I don't trust in the current state of crypto currency, but digital money is here to stay (I can't remember last time I've touched bills/coins)... Also descentralization in general sounds great given our failed leaderships.

First Open Source Projects

  • A source of manually minified JavaScript snippets written with a friend a long time ago, when I had plenty of spare time. It's kind of abandoned, but I'm still using some codes from there 💯.


  • Code editor written in Object Pascal that used Scintilla under the hood, it was also my first open-source project. I've contributed with a lot of code and ideas, such as the transition from procedural code to an object oriented approach. The plugins were written in JavaScript and the interface of the editor could be customized with CSS (AFAIC we were parsing the CSS and building the interface based on it). Looks like the idea was great, given the popularity that tools such as "Electron" got 😵

    Notes Editor

My GitHub Gists

Just small codes and notes which I thought wasn't worth to create a repository.

GitHub stats Top Langs



  1. codility codility Public

    My solutions to exercises and tests at

    C# 101 74

  2. notes notes Public

    A code editor with support for dozens of languages, syntax highlighting, JavaScript macros/plugins, personalized smart indenting, debugger, folder search, etc.

    Pascal 8 10

  3. chutes-and-ladders chutes-and-ladders Public

    My solution for the chutes/snakes and ladders problem. I've left a description with all my reasoning/approaches.

    JavaScript 1

  4. hackerrank hackerrank Public

    My solutions to exercises and tests at

    JavaScript 6 3

  5. leetcode leetcode Public

    My solutions to exercises and tests at

    JavaScript 3 4

  6. JSFromHell/JSFromHell JSFromHell/JSFromHell Public

    JavaScript functions from

    JavaScript 5 2

1,461 contributions in the last year

16 contributions on February 19th.No contributions on February 26th.10 contributions on March 5th.17 contributions on March 12th.No contributions on March 19th.3 contributions on March 26th.3 contributions on April 2nd.No contributions on April 9th.37 contributions on April 16th.1 contribution on April 23rd.18 contributions on April 30th.No contributions on May 7th.10 contributions on May 14th.15 contributions on May 21st.No contributions on May 28th.15 contributions on June 4th.No contributions on June 11th.No contributions on June 18th.No contributions on June 25th.No contributions on July 2nd.No contributions on July 9th.No contributions on July 16th.No contributions on July 23rd.No contributions on July 30th.No contributions on August 6th.1 contribution on August 13th.No contributions on August 20th.No contributions on August 27th.1 contribution on September 3rd.1 contribution on September 10th.1 contribution on September 17th.No contributions on September 24th.1 contribution on October 1st.No contributions on October 8th.No contributions on October 15th.4 contributions on October 22nd.No contributions on October 29th.2 contributions on November 5th.No contributions on November 12th.No contributions on November 19th.No contributions on November 26th.No contributions on December 3rd.1 contribution on December 10th.No contributions on December 17th.2 contributions on December 24th.No contributions on December 31st.1 contribution on January 7th.No contributions on January 14th.1 contribution on January 21st.No contributions on January 28th.1 contribution on February 4th.No contributions on February 11th.No contributions on February 18th.6 contributions on February 20th.4 contributions on February 27th.20 contributions on March 6th.10 contributions on March 13th.25 contributions on March 20th.1 contribution on March 27th.1 contribution on April 3rd.2 contributions on April 10th.8 contributions on April 17th.1 contribution on April 24th.15 contributions on May 1st.1 contribution on May 8th.3 contributions on May 15th.3 contributions on May 22nd.17 contributions on May 29th.No contributions on June 5th.3 contributions on June 12th.No contributions on June 19th.No contributions on June 26th.No contributions on July 3rd.1 contribution on July 10th.No contributions on July 17th.3 contributions on July 24th.No contributions on July 31st.No contributions on August 7th.1 contribution on August 14th.No contributions on August 21st.No contributions on August 28th.1 contribution on September 4th.1 contribution on September 11th.1 contribution on September 18th.No contributions on September 25th.2 contributions on October 2nd.No contributions on October 9th.2 contributions on October 16th.1 contribution on October 23rd.2 contributions on October 30th.No contributions on November 6th.1 contribution on November 13th.1 contribution on November 20th.11 contributions on November 27th.No contributions on December 4th.No contributions on December 11th.1 contribution on December 18th.1 contribution on December 25th.No contributions on January 1st.1 contribution on January 8th.1 contribution on January 15th.No contributions on January 22nd.1 contribution on January 29th.1 contribution on February 5th.No contributions on February 12th.No contributions on February 19th.11 contributions on February 21st.6 contributions on February 28th.23 contributions on March 7th.13 contributions on March 14th.45 contributions on March 21st.6 contributions on March 28th.No contributions on April 4th.12 contributions on April 11th.9 contributions on April 18th.1 contribution on April 25th.2 contributions on May 2nd.4 contributions on May 9th.25 contributions on May 16th.1 contribution on May 23rd.41 contributions on May 30th.7 contributions on June 6th.1 contribution on June 13th.No contributions on June 20th.1 contribution on June 27th.No contributions on July 4th.No contributions on July 11th.2 contributions on July 18th.No contributions on July 25th.No contributions on August 1st.3 contributions on August 8th.No contributions on August 15th.No contributions on August 22nd.No contributions on August 29th.1 contribution on September 5th.1 contribution on September 12th.1 contribution on September 19th.No contributions on September 26th.1 contribution on October 3rd.No contributions on October 10th.2 contributions on October 17th.7 contributions on October 24th.6 contributions on October 31st.No contributions on November 7th.No contributions on November 14th.1 contribution on November 21st.5 contributions on November 28th.No contributions on December 5th.8 contributions on December 12th.No contributions on December 19th.No contributions on December 26th.1 contribution on January 2nd.1 contribution on January 9th.No contributions on January 16th.1 contribution on January 23rd.8 contributions on January 30th.6 contributions on February 6th.1 contribution on February 13th.No contributions on February 20th.4 contributions on February 22nd.8 contributions on March 1st.31 contributions on March 8th.18 contributions on March 15th.13 contributions on March 22nd.3 contributions on March 29th.10 contributions on April 5th.8 contributions on April 12th.2 contributions on April 19th.2 contributions on April 26th.No contributions on May 3rd.15 contributions on May 10th.20 contributions on May 17th.11 contributions on May 24th.9 contributions on May 31st.6 contributions on June 7th.2 contributions on June 14th.No contributions on June 21st.4 contributions on June 28th.No contributions on July 5th.No contributions on July 12th.1 contribution on July 19th.No contributions on July 26th.No contributions on August 2nd.1 contribution on August 9th.1 contribution on August 16th.8 contributions on August 23rd.No contributions on August 30th.2 contributions on September 6th.3 contributions on September 13th.1 contribution on September 20th.No contributions on September 27th.1 contribution on October 4th.No contributions on October 11th.2 contributions on October 18th.No contributions on October 25th.1 contribution on November 1st.3 contributions on November 8th.1 contribution on November 15th.No contributions on November 22nd.4 contributions on November 29th.4 contributions on December 6th.22 contributions on December 13th.1 contribution on December 20th.1 contribution on December 27th.1 contribution on January 3rd.No contributions on January 10th.1 contribution on January 17th.3 contributions on January 24th.20 contributions on January 31st.1 contribution on February 7th.No contributions on February 14th.1 contribution on February 21st.5 contributions on February 23rd.1 contribution on March 2nd.24 contributions on March 9th.3 contributions on March 16th.5 contributions on March 23rd.4 contributions on March 30th.4 contributions on April 6th.11 contributions on April 13th.1 contribution on April 20th.3 contributions on April 27th.4 contributions on May 4th.12 contributions on May 11th.4 contributions on May 18th.10 contributions on May 25th.55 contributions on June 1st.No contributions on June 8th.3 contributions on June 15th.No contributions on June 22nd.No contributions on June 29th.No contributions on July 6th.No contributions on July 13th.No contributions on July 20th.1 contribution on July 27th.No contributions on August 3rd.6 contributions on August 10th.1 contribution on August 17th.No contributions on August 24th.No contributions on August 31st.4 contributions on September 7th.2 contributions on September 14th.1 contribution on September 21st.No contributions on September 28th.1 contribution on October 5th.No contributions on October 12th.5 contributions on October 19th.No contributions on October 26th.1 contribution on November 2nd.18 contributions on November 9th.No contributions on November 16th.No contributions on November 23rd.No contributions on November 30th.No contributions on December 7th.4 contributions on December 14th.1 contribution on December 21st.1 contribution on December 28th.1 contribution on January 4th.2 contributions on January 11th.1 contribution on January 18th.7 contributions on January 25th.5 contributions on February 1st.11 contributions on February 8th.1 contribution on February 15th.No contributions on February 22nd.No contributions on February 24th.9 contributions on March 3rd.18 contributions on March 10th.3 contributions on March 17th.13 contributions on March 24th.2 contributions on March 31st.2 contributions on April 7th.5 contributions on April 14th.1 contribution on April 21st.8 contributions on April 28th.No contributions on May 5th.20 contributions on May 12th.No contributions on May 19th.5 contributions on May 26th.23 contributions on June 2nd.7 contributions on June 9th.No contributions on June 16th.No contributions on June 23rd.1 contribution on June 30th.1 contribution on July 7th.3 contributions on July 14th.No contributions on July 21st.No contributions on July 28th.No contributions on August 4th.No contributions on August 11th.No contributions on August 18th.8 contributions on August 25th.No contributions on September 1st.1 contribution on September 8th.1 contribution on September 15th.1 contribution on September 22nd.No contributions on September 29th.5 contributions on October 6th.No contributions on October 13th.29 contributions on October 20th.No contributions on October 27th.No contributions on November 3rd.4 contributions on November 10th.2 contributions on November 17th.2 contributions on November 24th.No contributions on December 1st.1 contribution on December 8th.7 contributions on December 15th.No contributions on December 22nd.No contributions on December 29th.1 contribution on January 5th.No contributions on January 12th.3 contributions on January 19th.30 contributions on January 26th.17 contributions on February 2nd.No contributions on February 9th.No contributions on February 16th.1 contribution on February 25th.4 contributions on March 4th.23 contributions on March 11th.2 contributions on March 18th.45 contributions on March 25th.2 contributions on April 1st.No contributions on April 8th.12 contributions on April 15th.1 contribution on April 22nd.3 contributions on April 29th.No contributions on May 6th.31 contributions on May 13th.5 contributions on May 20th.6 contributions on May 27th.4 contributions on June 3rd.No contributions on June 10th.No contributions on June 17th.No contributions on June 24th.No contributions on July 1st.No contributions on July 8th.No contributions on July 15th.No contributions on July 22nd.No contributions on July 29th.No contributions on August 5th.1 contribution on August 12th.1 contribution on August 19th.No contributions on August 26th.No contributions on September 2nd.1 contribution on September 9th.1 contribution on September 16th.1 contribution on September 23rd.No contributions on September 30th.No contributions on October 7th.3 contributions on October 14th.No contributions on October 21st.No contributions on October 28th.5 contributions on November 4th.1 contribution on November 11th.No contributions on November 18th.1 contribution on November 25th.7 contributions on December 2nd.No contributions on December 9th.No contributions on December 16th.1 contribution on December 23rd.1 contribution on December 30th.No contributions on January 6th.1 contribution on January 13th.No contributions on January 20th.4 contributions on January 27th.5 contributions on February 3rd.2 contributions on February 10th.No contributions on February 17th.
Contribution Graph
Day of Week February March April May June July August September October November December January February
No contributions.
Low contributions.
Medium-low contributions.
Medium-high contributions.
High contributions.

Activity overview

Contributed to pkp/pkp-lib, pkp/ojs, pkp/omp and 46 other repositories
A graph representing jonasraoni's contributions from February 19, 2023 to February 22, 2024. The contributions are 58% commits, 23% pull requests, 11% issues, 8% code review.

Contribution activity

February 2024

Created a pull request in pkp/pkp-lib that received 2 comments

pkp/pkp-lib#9302 Disabled logging for the setlocale() failure to decr…

…ease noise

+1 −3 lines changed 2 comments
Opened 10 other pull requests in 3 repositories
pkp/pkp-lib 5 merged 2 open
pkp/ojs 2 closed
pkp/pkp-docs 1 merged
Reviewed 15 pull requests in 5 repositories
pkp/pkp-lib 6 pull requests
pkp/omp 3 pull requests
pkp/ui-library 2 pull requests
pkp/ops 2 pull requests
pkp/ojs 2 pull requests

Created an issue in pkp/pkp-lib that received 3 comments

The arguments for the jobs.php are not working

Describe the bug When calling php lib/pkp/tools/jobs.php, all arguments that have values are ignored and their default values are used instead. To …

Opened 8 other issues in 2 repositories
pkp/pkp-lib 5 open 2 closed
pkp/bootstrap3 1 closed

Seeing something unexpected? Take a look at the GitHub profile guide.