My Chance Encounter with Asciio and Its Founder
My Chance Encounter with Asciio and Its Founder
The positioning of this article
This article does not talk about the use and installation tutorial of Asciio software, nor does it talk about its complete features. It mainly talks about chance encounter with its founder Nadim.
Find the right software
First of all, let me introduce myself. I am a Chinese software developer from Sichuan Province, China. I have been developing some low-level testing tools and scripts in a company in Chengdu, mainly to test whether the company’s hardware products are faulty before shipment. It will involve the development of some underlying hardware drivers and tools, as well as the development of some Bash scripts under Linux. The main purpose of the script is to call the interfaces provided by these tools or drivers, and then use it to test whether the hardware link is normal, whether the hardware performance is up to standard, whether the indicator light can light up normally, etc.
During the development process, sometimes the architecture design of tools or drivers requires drawing simple flow charts. At this time, if I use software like Visio or Draw.io, I feel it is too cumbersome, because the things I want to draw are not that complicated. I think if I can directly use ASCII characters, or Unicode tab characters to draw directly in the document of the code, or in the comments of the code, then the maintenance cost and convenience will be greatly improved.
So I started looking for similar text drawing software all over the world. The following is my search journey. That was probably the second half of 2023, not long before the Chinese New Year that year.
monodraw: This software seemed to meet my requirements, but it only supported Apple computer systems, so I eliminated it.- asciiflow: To be honest, this online text flow charts editor is really difficult to use and I have eliminated it.
- monosketch: An online text drawing tool developed by a Japanese guy, but the style and ease of operation still cannot meet my requirements. Later, I invited him to develop the
WEBversion ofAsciio, but he declined politely.
In addition to the above three tools, I also looked for other tools, but none of them met my needs. I am a Gvim user myself. Although I don’t use the terminal’s Vim, I still hope that the tool can adapt to the characteristics of text. At this time I found Asciio.
When I first discovered it, it only had a Gtk2 port, but that was enough for me. Because my operating system is Windows, it is not convenient to use Gtk2 software directly. I found camelbox online. A complete package containing Gtk2 that can be used directly on windows. The most important thing is that it actually has built-in asciio software!
First impression of Asciio
When I installed camelbox and then entered the software to start drawing. I felt shocked! Because this text drawing software actually supports automatic routing of lines, which I have never seen in other text drawing software. Other software can at best draw lines or boxes with the mouse or keyboard, but the size and path cannot be adjusted after drawing! If you want to modify it, you can only delete it and redraw it.
But asciio is different. You can draw in the same way as Draw.io. You can resize and reroute the boxes and lines on the canvas!
My first development
Although this software is easy to use, I found something that made me uncomfortable. Its default canvas is too small! To achieve a large canvas, the only way is scaling. So I came up with the idea of adding a scroll bar to it, and I hoped to make the default canvas setting larger.
Then I emailed the original author Nadim. Unexpectedly, I got an email reply from him. According to him, adding this function is very simple, and the code may not exceed 20 lines. I had never touched Perl code before and had no idea what 20 lines of Perl code meant. However, I took a cursory look at the source code and found that this is a very flexible and extremely refined language!
After a few days, I saw no progress in Nadim, so I decided to try to modify the source code myself!
Don’t lol, at that time, our company’s main version control tools was the SVN, and Git was not widely used. So I made a lot of jokes in the early stages of development.
Then I submitted a patch that supports the scroll bar function. The logic is basically correct, but the code quality is very poor, and repeated functions are placed in many source files. Later Nadim said that he accepted my ideas but not my codes because they were too bad! Haha, I completely understood him. Later, I modified the code according to his opinions, and then asked him to help me integrate it.
GTK3 port porting
Since the current asciio is in the Gtk2 port, if you want to revive this software that has been in the dust for 15 to 20 years, then porting to the Gtk3 port may be a good idea, and because Nadim his own build environment does not support the Gtk2 port. So he decided to port the software to the Gtk3 port.
This is certainly good news for me. I’m so happy. I’m waiting for Nadim to have a working version out so I can start testing.
Later Nadim told me that if I had not been interested, the software might not have been upgraded, because he was tinkering with his HyperTerminal file manager at that time: ftl. This is another artifact, although I have not used it. But all the work of Nadim is basically done in the terminal, and this software is his tool for managing files in the terminal.
I am very grateful to Nadim for helping me develop the Gtk3 version of Asciio that I have been waiting for.
Since the code structure of Asciio is very beautiful, just right in abstraction, but there is no transitional design, functional programming is where functional programming is, and object-oriented programming is when it is object-oriented, as well as strategy mode, template mode, etc. So because of Nadim’s good code design, it became easier for me to understand Asciio’s code, which was very different from the bad spaghetti code I had seen before!
Then while waiting for Nadim to port the Gtk3 port, I also imitated the template in this code and developed several elements, including: rhombus and ellipse.
Here I want to talk about this ellipse in particular. I found a paper about implementing pixel-level ellipse, and then translated the algorithm in the paper into Perl code, which then became the ellipse element of Asciio. I think this is so cool! Asciio is a very good platform for validating algorithms and ideas! And it’s very intuitive and efficient.
TUI support
After the port of Gtk3 was completed, Nadim did what he always wanted to do and added a TUI port to Asciio, which can draw directly in the terminal, which is really cool. But I am not using the terminal workflow, so I have not used the TUI client.
Unicode support
During the porting of the Gtk3 port, the development efficiency of Nadim was quite high, with thousands of lines of code submitted almost every day! I was blown away by his productivity. It didn’t take long for the Gtk3 port to be ported.
But I’m facing a problem. I am using a windows system, so it is quite difficult to use Perl to develop Gtk3 applications. Either use WSL or Cygwin. However, these problems were later solved together by us. In the complete solution, it was not only Linux Cygwin Msys2, but we even solved the container version later! So now software is very easy to use and distribute.
While waiting for Nadim to be ported to Gtk3, it happened to be the Chinese New Year, and I was at my wife’s hometown. Since I don’t like playing mahjong and some rural entertainment activities, I have some independent time. So I also tried to add some elements to Asciio, and even added some Unicode elements.
After Perl turns on use utf8;, it can support Unicode, so the things supported by the software begin to become richer.
Super big patch integration
The most frustrating thing I did to Nadim was committing three very large patches to him, each time with more than 3,000 lines of code! Of course this is wrong. I will never do this kind of thing again. Integration of large patches is painful. I was in pain, and he was in even more pain.
It is best to have complete documentation and discussion before committing the code. On the basis of both parties fully recognizing and understanding the plan, submit feature by feature and complete it in an orderly manner. Never engage in big patch integration!
CJK integration
Because I am Chinese myself, and I hope to have the opportunity to introduce this tool to Chinese programmers in the future. Many Chinese programmers like to add Chinese characters to their comments. Although this behavior seems not international enough, in the Chinese environment, Chinese comments are the most efficient for communication.
To satisfy myself and this group of developers, I ended up implementing Chinese, Japanese, and Korean language support in Asciio. Later, we even wanted to support Arabic language, Thai language, etc., but this is another story, because Arabic language support is hellishly difficult, and there is no perfect solution yet!
Cross mode and special fonts
Probably the most original thing I brought to Asciio is this one, I almost went crazy with it, I even customized my own font for cross-mode: vimiomono!
8-way crossover is implemented in this font! The 8-way character is expanded directly in the PUA area of Unicode, allowing you to create plain text charts comparable to svg. And I customized three themes, the normal version, the version with solid dots, and the version with hollow dots.



