Vamos acelerar como profissionais


Dê-me uma alavanca, ponto de apoio, espaço para as pernas e fita reforçada



Mesmo se você tentar, não poderá descrever sucintamente como a toca do coelho sem fundo espera por você. Aqui está um desses raros casos em que, para compreender o que será discutido, é necessário ouvir o discurso até o final. Depois de estudar as etapas deste manual, todos encontrarão algo para si mesmos: o editor esotérico de “textos” Leo Editor, com toda a sua essência, exige seu uso da maneira mais surpreendente.




Conteúdo


  1. Prólogo ................................... 2 
  2. Instalando o Leo Editor ..................... 2 
  3. Configuração ................................ 4 
  4. Conhecendo a interface ................. 7 
  5. Criação de arquivos externos ........... 14 
  6. Uso de seções nomeadas ........ 18 
  7. Inclusão gananciosa ........................ 21 
  8. Magia simples ...................... 24 
  9. O verso do lobisomem ........... 30 
  10. Visualize isso ........................ 33 
  11. Conteúdo e forma ...................... 36 
  12. Vou construir um IDE para mim .................... 39 
  13. Liberdade de pensamento ........................... 49 
  14. Viva, o fim .............................. 58 
  15. UPD.  Exemplos de aplicação ................. 58 




Prólogo


Quando você escreve em qualquer linguagem de programação, sempre há uma escassez aguda do navegador de aulas da Smalltalk, a sensação irritante de que suas mãos estão atadas e suas pernas úmidas é interminável. E também acontece que muitas vezes você procura uma coisa na Internet e descobre algo completamente diferente, mas tão bonito que o motivo do início da pesquisa se perde no cenário de horizontes em desenvolvimento. Uma busca pela frase “navegador de classe python” gera uma tonelada de lixo, mas um diamante sem cortes está nesta montanha, brilhando, não atraindo grande interesse, esperando o olhar atento e a mente curiosa perceberem e pegarem.



Instale o Leo Editor


O projeto é multiplataforma, o processo de instalação é fornecido para a plataforma Windows. Para iniciar o editor, você precisa do Python e da biblioteca Qt. A opção de instalação descrita é a mais sofisticada para o usuário despreparado para sofrer, os profissionais podem agir a seu critério.

Instale o gerenciador de espaço de trabalho do programador Miniconda python. Esta solução permite reduzir seriamente a capacidade de obter uma abóbora em vez de componentes conectados corretamente e, no caso de um conflito arbitrário, reverta sem dor para o estado zero e mude rapidamente para testar uma opção de ajuste diferente.

Na página de download, baixamos o instalador do Python 3.7 Miniconda3 Windows de 64 bits. Definimos que quando surgir a pergunta sobre as marcas de verificação, ative os dois.

Em seguida, execute a linha de comando (teclas [Win + R], "cmd", [Enter]). Nós digitamos:

conda 

retornar uma foto de volta

Não há erros, há acesso direto ao conda. Verificamos a disponibilidade da versão exigida do executor da linguagem:

 python -V 

retornar uma foto de volta

No local.

Examinamos quais versões do editor estão disponíveis para instalação:

 pip install leo== 

Preferimos a versão mais recente sem letras no número:

 pip install leo==6.1 

Depois de baixar, descompactar e instalar, tentamos a sorte: lançamos o intérprete python, conectamos aos componentes do editor, iniciamos o editor

 python >>>import leo >>>leo.run() 

retornar uma foto de volta



Personalização


Se o atalho para inicialização não aparecer na área de trabalho, adicione-o você mesmo:

Caminho para o iniciador do editor: % USERPROFILE% \ Miniconda3 \ Scripts \ leo.exe
Caminho do ícone : % USERPROFILE% \ Miniconda3 \ Lib \ pacotes de sites \ leo \ Icons \ SplashScreen_trans.ico

retornar uma foto de volta

Eu realmente não gostei da aparência dos meus temas visuais nativos, então tive que criar meus próprios. Para usá-lo, você deve primeiro fazer o download . 1000% livre de vírus. O arquivo python.py é uma descrição para elementos de sintaxe python que diferenciam as cores. Ele deve ser colocado em % USERPROFILE% \ Miniconda3 \ Lib \ pacotes de sites \ leo \ modes \ com a substituição do arquivo anterior. O que, em nome de você, python de linguagem entregue, ficará claro um pouco mais tarde. Os arquivos restantes do arquivo morto devem ser copiados para a pasta % USERPROFILE% \ Miniconda3 \ Lib \ pacotes de sites \ leo \ themes \ .

Agora você precisa ativar o tema nas configurações do usuário.

retornar uma foto de volta

Clique no elemento @settings e use a tecla [Insert] para adicionar um novo elemento aninhado. Cole o texto:

 @string theme-name = monokai.leo 

