Mike Driscoll sent me a questionnaire for his PyDev of the Week 
<https://www.blog.pythonlibrary.org/about/> column.

Here are his questions and my responses...

Thanks for getting back to me. I saw you are a part of the Leo project, 
> which is something I have somehow not heard of. So I thought I would ask a 
> few questions about that along with my regular questions. But feel free to 
> make suggestions about topics that you'd like to discuss. And if you don't 
> want to talk about Leo, that's fine too.

​Heh. I love talking about Leo.​

*Can you tell us a little about yourself (hobbies, education, etc):*

​Piano, walking, science, literature, history. I read Science and Nature 
every week. I encourage your readers to do the same. Start with reading the 
summary articles and the abstract for each article. *They are written for 
non-specialists.* All scientists are lay people outside their immediate 

I have taken piano and theory lessons for many years Michael Butkus-Bormier 
<http://www.michaelbb.info/>. He knows approximately everything about 
music. He's a great jazz and classical performer. And a close friend.

I regularly do laughter yoga <https://en.wikipedia.org/wiki/Laughter_yoga>. 
It's easily the most transformation thing I done, including the Hoffman 
Process <https://www.hoffmaninstitute.org/the-process/> and the Landmark 
Education Forum <http://www.landmarkworldwide.com/the-landmark-forum>. I 
find that laughter helps me to connect with people and eases anxiety in 
social situations.

Laughter is a huge help to creativity.  I vividly remember a video of "Ham 
& Clyde" laughing while discussing their work 
with J. Craig Venter <http://www.jcvi.org/cms/home/>.  Alas, I can't find 
the link.  Oh btw, Ham is a Nobelist.

I walk regularly to solve problems.  The trick is to daydream. When any 
relevant thought appears I write it down in a 89 cent notebook.  The idea 
is to *forget* what I have just written down so new thoughts appear.  
Trying to remember things kills further daydreaming.

Rebecca is my muse.  She's a gardener and weaver, but she asks great 
questions when I talk to her about Leo, even especially technical 
questions.  Think about how great that is! 

The idea that I could use the MORE outliner as a prototype for (what 
became) Leo arose in conversation with her.  Very likely none of this would 
have happened without her.

*Why did you start using Python?*

​Because Apple broke their promise about porting YellowBox to Windows. So 
objective-c was out of the question.

I started learning Python​
​in early ​
2001.  I went to the Pycon that year outside DC and got snowed on.  
​It's a ​
strange feeling walking near the Capital and seeing *no* traffic.​ 

*What other programming languages do you know and which is your favorite?*

​Python is my favorite by far.  It's maddening that the web could have been 
based on Python.

Just this year I realized that it's not about the javascript language. It's 
about the tools.  So I'm learning about the node.js and vue.js world, 
driven by Leo's devs.​

*What projects are you working on now?*

​Leo is my life.  This page 
contains summary items for my plans.​
​ At this moment Chris George and I are working on Leo's theme machinery.  
The longer term plans:

1. Better integration with the jupyter ecosystem 
2. Integrating Joe Orr's great vue.js 
<https://github.com/kaleguy/leovue#leo-vue> stuff.
    Be sure to scroll to the bottom of the page.
3. Keeping up with vscode, atom, etc. ;-)

*Which Python libraries are your favorite (core or 3rd party)?*

​pyflakes <https://pypi.python.org/pypi/pyflakes>, by far.  Python devs are 
wasting their time if they don't use it.  I've studied every line of its 
code.  It's a work of genius.

pyflakes catches essentially all of my initial blunders.  It's so fast that 
I can configure Leo to run pyflakes whenever I save a .py file.  I 
configure Leo to raise a dialog when pyflakes detects an error ;-)

*Is there anything else you’d like to say?*

​ Work flow is paramount.  I immediately create github issues for 
everything. The goal is not to have to remember *anything*. I continue to 
find ways that Leo can speed my work flow.

If your readers have not already done so, I highly recommend that they read 
Things Done 
Read the entire book, not some summary. Much of what I am about to say 
stems from this book. 

Recently I have relearned the fundamental lesson that procrastination saps 
energy.  I am intensely focused on doing one thing at a time.  This means, 
for example, that even the smallest mental nits must be cleared.  Some can 
be filed in my Leo outlines.  Others are better put in new github issues. 

I've been programming for 40+ years. It's important to respect my natural 
body rhythms. I take regular breaks in the afternoon, after making sure 
that I am not trying to remember *anything. *This is the only way to 
survive long term.

*How did you get into the Leo project?*

​Leo grew out of my efforts to understand Donald Knuth’s CWEB system 
<https://www-cs-faculty.stanford.edu/~knuth/cweb.html>. This was supposed 
to be a big advance in understand programs, but I couldn't make sense of 
it!  The first big Aha was: "webs are outlines in disguise".

