Utilizador:Raylton P. Sousa/Projetos/BookManager/Concepção de software
Estou redigindo um conceito claro sobre o que eu espero da extensão, pois percebo que a grande lentidão no desenvolvimento tem muita relação com a falta de metas bem definidas |
ContentManager
editarNota:Qualquer um que tenha um minimo conhecimento de programação sabe que tais coisas são apenas devaneios considerando seus grau de dificuldade, continuarei trabalhando na BookManager, mas em paralelo trabalharei numa linha de pensamento mais ampla
Extension:ContentManager | Status |
---|---|
Data Types | |
Data Organize | |
Data Display | |
Data Reuse | |
Related works | |
Theme engine | |
Data Search | |
WolframAlpha Alternative |
Divisão por módulos
editarObs: Em breve haverá uma descrição detalhada de cada módulo
Módulo | Tipo | Descrição | Status | Permissão |
---|---|---|---|---|
Book | ||||
BookCreator | Página especial | Criador de livros passo a passo. | Login | |
BookData | Categoria/Dados | Meta-dados de livros(alguns adquiridos no processo de criação):nível educacional,, capa, tema, referencias, sem falar de: tamanho das páginas, numero de capítulo e de livros etc (para serem manipulados com dpl ou smw)(esboço) | N/D | |
BookSidebar | Skin/Inteface | Criar barra lateral com ferramentas para livros | Iniciado | Logout |
MyBooks | Página especial | Servira provavelmente para organizar livros de interesse dos usuário cadastrados, algo parecido com páginas vigiadas só que não é focado nas atualizações, e provavelmente exibirá a capa do livro em vez de um simples nome(embora deva ser possível configurar) | Login | |
BookAutoCategory | Parser | Categoriza automaticamente livros a partir de prefixo ou algum tipo de regra pré-configurada | Iniciado | N/D |
Category[1] | ||||
CategoryOrder | Página especial | Página especial, serve para todos as categorias (edita informações do banco de dados, perigoso)(ver isso e isso) | Login | |
CategoryNav | Skin/Inteface, Palavras mágicas | Palavras mágicas, parser functions e barra de navegação(exibe informações do banco de dados) | Iniciado | Logout |
CategoryRender | Página especial, Palavras mágicas | renderizar páginas de uma categoria com página especial, e com parser functions(exibe informações do banco de dados) | Iniciado | Logout |
CategoryRandom | Página especial | Página especial com valores aleatórios em categorias que serviram tanto para capítulos quanto para livros(exibe informações do banco de dados) | Logout | |
CategoryCustom | Skin/Inteface | JS e CSS para páginas de uma categorias especifica | ADM | |
General[1] | ||||
ExportDoc | format=[type] | exportar categorias e páginas como pdf odt etc. | Logout | |
BookVeiw | format=bookveiw | visualização páginas ou categorias como livros em uma suíte de escritório (para categoria depende do CategoryRender , talvez sirva também para vizualizar pdf odt) | Logout |
Feedback
editarAtualmente, a BookManager já poderia ser ativada nos projetos(corrigindo alguns bugs, claro) pois já cumpre a meta original para a qual foi criada(que era criar uma navegação automática que substituísse nossas gambiarras). No entanto descobriu-se que a criação de funcionalidades é relativamente simples e atualmente a extensão acabou implementando, parcialmente, outras funcionalidades como versão para impressão, categorização automática, variáveis fora do contexto de navegação como {{NOMEDOLIVRO}}, {{NOMEDOCAPÍTULO}}, {{CAPÍTULOALEATÓRIO}} etc...
Por isso isso acredita-se que a extensão cumpre seu papel inicial mas não seu papel geral que seria "leitores tem que se preocupar em ler e editores em editar(conteúdo)" e todo o resto deve ser tarefa do software, como foi esboçado aqui. Visto isto segue a novissima lista de funcionalidades da bookmanager(que tambem são pré-requisitos para o amplo uso do projeto livros abertos):
- Livros
- Criar/editar
- O criador de livros deve ser um grupo de passos para criar o livro... primeiro os metadados, que incluem classificações(baseadas em mw:StructuredProfile) que poderão ser utilizadas com o semanticwiki ou com o dpl(no entanto classificações mutáveis como nível de desenvolvimento devem ser pensadas com cuidado) e também uma estrutura para criar capas, talvez na etapa para criar capítulos deva haver um botão dizendo simplificadamente algo como "acabei de escrever esse capitulo, quero escrever o próximo" no lugar do botão salvar.
- Os capítulos dos livros devem estar interligados por meio de tabelas, não necessariamente por prefixo(embora a utilização de prefixo deva simplificar o processo de categorização), estas listas não devem ser wikitexto ou osa-lo para sua geração,a ordem dessas listas devem ser atualizadas via ajax.
- O índice pode ser facilmente uma pagina especial que exiba os capítulos em uma determinada lista por isso não é obrigatório que o índice seja a página pai, no caso de uso de prefixo(o que faz com que a extensão possa ser utilizada também na wikipedia para geração de pdfs, etc)
- Devem haver variáveis que devem facilitar a edição de livros, alem de parserfunction que exibam mais que uma página por vez(que servirá para o wikisource), ou que exibam a as posições especificas dos capítulos)
- Ler livros
- Os livro devem poder ser lidos por meio das navegação
- Também deve ser possível gerar versões offlines(pdfs, odts, ...) dos textos tanto para listas de capítulos(like namespace category:) quanto pra capítulos individuais(like &printable=yes)
- Alem disso deve haver uma barra lateral com ferramentas de livros.
- Fora isso deve existir(esse só é uma devaneio) um jeito de exibir os textos de um jeito em formas de páginas como em uma suíte de escritório(sei disso porque o google faz isso aqui e aqui, e outros fazem com flash: docstoc, issuu(meu predileto), yudu, scribd, wepapers )
- Criar/editar
- Grupos de livros
- Deve haver um jeito de exibir uma lista livros de forma consistente(e desatrelada a gráficos) com base nos metadados adquiridos na criação do livro de modo igual ou semelhante ao semanticwiki, mas também deve haver possibilidade de exibi-los no dpl(provavelmente utilizando categorias).
- Também deve haver possibilidade de exibir tais listas em uma página especial
Links uteis
editar- mw:Manual:Tag extensions
- mw:Manual:Parser functions
- mw:Manual:Hooks
- mw:Manual:Special pages
- mw:Manual:Skins
- mw:Manual:Magic words
- mw:Manual:Wg variable
- mw:API
- Ferramentas para fazer buscas no código fonte do MediaWiki:
Metas gerais
editarFluxograma
editarCore
editar- O Núcleo serve basicamente pra gerar uma lista de capítulos para o livro, e permitir que seja possível percorrer tal lista utilizando um numero.
$wgBookManagerPrefixNamespace = NS_PROJECT;
(ficará obsoleta com a criação da página especial)$wgBookManagerNamespaces = array( NS_MAIN );
Variáveis
editarVariaveis | Descrição |
---|---|
{{PREVPAGENAME}} | Mostra a página anterior a partir da lista |
{{PREVPAGENAMEE}} | Mostra a página anterior codificada a partir da lista |
{{NEXTPAGENAME}} | Mostra a página posterior codificada a partir da lista |
{{NEXTPAGENAMEE}} | Mostra a página posterior codificada a partir da lista |
{{ROOTPAGENAME}} | Mostra o titulo que vem antes da primeira "/" |
{{ROOTPAGENAMEE}} | Mostra o titulo codificado que vem antes da primeira "/" |
{{CHAPTERNAME}} | Mostra o titulo que vem depois da primeira "/" |
{{CHAPTERNAMEE}} | Mostra o titulo codificado que vem depois da primeira "/" |
{{RANDOMBOOK}} | Mostra o titulo de um livro aleatório |
{{RANDOMBOOKE}} | Mostra o titulo codificado de um livro aleatório |
{{RANDOMCHAPTER}} | Mostra o titulo de um capítulo aleatório |
{{RANDOMCHAPTERE}} | Mostra o titulo de um capítulo aleatório |
{{NUMBEROFBOOKS}} | Mostra o numero de livros |
{{NUMBEROFCHAPTERS}} | Mostra o numero de capítulos da lista |
$wgBookManagerVariables = true;
$wgBookManagerVariablesNamespaces = array();
- Se for definida vale o
$wgBookManagerNamespaces = array( NS_MAIN );
- Se for definida vale o
Barra de navegação
editar- Características
- Utiliza CSS para toda formatação(incluindo alinhamento) o que permite a total personalização pelo usuário
- O Conteúdo pode ser totalmente alterado a partir de mensagens do sistema(Mediawiki:bm-nav-bar) o que permite anda mais personalização
- Um HTML padrão é mostrado quando a mensagem não está definida
- Navegável pelas setas do teclado
$wgBookManagerNavBar = true;
$wgBookManagerNavBarNamespaces = array();
- Se for definida vale o
$wgBookManagerNamespaces = array( NS_MAIN );
- Se for definida vale o
Categorização
editar- Categoriza as páginas dos livros se a categoria da {{BASEPAGENAME}} existir.
$wgCategorizationByPrefix = true;
$wgCategorizationByPrefixNamespaces = array();
- Se for definida vale o
$wgBookManagerNamespaces = array( NS_MAIN );
- Se for definida vale o
Lista de livros
editar- Opções de nome
- Special:Book manager
- Special:Book list
Lista de capítulos
editar- Opções de nome
- Special:Book manager/[ROOTPAGENAME]
- Special:Chapter list/[ROOTPAGENAME]
- ver isso e isso
Renderização
editar- Opções de nome
- Special:Book manager/[ROOTPAGENAME]&render=[type]
- Special:Book render/[ROOTPAGENAME]&format=[type]
- $wgPageRender = true;
Personalização
editar- Essa funcionalidade não é recomendada pois pode fragmentar o JS/CSS dificultando a manutenção (virá desativada por padrão)
- Mediawiki:prefix-[ROOTPAGENAME].css
- Mediawiki:prefix-[ROOTPAGENAME].js
- Mediawiki:[PAGENAME].css
- Mediawiki:[PAGENAME].js
Menu lateral
editar- Livro aleatório
$wgRamdomBookInSidebar = true;
- Ferramentas para livros
- Capítulo aleatório
- Mudanças recentes do livros
- ODT
- Impressão
$wgBookSidebarSection = true;
Parser funcion(baixa prioridade)
editar- {{#chapter:[NAME OF CURRENT CHAPTER]|+5}} - Soma ou subtrai a posição do capitulo atual fazendo com que seja possível navegar indiscriminadamente por eles.
- {{#displaychapters:[NAME OF BOOK]|1|5}} - Mostra o texto em um intervalo de capítulos.(algo que lembre o comando <pages index="nome_do_arquivo.djvu" from=20 to=40/> da mw:Extension:Proofread Page )
Metas principais
editarParte 0(planejamento)
editar- Inspirar-se na mw:Extension:Proofread Page e seu comando <pages index="nome_do_arquivo.djvu" from=20 to=40/> Feito,(não vejo muito utilidade para essa funcionalidade no contexto, mas muita coisa serve como inspiração)
- Observe que antes de converter AutoNav para PHP deve-se resolver a maioria dos problemas do AutoNav atual e testar amplamente, para que o PHP sirva somente para melhorar o que já foi feito e facilitar a interação com o usuário sem necessidade de JS. Feito
Parte 1(variáveis)
editar- Escrever AutoNav com PHP (descobrir um jeito de fazer de forma linear) Feito
- Escrever Autonav com PHP+MediaWiki Feito
- Criar variável PHP que defina ou detecte o prefixo onde a lista de capítulos pode ser encontrada (ex:
Livro:
,Wikilivros:Livros/
) Feito(parcialmente)- Descobrir se o Namespace funciona sem prefixo definido.
- Criar variável {{ROOTPAGENAME}}(e sua respectiva função que indicará o nome do livros onde a lista pode ser encontrada) Feito
- Descobrir como utilizar a extensão Collection para gerar uma lista de páginas Feito
- Criar variável {{PREVPAGENAME}} e {{NEXTPAGENAME}} Feito
- Criar versão codificada da variável com os nomes: {{PREVPAGENAMEE}}, {{NEXTPAGENAMEE}} e {{ROOTPAGENAMEE}} Feito
- Criar variável PHP que limite o numero máximo de páginas da lista(embora com a nova abordagem do código numero máximo para que a página comece a ficar lenta tenha aumentado muito, é preferível que haja uma opção como essa para evitar algum tipo de vandalismo ou atraso). Levar em conta que os livros criados com a extensão collection podem ter no máximo 500 capítulos ($wgCollectionMaxArticles = 500). Então para manter a compatibilidade entre as extensões, os limites devem ser mantidos iguais entre as duas.
- Criar respectivas variáveis JS globais(baixa prioridade, deve vir desativada por padrão)
Parte 2(barra de navegação)
editar- Criar uma navegação(gráfica) superior e inferior que seja definida em uma mensagem do sistema (ver mw:Extension:PageNotice) Feito
- Criar configuração de namesapace semelhante a mw:Extension:ReaderFeedback Feito(na rev:83150 e corrigido na rev:83164)
- Criar versão que adicione o html diretamente caso nenhuma mensagem seja definida Feito (na rev:83706)
- Criar folha de estilo para formatar navegação. Feito
- Criar JS para acessibilidade a partir do teclado. Feito(na rev:84906. Falta saber o que há de errado com o ResourceLoader)
- Descobrir o motivo daquele(s) bug(s) contemporâneo(s) ao ResourceLoader.
Parte 3(correção de bug do mediawiki)
editar- Corrigir bug nas variáveis {{BASEPAGENAME}} {{SUBPAGENAME}} que tratam somente as barras "/", sem observar se as páginas exitem ou não (feito atualmente com #ifexist nas predefinições
{{EXISTBASEPAGENAME}}
e{{EXISTSUBPAGENAME}}
).Isso será feito na extensão, mas idealmente deveriadeve ser adicionado ao núcleo do mediawiki dentro das respectivas variáveis e sem qualquer parâmetro extra (visto que exitem maneiras muito rápidas de detectar esse tipo de coisa, como alias já é feito no mediawiki)- já criamos o código para o core mediawiki e enviamos para avaliação no bugzilla:27976, mas ainda é preciso criar os parser tests pedidos pelo Mark A. Hershberger e atualizar o patch enviado.
Parte 4 (revisão)
editar- Varrer código a procura de falhas...
- Seguir as convenções sempre que possível
- Utilizar ferramentas para apurar erros
- Observar bugs em funcionalidades da extensão
- Em caso de duvida chamar o Helder com o Helder-Sinal
Outras funcionalidades
editar- Criar primeiramente partes que não são suportas pela collection (como versão para impressão e categorização por prefixo).
- Criar pagina especial Special:Book render com a ação "type" ou "format" que indicará o formato de saída, exemplo:
&type=pdf
. - Criar página especial Special:Chapters list que que irá conter as listas de capítulos (incluindo a ordem em que os capítulos vão ser analisados, por exemplo: alfabética, manual etc).
- Criar categorização por prefixo que será controlada pela variável $wgCategorizationByPrefix;(tipo "lógico ou boolean").
- Criar menu lateral(sidebar) com as ferramentas dos livros.
- Criar variáveis {{RANDOMCHAPTER}}, {{RANDOMBOOK}}, {{NUMBEROFBOOKS}} e {{NUMBEROFCHAPTERS}}.
- Descobrir se é mais produtivo criar um layout de banco de dados separado ou tentar utilizar categorias(O que seria um impulso pra eu chatear os caras do irc pra melhorar as funcionalidades das categorias, ou até melhorar sozinho).
- Adicionar um JS e um CSS pra cada livro.
- Criar Uma página especial para listar os livros e algumas estatísticas e também proteger vigiar e detetar livros inteiros.
- Fazer com que as referencias espalhadas pelo livro possam ser visualizadas em uma única pagina.