Para salvar as alterações, pressione [Entrar]. Se a edição do nome de um elemento for desativada inadvertidamente, você poderá ativá-lo clicando duas vezes no elemento ou pressionando a combinação [Ctrl + h].

retornar uma foto de volta

Reinicie com salvar as alterações.

retornar uma foto de volta

A associação com os arquivos ".leo" deve ocorrer automaticamente, mas, se não, usaremos a solução interna.

retornar uma foto de volta

Até recentemente, isso não funcionava sem emendas e agora eles consertavam, como se, hehe.



Conhecendo a interface


retornar uma foto de volta

À primeira vista, temos diante de nós um editor comum de textos estruturados (editor de estrutura de tópicos em inglês, outliner), um clone da amada treepad por muitos (o arquivo da web, fora do local, infelizmente, foi desativado devido a problemas financeiros do desenvolvedor). De fato, existe uma árvore e há uma área para inserir texto que pertence ao nó da árvore selecionado. A área multifuncional com o nome descomplicado Tabs, além do log, conclui algo mais útil, vamos começar com a busca de texto.

retornar uma foto de volta

Parece ser uma coisa estereotipada, mas existem excentricidades. Em vez dos botões na tela, propõe-se pressionar as teclas do teclado. E o comando find-all não possui uma chave atribuída. Agora toda a atenção está no fundo da janela.

retornar uma foto de volta

Tru-geeks devem ter engasgado com cerveja. Sim pessoal, este é um empréstimo direto do emacs. A maioria das operações do editor pode ser iniciada usando a linha de comando interna.

retornar uma foto de volta

retornar uma foto de volta

retornar uma foto de volta

Os resultados da pesquisa para todas as palavras que ocorrem "o" são exibidos em um novo nó da árvore criado deliberadamente. A fazenda coletiva! (Não se preocupe, a pesquisa por elementos "executa" as ocorrências detectadas, como em tios saudáveis).

retornar uma foto de volta

Juventude, não se dispersem! Era necessário sacudir as bolhas adormecidas. Você sempre pode contornar esse limite do Leo Editor da zona escura. O programa se parece muito com o Linux: paixão, o quanto tudo é feito por vários entusiastas por si mesmos, tudo exige estudo cuidadoso, o desempenho de um é diferente da implementação do outro, é sempre surpreendente descobrir novos chips que alguém colocou, mas que realmente não descreveu, e por tudo isso, há a ponta do iceberg em que ele se senta confortavelmente e, se você reluta em aventurar-se, não pode se envolver em profundidades sombrias.

retornar uma foto de volta

A área de tags permite atribuir rótulos aos nós e, posteriormente, trabalhar com eles. Aparentemente usado para adicionar novas dimensões à profundidade da ordem do caos. Selecionamos o nó, escrevemos o identificador da tag, clique em "+". Nós selecionamos outro nó, basta pressionar "+" nele, a etiqueta ativa será atribuída. Selecionamos o terceiro nó, escrevemos "Schmucker", pressionamos "+". Atualmente, temos dois nós com a tag "zutsker" e um nó com a tag "shmutsker".

retornar uma foto de volta

A seleção de uma marca na lista de marcas leva a uma lista de nós associados à marca pelos nomes pelos quais você pode navegar. Para selecionar uma tag de um nó, clique com o botão direito do mouse.

retornar uma foto de volta

Em seguida, vem o painel de navegação extremamente útil. Ajuda a ignorar rapidamente os nós nos quais uma determinada palavra ocorre. Como a maneira de manter os arquivos .leo é uma grande bagunça, com um alto nível de organização, a navegação pela pesquisa se encaixa no ciclo natural do aplicativo.

retornar uma foto de volta

O uso comum de editores de textos estruturais é o acúmulo de uma base de conhecimento pessoal. O segundo uso mais comum é manter uma lista de tarefas. A próxima guia ajuda a colorir esse processo com prioridades, prazos e status de implementação.

retornar uma foto de volta

O menu de contexto do nó permite usar uma proporção significativa dos recursos da guia Tarefa.

retornar uma foto de volta



Crie arquivos externos


Como editar o texto e usar a árvore não será difícil de descobrir por conta própria, por isso passamos a mergulhar no abismo das infinitas possibilidades de transferir abstrações para o mundo real. Crie um novo arquivo.

retornar uma foto de volta

O nome do nó único NewHeadline alterado para @file 1.txt

retornar uma foto de volta

Adicione algum texto ao conteúdo do nó.

retornar uma foto de volta

Salve o arquivo .leo em algum lugar. Abra a pasta na qual o arquivo .leo está localizado. Notamos que 1.txt. Nós abrimos.

retornar uma foto de volta

