00:00:00.120
Hello everyone, welcome to Kokura, Japan.
00:00:13.860
My GitHub account is LycAppa. I am a documentation maintainer and a member of the Ruby core team.
00:00:19.619
Yesterday, we discussed the new features in Ruby 2.7. It was an intense session, and I am quite tired.
00:00:34.190
This process took place just after the keynote session. Yes, I was at home yesterday, but today I am here.
00:00:45.329
The green area you see is Kyushu on the map of Japan. I was born in Nagasaki, which is situated in the same cultural area as Kokura.
00:01:10.040
For example, both areas are famous for their tonkotsu ramen. About 20 years ago, I worked in a tonkotsu ramen shop.
00:01:26.460
I was a chef back then, and I remember Mont Blanc ice cream, which is a famous dessert in Kyushu.
00:01:35.880
This ice cream is loved by people, as it is covered in black chocolate with crunchy chips, providing a perfect balance of flavor.
00:01:48.090
Almost every convenience store in Kyushu sells Mont Blanc ice cream.
00:01:53.909
It is a product of Takeshita Sake, which has many other ice cream products, including Miracle Miracle, made with rich milk.
00:02:06.970
These ice creams are very tasty, so if you get the chance, please try them.
00:02:14.650
I'm a member of a society where we hold Ruby events in Tokyo every Tuesday. I attend all six Ruby events each week and mini speakers talk.
00:02:24.400
I'm currently working at Space Pilots and Pirates as an Elastic Search specialist, which is quite a complex field.
00:02:38.920
I engage in climbing as a hobby and often climb when attending Ruby conferences.
00:02:46.870
For instance, I climbed in Malaysia and Taiwan.
00:02:59.540
However, I recently injured my wrist during training and couldn't climb before this RubyKaigi.
00:03:06.230
Last weekend, I went camping and had a great experience.
00:03:13.700
I am using a prosthetic finger for climbing, which is very helpful.
00:03:22.240
Despite my injury, I am recovering and able to climb again.
00:03:32.920
This type of wrist injury can be quite challenging and impacts my daily activities.
00:03:47.830
I'm still working through the recovery process.
00:04:00.490
Moving to typing is still difficult for me, as it creates discomfort.
00:04:13.170
As a programmer, this injury affects how I interact with the keyboard.
00:04:21.700
Therefore, I had to consider what tools would work best for me.
00:04:29.920
Today, I will discuss terminal editors for the Ruby core toolchain, including my tips for overcoming my injury.
00:04:43.310
One major issue is the installation of new Gridline; it does not include readline.
00:04:54.180
New Gridline is a line editor software that is supposed to be very convenient.
00:05:06.210
If Ruby is built without installing a library that includes readline, it results in a frustrating experience for beginners.
00:05:13.690
Only basic input functions are available, leading to challenges in terminal navigation.
00:05:25.160
This situation can be quite depressing for new users.
00:05:34.900
I spend a lot of time writing Ruby code, but the syntax can be quite complex and is often not intuitive for those new to programming.
00:05:45.750
Ruby syntax is designed for users, but it can be difficult to navigate for beginners.
00:05:54.820
I want to help users like me who need a more effective way to rebuild the Ruby environment.
00:06:06.440
That's why I developed Reline, a readline-compatible library written in pure Ruby.
00:06:19.360
Initially, I planned to explain terminal technologies in this session.
00:06:30.760
However, I decided to focus on more foundational aspects of text editors.
00:06:41.190
Tomorrow, there will be a session discussing terminal techniques.
00:06:49.560
I developed Reline which is also a readline-compatible library aimed at providing more efficient terminal interactions.
00:07:01.090
My goal is to quickly finalize development to deliver many features.
00:07:08.250
The next priority is supporting Windows through Win32 API.
00:07:19.150
This approach will ensure better compatibility for Windows command prompt users.
00:07:28.440
Additionally, I will be exploring how to effectively handle ANSI escape codes across different command line interfaces.
00:07:39.040
ANSI escape codes allow for control over cursor location, color, and other terminal functionalities.
00:07:55.580
Many years ago, there were numerous terminal types with no standardization; ANSI escape codes now serve as a unified standard.
00:08:07.500
For instance, I can show you Ruby's output colors using specific ANSI codes.
00:08:19.950
This allows for color-coded text outputs, enhancing visibility and usability.
00:08:36.470
Moreover, some ANSI escape sequences can perform specific formatting tasks.
00:08:44.780
It's essential to be aware that certain sequences are still limited for specific applications.
00:08:56.760
For example, in console output, lengthy lines may lead to delays in display if not handled properly.
00:09:12.310
So terminal software needs to efficiently manage how text is presented.
00:09:21.900
Let’s move on to Win32 API for Windows. This API enables calling functions from dynamic libraries.
00:09:42.630
I find it crucial to use these native functions for achieving compatibility with Windows terminals.
00:09:54.650
Utilizing Win32 API helps to manage console output and operations like cursor positioning.
00:10:07.250
It was a challenge, but the process was rewarding.
00:10:16.410
I often find myself programming in various locations, from my desk to public transport.
00:10:36.230
No matter where I am, I prioritize being productive.
00:10:47.870
Despite a few issues with Unicode character representation, I remain focused on delivering solid improvements.
00:11:02.340
During conferences, I noticed the complexity of character representation can often confuse discussions.
00:11:17.360
Some Unicode characters change depending on the specific terminal settings.
00:11:30.150
This means you may encounter unexpected behaviors across different systems.
00:11:37.750
Let me share an example: I often showcase an unpredictable character that varies by terminal type.
00:11:47.400
This duality showcases how terminal settings alter character representation.
00:11:54.690
Such discrepancies can result in ambiguity in character alignment and spacing.
00:12:04.980
For instance, terminal emulations can differ based on software and their configurations.
00:12:13.560
It's important to maintain consistency when organizing cursor positions and outputs.
00:12:23.230
The integrity of Unicode handling is a core part of my work.
00:12:32.050
Returning to the subject of escape sequences, they need to be managed correctly for accurate rendering.
00:12:43.380
Next, understanding the Win32 API's role in terminal management is crucial.
00:12:53.270
The API offers efficient management for console inputs and outputs.
00:13:06.720
My experiences in terminal programming have led to some unique design choices.
00:13:21.700
For example, I utilize specific API calls for streamlined operations.
00:13:32.900
The API design incorporates fast response times for command operations.
00:13:42.130
These functions make handling console operations more efficient.
00:13:57.250
Despite the complexities of managing a diverse coding environment, I feel accomplished.
00:14:09.340
I can pivot on my projects, tackling unexpected challenges as they arise.
00:14:21.660
Let’s express outputs for clarity using ANSI standards.
00:14:32.820
For example, we use colors to separate different types of outputs distinctly.
00:14:42.420
Next, I will show how we can implement progress indicator sequences for terminal commands.
00:14:54.760
Using the proper escape sequences allows us to create dynamic displays during processing.
00:15:09.180
While testing realign features, I demonstrated some essential code samples.
00:15:22.410
These tests helped illuminate the importance of efficiency in handling character trees.
00:15:34.870
We have to remain agile in implementing features while keeping track of performance.
00:15:49.920
I continually aim for enhanced usability and clarity in my terminal editor.
00:16:04.280
This is particularly critical when considering a multi-user environment.
00:16:16.780
We want to offer each user an excellent, consistent experience.
00:16:29.140
There’s also a history of discussing using these editors for multilanguage support.
00:16:42.440
Now, I’ll transition to describe Redline, a markdown editor which streamlines Ruby development.
00:16:56.030
Redline is designed for new IRB by Keiji-san, who is considered Ruby's grandfather.
00:17:09.470
It functions like a multiline editor, similar to a JavaScript console found in browsers.
00:17:23.780
Despite facing many technical challenges, I have worked diligently to resolve many of them.
00:17:36.540
I aim to enhance the usability of Redline and improve its features.
00:17:50.980
Just yesterday, I finalized numerous updates, especially regarding the handling of neck and shoulder strain.
00:18:04.320
This is particularly important for those who spend long hours coding.
00:18:14.180
Moving on, Ruby is a fantastic language for developing a text editor.
00:18:27.180
Three editors play an essential part in my development process: Sugar, Mine, and Redline.
00:18:41.350
I actively maintain these editors and continually seek to enhance their performance.
00:18:53.620
For instance, I added a new feature to display documents after compilation.
00:19:07.780
Now, let’s move to the demonstration of the various features we discussed.
00:19:21.720
This is the demo of the IRB version of Ruby.
00:19:31.470
This version is 2.7.0. As we begin, let’s try a simple command.
00:19:41.880
For example, I can press tab to auto-complete names in our current scope.
00:19:51.320
This functionality enhances the interactive coding experience.
00:20:00.000
When I press the tab key again, it expands the suggestions further.
00:20:12.160
Thank you for your attention.
00:20:20.850
This feels amusing for me!
00:20:32.120
Yesterday, I pressed the documentation key hundreds of times.
00:20:39.060
It was hectic but rewarding.
00:20:48.200
Now, I’ll demonstrate how to implement a multi-line editor.
00:20:57.560
By defining functions like 'def' in Ruby, we can build multi-line structures.
00:21:06.680
For example, I can assign variables and execute blocks.
00:21:14.080
This closely resembles features in JavaScript.
00:21:20.200
Mistakes are inevitable, but that’s all part of the learning process.
00:21:30.500
Lastly, interactive Ruby’s version can evaluate all source code.
00:21:41.360
It functions similarly to defining methods in conventional programming.
00:21:52.560
Continuing to develop this editing system is a rewarding challenge.
00:22:06.680
As my journey continues, I am committed to enhancing usability as well.
00:22:18.820
We anticipate the new version of Ruby to include impressive updates.
00:22:32.640
I always seek to improve and adapt.
00:22:42.720
If you have any questions following this session, feel free to come to me.
00:22:53.820
Thank you!