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

editar

Nota: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

editar

Obs: 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

editar

Atualmente, 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 )
  • 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
editar

Metas gerais

editar

Fluxograma

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

editar
Variaveis 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 );

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 );

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 );

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
editar
  • Livro aleatório
    • $wgRamdomBookInSidebar = true;
  • Ferramentas para livros
    • Capítulo aleatório
    • Mudanças recentes do livros
    • PDF
    • ODT
    • Impressão
    • $wgBookSidebarSection = true;

Parser funcion(baixa prioridade)

editar

Metas principais

editar

Parte 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

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.
  1. 1,0 1,1 útil na pédia e cia.