O que construímos? Configuramos a exportação de um dos nós do arquivo .leo para um arquivo externo.
Que lixo há no nosso texto? Metadados que permitem recriar a estrutura ao carregar o arquivo novamente no Leo Editor, necessário se o arquivo for modificado em algum lugar externo. A maioria dos arquivos python do código-fonte do Leo Editor pode ser descartada arrastando-e-soltando no editor e constatando que eles contêm uma descrição da estrutura:

retornar uma foto de volta

Mas se não precisamos da função de upload reverso, mas, pelo contrário, queremos que o arquivo não contenha bytes externos, isso é feito substituindo a diretiva @file por @file-nosent (sem sentinelas).

retornar uma foto de volta

Após salvar as alterações no arquivo .leo, o arquivo externo será atualizado automaticamente.

retornar uma foto de volta



Usando seções nomeadas


Cada nó é uma entidade independente separada, que por padrão não possui informações sobre seus vizinhos. Se tentarmos adicionar uma nova estrutura ao nó anexado a um arquivo externo e clicar em salvar, ocorrerá um erro.

retornar uma foto de volta

Somos notificados de dois problemas:

  1. Temos um nó de "teste" pendurado no ar (em relação ao arquivo externo, pois existe um nó na estrutura .leo, mas não indicamos como ele deve ser adicionado ao arquivo externo, por causa disso, há um erro).
  2. Até que o problema com o nó suspenso seja resolvido, nenhuma outra alteração dentro do @file-nosent 1.txt será salva no disco.

A primeira maneira de adicionar links entre nós é através de seções. Um formato especial para nomes de seção se parece com isso:

 <<my_name>> 

Isso permite que você proclame um nó aninhado como uma seção nomeada; o mesmo nome deve ser especificado naquele local do nó externo, no qual o conteúdo do nó subordinado deve ser colocado.

retornar uma foto de volta

retornar uma foto de volta

O arquivo resultante:

retornar uma foto de volta

O mesmo exemplo em um arquivo real, a seção de importação de dependências externas é explicitamente alocada para um nó separado.

retornar uma foto de volta



Inclusão gananciosa


Mas o que fazer se quisermos criar uma seção aninhada em uma seção aninhada e colocar outra seção nela? Você pode agir ingenuamente:

retornar uma foto de volta

Mas para esses desejos naturais, existem até duas diretrizes: @all e @others .

A diretiva @all concatena sem gosto os textos de todos os nós aninhados.

retornar uma foto de volta

Obviamente, tudo depende do formato do arquivo que você precisa na saída, mas provavelmente você vai gostar @others diretiva @others , que permite materializar a estrutura projetada no formato desejado. Opção melancólica:

retornar uma foto de volta

Quebrando seções com palavras-chave:

retornar uma foto de volta

Formatação de recuo:

retornar uma foto de volta

Como Está começando a tomar forma? Mal chegamos à verdadeira diversão. :: ::



Magia simples


Finalmente, começamos a compor o código. A tarefa será estúpida, mas contém elementos básicos típicos de um programa útil. Crie um novo nó em qualquer lugar do arquivo existente ou em um novo. A primeira linha indica a diretiva @language para ativar o destaque do código. Se, no idioma de destaque, na pasta % USERPROFILE% \ Miniconda3 \ Lib \ pacotes de sites \ leo \ modes \ no, ninguém poderá proibi-lo de adicionar você mesmo.

retornar uma foto de volta

Suponha que as informações que vamos processar sejam armazenadas por uma placa em um arquivo csv.

Precisamos: contar o número de caracteres "0" encontrado na coluna Contagem

Nós devemos:

  1. Converter texto em estrutura de dados de amostra
  2. Executar iteração com contagem

retornar uma foto de volta

Nós decompomos o programa de acordo com o algoritmo desenvolvido. O segundo passo após a leitura do arquivo, divida o texto em linhas. Qual foi o primeiro passo para o nó subordinado Read.

retornar uma foto de volta

Em seguida, crie uma matriz de dicionários correspondentes aos dados na tabela. Este nó está no nível superior.

retornar uma foto de volta

E o último passo.

retornar uma foto de volta

Enquanto isso, o arquivo main.py resultante será formado no disco.

retornar uma foto de volta

Viva, nós somos ótimos. Mas de repente tivemos um desejo incompreensível de calcular o número de linhas significativas no mesmo arquivo csv. Não há problema, faça copy.paste do nó principal, altere o nome do arquivo de saída, modifique o código da última etapa. Nós obtemos o resultado.

retornar uma foto de volta

E aqui nossa alegria cede lugar à tristeza, porque o nome do arquivo CSV pode se tornar diferente, o que significa que, se o corrigirmos em um programa, no segundo iremos definitivamente perdê-lo de vista e depreciar a alegria de reutilizar o código.

