Emacs Chat: Jānis Mancēvičs - Org and literate programming

Source

Chatting with Jānis Mancēvičs about literate programming, Unity game development, and code folding.

Audio and Video

Want just the audio? Get it from archive.org: MP3

Transcript

Sacha Chua: Okay. Hi and thanks. Janis, is that how you pronounce your name?

Janis Mancevics: Actually, the funny thing is that your previous Emacs chat was with Iannis. Actually, it's written in English Janis but it is “Iannis.” I'm all the same [inaudible 0:00:23] person.

Sacha: That works. Thanks for taking time to chat with me today. You reached out in your email and you said that you started a video game company. Not only were you working with Org to do literate programming for your game but you also got other people to use it–a programmer, a 3D modeller… How does 3D modeling work with Org?

Janis: Not so much 3D modeling itself as more documentation on things – how we communicate and pass information to each other. It's a nice way. I can even email the text which is formatted correctly as Org Mode file and the person can just copy and paste in Emacs. I love that Org Mode is just plain text. It's awesome.

Sacha: So you got email and you're emailing Org Mode snippets around. Do you also share your Org files through some kind of Git repository? I'm guessing you got documentation in there too, right?

Janis: The interesting thing is that I have started to use Git a few times but somehow Google Drive is the best option I'm finding because I'm saving work each evening and just uploading a version. I don't know. It's easier for me to work this way and communicate with people.

The thing that we are using, Unity, maybe you know. The cool thing about that is the other person can work with his own scene and then I can just import his assets into my project and use them. I think the most interesting thing as how we use Emacs is just–I don't pretend to say that it's all configured as we would like–but we are constantly improving and experimenting which would be the best way. I just love it. Actually we love together and already are sharing.

There is my other programmer whom I'm working with together. He was studying last year in USA. He's already sharing with friends there the way how we work. The cool thing is that we can have one CSS file and we are just exporting Org as HTML and we have everything. Our documentation codes, everything, is like standard way. We can highlight code, we can do everything. It's just I haven't found any instrument which can do the same way.

Sacha: I agree. I find it so useful that I can just use “=” signs to say, okay, this part is going to show up in a fixed font in my blog post. And there's syntax highlighting, which you're taking advantage of already. It's really so convenient.

Do you use Org mainly for documentation or do you also do literate programming with it?

Janis: Yes, actually we do.

This is the thing that we are using for documentation and the cool thing is that.. It's bad, I can't show an example right now but maybe later I'm going to send some examples. But we are making literate programming code with literate programming and exported code is already with documentation. In Unity, there is an assets folder where you have the scripts and then we are working with Org file and just tangling JS files.

We have the clean code without clutter which we can just jump, experiment, test all the things, and then when we show that everything is working, we just can implement the changes in Org file and just have standard version. Org in this sense works as a backup as well. We can hack around, play around with the code and only change we are sure we can implement in Org.

The other person told that – I was asking him how it is to work with this way and he's like, “Oh, I can't imagine. I just want to write code like this.” [inaudible 0:05:17].

Sacha: So nice. How long has the team been doing this?

Janis: Actually we started to work together just from the beginning of February.

Sacha: Wow! That fast and you've gotten used to the workflow, you sorted out [inaudible 0:05:32].

Janis: Actually in the last one and-a-half month, I haven't a lot configured my Emacs file. What I have done is I have thrown out all the stuff. I put too much work that I know I won't use. This is one thing. I'm usually collecting more, and more, and more. Then it comes the time when I'm thinking, “No, I don't need that much.” And I'm just throwing all the stuff I know I won't use because I now have experience. I know how to do this but I don't need to clutter my file.

In two months I grew my Emacs file past 2,000 line of code but I have thrown [inaudible] way, so it's around 1,000 lines.

Sacha: I have a problem with that myself. I have things there that I've completely forgotten about. The last time I started from a completely clean Emacs configuration was several years ago. Yes, I'm delighted that you're actually cutting things out of your Emacs, simplifying it and things like that.