I invented the precursor to Leo in ​1995 and have been working on it ever 
since. The History of Leo <http://leoeditor.com/history.html#beginnings> 
page contains the details. Later, web collaboration rescued me from lack of 
ideas and energy. Now, we are all overwhelmed by ideas for improving Leo.

*Can you give us an overview of what Leo is?*

​I have struggled with this question from the beginning.  Leo's wikipedia 
page <https://en.wikipedia.org/wiki/Leo_(text_editor)> is a dry summary.​
​ Leo's preface <http://leoeditor.com/preface.html> is another. But these 
might not help you or your readers much. 

I could answer "sideways" by listing the great programmers who have 
contributed to Leo: Terry Brown, Brian Harry, Bernhard Mulder, Vitalije 
Milosevitch, Ville M. Vainio, etc. When I have doubts about Leo I remember 
them :-)

You must use Leo to really understand it. We Leonistas talk about the 
Leonine World.  Many people do get it:

"When first I opened Leo, it was out of curiosity. But having used it, I'll 
never go back. They'll have to pry Leo out of my cold, dead 
fingers!"―Travers A. Hough

You will find similar sentiments throughout the What People are Saying 
about Leo <http://leoeditor.com/testimonials.html> page.

But still.  All this is indirect.  As Vitalije pointed out recently, the 
real Aha is that *Leo thoroughly connects outline structure with the code 

*With Leo, code isn't just text.*  It lives in a "super duper outline", 
namely a directed acyclic graph.  Such a data structure, and no other, 
allows simple definitions of clones. 

*Clones free outlines from static organization*. Data, including parts of 
programs, can reside in arbitrarily many places in the same outline.  I use 
this all the time.  I gather clones of the methods I am working so that I 
can see them clearly.  This eliminates a lot of searching. Leo's clone-find 
commands leverage clones in a spectacular way, but I don't want to 
overwhelm your readers ;-)

*All code/scripts have easy access to the outline in which they are 
embedded*. Leo's execute-script command defines three constants: c, g and 
p.  c is the gateway to *all* of Leo's *live* code.  g is a python module 
containing lots of useful utils. Most importantly, p is the presently 
selected node in the outline. p.h is its headline. p.b is its body text. 
p.u is an arbitrarily extensible set of uA's (user-defined attributes).

Leonine scripts are scripts with automatic access to c, g and p.  To give 
you just a glimpse of the power of such scripts, here is the second "hello 
world" example. Put this in *any* Leo node and do Ctrl-B (execute-script):

for p in c.all_positions():
   print(p.level()*' ' + p.h)

It prints all the headlines in the outline, properly indented.

That's the *entire* script. Notice the dogs that aren't barking!

But this is just the beginning. *The c constant, via easy to use methods on 
c, allows scripts to modify the outline in which they reside.*  Some users, 
including my brother, use this to turn Leo into a database.

I'm going on and on, so I'll leave it to interested readers to learn about 
@button nodes, @test nodes, and all the rest.

Neither atom nor vscode are likely to have these features.  Emacs org mode 
comes closest, but in org mode everything is still plain text.

*What are some lessons you have learned working in Open Source?*

My most important goal is to bring out​
​the best in others. Very rarely I've had to deal with people with mistaken 
views.  I always correct those mistakes with the idea that that person may 
come up with great ideas later.

I train people not to be too respectful of my ideas by occasionally 
changing my mind ;-) I want people, even newbies, to push back against my 
opinions. Now, just about everything new happens as the result of urgent 
user requests ;-)

I am not the greatest programmer.  However, I am a good project manager.  I 
can say this because Leo's devs have created things that I never dreamed of:

- @clean and the Mulder/Ream update algorithm 
would never have happened without Bernhard Mulder.
- @button would not have happened without 'e'.
- Leo's minibuffer grew out of Brian Harry's prototype.
- Leo's IPython bridge would not have happened without Ville Vainio.

*The project comes first*. We never disparage people, though we may debate 
technical issues in depth. Sheesh, you would think this is just common 
sense, but apparently not.

We have a rule that we never debate preferences. We create a Leo setting if 
there are two legitimate, important, incompatible, ways of having Leo work. 
This eliminates useless arguments.

We have never had problems with trolls in leo-editor 
<https://groups.google.com/forum/#!forum/leo-editor>, perhaps because all 
access to it is moderated. I'm an evidence based guy, with no time for 
anything or anyone else.

One last thing.  Last year I realized that Leo is my entire professional 
life. Progress has increased significantly since I went "all in".

And that's it.


You received this message because you are subscribed to the Google Groups 
"leo-editor" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to leo-editor+unsubscr...@googlegroups.com.
To post to this group, send email to leo-editor@googlegroups.com.
Visit this group at https://groups.google.com/group/leo-editor.
For more options, visit https://groups.google.com/d/optout.

Reply via email to