Triste e bonito, é Leo Editor! Ele tem cópias sincronizadas de nós. O que? Em vez de copiar o conteúdo do nó, você pode colar o nó copiado no modo "clone", "fantasma" e, em seguida, alterar um dos nós vinculados será exibido nos outros nós. Este é um conceito extremamente poderoso que permite resolver as contradições inerentes à organização das informações nas árvores.

Copie o nó.

retornar uma foto de volta

Nós inserimos como um "fantasma".

retornar uma foto de volta

Os fantasmas têm um ícone diferente. Quaisquer alterações no nome, conteúdo ou nós subordinados são refletidas na cópia. Excluímos o antigo nó Read e verificamos que a modificação do nome do arquivo agora é realizada de forma síncrona em qualquer lugar.

retornar uma foto de volta

Falando na linguagem da matemática, os "fantasmas" permitem que você mude de uma árvore para um gráfico acíclico completo. Uma árvore em Leo pode ter mais de uma raiz!

retornar uma foto de volta

Isso permite fazer coisas fantásticas: manipular representações de informações, vincular contêineres de dados heterogêneos, ter um número infinito de cópias reais de dados em um projeto, carregar dados na árvore Leo que não podem ser colocados em uma árvore comum.



Lobisomem Reverso


Vamos fazer um experimento. Crie um novo nó. Adicione texto a ele.

 g.es( len("This is test".split()) ) 

retornar uma foto de volta

Pressione [Ctrl] + [b].

retornar uma foto de volta

Chpok, boa noite. Sim, aqui, o intérprete Python está embutido, o que pode executar o texto do nó como código. Se as seções são conectadas ao nó de acordo com as regras para unir seções a arquivos externos, o código a partir delas também é executado, o que significa que não existe tal força que possa nos parar em uma batalha contra a desordem.

retornar uma foto de volta

Exemplo de vida: o código dos tutoriais reluta terrivelmente em escrever normalmente, mas se for algo com mais de 50 linhas, a bagunça que se torna ilegível no dia seguinte é garantida. Vale acrescentar que muitos treinadores usam o mesmo conjunto de dados de origem, executando várias manipulações neles. O acima é verdadeiro para qualquer "protótipo" ou "utilitário de ferramenta 1-2 vezes". Nesse local, os chips do Leo Editor descritos são extremamente úteis.

retornar uma foto de volta

Isso é tudo - este é o código que faz algo dentro do Leo Editor, sem enviá-lo para arquivos .py.

Ao contrário das folhas de espaguete na imagem, você pode entender imediatamente a essência geral do que está acontecendo. Por exemplo, no programa "4 Regressão Linear", os dados da Internet são primeiro gravados em um arquivo. E então várias manipulações são realizadas no modelo numérico de "regressão OLS", construído de acordo com o arquivo. Além disso, se precisarmos usar outros dados ou outras configurações do modelo, basta fazer alterações em um nó, pois as partes reutilizadas do programa são implementadas por "fantasmas". O programa é dividido em 6 partes independentes, cada uma delas lançada separadamente, mas ao mesmo tempo começam a ser executadas a partir de um ponto comum.

Quando o código de assuntos semelhantes é organizado de forma organizada em um único local, é muito conveniente, mesmo que passe muito tempo, e, usando a pesquisa de navegação, você pode encontrar rapidamente algum método específico, e a organização estrutural ajudará a navegar no que está acontecendo. “Fantasmas” permitem converter códigos complexos não lineares em um conjunto de ações seqüenciais, enquanto entidades de “clonagem” não multiplicam a entropia, mas a reduzem, porque a repetição é substituída pela ligação e os níveis adicionais de abstração não são criados.

50 arquivos dispersos com arquivos de origem são 50 arquivos dispersos. 50 nós com códigos-fonte é uma base de conhecimento com um desejo interno de auto-organização.



Visualize


Antes de embarcar no nível de dificuldade Nightmare, vamos voltar à interface.

Os painéis do editor podem ser arrastados para organizar sua área de trabalho da melhor maneira. Cada arquivo mantém suas próprias configurações de aparência. Você pode fechar todos os painéis, exceto a árvore. Para retornar os painéis, clique com o botão direito do mouse no cabeçalho da árvore.

retornar uma foto de volta

No mesmo menu, há uma certa renderização. Essa coisinha é projetada de acordo com seu nome para exibir tudo no mundo.