Janis: Also two things. You said that your Emacs is loading – not so fast like nine seconds. I noticed. I noticed this on Windows, it is actually so. It loads for some reason slower than on Linux or OS X, the same configuration, it loads like three times longer than OS X. I don't know, it's signaling or something else. But it's strange.

Sacha: Yes. I don't worry about it so much because I start Emacs up when I start up my computer and then I just never close it.

Janis: I am a bit similar to a few other persons. I'm constantly restarting Emacs because when I was experimenting a lot, writing Emacs Lisp–because a lot of Emacs Lisp, I haven't gone too much into it but if you have some basic, even imperative programming knowledge, then you can just simply start right and there is no problem like no [inaudible 0:07:42] at all. So I was experimenting quite a lot in that. I found those [inaudible].

Sacha: You have this other programmer. Did that other programmer use Emacs before joining your team?

Janis: No.

Sacha: Okay, so from scratch scratch?

Janis: Yes. From scratch and he was using it in a week, cool, everything is fine.

Sacha: Wow.

Janis: I don't know if I have a teacher-talent or it's like I gave him my configuration file, said approximately what is going on, and just doing whatever he want with that file.

Sacha: Do you know the other resources that he found useful? Tutorials, Emacs Wiki? What do you recommend?

Janis: Actually, the information source for him, I am the information source. He hasn't gone too much into it. Maybe this is because – I don't want to boast but for years, it has been like an addiction for me to learn new software. So, then I have a skill to learn very quickly. I know that I have to learn the basic idea of any software and then everything of the rest, I will be able to do.

Actually I think one of the reasons why I started to love to use Emacs is because I have used for the bit Blender, a 3D modeling software. I think because the interface is so similar, I think that might be the reason why I loved it because there is the same idea. You make as you want windows into there, and switching into each window mode in which you work. So it's almost the same idea. It might be the reason why it was so easy for me to get the concept of Emacs and just pass it on.

Sacha: I've never looked at Blender that way. I always heard that Blender's interface is very powerful but a bit challenging to learn, and to hear that it's actually very similar to Emacs might encourage a lot of people to try it out.

Janis: With Emacs, also one similar thing with Blender is that it's like when you start to use it, then you want to use those things in every other program. I'm usually catching myself when I'm writing some text, for example, in email. I don't know if you use email in Emacs. Because I would use even Twitter and email in Emacs.

What I don't like is I have to save my password in plain text. I know that you can make correct rights for the file. I know it's unlikely but if someone boost my computer with live CD, he can view my password and I don't like this. I better use Gmail for example because I think Gmail client is very, very nice and very good.

Sacha: Yes. So you like learning new software. Tell me what it was like when you started learning Emacs. How did you get into Emacs in the first place?

Janis: It was interesting to me.

At that time I was finding the best editor I could use. It was actually like two or three years ago for the first time I used Emacs and that was one thing I wasn't used to. There was almost only text tutorials and there was those key combinations like CTRL+X, K and I was like, “Wow, you have to press four buttons together.” I was like a little bit, “Really?” Those things were funny.

But when you get past that, then actually as I said previously… I was using Emacs just with default, things it had. [inaudible 0:12:00] already with the standard commands and I didn't even know anything about that you can customize it. I know that for the functionality, it has basic functionality.

Only thing what I added to Emacs was autocomplete. Even then I didn't think about customization. I just didn't know you can install that and I didn't think about anything that I would need more. But when I watched the [inaudible 0:12:27] tutorials, I was like, “Oh, yes.” I wanted to start again, because for a long time I was trying Vim few times and never gotten around it as [inaudible] somewhere previously to this. [inaudible] Questions, that's hard but I started a little way more and people didn't had any arguments against me. I won because [inaudible 0:13:01].

Sacha: [inaudible 0:13:02] more?

Janis: I hope I'm not getting too loud. I'm excited.

Sacha: No, it's good.

Janis: Then again I was using for a time jEdit.

Sacha: Yes.

Janis: Actually I liked it pretty much when I was working only on Windows for some time in the place I was working previously. Then I used a lot [inaudible 0:13:29]. But then I started to use OS X and Windows together and then I thought I want editor interface and I started to use jEdit.

