Console #86 -- Sonic, Faiss, and Neko
An Interview with m1k1o and nurdism of Neko
If you, or someone you know, is interested in sponsoring the newsletter, please reach out at firstname.lastname@example.org
Not subscribed to Console? Subscribe now to get a list of new open-source projects curated by an Amazon engineer in your email every week.
Already subscribed? Why not spread the word by forwarding Console to the best engineer you know?
Faiss is a library for efficient similarity search and clustering of dense vectors open sourced by Facebook.
language: C++, stars: 15839, watchers: 445, forks: 2461, issues: 244
last commit: December 16, 2021 , first commit: February 22, 2017
Sonic is a blazingly fast JSON serializing & deserializing library open-sourced by Byte Dance.
language: Assembly/Go, stars: 1795, watchers: 27, forks: 60, issues: 3
last commit: December 31, 2021, first commit: May 25, 2021
neko is a self hosted virtual browser that runs in docker and uses WebRTC.
language: Go, stars: 1366, watchers: 21, forks: 86, issues: 18
last commit: December 13, 2021, first commit: January 13, 2020
Want to make more money for your work? Let us find you a new, higher-paying job for free! We’ve already landed 2 Console readers direct first-round interviews. Sign up for The Console Career Service today! The benefits of signing up include:
Automatic first-round interviews
One application, many jobs (1:N matching)
Free candidate preparation service
New opportunities updated regularly
All roles, from PM to SWE to BizOps
High potential, venture-backed, and open-source opportunities
Even if you’re not actively looking, why not let us see what’s out there for you?
Sign up for free in less than 5 minutes👇
Hey guys! Thanks for joining us! Let’s start with your backgrounds. Where have you worked in the past, where are you from, how did you learn to program, and what languages or frameworks do you like?
m1k1o - I come from a smaller town located in Slovakia. Computers fascinated me ever since I was a child, so I started to dig into web pages. I wanted to understand how they work, so I started as a self-taught programmer, initially as a web developer in PHP. In recent years, I went through many programming languages, but I liked Go and Typescript the most. I recently finished a Master’s Degree in Cybersecurity, and currently I am working as a video streaming engineer for a telecom company in Austria.
nurdism - I am from the US. I’ve always been a huge computer nerd from the day I could speak. My father ran a repair shop in the early 2000s and I would hang out there and play and fix computers. I am a self taught programmer. I dropped out of high school and started with php and vb.net, from there I just hit the ground running and learned whatever I could. In recent days, I’ve been working with Typescript, C# and Go. Rust is my next adventure. I currently work as a sysadmin for a marketing company and I am the CTO for a startup called closem.
Who or what are your biggest influences as a developer?
What's an opinion you have that most people don't agree with?
m1k1o - I don’t know if most people don’t agree with this, but there is no bad programming language, only bad programmers. Every programming language has its own purpose, use case where it fits the best. We cannot blame the programming language if we use it in an environment that it was not suited for.
If I gave you $10 million to invest in one thing right now, where would you put it?
m1k1o - I would invest into co-browsing, allowing real time collaboration in a virtual environment. Lots of the people are not tech-savvy and don't have the skills or time to host n.eko themselves, but they would like to use it. Instances could be shared among many participants, something like Zoom 2.0 where everyone can control the virtual screen. Or, just use it privately as a safe way to browse the internet without exposing any of your data, something like SSH with X forwarding but using WebRTC in a browser with audio.
nurdism - I would invest it in making my dream game. A game to be moddable, similar to roblox, s&box, and garry's mod. These types of games are what got me into programming and I’d love to make my own platform to get people interested in learning and creating games and get into programming.
What are you currently learning?
m1k1o - Trying to learn Rust and getting more familiar with Kubernetes and Helm, learning from my colleagues at work or from existing projects .
nurdism - I am also learning Rust and Kubernetes. For Rust, I’m learning a lot via the rust land website. I’m a big “learn by example” guy. I like getting my hands dirty and just jumping in. I have learned most of the languages via this method. And with Kubernetes, I bought a small cluster on DigitalOcean and I’ve just been messing with it and reading through the Kubernetes docs and deploying random things on the cluster.
What have you been listening to lately?
m1k1o - Darknet Diaries. It is the only podcast that I listen to. I would recommend it to everyone.
nurdism - Morbid: A True Crime Podcast, I love listening to stories while I work.
How do you separate good project ideas from bad ones?
m1k1o - It is hard to tell. That is why I need to try it at least with a prototype and see how it performs, check the usability, see if it solves the problem or not and eventually get some feedback from the users. Using this approach, I started so many projects and left them unfinished, I don't even want to count them. Some of them stayed until today (like on-demand video transcoding or simple private Blog in php), and I think they have proven themselves as good ideas.
What’s the funniest GitHub issue you’ve received?
m1k1o - People basically just give me their wish list of features along with a question on how to remove all links to my GitHub profile and copyrights. It is open-source, anyone can take the code and modify it. It's just funny, that people expect me to help them out with removing my copyright text on the project, that they even got for free, and will probably pretend that they didn’t.
Why was n.eko started?
nurdism - Rabb.it a simular piece of software went under after some failed VC funding. I really enjoyed using that with friends, Discord just started having the screen sharing feature and it was really buggy. I started to look for alternatives. Most of them were incomplete so I decided to create my own.
Where did the name for n.eko come from?
m1k1o - nurdism and I like cats. Neko is the Japanese word for cat. But why is in the logo a dot being a cat butt? Because cats are assholes, but you love them anyway.
Who, or what was the biggest inspiration for n.eko?
nurdism - Other incomplete projects I found on github. Turtus was probably the project that helped me the most in where to start looking. After finding pion I decided to do the backend in Go, the examples provided were amazing and a lot of the backend code was made possible because of the great documentation and examples. The first version I put together was literally cobbled together in a few minutes with example code and I was able to get a decent stream going.
What is the most challenging problem that’s been solved in n.eko, so far (code links to any particularly interesting sections are welcomed)?
m1k1o - This one took a while, and I think it was the most challenging problem. This problem faced all major screen sharing projects using Xorg, so we went through it as well: Bad key map for < #4
When trying to write (<) less-than sign on a US keyboard (the key next to M letter with shift active) it has written (>) greater-than sign. The rest of the keys were correctly written, even on lots of different keyboard layouts that we tested. It was only this one key that went off. There was no error or any relevant log message, everything worked fine, and all additional messages from the program reported that we just pressed greater-than sign.
Because we actually did. There is one more key on the virtual keyboard that we used, that had both of the signs on it. Only while pressing Shift it produces greater-than sign, otherwise less-than sign. Our function successfully found a key that contained less-than and pressed it. But it was the "other" key, and since we had the shift key active, it produced a greater-than sign. We needed to update the function to consider state modifiers (such as shifts) while searching for a key.
nurdism - For me the biggest issue was WebRTC. I wanted this to run in the browser and I wanted it to be very low latency, but I didn’t want to learn c/c++. The tech is still fairly new and not a lot of libraries out there for it. I tried using node at first but the libs were not very useful and didn’t work very well. A lot of audio and video issues with desync and bad quality. Pion was one of the only libs that ticked all the boxes.
Are there any competitors or projects similar to n.eko? If so, what were they lacking that made you consider building something new?
m1k1o - There are well known projects such as noVNC, Apache Guacamole or TigerVNC. But they don't support audio out of the box, and the video quality is not enough for watching videos. That is why n.eko uses WebRTC, and watching videos feels as if they were played directly in your browser.
What is your typical approach to debugging issues filed in the n.eko repo?
m1k1o - Check your firewall. Check your network. 95% of the time it is the network, since current WebRTC implementation needs a pool of UDP ports.
Is n.eko intended to eventually be monetized if it isn’t monetized already?
m1k1o - n.eko itself is free, and I want to keep it free. I know about several companies and people using n.eko commercially, sometimes they need help or sponsor an issue in the project. I can imagine offering neko-rooms as a service for enterprise customers or individuals.
nurdism - There are a few similar services out there that are monetized and some inspiration came from these services, but I think a service like this doesn't have much potential in the market due the legal grey areas of monetizing screen sharing comes with, the cost of hardware/bandwidth needed to support an application like this, and not to mention the constant moderation needed to keep the community safe. Open source and self-hosted is the best way for something like this to survive imo.
Do you think any of your projects do more harm than good?
m1k1o - It is up to people and their responsibility how they use it, what content they watch in their virtual browser and how they secure their instance. Only if it would be hosted on some public instance, the content would need to be moderated somehow, not making the same mistake as rabb.it did.
nurdism - It brings people together to watch something they all enjoy. I think, especially in this current pandemic we got going on, having some software like this does some good to feel in touch with your friends and family, especially where you can’t see them directly.
What is the best way for a new developer to contribute to n.eko?
m1k1o - There is an easy way to build and start the project, so that everyone can change what they need and see it immediately in action. So that new developer does not need to figure out how to build the project and how to run it, instead they can focus on adding new features or helping with the existing issues. Sometimes the smallest change makes the greatest impact. For example, this pull request changed only three bits and solved an issue that has been bugging us for months. Just changing one character 0 to E enabled us to watch H264 pipeline on Firefox.
If you plan to continue developing n.eko, where do you see the project heading next?
m1k1o - I would like to see n.eko as a fully fledged replacement for remote desktop connection, such as xrdp. It can do so much more than just hosting a virtual browser in a container. As a simple embeddable video player that plays the content of a remote screen but allows moving control and taking over the keyboard too.
What motivates you to continue contributing to n.eko?
m1k1o - Watching videos together with friends and family remotely, while implementing all the features that would make our experience even more enjoyable. Also, the positive feedback from the community using n.eko, when I hear that people like the idea of browsing the internet together.
Are there any other projects besides n.eko that you’re working on?
m1k1o - Trying to create my own streaming platform using open-source technologies. It started as just a simple transcoding on demand, hence the name go-transcode. But it is slowly growing to a small self-hosted streaming platform for a smaller audience.
nurdism - I am working on a rewrite of neko in rust, waiting on a few supporting libs to be developed and I have nothing public yet, but it’s in the works. It'll be a new project separate from neko’s codebase but very inspired by neko. This rewrite I would like to be multi platform and not dependent on any other software, it will be plug and play.
Do you have any other project ideas that you haven’t started?
m1k1o - I want to create a live TV streaming front-end that provides a uniform, simple, and friendly user interface for everyone when browsing vendor-independent OTT live TV streaming services named 4tv (GUI for TV). But the day has only 24 hours, and I was not able to find enough time for this project to start.