Por padrão, a renderização tenta renderizar o texto do nó como reStructuredText . Outros modos de operação são incluídos forçando o tipo de conteúdo no nome do nó.
IDTipo de ConteúdoNota
@asciidocMarcação de documentação do asciidoctorRequer instalação do Asciidoctor
@htmlMarcação HTML
@graphics-scriptDesenho da GUI personalizada através das classes QT QGraphicsView, QGraphicsScene
@imageExibir imagens de formatos popularesO caminho para a imagem é indicado no corpo
@svgMapeamento SVGO corpo indica o caminho para a imagem ou o SVG de origem
@jupyterExibir sessões interativas jupyterNão está funcionando corretamente
@latexExibição de marcação LaTeXNão está funcionando corretamente
@md, @markdownExibição de marcação de remarcaçãoRequer instalação do processador Markdown
@movieExibição de vídeoO caminho para o vídeo é especificado no corpo
@pyplotExibindo gráficos usando o Matplotlib PythonRequer instalação do Matplotlib Python

Como você pode ver na tabela, o Render não funciona muito vigorosamente, a boa notícia é que o Leo Editor pode ser expandido com plug-ins, inclusive visuais. Por exemplo, eu precisava carregar os números em tabelas e desenhar gráficos, enquanto alterava os dados iniciais em mil vezes.

retornar uma foto de volta

O código mínimo do plug-in visual é assim:

 from leo.core.leoQt import QtCore, QtGui, QtWidgets import leo.core.leoGlobals as g class My_Plugin_Widget(QtWidgets.QWidget): def __init__(self, parent=None, leo_com=None): super(My_Plugin_Widget, self).__init__(parent) c = leo_com self.c = c self.layout = QtWidgets.QVBoxLayout() self.message = QtWidgets.QLabel("Hello there!", self) self.layout.addWidget(self.message) self.setLayout(self.layout) def init(): g.registerHandler("after-create-leo-frame", onCreate) g.plugin_signon(__name__) return True def onCreate(tag, keys): c = keys.get("c") if not c: return dw = c.frame.top dock = g.app.gui.create_dock_widget(closeable=True, moveable=True, height=150, name='My plugin') dw.leo_docks.append(dock) dock.setWidget(My_Plugin_Widget(leo_com=c)) dw.splitDockWidget(dw.body_dock, dock, QtCore.Qt.Horizontal) dock.show() 

O plugin é necessário:

  1. Salve em %USERPROFILE%\Miniconda3\Lib\site-packages\leo\plugins\
  2. Registre-se no arquivo myLeoSettings.leo no @settings\@enabled-plugins

retornar uma foto de volta

Você pode ler sobre como criar plug-ins aqui , se for impaciente obter mais informações, a única maneira é estudar o plug-in viewrendered.py.

Por que isso é tudo? Novamente a possibilidades ilimitadas. O acesso total ao QT permite reproduzir informações de maneira arbitrária ou inseri-las da maneira mais inesperada.



Conteúdo e Forma


Tudo o que foi descrito acima parece uma ferramenta conveniente para resolver uma gama limitada de tarefas na tela, nada mais. A conversão da árvore para o arquivo externo é linear e limitada por quadros estritos. Até os nomes dos nós desempenham o papel de comentários, mas não possuem outra funcionalidade útil. Mas, na prática, é muito apropriado descrever uma entidade complexa para o pensamento humano com uma árvore, mas, ao mesmo tempo, o formato da máquina pode não parecer nada e / ou não ter nenhuma estrutura distinta. Para um exemplo simples, use HTML. Seria muito conveniente e fácil (julgamento de valor) preparar a marcação desta forma:

retornar uma foto de volta

Tudo é estruturalmente consistente e visual, é impossível cometer um erro de não fechar ou colocar incorretamente uma etiqueta, e fazer alterações em qualquer escala é fundamental. Embora o arquivo de saída HTML seja "linearmente proporcional" a essa estrutura fictícia, o mecanismo de anexo de seção não é capaz de produzir o seguinte:

  1. Abrir-fechar tags
  2. Atribuir texto do nó como atributos de tag
  3. O texto dos nós com o nome especial "> <" é colocado dentro da tag correspondente

Bem, é claro, o Leo Editor fornece acesso ilimitado à árvore a partir do código do nó. Tanto para leitura quanto para escrita. O que torna possível realizar modificações arbitrárias das representações da informação para homem e máquina. Em qualquer direção e quantas vezes quiser. Você pode baixar um determinado formato, reconstruí-lo em uma árvore compreensível para VOCÊ, fazer alterações e convertê-lo novamente. Se o formato de saída for trivial, você poderá gravar um arquivo externo usando Python. Se o formato for complexo e / ou houver uma quantidade significativa de dados, é vantajoso gastar tempo transferindo dados para um nó de arquivo com seções, pois isso facilita muito a depuração de conversões.