One thing which I didn't like about jEdit was that approximately at that time when I started to use it, not maybe at the very beginning but somewhere in the middle of the time, there were those big holes in Java. I never liked Java. I thought it's blunt. Maybe someone won't like me for these words but I know that jEdit, you install it on your own computer and there shouldn't be any security issues.

But nevertheless, it was one of the reasons why it glitches, so it might be glitch anywhere else and so on. Then I thought, almost the best experience I had once was with Emacs. Previously, for the first time, I used it for some two or three months. I just got used to it and I could do everything in my work but I don't really know the reason why I stopped. I guess there was problems in work and something like that.

Sacha: Okay, so you tried a lot of different editors and then you eventually came back to Emacs, and then you discovered you can customize it?

Janis: Yes. Then I was pretty much hooked. I started to use it very, very much.

I haven't done until now music-composing in Emacs, I'm sorry. It was interesting that in previous chat, there was Iannis where he showed the SuperCollider with the Org Mode. Actually right now, I have put my priorities at what I have to do. So, I don't have the time to start the work with but I have notes. I have already for [inaudible 0:15:51] want to start work with SuperCollider.

Sacha: Excellent, there you go. Now you're excused.

Yes, it's really interesting to see the kinds of things that people are doing with Emacs that go beyond, “I'm writing text with this. I'm working on code.” You mentioned SuperCollider is going to be one of your interests later on. Are there other things that you do with Emacs that are maybe things that people wouldn't expect who just think of it as a text editor?

Janis: People wouldn't expect to play games in Emacs.

Sacha: Which ones do you play?

Janis: Actually the most common I'm playing, Tetris or Snake. I haven't played them for a while, I must admit. But sometimes – when I was sitting, I had a course about Linux and there was a break or something, I was playing and people started to pay attention what I'm doing in text editor as well. They were getting excited, okay, because I'm quite new to Tetris.

Sacha: Well, next time people are looking at you and going, “Why are you doing this in a text editor?" You can break out artist mode and start drawing. I was looking into Ditaa because you can actually draw thing and then use Ditaa to turn them into actual graphics. Anyway, lots of stuff.

Janis: This is cool and I have tried Emacs [inaudible 0:17:28]. One thing I've impressed people just by drawing, but this is one thing… What I tried to do is make documentation like diagrams and I think if you get used to it, you can do it pretty quickly.

The one thing I don't like, I don't want to use external tools with Emacs.

I have an interesting thing. I have a backup function in Emacs. I can just press F4 and I'm saving my .emacs.d and .emacs file in a directory where I'm having my backups.

I like that I have simple configuration, like, a simple way to transfer my Emacs configuration to any other computer and start more there. I'm working with three computers constantly, with different operating systems mainly on OS X, but on Windows quite a bit as well. It's good that you can just put there and just continue to work with the latest configuration.

Sacha: Yes. That's what you get for having just internal tools instead of "you have to find whether this tool will work on Linux, and Mac, and Windows, and install it, and set up all the paths." It's great that you keep it into Emacs.

Well, I actually had a question. Somebody is actually listening to this live and I have a question.

Janis: Oh, cool.

Sacha: You mentioned you pick up a lot of different tools, or language, or things like that quickly. Do you have any tips for how you learn things quickly, especially in Emacs?

Janis: I won't be able to give a quick answer. The thing is that what I do usually is just for the more complicated tools – I'm going to tell this way. Take one tutorial, just go to understand the raw basics. For example, Emacs tutorial is a good tutorial, if you are not too lazy to go through it. Just read. Plain text is a good place. Then just put target that you want to do something The real thing, you would be proud–a little bit–but you will be proud of it. And then create the thing. After that, you will find yourself that you can do it. It's my motto for the life. “Experience makes you a better person.”

Because to learn anything, you just have to do it. You just have to take it and do it. You won't do it if you don't have motivation. It's good to have some target. You want to create some application, do it only in Emacs. You will have this raw idea.

