Difference between pages "Funtoo:About/pt-br" and "ConsoleOutput MediaWiki Extension"

From Funtoo
< Funtoo:About(Difference between pages)
Jump to navigation Jump to search
 
 
Line 1: Line 1:
= Visão do Projeto =
The ConsoleOutput MediaWiki extension was created by Daniel Robbins to provide highlighting of user input for interactive terminal session blocks. To use it, surround user input with  <tt>&lt;console&gt;</tt> opening and closing tags, and put a <tt>##i##</tt> input code immediately before user input on each line. This will cause all text from the <tt>##i##</tt> point to the end of the line to be in a darker color. The rest of the text will be in a lighter grey, allowing it to be distinguished more easily from user input. Here are other sequences that can be used:


Daniel Robbins originalmente escreveu a [[Gentoo_Linux_Philosophy/pt-br|Filosofia Gentoo Linux]], e nisso definiu o conceito de uma ferramenta ideal assim sendo algo que "simplesmente funciona", não fica no caminho do usuário, e responde a vontade do usuário ao invés de forçar o usuário a trabalhar de um jeito particular.
* <tt>##b##</tt> - highlight the rest of the line in bold.
* <tt>##b## text here ##!b##</tt> - highlight the text between both markers in bold.
* <tt>##i## text here ##!i##</tt> - highlight the text between both markers in a darker color.


Funtoo Linux é um projeto de pessoas que concordam filosofia da ferramenta ideal, e que são ''apaixonadas'' pelo nosso desejo de melhorar a tecnologia de ser tão próximo desse ideal quanto possível. O foco de nossos esforços é o melhoramento contínuo da distribuição Gentoo Linux.  
This extension can be further extended to add color support, as desired, and some of the CSS for color support can already be found in the code below.


O foco do desenvolvimento do Funtoo Linux é atualmente direcionado ao sistema central (core system), significando qualquer coisa em um stage3, portage, core languages, kernels, aplicações de servidor, e em cima do X11 e gerenciadores de janelas simples, e incluindo ambientes desktop como o GNOME e o KDE.
Here are a few examples of the ConsoleOutput extension. First this is how you might typically display {{c|ls}} output, with a particular directory highlighted:


== Foco, Foco, Foco ==
<console>
www@www-smw ~/public_html $ ##i##ls
COPYING  LocalSettings.php    api.php  ##b##extensions##!b##    index.php  maintenance          redirect.php    skins              thumb_handler.php5
CREDITS  README                api.php5  images        index.php5  mw-config            redirect.php5  tests              wiki.phtml
FAQ      RELEASE-NOTES-1.19    bin      img_auth.php  languages  opensearch_desc.php  redirect.phtml  thumb.php
HISTORY  StartProfiler.sample  cache    img_auth.php5  load.php    opensearch_desc.php5  resources      thumb.php5
INSTALL  UPGRADE              docs      includes      load.php5  profileinfo.php      serialized      thumb_handler.php
www@www-smw ~/public_html $ ##i##cd extensions/
</console>


Os desenvolvedores devem utilizar esses princípios gerais para determinar em quais prioridades focar primeiro. -Essas áreas abaixo estão listadas em ordem de prioridade, então o próximo parágrafo é a mais alta prioridade (top priority), seguido pela próxima prioridade, etc. Só por que algo é prioridade mais baixa não significa que é "menos importante" - somente significa tratar as coisas de prioridades mais altas (higher-priority) primeiro.
And here is how you might display a more detailed example of console output, using colors:


=== Constrói? ===
{{console|body=
# ##i##bluetoothctl
[##g##NEW##!g##] Controller 00:02:72:C9:62:65 antec [default]
##bl##[bluetooth]##!bl### ##i##power on
Changing power on succeeded
##bl##[bluetooth]##!bl### ##i##agent on
Agent registered
##bl##[bluetooth]##!bl### ##i##scan on
Discovery started
##bl##[bluetooth]##!bl### ##i##devices
Device 00:1F:20:3D:1E:75 Logitech K760
##bl##[bluetooth]##!bl### ##i##pair 00:1F:20:3D:1E:75
Attempting to pair with 00:1F:20:3D:1E:75
[##y##CHG##!y##] Device 00:1F:20:3D:1E:75 Connected: yes
##r##[agent]##!r## Passkey: 454358
##r##[agent]##!r## Passkey: ##i##4##!i##54358
##r##[agent]##!r## Passkey: ##i##45##!i##4358
##r##[agent]##!r## Passkey: ##i##454##!i##358
##r##[agent]##!r## Passkey: ##i##4543##!i##58
##r##[agent]##!r## Passkey: ##i##45435##!i##8
##r##[agent]##!r## Passkey: ##i##454358##!i##
[##y##CHG##!y##] Device 00:1F:20:3D:1E:75 Paired: yes
Pairing successful
[##y##CHG##!y##] Device 00:1F:20:3D:1E:75 Connected: no
##bl##[bluetooth]##!bl### ##i##connect 00:1F:20:3D:1E:75
Attempting to connect to 00:1F:20:3D:1E:75
[##y##CHG##!y##] Device 00:1F:20:3D:1E:75 Connected: yes
Connection successful
##bl##[bluetooth]##!bl### ##i##quit
[##r##DEL##!r##] Controller 00:02:72:C9:62:65 antec [default]
#
}}


* '''Constrói confiavelmente?'''
To install, make the following modifications to your skin:


O primeiro teste - o software constrói a partir do código fonte corretamente? Isso não se trata somente de emergir ebuilds no seu sistema -- OS builds do stage funcionam sem problemas utilizando o Metro? Se não, isso precisa ser corrigido primeiro. O Funtoo Linux continuamente constrói lançamentos do sistema operacional atualizados, e essas devem ser construídas confiavelmente em todos os momentos. O foco aqui é para builds 100% corretos e eficientes utilizando o Metro, e depois emergindo aplicações iniciais em um sistema Funtoo Linux.
<syntaxhighlight lang="css">
--- mediawiki-1.19.1/skins/vector/screen.css    2012-06-13 18:22:39.000000000 +0000
+++ public_html/skins/vector/screen.css 2012-08-27 04:34:47.507912892 +0000
@@ -683,10 +683,47 @@
        list-style-image: url(images/bullet-icon.png);
}
-pre {
-      line-height: 1.3em;
+/* ConsoleOutput.php start */
+
+.shell, pre, code, tt, div.mw-geshi {
+        font-size: 12px;
+        font-family: Consolas, 'andale mono','lucida console', monospace;
+}
+
+.shell, pre, div.mw-geshi {
+        background-color: #F8F8FF;
+        line-height: 15px;
+        padding: 10px;
+        border: none;
+        border-top: 2px solid #C6C9E0;
+        border-bottom: 2px solid #C6C9E0;
+        margin: 0;
+        overflow-x: auto;
+        overflow-y: hidden;
+}
+
+.code {
+        color: #666;
+}
+
+.code_input {
+        color: #000;
}
+.code_red {
+        color: #f00;
+}
+
+.code_blue {
+        color: #00f;
+}
+
+.shell_green {
+        color: #080;
+}
+
+/* ConsoleOutput.php end */
+
/* Site Notice (includes notices from CentralNotice extension) */
#siteNotice {
        font-size: 0.8em;
</syntaxhighlight>


=== Ele executa? ===
Then install the following code in your <tt>extensions</tt> directory and include it with a <tt>require_once( "$IP/extensions/ConsoleOutput.php" );</tt> in <tt>LocalSettings.php</tt>:


* '''Ele executa bem?'''
<syntaxhighlight lang="php">
<?php
$wgExtensionCredits['validextensionclass'][] = array(
    'name' => 'ConsoleOutput',
    'author' => 'Daniel Robbins',
    'url' => 'https://github.com/danielrobbins/mediawiki-consoleoutput',
    'description' => 'This extension allows you to display colorized console output in mediawiki'
);


OK, ele constrói. Ele executa corretamente? Ele funciona? Isso é bem vago, então vamos colocar algumas especificações aqui. Quando instalar o Funtoo Linux a partir do stage3, tudo funciona? Quais complicações ou falhas foram  encontradas na instalação inicial? Essas devem ser corrigidas, ou soluções devem ser colocadas no lugar, e correções a longo prazo devem ser trabalhadas para melhorar a experiência do usuário. Lembre-se de que o foco do Funtoo Linux é no sistema central - Essa é a coisa que você toca quando você instala o Funtoo Linux pela primeira vez. Você deve reinstalar o Funtoo Linux regularmente para verificar por quaisquer questões e priorizar as questões de instalação do usuário e a experiência inicial do usuário.
if ( defined( 'MW_SUPPORTS_PARSERFIRSTCALLINIT' ) ) {
        $wgHooks['ParserFirstCallInit'][] = 'consoleOutputSetup';
} else {
        $wgExtensionFunctions[] = 'consoleOutputSetup';
}


=== Consigo Usá-lo? ===
function consoleOutputSetup( $data )
{
    global $wgParser;
    $wgParser->setHook('console', 'consoleRender');
    return true;
}


* '''Facilmente?'''
function consoleRender($input, $args, $parser)
* '''Para Trabalho de Verdade?'''
{
    if (count($args))
    {
        return "<strong class='error'>" .
              "ConsoleOutput: arguments not supported" .
              "</strong>";
    }


OK, ele constrói, e executa. Mas eu posso realizar tarefas de verdade com a ferramenta? Qual é a facilidade ou dificuldade  de realizar essas tarefas? A tecnologia (e documentação) devem ser projetadas para oferecer suporte ao usuário na questão de realizar estas tarefas, ao invés de forçar o usuário a saltar por arcos para obter algo configurado corretamente. As coisas devem ser automatizadas o tanto o quanto possível sem assumir controle distante do usuário. Padrões seguros, razoáveis que são adequados para a cargas produtivas devem ser utilizadas por todas as aplicações. As coisas devem emergir sem bloqueadores ou ausência de recursos que devem ser habilitadas manualmente pelo usuário. E uma implicância - se o emerge parar para dizer ao usuário que ele deve definir uma variável USE para que continue, isso é algo que deve ser corrigido de um jeito ou de outro. Então, quando tudo é dito e feito, ele deve funcionar.
    # Display < and > as literals, so escape them:


=== É Documentado? ===
    $input = preg_replace('/>/','&gt;', $input);
    $input = preg_replace('/</','&lt;', $input);


* '''Para projetos de software livre, documentação é a chave.'''
    # http://www.perlmonks.org/?node_id=518444
    # See "Matching a pattern that doesn't include another pattern:


Se o software, executa e funciona, outros ainda podem ainda não ser capaz de utilizá-lo até que documentação adequada esteja disponível. Documentação montante nem sempre é completa ou fácil de entender, então frequente documentação adicional para usuário é necessária. Se etapas do manual são necessárias, elas devem ser documentadas claramente e corretamente. A opção de escolha da documentação é a Funtoo wiki tão bem quanto as man pages.
    $input = preg_replace('/##i##((?:(?!##!i##).)*)##!i##/','<span class="code_input">$1</span>', $input);
    $input = preg_replace('/##i##(.*)/','<span class="code_input">$1</span>', $input);
    $input = preg_replace('/##b##((?:(?!##!b##).)*)##!b##/','<b>$1</b>', $input);
    $input = preg_replace('/##b##(.*)/','<b>$1</b>', $input);
    return "<pre class=\"code\">" . $input . "&lt;/pre>";
}
?>
</syntaxhighlight>


Para o código fonte, comentários bem detalhados devem ser utilizados. Você pode estar trabalhando no código agora, mas outra pessoa poderá estar trabalhando nele daqui a seis meses. É esperado que desenvolvedores escrevam comentários claros que sejam suficientemente não-técnicos e forneça o contexto necessário para permitir que desenvolvedores menos experiente entendam partes criticas do código, e idealmente ''''todas'''' as partes do código. Por favor veja [[Coding_Standards/pt-br|Padrões de Código]].
[[Category:MediaWiki Hacks]]
 
=== É bem projetado? ===
 
* '''Otimizado?'''
* '''Sustentável?'''
 
Ele constrói e executa, e eu posso utilizá-lo para realizar trabalho de verdade. Mas o sistema é bem projetado? Ele funciona confiavelmente? Todos os patches estão disponíveis e corrige o lugar para assegurar uma experiencia computacional confiável? O Funtoo Linux está fornecendo a melhor tecnologia possível aos usuários? E essa tecnologia é fácil de manter? lembre-se, todas as coisas sendo iguais, menos código é melhor que mais código por que é mais fácil de manter. Há comentários detalhados no código aonde é necessário?
 
=== Estamos melhorando? ===
 
OK, estamos fazendo todas as etapas acima. Aqui está o próximo teste - estamos melhorando? A qualidade, segurança, usabilidade e a manutenção da distribuição está melhorando com o tempo, ou ela está subindo, e depois descendo, e não estamos mesmo tendo nenhum progresso? O objetivo no final do dia é obter progresso avançado no qualidade da distribuição. Isso requer automação melhor, ferramentas melhores, processos melhores, e investimento em pesquisa e desenvolvimento e novos métodos de fazer coisas. Isso também requer a atitude correta. Se estivermos fazendo um monte de trabalho e a qualidade global da distribuição não estiver melhorando, então nossos esforços não estão fazendo diferença a longo prazo, mesmo que eles possam estar tratando bugs e problemas imediatos. Temos que garantir que nossos esforços venham valer a pena, e que eles estão fazendo uma diferença positiva a longo prazo na qualidade da distribuição.
 
=== Qual o verdadeiro problema? ===
 
Construindo nesse tema - quando um bug é encontrado, qual é o ''verdadeiro'' problema, ou a ''raiz (root cause)''? Pensamento estratégico tão bem quanto uma resolução profunda (in-depth troubleshooting) é necessária para identificar a raiz do problema. Devemos somente corrigir as raízes? Não, isso é impraticável, por que fazer isso leva muito tempo. Ao invés disso, soluções alternativas são com frequência utilizadas para restauras rapidamente a qualidade à níveis aceitáveis. No entanto, somente implementar soluções alternativas é perigoso, por que os bugs tendem a multiplicar-se enquanto a questão subjacente não for solucionada. A solução adequada é implementar soluções alternativas mas não perder o foco no necessário para tratar as questões subjacentes, ou raízes, do problema. De fato, muito do foco do Funtoo Linux está nessa ultima etapa - agressivamente corrigindo um monte de questões imediatas assim nós podemos começar a tratar os problemas mais profundos de uma vez por todas...
 
=== Arquitetura ===
 
...e tratar da raiz de problemas com frequência requer uma mudança significativa na arquitetura de software. Funtoo Linux é um projeto que não tem medo de fazer alterações arquitetônicas significantes, e mesmo agressivas, a fim de corrigir problemas. Isso é o que os nossos usuários esperam que façamos, e ''desde que essas alterações sejam propriamente testadas, gerenciadas, planejadas, automatizadas e comunicadas aos usuários'', eles não irão se chatear. Conforme declarado no parágrafo anterior, o projeto Funtoo Linux é zeloso a respeito de tratar esses problemas centrais de arquitetura -- mas nós precisamos controlar os desafios mais fundamentais primeiro. Uma vez soluções alternativas estão no lugar, levaremos uma punhalada em alguma alteração no sistema central que pagarão dividendos bem no futuro.
 
== Exemplos ==
 
Abaixo, você encontrará exemplos de esforços que tem alinhados a esses objetivos. Essa seção lhe dará uma sensação do quanto projetos reais podem ser iniciados que se alinham com a visão do Funtoo Linux definida acima.
 
=== Boot-Update ===
 
[[Boot-Update/pt-br|Boot-Update]] foi projetado por Daniel Robbins para prover um jeito mais elegante de configurar o carregador de boot sob o Funtoo Linux. Esse projeto foi priorizado por várias rasões. Uma, esse projeto tinha que fazer com que a experiência da instalação inicial (veja [[#Ele executa?]]) Também, ausência do suporte ao GRUB2, tão bem quanto o suporte ao GPT/GUID, foi definido como um ponto fraco crítica na funcionalidade atual do Gentoo Linux (veja [[#É bem projetado?]]) Por isso, um novo configurador unificado foi escrito que utiliza <tt>/etc/boot.conf</tt> como arquivo de configuração para o carregador de boot global. Isso representa a mudança na arquitetura do carregador de boot (veja [[#Arquitetura]]) sob o  Funtoo Linux, a fim de melhorar a usabilidade e a flexibilidade em soluções existentes, e tentar reduzir ou eliminar uma classe de problemas relacionadas a configuração do carregador de boot, que é especialmente problemático no GRUB2.
 
=== Metro ===
 
[[Category:Metro/pt-br|Metro]] foi projetado por Daniel Robbins e é utilizado para tratar a questão do "[[#Constrói?]]". A solução existente, catalyst, foi difícil de manter (veja [[#É bem projetado?]]), então  Metro foi desenvolvido para prover um  novo mecanismo para a construção de lançamentos de sistema operacional (OS releases).
 
=== Forked Ebuilds ===
 
Nem todas as melhoras envolvem grandes esforços no desenvolvimento de software. De fato, a maioria das correções envolvem correções relativamente pequenas para os ebuilds. Essas correções são com frequência feitas para corrigir uma falha no Metro build (veja [[#Constrói?]]) ou tratar de alguma questão de qualidade (veja [[#É bem projetado?]]). O ebuild <tt>www-servers/nginx</tt> foi melhorado para prover melhores configurações padrões para sistemas de produção, com alterações correspondentes feitas ao <tt>sys-libs/pam</tt> para permitir que isso funcione. <tt>dev-lang/python</tt> contem correções para assegurar que o contem correções para assegurar que Metro builds complete corretamente e um symlink <tt>/usr/bin/python</tt> válido sempre exista.
 
=== OpenVZ ===
 
Suporte a OpenVZ é uma prioridade específica do Funtoo Linux. Funtoo Linux mantem um patched <tt>sys-cluster/vzctl</tt> com vários patches para corrigir uma variedade de  problemas. Em adição, <tt>openvz-rhel6-stable</tt> e <tt>openvz-rhel5-stable</tt> ebuilds tem sido criados para facilitar a instalação de kernels OpenVZ de qualidade para produção (veja [[#Consigo Usá-lo?]]) em adição, documentação [[OpenVZ]] existe no wiki (veja [[#Consigo Usá-lo?]])
 
[[Category:QA]]

Revision as of 01:05, January 12, 2015

The ConsoleOutput MediaWiki extension was created by Daniel Robbins to provide highlighting of user input for interactive terminal session blocks. To use it, surround user input with <console> opening and closing tags, and put a ##i## input code immediately before user input on each line. This will cause all text from the ##i## point to the end of the line to be in a darker color. The rest of the text will be in a lighter grey, allowing it to be distinguished more easily from user input. Here are other sequences that can be used:

  • ##b## - highlight the rest of the line in bold.
  • ##b## text here ##!b## - highlight the text between both markers in bold.
  • ##i## text here ##!i## - highlight the text between both markers in a darker color.

This extension can be further extended to add color support, as desired, and some of the CSS for color support can already be found in the code below.

Here are a few examples of the ConsoleOutput extension. First this is how you might typically display ls output, with a particular directory highlighted:

www@www-smw ~/public_html $ ls
COPYING  LocalSettings.php     api.php   extensions    index.php   maintenance           redirect.php    skins              thumb_handler.php5
CREDITS  README                api.php5  images         index.php5  mw-config             redirect.php5   tests              wiki.phtml
FAQ      RELEASE-NOTES-1.19    bin       img_auth.php   languages   opensearch_desc.php   redirect.phtml  thumb.php
HISTORY  StartProfiler.sample  cache     img_auth.php5  load.php    opensearch_desc.php5  resources       thumb.php5
INSTALL  UPGRADE               docs      includes       load.php5   profileinfo.php       serialized      thumb_handler.php
www@www-smw ~/public_html $ cd extensions/

And here is how you might display a more detailed example of console output, using colors:

root # bluetoothctl 
[NEW] Controller 00:02:72:C9:62:65 antec [default]
root ##bl##[bluetooth]##!bl### power on
Changing power on succeeded
root ##bl##[bluetooth]##!bl### agent on
Agent registered
root ##bl##[bluetooth]##!bl### scan on
Discovery started
root ##bl##[bluetooth]##!bl### devices
Device 00:1F:20:3D:1E:75 Logitech K760
root ##bl##[bluetooth]##!bl### pair 00:1F:20:3D:1E:75
Attempting to pair with 00:1F:20:3D:1E:75
[CHG] Device 00:1F:20:3D:1E:75 Connected: yes
root ##r##[agent]##!r## Passkey: 454358
root ##r##[agent]##!r## Passkey: 454358
root ##r##[agent]##!r## Passkey: 454358
root ##r##[agent]##!r## Passkey: 454358
root ##r##[agent]##!r## Passkey: 454358
root ##r##[agent]##!r## Passkey: 454358
root ##r##[agent]##!r## Passkey: 454358
[CHG] Device 00:1F:20:3D:1E:75 Paired: yes
Pairing successful
[CHG] Device 00:1F:20:3D:1E:75 Connected: no
root ##bl##[bluetooth]##!bl### connect 00:1F:20:3D:1E:75
Attempting to connect to 00:1F:20:3D:1E:75
[CHG] Device 00:1F:20:3D:1E:75 Connected: yes
Connection successful
root ##bl##[bluetooth]##!bl### quit
[DEL] Controller 00:02:72:C9:62:65 antec [default]
root #

To install, make the following modifications to your skin:

--- mediawiki-1.19.1/skins/vector/screen.css    2012-06-13 18:22:39.000000000 +0000
+++ public_html/skins/vector/screen.css 2012-08-27 04:34:47.507912892 +0000
@@ -683,10 +683,47 @@
        list-style-image: url(images/bullet-icon.png);
 }
 
-pre {
-       line-height: 1.3em;
+/* ConsoleOutput.php start */
+
+.shell, pre, code, tt, div.mw-geshi {
+        font-size: 12px;
+        font-family: Consolas, 'andale mono','lucida console', monospace;
+}
+
+.shell, pre, div.mw-geshi {
+        background-color: #F8F8FF;
+        line-height: 15px;
+        padding: 10px;
+        border: none;
+        border-top: 2px solid #C6C9E0;
+        border-bottom: 2px solid #C6C9E0;
+        margin: 0;
+        overflow-x: auto;
+        overflow-y: hidden;
+}
+
+.code {
+        color: #666;
+}
+
+.code_input {
+        color: #000;
 }
 
+.code_red {
+        color: #f00;
+}
+
+.code_blue {
+        color: #00f;
+}
+
+.shell_green {
+        color: #080;
+}
+
+/* ConsoleOutput.php end */
+
 /* Site Notice (includes notices from CentralNotice extension) */
 #siteNotice {
        font-size: 0.8em;

Then install the following code in your extensions directory and include it with a require_once( "$IP/extensions/ConsoleOutput.php" ); in LocalSettings.php:

<?php
$wgExtensionCredits['validextensionclass'][] = array(
    'name' => 'ConsoleOutput',
    'author' => 'Daniel Robbins',
    'url' => 'https://github.com/danielrobbins/mediawiki-consoleoutput',
    'description' => 'This extension allows you to display colorized console output in mediawiki'
);

if ( defined( 'MW_SUPPORTS_PARSERFIRSTCALLINIT' ) ) {
        $wgHooks['ParserFirstCallInit'][] = 'consoleOutputSetup';
} else {
        $wgExtensionFunctions[] = 'consoleOutputSetup';
}

function consoleOutputSetup( $data )
{
    global $wgParser;
    $wgParser->setHook('console', 'consoleRender');
    return true;
}

function consoleRender($input, $args, $parser)
{
    if (count($args))
    {
        return "<strong class='error'>" .
               "ConsoleOutput: arguments not supported" .
               "</strong>";
    }

    # Display < and > as literals, so escape them:

    $input = preg_replace('/>/','&gt;', $input);
    $input = preg_replace('/</','&lt;', $input);

    # http://www.perlmonks.org/?node_id=518444
    # See "Matching a pattern that doesn't include another pattern:

    $input = preg_replace('/##i##((?:(?!##!i##).)*)##!i##/','<span class="code_input">$1</span>', $input);
    $input = preg_replace('/##i##(.*)/','<span class="code_input">$1</span>', $input);
    $input = preg_replace('/##b##((?:(?!##!b##).)*)##!b##/','<b>$1</b>', $input);
    $input = preg_replace('/##b##(.*)/','<b>$1</b>', $input);
    return "<pre class=\"code\">" . $input . "&lt;/pre>";
}
?>