Descrição das funções para trabalhar com uma árvore:
A equipeEfeito
g.es('text')print('text') Leo Editor
n = g.findNodeAnywhere(c, 'TITLE')'TITLE'
for node in n.children():
node.h/
node.b/
node.parent()
p()
c.selectPosition(p)
root_node = p.findRootPosition()
for node in root_node.following_siblings():
if node.h.startswith('OUTPUT'):, 'OUTPUT'
new_node = node.insertAsLastChild()
if node.hasChildren():
new_node = node.insertAfter()
node.deleteAllChildren()
c.redraw_now()

Outras funções podem ser selecionadas nas fontes do Leo Editor e nos arquivos .leo completos, e realmente não existe documentação ( exceto esta página ) = (

A propósito, este artigo está escrito no Leo Editor.

retornar a foto de volta

O código a seguir é usado para exportar a árvore para HTML:

 @language python from pathlib import Path @others path = Path('C:\\Projects\\article\\') / 'out.html' out_text = '<body><script>document.body.style.fontSize = 20;</script>' n = g.findNodeAnywhere(c, 'TITLE') assert nh == ('TITLE') tag = f'<h1>{nb}</h1> ' out_text = out_text + tag + '\n\n' n = g.findNodeAnywhere(c, 'TEXT') assert nh == ('TEXT') for header_node in n.children(): anchor_id = hash(header_node.h) tag = f'<anchor>{anchor_id}</anchor><h3>{header_node.h}</h3>' out_text = out_text + tag + '\n' if '' == header_node.h: text = make_toc(header_node) tag = f'{text}' out_text = out_text + tag + '\n' for content_node in header_node.children(): if '@image' in content_node.h: tag = f' <img src="{content_node.b}" alt="  "> ' else: text = content_node.b if not 'table' in content_node.h: content_node.h = ' '.join(content_node.b.split()[:3]) text = text.replace('\n', ' ') tag = f'{text}' out_text = out_text + tag + '\n' tag = ' <hr/>' out_text = out_text + tag + '\n' out_text = out_text + '</body>' + '\n' with open(path, 'w', encoding='utf-8') as f: f.write(out_text) g.es('.') 



Vou construir um IDE para mim


Nem um python, então vamos tentar nos equipar com um canto embaixo de ... qualquer coisa. Primeiro, finalmente pressione o botão do botão de script.

retornar a foto de volta

Essa ação leva ao aparecimento de um novo botão no menu principal com o nome do nó atual. A lógica sugere que clicar neste botão recém-criado levará a uma tentativa de executar o código do nó associado ao botão. É conveniente, mas inconveniente, que o botão evapore após reiniciar o editor. Para manter o botão sempre em seu lugar, você precisa adicionar um feitiço especial no nome do nó @buttone reiniciar o Leo Editor.

retornar a foto de volta

Para cada botão de usuário, você pode atribuir uma tecla de atalho usando a expressão.Para @key=

retornar a foto de volta

executar outro script a partir de um script, você deve chamar a funçãoc.executeMinibufferCommand('FIRE'). Cada script com um botão vinculado se enquadra no conjunto geral de comandos do editor sob o nome do botão, ou seja, sim, seu script também pode ser executado a partir da linha de comando do editor.

retornar a foto de volta

Para executar o script do nó que está atualmente em foco, a partir de outro script (como se pressionando [Ctrl] + [b]), o comando é usado c.executeMinibufferCommand('execute-script').

Suponha que tenhamos algum código preparado. Seria benéfico executá-lo no Leo Editor e seria maravilhoso obter todos os erros do console. Veja um exemplo de formatação automática do código Python dentro de um nó usando o famoso utilitário Black.

 @language python import subprocess import re c.frame.log.selectTab('Log') c.frame.log.clearLog() python_src = [] for line in pbsplitlines(): if re.match(r'@', line) is not None: line = line.replace('@', '# special_comment@') elif re.match(r'<<', line) is not None: line = line.replace('<<', '# special_comment<<') python_src.append(line) text = '\n'.join(python_src) proc = subprocess.Popen( ['black', '-', '-q', '--skip-string-normalization'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.PIPE, bufsize=0, shell=True, ) proc.stdin.write(text.encode()) proc.stdin.close() s = proc.stdout.read() if s: text = s.decode('utf-8') text = text.replace('# special_comment<<', '<<') text = text.replace('# special_comment@', '@') if 'error: cannot format -: Cannot parse:' in text: z = re.search(r'Cannot parse:.*', text) g.error(z.group(0)) else: undoData = c.undoer.beforeChangeNodeContents(p) pb = text.strip() c.undoer.afterChangeNodeContents(p,'Format with black', undoData) c.executeMinibufferCommand('execute-script') 

O seguinte é feito:

  1. Pegamos o texto do nó
  2. Colocamos instruções especiais do Leo Editor nos comentários
  3. Inicie o utilitário do console
  4. Passamos o texto para o utilitário
  5. Leia sua conclusão
  6. Voltamos ao local instruções especiais
  7. Se não houver erros, substitua o texto atual por formatado
  8. Execute o código do nó

Esta amostra será suficiente para lançar qualquer coisa com base em sua informação.

Agora vamos ver uma versão bonita e clara do uso prático do Leo Editor. O ecossistema Python possui várias soluções para a criação de aplicativos GUI, uma das quais é a estrutura Kivy. Um recurso significativo dessa estrutura é a capacidade de carregar uma descrição da interface em um idioma especial a partir de um arquivo de texto. O Leo Editor nos ajudará, em primeiro lugar, a armazenar o código e a descrição da interface em um espaço e, em segundo lugar, substituirá a edição de texto pela edição em árvore, o que de certa forma nos aproximará dos esboços da interface wysiwyg.

retornar a foto de volta

Quais fatos podem ser extraídos da captura de tela acima:

  1. Leo Editor Kivy
  2. RUN make_GUI, make_py,

retornar a foto de volta

Acima, você pode dar uma olhada em como a descrição da interface se parece em forma montada. Isso pode ser saboroso, mas a fazenda coletiva à esquerda parece ser uma solução industrial e mais gerenciável. A versão correta pede para digitar erros na sexta à noite.

Passamos para o ramo com o código.

retornar a foto de volta

Muito limpo. E está claro. Não prestamos atenção à DATAGRAPH. E as aulas?

retornar a foto de volta

O círculo fechou, então o que aconteceu nessa história veio na forma de uma implementação improvisada do navegador de classes para Python. Os cabeçalhos dos nós não são apenas comentários; seu conteúdo é usado na geração de arquivos .py. Os níveis de aninhamento de classe formam automaticamente uma hierarquia de herança. Tudo como adoramos.

retornar a foto de volta

KA-EE-FF !!! Não se concentre no significado do que está acontecendo, as aulas são lançadas para uma captura de tela.

Algo semelhante pode ser feito na funcionalidade simples das seções do arquivo, mas você precisará especificar explicitamente todas as construções de linguagem (def, classe ...) e, com quaisquer alterações, será necessário lembrar de fazer inúmeras correções lá (e também os cabeçalhos inúteis dos nós suspensos) )

E, novamente, sobre um único espaço de código e interface. Primeiro, lembre-se da pesquisa de navegação, que permite pesquisar rapidamente manipuladores de código para elementos visuais e elementos visuais do código.

retornar a foto de volta

Em segundo lugar, ainda existe um recurso tão esperado como um editor de texto adicional.

retornar a foto de volta

Hop!

retornar a foto de volta

Portanto, não há necessidade de ir e voltar com a edição mútua complexa de nós.

A propósito:

retornar a foto de volta



Liberdade de pensamento


No final, haverá um pouco de natureza natural. Tudo o que foi descrito abaixo não deve ser considerado uma demonstração de boas práticas de engenharia; é apenas uma semente para cristalizar suas idéias pessoais.

O ponto de partida para o primeiro experimento: se a maioria dos programas está envolvida na produção repetida de outras matrizes de dados a partir de uma única matriz de dados várias vezes, por que não criar um bloco de construção simples descrito por uma classe universal com uma interface unificada de recepção / saída de dados para vincular visualmente blocos semelhantes na árvore do Leo Editor, na imagem da programação em gráficos (blocos de funções). Com a diferença de que será um sistema híbrido de classe de bloco, e cada maneira de descrever o código será usada de acordo com o benefício máximo de longo prazo.

Uma unidade funcional elementar deve: ter uma entrada para receber informações, poder responder ao seu tipo, processar as informações iniciais, empacotar os resultados do processamento em um formato para transmissão e traduzir o resultado.

retornar a foto de volta

Suponha que haja uma tarefa ousada de analisar sites. Vamos precisar dos seguintes blocos:

  1. Componente de rede
  2. Analisador de página da Web
  3. Bloco para comunicação de dados recebidos e interface gráfica

retornar a foto de volta

A implementação prática mínima de um bloco suficientemente universal, que se encaixa no ramo da classe, é mostrada abaixo.

retornar a foto de volta

Obviamente, todo bloco de concreto pode recarregar métodos típicos com seus próprios se duas regras forem rigorosamente observadas:

  1. Em cada bloco, o método de decodificação necessariamente chama processo, que por sua vez, codifica
  2. O método de codificação chama o método de decodificação em todos os blocos registrados como saídas.

Ou seja: a disponibilidade de unificação estrutural e homogeneidade da troca de informações é garantida.

retornar a foto de volta

O mesmo, mas mais claramente:

  1. O produto original está na placa esquerda.
  2. Decodificação prepara o produto para processamento
  3. Depois disso, o bloco executa sua principal função no método de processo
  4. O produto é empacotado por codificação
  5. O produto embalado é transferido para unidades subsequentes

Cada bloco acaba sendo bastante independente, a única coisa que ele precisa saber sobre o mundo exterior é uma maneira específica de analisar os dados recebidos. O código universal é responsável pela implementação específica da conexão dos blocos. Como resultado, se tivermos vários pipelines semelhantes disponíveis, você poderá copiá-los como um todo, apenas fazendo alterações em implementações específicas dos métodos de processo.

Na próxima figura, você pode observar algo muito semelhante ao trabalho com as classes descritas na seção anterior. A diferença é que o aninhamento dos nós não estabelece o relacionamento pai-filho, mas o relacionamento de entrada e saída dos blocos correspondentes. Para organizar a troca de dados com blocos não adjacentes, uma muleta é usada na forma de um anúncio explícito de saídas, o que é justificado pelo pequeno número de casos.

retornar a foto de volta

: 50. ( ), . . , 5 , , .

retornar a foto de volta

, .

retornar a foto de volta

A segunda história absurda. Eu precisava criar um jogo Kvent (um análogo direto do conhecido jogo dentro de um jogo ainda mais conhecido, para o jogo usando cartas de baralho padrão). Existem muitas abordagens diferentes para a organização do ciclo do jogo, uma das opções ingênuas é a máquina de estado. Com a máquina de estados, tudo está bem e simples na teoria, na prática, o suporte a mais de 7 estados em qualquer programa real gradualmente se torna monótono sem a adição de duas camadas de abstrações. Nesse ponto, pensei que a manutenção visual da máquina de estado na forma de uma árvore é uma opção interessante.

retornar a foto de volta

Escrevemos um gerador de código de programa a partir de uma árvore, produz o seguinte resultado:

retornar a foto de volta

Não há medo.

retornar a foto de volta

Em seguida, vem uma alteração de condição por condição. Isso é feito de forma suspeita.

retornar a foto de volta

retornar a foto de volta

Era apenas um jogo de cartas com a substituição de um par de cartas arbitrárias. Ok, compartilhe uma única máquina em várias máquinas.

retornar a foto de volta

Em seguida, nasce a lógica para processar a rodada do jogo.

retornar a foto de volta

Nesse ponto, o limite de aplicabilidade prática dessa descrição da máquina de estado está quebrado, embora a árvore pareça assustadora apenas se for implantada intencionalmente cem por cento. Mas ainda havia efeitos completamente não realizados da influência de cartões com fotos no decorrer do jogo. Pode-se supor que uma máquina de eventos para essa tarefa seria uma solução melhor. E, novamente, é fácil fazê-lo em árvores;)



