Como testar código que depende do sistema de arquivos com PHPUnit e vfsStream

Já faz um tempo que me interesso por testes unitários e em especial por TDD. Utilizo o PHPUnit, o principal framework da família xUnit para PHP. Neste post vou fazer uma rápida apresentação do vfsStream, um stream wrapper que permite simular um sistema de arquivos no PHP, facilitando muito a escrita de testes para código que manipula ou depende do sistema de arquivos.

Abaixo segue uma classe que utilizaremos como exemplo (para simplificar ela somente apresenta os elementos que interessam para este post):

<?php

class File
{
	/**
	 * Path to the file
	 * @var string
	 */
	protected $path;

	/**
	 * 
	 * @param string $path
	 * @return null
	 */
	public function __construct($path)
	{
		$this->path = $path;
	}
	
	/**
	 * Add a string to the end of the file
	 * @param string $string
	 * @return null
	 */
	public function append($string)
	{
		file_put_contents($this->path, $string, FILE_APPEND);
	}
	
	/**
	 * Return file contents as a string
	 * @return string
	 */
	public function get()
	{
		return file_get_contents($this->path);
	}
}

Se formos testar essa classe somente com os recursos oferecidos pelo PHPUnit, teríamos que criar e destruir os arquivos utilizando os métodos setUp() e tearDown() respectivamente. Isso funciona porém tem algumas complicações. Por exemplo, se por algum motivo a execução do teste for abortada, os arquivos criados não serão removidos do sistema de arquivos. Outro problema dessa abordagem é a manutenção dos testes quando o código a ser testado trabalha com múltiplos arquivos e/ou diretórios.

Utilizando o vfsStream não é necessário utilizar o tearDown() já que tudo é criado na memória e você tem mais controle e garantias sobre o ambiente de teste já que este é completamente virtual e não está sujeito a influência de outras operações que podem ocorrer enquanto os testes são executados.

Veja abaixo uma classe de testes que utiliza o vfsStream para testar os métodos descritos acima:

<?php

require_once('File.php');
require_once('vfsStream/vfsStream.php');

class FileTest extends PHPUnit_Framework_TestCase
{
	protected $obj;
	
	protected $file;
	
	protected $string;
	
	protected function setUp()
	{
		$this->string = "first line\n";
		
		$root = vfsStream::setup();
		
		$this->file = new vfsStreamFile('file.txt');
		$this->file->setContent($this->string);
		$root->addChild($this->file);
		
		$this->obj = new File(vfsStream::url('file.txt'));
	}
	
	public function testAppend()
	{
		$string = "second line\n";
		$expectedResult = "first line\n" . $string;
		 
		$this->obj->append($string);
		
		$this->assertEquals($expectedResult, $this->file->getContent());
	}
	
	public function testGet()
	{
		$this->assertEquals($this->string, $this->obj->get());
	}
}

No método FileTest::setUp(), a chamada ao vfsStream::setup() cria o diretório raiz do sistema de arquivos virtual e retorna um objeto do tipo vfsStreamDirectory. Na sequência, nas linhas 20 e 21, é criado um novo objeto do tipo vfsStreamFile e definido seu conteúdo inicial. Por fim na linha 22 o novo arquivo é adicionado a raiz do sistema de arquivos virtual e na linha 24 uma instância da classe que vamos testar é gerada recebendo como argumento o caminho para o arquivo.

O restante do código é auto explicativo para quem está acostumado com o PHPUnit, com exceção da linha 34 onde para verificar se o arquivo foi mesmo modificado é utilizado o método vfsStreamFile::getContent().

Para mais informações veja sobre o vfsStream sugiro:

Erro ao importar um blog do Blogspot para o WordPress