For example, people are telling, “Oh, Blender is so complicated.” I don't know. Blender, Emacs, they're quite simple applications. I have to paraphrase. I love these applications because it's actually like with any good game. It's simple to pick up but it's hard to master.

Sacha: Exactly. There's always more.

Janis: Yes. You shouldn't be satisfied with what you have. Because I'm a programmer and I'm training all the time logical thinking, this is one thing. Think how can you do this. I don't know. Maybe the thing that helped me is I'm speaking four languages. This might be a reason how I pick… for example, maybe this will help, for some person. I learned, for example, to speak in Portuguese in some two weeks.

Sacha: Nice.

Janis: But I know that my Portuguese is bad. I wouldn't write any article, anything like that. But what you have to do is you learn those small connecting words–how you can make, and for that, and things like that, and then you will find the way how to tell the thing you want to say. This is the same way with any software. You take the software, you learn a little bit of it, you make your own target and then you use that knowledge and find a way how you can do it. If you will look on the Internet, time to time, it will be so like that, “Wow, I can do it easier this way.”

Sacha: Yes, I get that.

Janis: You will improve yourself constantly.

Also, one thing that helps is to document what you do. For example, in Emacs, I'm constantly – not only in Emacs, one thing that is amazing about Org Mode is that Org Mode is the best planning tool I have found. I have tried but I was like, “Oh, I found FreeMind. Cool.” Then I tried a couple of other things how I could manage the thoughts I have in my head because I'm exploding with thoughts and going, and going in too much different direction sometimes.

Org Mode lets me program the things I have in my mind, structured, because before that, I was writing an email in not so good way. But like poems, what I want to do, and now Org Mode gives me very nice standard interface to do this, to put my thoughts. I find Org Mode the best way for me to document what I think and even make little programs on how I should so something in real life.

Sacha: Really? What are those programs like?

Janis: Returning to the previous points a little bit, and connecting this with what you asked right now.

To learn anything and to complete any large task… For example, when you do hand-drawn animation, you should start with the first frame, and the last frame, and then one in the middle, then one in the middle between those two, and go to the precision you need. So, you can implement this idea in any other area of your life, because you can take an Org file and make simple algorithm with the main things you have to do. Then you can put more points in and more detailed tasks in those points. So you go to the level you need to complete your task.

For me this is the most efficient way you can do or perform the task.

Sacha: I have never thought about tweening in tasks before, so thank you for giving me that metaphor.

Janis: The thing about documenting is I'm doing similarly as with the code for the Emacs. “I'm going to finish this start and then go right to the next one.”

I'm a bit afraid. I hope I answered the first and last question because I don't know if my answer was explanatory enough but I hope so.

Sacha: It's very useful, yes.

Janis: So, I'm doing the same way as with document, and with Org file, with Emacs initialization file. I am making bunch of my thoughts, just putting on them, writing, don't sending to myself in the email. You were using [inaudible]. It's actually pretty similar to just Gmail. I'm just sending myself email. Then I have it on all of my devices.

I'm collecting that, structuring them and then throwing a lot of them out when I know I have already documented in another place or just understand for example. When I thought at that moment, it's a great idea. The thing I wanted to return was that I haven't looked at your literately written .emacs file but I'm thinking time to time to make my .emacs file as well in Org Mode.

But I wrote it. I downloaded Folding mode and I'm using it so I have just my markings and just fold. I don't know if I can normally share my screen.

Sacha: Yes. If you hover over the left side of the Hangout window…

Janis: I'm going to start Emacs and let's see if it won't be [inaudible]

Sacha: If you're in Hangouts and you hover over the left side, you'll see an icon that looks like a green monitor with an arrow on it. You can use that to share either your entire desktop or a specific window. Yes, I see your screen. All right.

Janis: Cool.

When I open my Emacs file, then I haven't folded the standard – this is my thing, package initialization but I haven't folded the standard configuration which is done through customize. It's not too much. Once when I used Emacs file, something went wrong and my .emacs file was corrupted, the way it was written and so on.