Viva, o fim


No Leo Editor, há uma acentuada falta de preenchimento automático normal e realce múltiplo da palavra selecionada (“destaque inteligente” no bloco de notas ++). Mas mesmo com essas falhas grandes, é fácil conciliar, porque, depois de tentar, já é impossível ficar sem essa ferramenta conveniente, na qual você pode pintar sem esforço seu ambiente pessoal para qualquer tarefa. Existe algo semelhante ou melhor no mundo? Existem muitos monstros no IDE, eles são extremamente cheios de funcionalidades inteligentes-inteligentes, mas qual deles fornece poder semelhante sobre as informações e qual deles oferece tanta liberdade na organização do fluxo de trabalho?

Idéia, Material, Ferramenta, Produto. No mundo da engenharia, uma ferramenta de geração anterior permite que você passe para a próxima geração de ferramentas mais sofisticadas. Passamos de uma broca manual para dispositivos de cultivo com gatos usando eletricidade. A programação pairava no estágio de bons tornos, mas em vez de ir mais fundo, discutimos qual liga é o melhor cortador e a peça de trabalho deve ser alimentada de cima ou de lado. O Leo Editor não é a resposta para as perguntas de amanhã, é um sinal do que pode ser feito melhor.

A questão não é que um programador possa resolver o problema escrevendo código, enquanto o outro "empurra" a mesma coisa (condicionalmente). Uma ferramenta na qual você pode "clicar" (condicionalmente) permitirá resolver problemas anteriormente inacessíveis em termos de tempo e complexidade. No futuro, precisaremos de programas que escrevam em tempo real milhões de programas relacionados e não temos nada para gerenciar a complexidade dessa escala.

Em geral, crie sua realidade e, se não houver ferramentas necessárias para fazê-lo, funcione.




UPD Exemplos de aplicação


: . , , . , .

retornar a foto de volta

:

retornar a foto de volta

: .

:
1.
2. , , «»

retornar a foto de volta

:

retornar a foto de volta

retornar a foto de volta

retornar a foto de volta

: «Cobalt strike»

retornar a foto de volta

Source: https://habr.com/ru/post/pt484930/


All Articles