This special font crossing mode is not yet implemented in Asciio. The crossing mode currently implemented in Asciio is based on the normal tab crossing mode of most existing monospaced fonts. But it has been perfectly implemented on the simplified version of the drawing plug-in vimio based on Vim that I developed. As for whether to move it completely to Asciio. I’ll decide after discussing it with Nadim later.
The inspiration for this font is not mine. I borrowed the idea of an Italian font designer. His font was paid for: pragmatapro. This font is not cheap, it costs almost 20 euros! There is a font preview of it on github.
https://github.com/fabrizioschiavi/pragmatapro
Here’s what it looks like using my custom font:

A text version of the image above is also available on the home page of my blog.
Regarding this original intersection algorithm of mine, I once thought about whether I should write a paper in an international journal so that this algorithm can benefit the rendering of TUI tools in the future. I even thought about joining up with Nadim and the authors of pragmatapro to submit a proposal to the Unicode committee to add these 8-way cross characters to the basic Unicode character area! I know the consequences of this matter will be quite big, so I haven’t taken any action yet.
working method
Nadim’s work is basically done under the terminal, and its efficiency is quite high. I’ve also wanted to try it. But since I have already tuned my Gvim, I don’t want to easily overturn what I am already familiar with. So for now I keep my Gvim workflow. So far,the efficiency is pretty good, and I don’t plan to replace it yet. As for whether I will switch to terminal workflow mode in the future, I will talk about it in the future.
Performance optimization
Originally, Asciio was developed as a small tool for drawing text flow charts, and it was never used for large text charts. I made suggestions to Nadim whether to consider optimizing performance.
At first Nadim thought it was unnecessary and thought that I was forced to approach the limits of the software, which does not exist in most actual scenarios. But due to my stubbornness, Nadim compromised and he started performance optimization. Mainly in the form of drawing cache. I verified later that the performance has indeed improved a lot.
Maybe I’m the only one in the world who has reached the limits of this software.
Later, I also made some performance optimizations for this software. For example, only the view window area is drawn, and the contents of the view window area are not directly filtered and cropped. Most proposals Nadim are accepted. But he has a principle that performance optimization must not conflict with the cleanliness of the architecture. If it conflicts, then other approaches should be considered for performance optimization. Roughly speaking, performance optimization is a long-term process, and there are many ways to do it. We cannot sacrifice the clean architecture and maintainability of the software because of performance optimization. This is not worth the gain! I very much agree with his concept.
PPT engineers and workplace anxiety
During the time when I was working with Asciio software and Nadim to perfect it, I faced the biggest crisis in my career. I have worked for this company for over 10 years, but the company decided not to renew my contract and I don’t know what I did wrong. This is also related to age. In addition to retaining older managers and top architects, most companies will generally get rid of other R&D personnel, and I am also one of them because I am 38 years old!
Maybe my only mistake is that I have been immersed in my work and writing my code, and my PPT is not written well. I am not good at reporting my achievements to my leaders. There is no way to compare with the kind of engineer who can’t write a line of code, but can make very beautiful PPT! Nadim said that there are many such people all over the world. Their abilities are low and they cannot complete any work independently. They can only rely on bragging and writing reporting documents to cover up their ignorance and panic!
Later I gave up the fight. Since I couldn’t change the outcome, I accepted it. Get ready for my next job. I will never become a pure PPT engineer! However, I do have room for improvement when it comes to communicating with people or dealing with others. I will keep my strengths and make up for my shortcomings in the next company!
Documentation
Since Asciio was very feature-rich in the later period, Nadim and I worked together to add a lot of functions to it. There were so many keyboard shortcuts that even we ourselves could not remember them all. It is unrealistic to expect a user to understand the usage of the software by looking at the binding code.
So we spent a lot of time in the later period to improve its user documentation and add usage example videos for various operations.
Driving license and other important things in life
Due to my workplace crisis, I stopped developing with Nadim half a year ago. When he saw that I had stopped, he stopped too, because the project had no deadline, and we might start it again one day.
The main thing is that I still need to deal with my livelihood issues later on. It took me several months to finally get my driver’s license some time ago, and I was very happy because this is something I have always wanted to do. I have a car, but my wife drives it and owns it. Now I’m finally qualified to drive it.
I have been planning this blog for a long time, but I have never started it because there are too many things I want to write. Every time I prepare to write, a lot of content floods into my head, and I don’t know what to write first. This time the writing was also very messy, mostly filled with random comments.
I should write another article about Asciio’s god-level features and some usage scenarios. If anyone is willing to read it, I will do it.
Sweden and China
Currently Nadim is in Sweden and I am in Chengdu. If I go to Sweden one day, I will definitely go and meet my old friends. I also told him that if he comes to Chengdu, remember to find me. I will take him to go hiking and eat Sichuan cuisine.
About AI
Nadim and I also use AI to work, but in most cases we just treat it as an ordinary tool, not as impetuous as the current technology circle.
Especially in the old company where I am now, AI has gone crazy. All work bosses require that AI be used to complete it. Not using AI is a political mistake! It’s really outrageous! Write a few lines of simple code and your leaders will also hope that you wrote it using AI!
No matter what the project is, they try to move closer to the direction of AI. The world is crazy.
I admit that AI is indeed very useful. For example, in translation scenarios, AI now translates entire PDF documents very accurately. But there’s no need to have it everywhere. Especially in places where humans are required to make rigorous decisions, I think it is better for humans to make decisions. After all, AI will not be responsible for the results!
Asciio’s WEBization
This is our beautiful vision, but the workload is still too much and the project has not been started yet. I once wanted to bring in a Japanese guy who was proficient in web development, but he refused.
Both teacher and friend
During the development process, Nadim was both a friend and a teacher to me, and his requirements for high-quality code were something I had never encountered before. Because in my company, the code is often written and no one cares about it. As long as it can run and the tests can pass, in most cases, people don’t care whether its structure is reasonable and whether it is easy to expand in the future!
In the process of developing Asciio, I wrote a lot of bad code, but Nadim spent a lot of effort to correct my mistakes, let me develop good development habits, and even taught me some Git operations. I’m very grateful to him. He said that good code is designed with documentation first and then code. You must think clearly about what you are going to develop, discuss the architecture clearly, and then start writing code. Code is just a by-product of good design and is not something extraordinary.
Also, newly developed functions should be separated into new files and new modules as much as possible, and no destructive patch-like upgrades should be made to old code. Because that will cause the original files to become more and more bloated and difficult to maintain! And the original author may not understand what he wrote before.
We also have one thing in common. We both have a daughter. His daughter has been working for a long time, but my daughter is only 9 years old, so I still have to compromise with the world and use my skills to earn a little money to raise my daughter.
Nadim said that besides coding, his hobbies are sailing and mechanics, which is really cool. I have always had a dream of the ocean, but it is a pity that Sichuan is an inland province in China. Probably my biggest hobbies are mountain climbing and eating deliciousfood. I told Nadim that although my wife has a bad temper, She is very good at cooking Sichuan cuisine. If Nadim has the opportunity to come to my house, I will let her cook it for him.
end
In fact, there is a lot more I want to say, and I will add more when I think of it later. Like Asciio’s user-friendly configuration, customizable templates, and more!
There are a lot of big plans in the Issues of the project. There is even a function to link with other code debuggers, and then render the pointer graph or object graph in the debugger directly to the ASCII canvas of Asciio! Maybe these grand plans will come true one day?
But putting them aside, Asciio itself is very complete and full-featured. I may write another blog later to specifically introduce its functions and features.
So this blog is mainly my long-winded chatter and thoughts.
✍️ Author of this article:秦大炮 (Qindapao)
Technical exchanges and reprints are welcome. Please indicate the source when reprinting and retain the following hard-core contact information.
- 🔗 Independent blog: qindapao.com
- 💻 GitHub: github.com/qindapao
- 📧 Email: nothisland2017@gmail.com