From that time, I don't like to put the standard customized configuration into fold. I'm leaving this without folding. Then I just have what I said, very simple structure. I have five points here. For example, I'm doing keybindings. It sometimes doesn't pay off because then if something breaks before keybindings, then I have to go from another application. But there are keybindings which have to be. In the end, I'm willing to take this risk.

For example I have a section here “Quick Utils” which I can open with F9. I have, for example, function “Remove all duplicate lines from selection”, for example. This wasn't mine. I think I might be doing something on this. I might boot something but it's like that.

For example here is “Backup initialization configuration”, this is the function with one variable which saves my backup through the shell. So when I need to insert specifically mapped date, then I just throw it into another buffer from it as I need it. Have I thrown all of the other things out? I don't know. Eventually. I might have thrown out a lot of other things I wrote but it might not be in this one.

Sacha: That's cool.

Janis: And other things I could show but I don't think they're too interesting because those are standard ones which I have tuned. You can find them on Emacs Wiki and so on.

Sacha: Are there any particular packages aside from Org that you really like and you use a lot? You can just name them if you think.

Janis: I'm going to just go to the packages which is a reminder for me. I installed on my Windows desktop application which allows me to change desktops and it conflicted with my Emacs. I'm going to go to the very end and what I have installed.

Autocomplete is one thing I'm using a lot and I have made my own dictionary for Unity, Javascript version, my classes, methods and things like that from that language. Then the simple little things like expand-region and things like that that might not be too interesting, I'm not right now using but I loved actually [inaudible 0:33:26] with JS2 modes. You can dynamically edit .js files but right now I do not use Skewer mode.

Sacha: Yes. I was looking at that. It's fascinating to have the kind of REPL, the Read-Eval-Print-Loop with Javascript in a browser.

Janis: Like pretty much. Some things are weird, not as smooth as in demo which is shown in the YouTube. It won't work quite well. One thing I love is Workgroups2. Undo-tree is like lifesaver. I love it.

Sacha: What does someone in convention do for undo tree? Did you mention something else before undo tree?

Janis: Workgroups2.

Sacha: Which one is that?

Janis: The highlighted line.

Sacha: Sorry. You're not showing your screen so I'm not sure what it's about.

Janis: What do you see?

Sacha: Your face which is also sort of cool but we [inaudible 0:34:38].

Janis: Okay, I'm going to try again.

Sacha: That sounds interesting and I don't think I've used it yet. [inaudible 0:34:47]. Workgroups. Okay, I see.

Janis: Workgroups2. It's cool than one thing I'm using a lot and creating my own Yasnippets which are saved in my backup as well together with everything. Yasnippets is very cool thing. I would recommend to anyone to use them and just learn.

Actually right now, if I'm going to return to [video]… Actually, right now, I'm a little bit past the all the time configuration phase. Right now, right now, we're concentrating a lot on development. I'm just adding the things I'm definitely seeing that I need, or just marking that I have to do, or implement in the future.

Sacha: Which is super-important because otherwise you can spend days configuring Emacs and get no real work done.

Janis: Yes, that is true. I think showing off Emacs file is like boring for the people. It's like looking at the code. I might think posting something somewhere for people just to explore.

Sacha: Actually, the funny thing is when people watch other people use Emacs, often it's similar things that we take for granted that people go, “Holy cow, how did you do that? What is it that's giving you these things?” I was talking about somebody else about Emacs Org lately and the checkboxes in Org lists, he has had little boxes around them. Apparently that's the thing from the solarized theme. It's just these little things you get from watching other people and from listening to other people talk about Emacs.

For example, I'm picking up a lot from you about, yes, you can use Org Mode and literate programming as this one unified source, and you can get your documentation, your code, and all these other good things from it. It actually works fine if you have a team, so it's good.

Janis: Yes. That is why I said right now it's barely to say our workflow, but the two applications, it's like hard rock applications we are using. It's Emacs and Blender. So it might be interesting to have conversation somewhere later in the future and to see what has changed, and actually more team work and things like that.