Estou trabalhando na importação do blog de receitas da Rede Ecológica que ficava no Blogspot para dentro do novo site que usa o WordPress (o que já está pronto pode ser visto em http://redeecologicario.org/blog e o blog original em http://ecosdarede-receitasecologicas.blogspot.com/). Já fiz importações como essa anteriormente sem grandes problemas. Mas dessa vez me deparei com um erro estranho e como demorei um tempo para descobrir a melhor solução compartilho aqui nesse post caso alguém passe pelo mesmo problema.

O WordPress possui uma ferramenta (o plugin Blogger Importer) para facilitar essa migração. Após instalá-lo o primeiro passo é clicar no botão “Authorize” para autorizar o acesso do WordPress ao conteúdo que está no Blogspot. Porém para minha surpresa apareceu o seguinte erro:

“Não é possível exibir a página solicitada. Outro site estava solicitando acesso à sua conta do Google, mas enviou uma solicitação incorreta. Entre em contato com o site que estava tentando usar quando recebeu essa mensagem para informá-los do erro. Segue abaixo uma mensagem de erro detalhada:

O site “http://redeecologicario.org” não foi registrado.”

Ou em inglês:

The page you have requested cannot be displayed. Another site was requesting access to your Google Account, but sent a malformed request. Please contact the site that you were trying to use when you received this message to inform them of the error. A detailed error message follows:

The site “http://example.com” has not been registered.

Infelizmente, como acontece muitas vezes no mundo dos computadores, a mensagem de erro não explica exatamente qual é o erro como vamos ver mais abaixo. Encontrei muitos relatos desse mesmo erro porém sem a solução. Parecia que o único jeito era contornar o problema exportando o blog do Blogspot para um arquivo XML e então convertendo esse arquivo para o formato do WordPress usando o site http://blogger2wordpress.appspot.com/ ou uma conta temporária no wordpress.com.

Só depois de um tempo que encontrei uma explicação para o erro em questão e a respectiva solução no post abaixo:

http://bloggertowp.org/solution-error-the-site-has-not-been-registered-during-wordpress-import/

Para poder utilizar o importador é necessário primeiro registrar o site que importará conteúdo do Blogspot na sua conta do Google. Para fazer isso acesse a URL:

https://www.google.com/accounts/ManageDomains

E pronto, agora é só seguir com a importação. Muito estranho isso não estar documentado no próprio plugin.

FLISOL 2011 Rio de Janeiro

Reproduzo abaixo o texto de divulgação do FLISOL 2011 Rio de Janeiro (para uma versão atualizada veja http://softwarelivre-rj.org/flisol2011/)

No próximo dia 9 de abril vai acontecer na UNIRIO – URCA a edição carioca do maior evento de divulgação de software livre da América Latina: o FLISOL (Festival Latino Americano de Instalação de Software Livre).

O FLISOL2011 RJ é organizado pelo SoftwareLivre-RJ.org, trazendo voluntários para realizar instalações de Software Livre nos computadores dos visitantes do FLISOL2011.

A participação no FLISOL2011 é totalmente gratuita e aberta à comunidade. Durante todo o dia você poderá levar seu computador para que nossos técnicos instalem diversos softwares livres de forma gratuita e segura! Além disso, teremos uma excelente programação, com palestras e minicursos, para você não apenas conhecer, mas também aprender a utilizar os programas que estão revolucionando a informática no mundo todo.

Estaremos com 2 grandes salas com capacidade para 70 pessoas cada sala.

Teremos 5 mini-salas com os seguintes eventos:

  • Apache Meet (Meet da Fundação Apache).
  • Debate sobre Pirataria, Copyleft, Produção Livre e etc…
  • Workshop de Computação Gráfica.
  • Workshop de Arduino (com a ArduInRio).
  • Install Fest
  • Debate sobre Cultura.
  • e mais algumas novidades…

Teremos 16 palestras com membros das seguintes Comunidades de Software e Hardware Livre e afins do Rio de Janeiro:

  • PHP Rio
  • RubyOnRio
  • ArduInRio
  • AndroidInRio
  • BeagleboardInRio
  • ForkInRio
  • PythOnRio
  • #horaextra
  • Rio Perl Monges
  • DojoRio
  • Coding40Graus
  • RioSDI

Sobre os serviços oferecidos pelo FLISOL2011:

  1. O FLISOL2011 é um evento que irá realizar a instalação de Software Livre, bem como lhe fornecer indicações de como e onde obter mais informações e suporte. Para participar das instalações basta comparecer no local do evento, ler e concordar com todos os itens do Termo de Responsabilidade (disponível no site do evento) – e levar o seu microcomputador até o local do evento indicado no parágrafo abaixo.
  2. O interessado compromete-se a fazer uma cópia de todos os seus dados que estão no seu computador. A organização do FLISOL2011 não se responsabiliza pelo armazenamento de arquivos no computador e não efetuará back-up para os participantes.
  3. Caso não seja possível efetuar a instalação dentro do horário estipulado para o evento ou por problemas técnicos, o evento não estará obrigado a efetuá-las.
  4. O FLISOL2011 somente instalará Software Livre em 1 (uma) máquina por pessoa.

Local: UNIRIO – URCA
Quando? 9 de Abril de 2011.
Quanto? de graça!
Site: http://flisol.softwarelivre-rj.org
Programação do evento: http://softwarelivre-rj.org/flisol2011/programacao.php
Material para divulgação (este flyer): http://softwarelivre-rj.org/flisol2011/divulgacao.pdf
A quem se destina? Estudantes, professores, empresários, empreendedores, piratas, hackers, nerds, geeks, artistas, webmasters, médicos, diagramadores, produtores de mídia visual e fonética, analistas de segurança, programadores e militantes de sistemas e hardware livres.

Como instalar e configurar a impressora multifuncional HP d110a no Ubuntu

Atualização 21/08/2011: muita gente tem comentado nesse post relatando problemas para configurar essa impressora no Windows. Só para esclarecer uso Linux e a d110a funciona perfeitamente nele (tanto USB quanto wireless). Não tenho Windows então não tenho como ajudar quem usa esse sistema operacional.

Sou usuário de Linux, mais especificamente do Ubuntu, há muitos anos. Na minha experiência um dos principais problemas é na hora de instalar uma nova placa ou periférico. Nem sempre existe suporte para Linux e mesmo quando existe a instalação muitas vezes não é simples ou o suporte é parcial (vale notar que isso ocorre porque os fabricantes não desenvolvem drivers para o Linux ou drivers de código aberto e não por um problema do Linux em si).

Resolvi escrever esse post pois comprei uma impressora multifuncional HP d110a essa semana e fiquei impressionado com a simplicidade de sua instalação e configuração. Não foi necessário instalar nenhum driver, baixar alguma coisa da internet, usar algum CDROM. Isso graças ao hplip, um software livre desenvolvido pela própria HP para suportar as impressoras e multifuncionais no Linux. Veja a lista de modelos suportados pelo hplip.

Apesar desse post ser sobre a d110a, imagino que o procedimento seja o mesmo ou muito semelhante para praticamente todos os modelos da HP.

Instalação da HP d110a no Ubuntu

Os próximos passos assumem que a impressora está ligada e está conectada na mesma rede sem fio que o computador rodando Ubuntu. Não testei a configuração da impressora usando um cabo USB, mas os procedimentos devem ser muito parecidos.

  1. No menu Sistema -> Administração -> Impressão clique no botão “Adicionar”
  2. Expanda o item “Impressora de rede” e a sua impressora deve aparecer listada como “HP Photosmart D110”. Se a impressora não aparecer selecione “Localizar impressora de rede” e depois clique no botão “Localizar”.Tela de busca de impressora de rede
  3. Selecione “HP Photosmart D110” e clique em “Avançar”. Na tela seguinte coloque um nome para sua impressora ou então use o nome padrão. Clique em “Aplicar”.
  4. Pronto a impressora está instalada. Se quiser pode optar por imprimir uma página de teste. Na sequência você deve ver a tela abaixo.Tela já com a impressora instalada
  5. Para ter acesso aos nível de tinta de cada um dos cartuchos pelo Ubuntu (é possível ver essa informação diretamente na impressora), instale o pacote hplip-gui e vá em Sistema -> Preferências -> HPLIP Toolbox. Com esse software é possível também alterar várias configurações da impressora.Nível de tinta dos cartuchos da d110a

Configurando o scanner

Após realizar os passos acima. Não é necessário nenhuma configuração adicional para usar o scanner. Vá em Aplicativos -> Gráficos -> Digitalizador simples e digitalize o que quiser. Abaixo uma imagem do Digitalizador simples depois de digitalizar a página de teste do Ubuntu que foi impressa usando a própria impressora.

Usando o scanner da d110a

Como ajudar a traduzir o Tiki

Nesse post vou descrever como contribuir com a tradução do Tiki para o português. “O Tiki é um software livre (LGPL) para gerenciamento de conteúdo através da Web, possibilitando a criação de websites e portais na Internet e também em intranets.” (Wikipédia).

Contribuir com a tradução de um projeto de código aberto é uma das maneiras mais simples de ajudar a comunidade. No caso do Tiki existem duas formas, ambas são descritas abaixo.

A primeira consiste em editar um arquivo PHP com todas as strings. Requer na maioria dos casos um pouco mais de conhecimento técnico, mas é a mais completa. A outra opção é utilizar o sistema de tradução interativa, onde o usuário traduz o software enquanto navega pelo mesmo no browser. É a opção mais simples porém tem algumas limitações.

Nesse post vou detalhar a tradução utilizando a interface do Tiki. Vou apenas comentar brevemente os passos necessários para traduzir editando o arquivo PHP porém estou a disposição para dar mais esclarecimentos caso alguém, como eu, prefira esse caminho.

Usando a interface de tradução interativa

O recurso de tradução interativa existe a algum tempo no Tiki, porém na versão 5.0 ele foi reformulado e melhorado. Esse recurso permite que o usuário faça tradução enquanto navega por um site rodando o software. Com ele habilitado, quando você clica em algum campo de texto uma caixa aparece para que a tradução seja feita.

As traduções feitas com a tradução interativa são guardadas na base de dados e não no arquivo language.php que é o arquivo distribuído junto com o pacote de instalação do Tiki (existe um arquivo desse para cada idioma). Recentemente (para a versão 6.0 que deve sair mês que vem) adicionei um novo recurso ao software para exportar as traduções guardadas na base de dados para o arquivo language.php correspondente. Com isso, a comunidade criou o site http://i18n.tiki.org que é basicamente uma instalação do Tiki com o recurso tradução interativa habilitado para qualquer pessoa que quiser ajudar na tradução possa fazê-lo sem se preocupar em ter que instalar uma versão local do software.

De tempos em tempos alguém da comunidade verifica o que foi traduzido no site, exporta para o arquivo language.php corresponde e envia para o repositório SVN para que as traduções sejam incorporadas na próxima versão do software.

Segue abaixo o passo a passo para usar a tradução interativa dentro do i18n.tiki.org. Se você quiser usar o recurso na sua própria instalação do Tiki veja como habilitá-lo no seguinte link http://doc.tiki.org/Interactive+translation (em inglês).

  1. Crie um usuário no site i18n.tiki.org: http://i18n.tikiwiki.org/tiki-register.php
  2. Entre em contato diretamente comigo ou com algum outro administrador do site pela lista de desenvolvimento, informe o usuário e peça para ganhar permissão para usar o recurso de tradução interativa.
  3. Entre com seu usuário no site http://i18n.tiki.org
  4. Use o módulo “Site language” (“Idioma do site”) para selecionar o idioma para o qual deseja traduzir. O módulo é o segundo na coluna da direita.
  5. Entre na página “Editar idiomas”: no menu da esquerda, selecione a opção “Editar idiomas” da seção “Administrar” ou diretamente http://i18n.tikiwiki.org/tiki-edit_languages.php) e clique no botão “Ligar modo de tradução interativa” (“Toggle interactive translation on”). Atenção: Não confudir a página “Editar idiomas” com a página “Idiomas” (tiki-admin.php?page=i18n) que pode ser acessada através do painel de administração.
  6. Uma barra azul será exibida no topo do site. Essa barra é utilizada para habilitar e desabilitar o uso da tradução interativa.
  7. Navegue até a página que deseja traduzir algum conteúdo e clique no checkbox “Tradução interativa” (para poder navegar novamente pelo site você precisa deselecionar esse checkbox).
  8. Clique na frase que deseja traduzir. Uma janela será exibida com as frases relacionadas (veja a imagem).
  9. Modifique a frase e clique em “Salvar tradução”. As mudanças que você fez somente aparecerão depois que você recarregar a página. É comum aparecer na tela algumas frases não relacionadas diretamente com a clicada, em geral os resultados mais significativos estão no topo.

Editando diretamente o arquivo language.php

Conforme comentei anteriormente editar diretamente o language.php demanda um pouco mais de conhecimento técnico. É necessário baixar uma cópia do Tiki para sua máquina e instalá-lo. Visite os dois links abaixo para saber como fazer isso.

http://dev.tiki.org/Get+code

http://doc.tiki.org/Installation

Com o Tiki instalado, edite o arquivo corresponde ao idioma que deseja traduzir. No caso do português o arquivo é o lang/pt-br/language.php. Esse arquivo nada mais é que um grande array PHP. A chave do array é a frase em inglês e o valor é a tradução.

Frases que ainda não foram traduzidas possuem um comentário de código no começo da linha (//). Para que a tradução seja reconhecida pelo Tiki é necessário remover o comentário (as duas barras).

Se busca alguma frase que não aparece no arquivo é porque ele está desatualizado. Para atualizá-lo é necessário rodar o script get_strings.php com o idioma em questão como parâmetro. Como exemplo, segue a página que preciso abrir no browser:

http://localhost/tiki/get_strings.php?lang=pt-br

Após realizar as traduções você pode enviar-las para o repositório central usando o SVN. Para isso é necessário solicitar uma conta de desenvolvedor (qualquer um que pede ganha). Veja http://dev.tiki.org/DevTips (em inglês).

Para mais informações sobre como traduzir através do arquivo language.php veja http://doc.tiki.org/Interface+translation#General_process

Quinta Livre organiza debate “Software livre e políticas públicas” na USP

Na próxima quinta-feira, dia 23, ocorrerá na USP um debate organizado pelo grupo Quinta Livre sobre “Software livre e políticas públicas” com representantes de diversos partidos políticos.

Declarações como a feita recentemente pelo presidente da Microsoft na América Latina criticando a posição do governo brasileiro em relação ao software livre aumentam minha impressão de que cada vez mais o poder público compreende a importância política do uso de software de código aberto. Nesse contexto, é de extrema importância um debate como este que o pessoal da Quinta Livre está organizando para tornar público a opinião dos diferentes partidos em relação ao uso de software livre nos programas governamentais.

Conversei com algumas pessoas que estão organizando o evento e eles planejam transmitir o debate ao vivo pela web e publicar em algum lugar o vídeo para quem quiser assistir depois.

Segue abaixo as informações que copiei de um post do blog do grupo. Esse outro post tem um texto introdutório justificando a necessidade do debate. Para as últimas informações visite o site do Quinta Livre.

Data e hora:
23 de SETEMBRO de 2010 (é uma quinta-feira) às 19:30.

Local:
Auditório da Escola de Aplicação, Faculdade de Educação, USP-SP (Cidade Universitária do Butantã) (mapa)

Debatedores:
Ale Youssef – candidato a Deputado Federal pelo PV
Paulo Teixeira – Deputado Federal pelo PT
Paulo Bufalo – candidato a Governador pelo PSOL
Rodrigo Mendes – candidato a Deputado Estadual pelo PTB
William Ferraz – candidato a Deputado Estadual pelo PSDB

Além disso o debate contará com a presença do Junior, do Movimento Negro Círculo Palmarino, que participara expondo um caso de uso de software livre.

O moderador será Sergio Amadeu (a confirmar). Paulo Kretcheu será o provocador.

Tiki Fest Montreal 5

Below some pictures from the first day of Tiki Fest Montreal 5. A Tiki Fest is a

is a meeting between Tiki contributors (that usually only meet
online). This is an opportunity, usually, to socialize over drinks,
get some laptops out and code wildly in group sessions and/or
discuss about wiki technology and culture, etc. depending the mood
and context. It is a great opportunity for Tiki users and Tiki
power users to meet some of the developers and learn more stuff.

http://tikiwiki.org/TikiFest

This was the third time I have been to a TikiFest (the first two were in London and Barcelona last year).

Marc did a presentation of Tiki 5.0. He did a new installation and configured  the software based on the necessities brought by some folks that might use Tiki as the wiki engine for Bixi (one of the most amazing things of Montreal and for sure a subject for a next post).

Louis-Phillipe talked about category transitions and I showed my ideas for the blog revamp. I will be working to improve Tiki Blog during this (northern) summer.

Como manipular metadados de fotos no Linux com o exiv2

Atualização 21/06/2011: o Xavi comentou abaixo que o Shotwell tem uma opção para editar os metadados em lote. Fica a dica para quem prefere a interface gráfica. Para mais informações http://yorba.org/shotwell/help/edit-time-date.html

Algumas vezes quando viajo mais de uma pessoa leva câmera fotográfica. Quando volto, gosto de juntar todas essas fotos em um único diretório e renomear elas de acordo com a data de criação para poder vem as fotos em ordem independente da câmera. Para fazer isso uso a ferramenta para renomear em lote do software digiKam. Para fazer isso, usava o digiKam mas não encontrei essa opção na nova versão que vem com o Ubuntu 9.10. Utilizei então o Krename.

Porém, algumas vezes a data e o horário de uma das câmeras não está certo e, por tanto, o metadado referente a data de criação das fotos está errado. Para poder renomear as fotos levando em conta a data de criação é necessário então primeiro corrigir o metadado. Para isso utilizo o exiv2, uma ferramenta de linha de comando para linux para editar metadados de fotos.

Para instalar o exiv2 no Ubuntu basta rodar o seguinte comando:

sudo aptitude install exiv2

Para ver os metadados de uma foto basta passar o nome do arquivo como primeiro parâmetro para o software (onde foto.jpg deve ser trocado pelo nome do arquivo):

exiv2 foto.jpg

Também é possível inserir, deletar, modificar ou renomear metadados. Informações sobre como utilizar esses recursos podem ser obtidas na man page do programa:

man exiv2

Existe ainda o recurso de ajustar a data e horário de criação de uma ou mais fotos passando um número de horas, ou dias, ou meses (etc). Com isso basta descobrir em quanto a data da câmera que tirou as fotos estava errada (comparando por exemplo os metadados de duas fotos tiradas com câmeras diferentes mais ou menos no mesmo horário) e utilizar o recurso de ajustar data e horário do exiv2.

A opção para ajustar é a ad e ela depende de pelo menos mais um parâmetro que pode ser (tradução livre da man page):

  • -a tempo – Ajustar tempo no formato [-]HH[:MM[:SS]]. Essa opção só pode ser usada com a ação de ajustar (ad). Exemplos: 1 adiciona uma hora, 1:01 adiciona uma hora e um minuto, -0:00:30 subtrai trinta segundos.
  • -Y anos – Ajuste de tempo com base num número positivo ou negativo de anos.
  • -O meses – Ajuste de tempo com base num número positivo ou negativo de meses.
  • -D dias – Ajuste de tempo com base num número positivo ou negativo de dias.

Por exemplo, para arrumar em uma hora e meia o horário de todas as fotos da extensão JPG que estão em um determinado diretório:

exiv2 ad -a 1:30 *.jpg

Ou então para subtrair duas horas, quarenta minutos, quinze dias e dois meses:

exiv2 ad -a -2:40 -D 15 -O 2 *.jpg

Ps: alguém conhece alguma interface gráfica para Linux que permite fazer esse tipo de manipulação de fotos?

Dois vídeos e fotos do TikiFest em Barcelona

No começo de agosto estive em Barcelona para mais um encontro da comunidade do Tikiwiki, o TikiFest Barcelona (http://tikiwiki.org/TikiFestBarcelona). Enquanto eu trabalhava no meu projeto para o Google Summer of Code, o restante do pessoal estava lá para desenvolver um novo recurso para o Tikiwiki: workspaces.

O Luci publicou muitas fotos do encontro quase todas com legendas engraçadas nesse link aqui http://picasaweb.google.com/mindbro/TikiFestBarcelona2009

Além das fotos, foram feitos dois vídeos do encontro. O primeiro foi feito pela Vladislava, mulher do Luci, ela é Tcheca e trabalha para uma televisão chinesa independente (é uma televisão chinesa proibida na China). É um vídeo com um carater mais institucional, de divulgação do Tikiwiki, com entrevistas com alguns dos membros da comunidade (mais informações sobre a matéria http://english.ntdtv.com/ntdtv_en/ns_europe/2009-08-13/093675925612.html).

O segundo vídeo foi feito pelo Xavier, ele é de Barcelona e foi quem organizou toda a logística do encontro. O vídeo dele é mais longo e mostra um pouco mais da dinâmica do encontro.

[flv]http://media.ntdtv.com/ebrief/news/20090813-wn-15-tikifest in barcelona.flv[/flv]

[blip.tv ?posts_id=2588156&dest=-1]

GSOC TikiFest in London

In the first week of July I was in London for the GSOC (Google Summer of Code) TikiFest. TikiFests are a tradition in the Tikiwiki community. It is when two or more Tiki contributors get together to code, discuss about free software etc.

This time the main reason for the TikiFest was to gather together all the students from GSOC who are working in the Tikiwiki projects. This is the first year Tikiwiki is participating in GSOC and there are four students involved, including myself.

dsc01365-copy

Two students from Spain, Aldo and Ben, are working together to create the new workspaces feature (the ability to have collections of items/objects that allow different set of users to have different kinds of access in a single Tikiwiki installation). For more information on their project see the wiki page http://dev.tikiwiki.org/workspaces. At the TikiFest they presented their work done until that moment and we discussed some tricky aspects of the implementation. The development of the workspaces is of great interest for the Tikiwiki community and there are more people working on it at present besides the two GSOC students. On the first week of August there will be another TikiFest in Barcelona just to discuss and develop some parts of the workspaces.

Another student from India, Nagendra, was there to present his project which will allow online video edition in Tikiwiki using the Kaltura API. Maybe in the future we will be able to edit video the wiki way using this.

dsc01357-copy

And finally I presented my project to create a migration script from Mediawiki to Tikiwiki. As my mentor on this project, Nelson Ko, was at the TikiFest I had a great opportunity to make some crucial decisions for the project. Mainly to leave phpBB for another project and focus only on the migration from Mediawiki to Tikiwiki.

Beside the presentation of the projects, we also discussed some interesting aspects of the free software world. Aldo and Amette showed some of the great features Git has over SVN and we discussed how the Tikiwiki community could benifit from moving to Git (for example merging branches is much easier with Git). It was agreed that as an expemeriment the workspaces development would be done using Git.

dsc01360-copy

Jonny talked about the recent development of the Tikiwiki profiles and Jean-Marc showed some inconsistencies between the administration page of different Tikiwiki features and we discussed possible interface standards for those pages.

Olaf-Michael brought the discussion about Tiki as an open translation tool. He told us about http://translatewiki.com/, a place to centralize and make the translation of different open source wiki softwares as easy as possible. They are interested in putting Tikiwiki in the pool of softwares they translate and Olaf is in contact with them to make this happen. Although the way Tikiwiki handles with translations at present (a PHP array for each language with key/value pairs) is accepted by TranslateWiki I mentioned at the TikiFest that it would be a good idea for the Tikiwiki community to switch to a standard open source tool for translation like gettext.

dsc01358-copy

At present it is hard for a non-technical person to start helping with Tikiwiki translation. As I host several sites using Tikiwiki for different Brazilian social movements I am very interested in making it easier to translate. I think that using a standard tool for that purpose is a great first step. We can take advantage of all the tools built around gettext that already exist. I plan to look at this question in the next weeks, so if anyone else is also interested please do let me know. Apparently it is not that hard to convert to gettext. PHP has gettext built-in support and there is already a script to convert from Tikiwiki language.php files to gettext. Before moving, as mentioned by Jean-Marc, it is a good idea to talk with people from other projects that already use gettext to learn from their experience.

On the last day of the meeting, Aldo, Ben and I (unfortunately Nagendra had to leave the day before) talked about the difficulties we had with Tikiwiki when we started our projects. We agreed that the lack of technical documentation and tests were the two most difficult aspects.

Without technical documentation we had to read the code to understand what a function does and without tests it is much harder to know if the change you are making will break something elsewhere in the code. With this in mind we are using in our projects phpDocumentor and PHPUnit. By using phpDocumentor we can have some day, as proposed by Aldo in the devel list, api.tikiwiki.org. Very similar to http://api.joomla.org/ or http://api.cakephp.org/. Which can help to atract more contributors. PHPUnit is already used in a few parts of Tikiwiki. Louis-Phillipe created on trunk the directory lib/core. All the code there have tests. Alain Desilets and Marta Stojanovic are using PHPUnit with Selenium to write acceptance tests for Tikiwiki.

dsc013611

This is what I remember from the discussions we had during the five days of GSOC TikiFest. If I forgot to mention something please leave a comment.