Right now, Unity itself helps a lot with the teamwork. We don't have to worry too much about standardizing even Emacs. Actually I like this about Emacs because as I said previously, you have to learn idea, then you will understand other person's .emacs file and you will be able to use the things he has. Because what I said previously was, it's great to have standard product in which you are working, but people should have freedom to customize the product, the application, their own exact needs, like they should be comfortable. That is one thing that I love about some applications, that when you start to get proficient into them, it's like the scientist did, not too long time ago–experiment.

Only thing in our lives which gives us satisfaction throughout all our life is constantly improving our skill. It's more powerful even than love, because love gives much more emotions in shorter amounts of time, but skill is the only thing which is giving when you're very old. You're still getting satisfaction and appreciation from other people. This is one thing I love about Emacs, Blender and some other applications, then you are using that application and you are enjoying using it.

Sacha: Yes, and you can customize it, and you learn to customize it. Of course as you make it fit, they work better too. It just compounds from there.

That's a lot of fun. Right now you're focused on getting your video game sorted out, so you're not spending a lot of time working on Emacs, but maybe some time later on, you will relax a little bit and then dig into customizing it even more.

I was curious about one thing. Do you actually have Emacs talking directly to Blender or do you just export segments. You mentioned Javascript or other things like that and then you run that with your [inaudible 0:40:40].

Janis: With Blender, actually the three products which we are using is like I'm already going to my open source applications. Blender and Emacs, I love them for a reason and I don't like what people are making that, “Oh, open source. It's for free and that's why I should use it.” Because for example right now if you know that Blender community, they're making Gooseberry project. This would be the first open movie which would be sponsored by people, and for example, the creator of Wikipedia, they are making segments. This could be revolutionary. They are trying to change film industry and they're getting pledges. For example, we got from a friend yesterday, Latvia is the first country in the Europe agreeing 100% support. [inaudible 0:41:40] on the Twitter of Blender put up in Twitter. Congratulations to Latvia the first European country [inaudible 0:41:48] 100%.

I think that with this software and with the people, if I see that someone is very dedicated at what he's doing, I'm going to help him as much as I can. I just feel satisfaction from helping a person where I know that my help gives or will create something great. It's cool. You should check out Gooseberry.

Sacha: It sounds like a great project and it's good to see people coming together to build something big like that.

I'm particularly interested in helping more people learn more about customizing Emacs, building the space.

Janis: I'm sorry, I got away a little bit from [inaudible 0:42:42]. From Blender, the most important thing is that we are just sharing settings. For example we need now specification, what exact setting should have models for example for some specific behavior. Those things are passed through Org files so we can easily implement them. In documentation, we can easily open in any text editor and configure them.

But the most communication between applications is Unity and Emacs. With Unity, interesting thing is that you can put in Unity custom editor and I could put Emacs as that custom editor, but there are some problems that it doesn't pass normally–the file name. I might need to look into it deeper, but I don't feel like it, because I just change work space and continue to work in Emacs. The great thing is that Unity compiles like when you just switch to Unity window, it updates all the scripts, and they're precompiled.

I work in Emacs to everything in Org Mode, I have already documented code, I can export HTML, Org more frequently. I'm just tangling code, then the tangled code, I'm just switching to Unity, it's compiling and I'm just a little–going, I know it's compiled and I have already resolved it there in Unity. I could even open something in the show. I don't know if it will open normally here. I'm going to try to do applications.

Sacha: Sure.

Janis: On OS X, it's a bit easier because I can easily switch workspaces but sometimes in Windows, I better work in one workspace with those things. I have opened Emacs. For example I am writing right now our in-house – hopefully it will share the whole screen, because it allows me to share applications.

Sacha: You can share the entire desktop as well. Yes, I can see your screen.

Janis: I don't know if it's working smoothly enough, but for example I have here created - do you see the curve?

Sacha: Yes.

Janis: It's quite close to the ending stages. For example I can just switch to Emacs. This is the main visualization script which is making the stuff to happen. For example, I can just go into object, and just put there in – and one thing I loved about Emacs is that if you have a programmer which isn't as experienced–formatting a lot of code, then this very cool thing which helps to write and to debug codes. For example I have indentation like that this but in other applications, you press tab where you need to go. Here I just mark the code block, and it indents all the lines. It's awesome. Emacs just indentized correctly. It knows the language by which you are using and you just press and hold file with all the if, everything with all the [inaudible 0:47:43] statements, everything is formatted as you need. For example I'm just putting out message “m1”, and for example switching back to Unity. If you see Unity – do you see Unity?

Sacha: Yes, I see Unity.

Janis: It has already compiled the code. Here, if I'm switching to console, I can see it splitting all the time out, and updates in one.

Sacha: I can see how that's very convenient because you can just switch back and forth. By the way I noticed that you have highlight line on. One thing that I learned in the conversation with somebody else is if you customize the phase for highlight phase I think or HL line phase, or whatever it's called and you turn off the foreground color, then it will keep the same highlighting that it usually has. It just changes the background. Sometimes you set both the foreground and the background, that ends up overriding with whatever syntax highlighting you have. [inaudible 0:48:47].

Janis: This is a cool tip. One thing I'm doing, I was configuring – and I'm configuring quite a lot Emacs but with standard shortcuts and standard themes, it's fun to play with that but I'm not spending much time that I'm going for the functionality. I'm trying to not override the standard things or just change them to know where I know exactly where they are. I'm trying not to break but to improve.

Sacha: Yes, that happens. That's cool. Thank you so much for sharing that. It's really interesting to see people's workflow and to get a quick demo of how you set up autocompletion and all these other things. That's great.

Other question. For Org, for publishing your documentation, you published the HTML and you tangle to Javascript. Do you have any tools, or functions, or configuration that you use to make it very easy to publish to different types of things?

Janis: I can't show now on this computer. I was using a ready-marked in the future for myself and that I should write. This is Unity Javascript–actually I would prefer it called a Unity script because it defers from the Javascript to use on the web–but you can pretty easily transfer some applications. For example there wasn't any normal image blurring. So, I just found a Javascript version of it and re-wrote the code in Unity. It's not exactly the same, but it's pretty similar.

The thing is that I was using highlight package. Their recognition of code blocks where the syntax should be highlighted differed from that what Org Mode is creating. So rather than changing Org Mode itself, I wrote my own function which is bound to a shortcut and I just formatted the file for that highlight. It's very easy to integrate custom tools like custom packages into Org and use it for the highlighting and things like that.

But there were some things which I didn't like about highlight and its external package. It's not so important right now to have this highlighting. In the future I'm just going to write my own highlighting and just going to use it and integrate it with Org so it works without any formatting next time.

Sacha: For Org Mode, since you have a lot of source blocks, do you already use indirect buffers to edit the source blocks in the different buffer? C-c '?

Janis: It's a very bad example with this project with this curve because I might sort of rewrite it in literate programming but I tarted to hack with it and then I just started to write it just in code and it's like already some 3,000 or 4,000 lines. It's a pretty tough channel right now to make it in Org. But the game itself which we're creating right now, it's written in literate programming and it's looking nice when we are exporting.

It's a cool thing about Org. People do not appreciate the literate because it takes a little bit more time to write code and you don't hack right away the things. For example you don't know exactly how it works and just make it to work. But in long term, it pays off. It's easier to debug, it's easier to find where is the thing. It's very easy. You start from the main idea. You write just algorithm of application with some functions. In the same way as I said previously with animations and so on, and just go to the level as deep as you need.

It's very easy that you have a function and you can just right away jump to the block where the function is described, and just look exactly at that one thing. For example, in code, you have a summary. You just see through summary all the things and you just click and you are there. That's the code fragment and you have description of the code. The code itself isn't cluttered with comments because you just write comment for every variable you have in codes and more or less if statements, or any other switch statements, or any other logical statements, that's it on some tips.

For example I did here, hack to do something like that, but basically it helps to keep code cleaner. It helps to view the code easier if you want to view just code. You are not having a lot of descriptions and things like that. You just view the code. “I want to see code.” You want to see documentation, you see documentation. You jump in any place where you need in documentation.

I think in the long term it pays off in development and it lets you structure the program. When you see all the time structured application, then you can think more correctly about application because one thing which we want to do is make exceptional product. We want to make really, really great games.

Like people for example in iOS market: “People are buying. There are a lot of games. Let's just make some game and throw it there.” No, we are just working. We have one problem. Why is that animation not looping? Spending five hours until we get that working perfectly.

I think if you want to write great codes, then literate programming is the way to go. One thing more – we have three minutes?

Sacha: Yes, don't worry about the time. Go ahead. It's okay you don't have to wrap it up in one sentence, but go ahead.

Janis: Cool. One thing I read something previously, there was a question, some person asked in stack overflow and I bind that into one reference like a joke but which is very true joke. Emacs is the editor which makes you a better person.

Sacha: True.

Janis: It's true and people are writing their answers for him when he asked it. “Oh, will Emacs make me a better programmer?” They're writing, “No, just use the editor which does the job and which makes you very, very comfortable enough.” Yes, in some sense, but Emacs makes you think – and if you think, then you can learn very quickly a lot of software. You can see for example on the net, you are still looking, “Oh, how should it be?” I like how people are watching YouTube videos and they do not read description and asking in the first comment on the top is, “What is the name of the song?” When he could just open the description and view there.

People do not read, they do not look. How do things actually work? They do not look in the world scientifically. It's like people think moon from the Earth is that distant as it is in the book. When you show him it's like eight meters away where the Earth is like a football ball, then they do not understand.

Yes, I think that's sitting down a little bit and thinking what you want to do helps a lot. At first, understand what is the problem, then develop algorithm and then implement that algorithm and change if you find on the way that it's somewhere incorrect or you're taught incorrectly.

If you do not structure the things on how you write code – I don't want to bash anyone but I'm writing right now this curve, this implementation of my own curve because we both – I'm not going to name the product – but we bought this curve implementation in Unity, which in the beginning looked very cool in the demos, in the video and everything. The bad thing was that okay, I have to improve a little bit the code they have for the following over the curve. That kind of looks terrible. Because there are left like block of code which does nothing. You can throw it out and it won't change anything because there's nothing.

It's like “Okay, I'm going to throw [inaudible] fast and everything.” They have no consistency. Variables start with small letter, with big letter, so you can't make distinction. Is it the class? Is it the function? Is it the variable? Things like that. But basic things which are written like in the beginner tutorial for Unity–which of course you can develop in your company your own idea in the end but if you find this level of consistency, you can say that people are just going to just, “I'm going to quickly make a product” and that's it. In this case, Org Mode helps just amazingly.

If you start to do the thing correctly, it just helps you. If you need to get up in the morning, eight o'clock and you get up in 11, all day is like – I'm sorry that I'm preaching right now.

Sacha: Org helps you structure your thoughts and you're slowing down, you're writing your logic as well as how you're planning small things as you try to solve them, you write down your code and your notes, if you run across things that don't quite work the way you expected them to, you can write notes on that and then you can write the actual codes – so Org helps you structure all of that and makes sense of it.

Janis: Yes. The thing that Emacs makes you think, it makes you a better programmer, it makes you a better person.

Sacha: All right. That's why I really spread the Emacs gospel to everyone.

Janis: I think this is a very great note [inaudible 1:01:03].

Sacha: Thank you so much Janis. You shared so much about literate programming, you have obvious enthusiasm for it. I really like it myself, as you can see from my configuration, and I can't wait to see what other people do with it. It doesn't actually take all that much time. You said your other programmer is already up and running after just a short time learning. It's something everyone can get into even if it's only been their first two months learning Emacs. Go ahead and do it.

Janis: Thanks, Sacha for this great effort to boost popularity of Emacs. I really appreciate your work. It's very cool.

Sacha: It's nice to help other people get a sense of who uses Emacs and thank you for sharing today.

Janis: Okay, thanks. Good bye, good luck.

Sacha: Right. With that I'm going to end the broadcast and the recording will be on YouTube. See you around.


Check out Emacs Chat for more interviews like this. Got a story to tell about how you learned about or how you use Emacs? Get in touch!

Comments

blog comments powered by Disqus
Back to top | E-mail me