A Adobe vai propor a passagem a norma internacional ISO o formato PDF 1.7. O que está a ser anunciado em: http://www.adobe.com/aboutadobe/pressroom/pressreleases/200701/012907OpenPDFAIIM.html.
Web,ruby, Ajax ou qualquer outra coisa que me venha a cabeça (com prioridade para esta última)
A Adobe vai propor a passagem a norma internacional ISO o formato PDF 1.7. O que está a ser anunciado em: http://www.adobe.com/aboutadobe/pressroom/pressreleases/200701/012907OpenPDFAIIM.html.
O A List Apart nº. 231 apresenta dois artigos:
O W3C publicou 8 novos standards na familia XML para data mining, transformação de documentos e computação empresarial de serviços web a bases de dados. "Mais de 1000 comentários de pessoas que desenvolvem ajudaram a assegurar a resiliência e a implementabilidade do conjunto de tecnologias de bases de dados", disse Jim Melton da Oracle. O XSLT tranforma documento em diferentes marcações ou formatos. O XML Query pode efectuar buscas, inquéritos e junções sobre coleções de documentos. Usando expressões XPath, XSLT 2 e XQuery podem operar sobre documentos XML, bases de dados XML, bases de dados relacionais, motores de busca e repositórios de objectos.
Por favor note que a informação aqui presente se baseia na actual especificação para (X)HTML5. alguns dos detalhes não são aplicáveis tecnicamente a anteriores versões de HTML.
Embora o HTML e o XHTML possam parecer serem similares na sua sintaxe, são bastante diferentes de várias formas.
Nota: Como o actual documento WHATWG ainda é um rascunho esta secção necessita de ser acompanhada como um alvo em movimento.
As diferenças marcadas com @@@ são diferenças que podem teoricamente ser alteradas sem afectar a retrocompatibilidade
É este tipo MIME que determina que tipo de documento está a usar. Se tentar enviar XHTML como text/html de facto está a usar HTML, eventualmente com erros sintáticos.
Tecnicamente, de acordo com a especificação é permitido enviar XHTML 1.0 como text/html. Mas devido à razão anteriormente apresentada tal documento é considerado como documento em HTML e não em XHTML.
O XHTML usa requisitos de análise/interpretação XML. O HTML usa os seus próprios requisitos que estão definidos de uma forma que se apresenta muito mais próxima da forma de tratamento que os navegadores dão ao HTML actualmente.
O XHTML usa requisitos de análise/interpretação XML. O HTML usa os seus próprios requisitos que estão definidos de uma forma que se apresenta muito mais próxima da forma de tratamento que os navegadores dão ao HTML actualmente.
Tanto o HTML 4.01 como o HTML 5 usam text/html.
Content-Type: text/html; charset=UTF-8
* A FAZER
Alguns atributos definidos em HTML4 não foram incluídos em HTML5. Eis a lista actual (sujeita a alterações, ver especificação):
Além disso o HTML5 não tem nenhum dos atributos de apresentação que figuram em HTML4 (incluindo aqueles que figuram em <table>). Quaisquer atributos definidos em elementos que não figurem em HTML4 obviamente também não figuram em HTML5.
Os seguinte elementos estão presentes em HTML4 mas não se encontram definidos em HTML5:
Algoritmo HTML 4
Fonte 5.2.2 Especificação de codificação de caracteres na especificação HTML 4.01.
Algoritmo HTML 5
Isto ainda está indefinido na especificação. Ver Detecção de Codificação de Caracteres para documentação.
Esta secção poderá pertencer a uma página diferente.
Isto é uma tradução de um artigo de Martin Fowler sobre ClassInstanceVariable (uma variável de instância de classe).
Quando se aprende algo sobre objectos normalmente aprendemos que esses objectos capturam dois tipos de dados: instância (exemplar) e classe. As variáveis de instância são as mais comuns, os dados variam de instância para instância do objecto. As variáveis de classe, também conhecidas por variávies estáticas, são partilhadas por todas as instâncias (exemplares) da classe. Cada instância aponta para o mesmo valor e qualquer alteração é vista por todas as instâncias. As variáveis de classe são muito menos comuns do que as variáveis de instância especialmente variáveis de classe que sejam mutáveis.
Um dos aspectos complexos das variáveis de classe é como é que elas interagem com uma hierárquia de herança. Consideremos uma variável de classe que é usada para guardar a própria instância.
class Empregado @@exemplares = [] def self.exemplares return @@exemplares end def guardar @@exemplares << self end def initialize nome @nome = nome endend Empregado.new("Martins").guardarEmpregado.new("Roberta").guardarEmpregado.new("Eurico").guardar puts Empregado.exemplares.sizeNão há aqui nenhuma surpresa, há três empregados. Agora experimentemos isto:
class Empregado @@exemplares = [] def self.exemplares @@exemplares end def guardar @@exemplares << self end def initialize nome @nome = nome endend class Programador < Empregado; endclass Restodopessoal < Empregado; end Restodopessoal.new('Martins').guardarRestodopessoal.new('Roberta').guardarProgramador.new('Eurico').guardar puts Restodopessoal.exemplares.sizeputs Programador.exemplares.sizeO resultado é 3 e 3, enquanto preferiamos obter 2 e 1. A razão por que isto se passa é que a variável de classe é partilhada ao longo de todas as instâncias da classe e essas incluem todas as subclasses. Há duas classes mas só uma variável.
Por vezes esta variável que perpassa a totalidade da hieráquia é o que necessitamos, mas por vezes, como neste caso, preferiamos ter uma variável diferente em cada classe. Podemo-nos referir a uma variável de instância de classe do mesmo modo que a uma variável de classe, mas teremos um valor diferente por classe.
O suporte para variáveis de instâncias de classe não é comum nas linguagens OO, mas não é difícil de criarmos um nós próprios. O modo óbvio de o criar seria o de usar um dicionários de chaves por nome de classe.
class Empregado @@exemplares = {} def self.exemplares @@exemplares[self] end def guardar @@exemplares[self.class] || = [] @@exemplares[self.class] || = << self end def initialize nome @nome = nome endend class Programador < Empregado; endclass Restodopessoal < Empregado; end Restodopessoal.new('Martins').guardarRestodopessoal.new('Roberta').guardarProgramador.new('Eurico').guardar puts Restodopessoal.exemplares.sizeputs Programador.exemplares.sizePode usar esta técnica em qualquer linguagem OO. Ruby contudo tem de facto variáveis de instância de classe.
class Empregado class << self; attr_accessor :exemplares; end def guardar self.class.exemplares || = [] self.class.exemplares << self end def initialize nome @nome = nome endend class Programador < Empregado; endclass Restodopessoal < Empregado; end Restodopessoal.new('Martins').guardarRestodopessoal.new('Roberta').guardarProgramador.new('Eurico').guardar puts Restodopessoal.exemplares.sizeputs Programador.exemplares.sizeA definição da variável de instância de classe é o fragmento class << self; attr_accessor :exemplares; end.
Alguém me sabe dizer se há estudos similares a este sobre pobreza de linguagem em português?
Uma das coisas que me tem preocupado neste sítio é que a linguagem não seja excessivamente hermética, mas tenho dado demasiados erros (e não me estou a referir só a erros ortográficos) pois, normalmente, quando faço uma nova entrada, faço-o de forma apressada. O meu tempo livre realmente tem escasseado e isso leva a alguns facilitismos. Por essa razão este ano 2007 irão ver menos entradas mas entradas mais elaboradas (espero).
Num esforço para alinhar este espaço com essa maior exigência estou a tentar que este sítio fique tão conforme quanto o possível dentro dos meus conhecimentos e uma das coisas já alcançadas é conformidade com o HTML 4.01. A conformidade com o CSS 2.1 está a caminho mas vai demorar algum tempo. Poderá ainda haver uma alteração profunda do HTML de modo a poder alcançar numa terceira fase WAI-A ou mesmo um WAI-AA. Isto não é muito fácil quando se trabalha num ambiente que não se estudou previamente (blogger). É sempre mais difícil começar com uma paleta já preenchida do que com uma paleta em branco excepto se a paleta preenchida for de muito boa qualidade.
Não consigo por exemplo perceber que no novo bloguer um blogue criado de raiz tenha mais do que 700 erros e avisos por parte do validador do W3C. No WordPress isso não sucede.
Ainda não explorei a via da instalação do site noutro local e apontar para lá a partir do actual URL, mas só o farei se de todo me for impossível fazer o que pretendo.
O conteúdo irá obedecer a algumas regras de estilo que estou a esboçar de forma a poder manter um padrão de qualidade. Tenho que admitir que aqui gosto particularmente da forma de escrita de um conjunto de pessoas que englobam a Amy Hoy (rails e companhia), a Kathy Sierra (Creating Passionate Users), o Ivo Gomes, o João Craveiro e noutro tipo de conteúdo o Pacheco Pereira. Claro está esta lista não é exaustiva posso dizer que leio irregularmente algumas centenas de sítios/blogues e subscrevi algumas dezenas de feed.
Essa exigência leva-me a ter que informar os leitores deste sítio que o texto sobre semântica é demasiado pobre para poder sequer ser considerado como ponto de partida. Infelizmente vejo que continua a ser uma das entradas mais lidas deste sítio (cerca de 400 leitores, em média mensal, no último ano, com ligeira tendência para a baixa) e que não o retiro de linha só para poder lembrar-me das barbaridades ditas nele.
Para intróito de bom ano já deve chegar. Bom Ano para todos.
Acaba de sair o último número (229) do A List Apart de 2006. Neste número são apresentados dois novos artigos:
O dia de ontém 20 de Dezembro foi particularmente activo no sítio do W3C. Notas de grupos sobre assinatura digital, o WAI a tentar disciplinar os conteúdos dinâmicos para que sejam acessíveis e ainda alguma soap.
O Grupo de Trabalho de Melhores Práticas Móveis acaba de publicar o segundo Rascunho de Trabalho dos W3C mobileOK Basic Tests 1.0. Este documento define os testes que oferecem fundamento para declarar que determinado conteúdo é conforme o W3C mobileOK Basic que são baseados sobre as Melhores Práticas Móveis do W3C.
Como usar ActiveRecord em programação em Ruby (sem o resto do rails)
require "rubygems"
require_gem "activerecord"
ActiveRecord::Base.establish_connection(
:adapter => "mysql",
:host => "hospedeiro",
:database => "basededados",
:username => "utilizadordb",
:password => "palavradepassedoutilizadordb"
)
class MinhaTabela < ActiveRecord::Base
end
< partir daqui pode usar-se o acesso CRUD (Create, Read, Update, Delete) à tabela.
Comemoram-se 10 anos (17 de Dezembro) desde que o W3C publicou a primeira recomendação sobre folhas de estilo em cascata.
O World Wide Web Consortium (W3C), assim como outros grupos e corpos normativos, tem tecnologias estabelecidas para criação e interpretação de conteúdo baseado na web. Estas tecnologias que designamos por "web standards", foram concebidas cuidadosamente para se obterem as maiores vantagens para o maior número de utilizadores da web assegurando ao mesmo tempo a viabilidade de longo prazo de qualquer documento publicado na Web. Ver a barra lateral para detalhes.
Conceber e construir sítios usando esses standard simplifica e baixa o custo de produção, entregando sítios que são acessíveis a mais pessoas em mais tipos de dispositivos de Internet. Os sítios desenvolvidos de acordo com essas directrizes irão continuar a funcionar correctamente à medida que os navegadores de secretária continuarem a evoluir, e à medida que novos dispositivos de Internet vão ficando disponíveis.
Parece tão directo e faz todo o sentido. Então qual é o problema? E porque é que há um Web Standards Project (WaSP)?
Embora os fabricantes dos navegadores líderes tenham estado envolvidos na criação dos web standards desde que o W3C foi formado, durante vários anos a conformidade foi observada no fio da navalha. Ao publicarem navegadores que falhavam no suporte uniforme de standards, os fabricantes fragmentaram desnecessariamente a Web, prejudicando os designer, os programadores, os utilizadores e os empresários.
A falta de suporte uniforme de standards chave do W3C deixaram os consumidores frustrados: quando usavam o navegador "errado", muitos não podiam ver o conteúdo ou efectuar as transacções desejadas. Entre as pessoas mais frequentemente prejudicadas encontram-se as pessoas com deficiência ou necessidades especiais.
Ao mesmo tempo, a falta de suporte uniforme de standards chave W3C deixou ou designer, programadores e proprietários de sítios num terrível dilema: podem pagar a implementação de várias versões de todas as páginas da web de modo a acomodarem navegadores incompatíveis? Se não, que navegadores devem negligenciar e quantos milhões de potenciais visitantes estão dispostos a rejeitar? De qualquer modo, o custo era demasiado alto, ainda o é.
O mercado fracturado dos navegadores representa pelo menos 25% do custo do desenvolvimento de todos os sítios. Devido a orçamento insuficiente, muitas pessoas que desenvolvem sítios produzem-nos de modo a bloquear clientes potenciais. Várias pessoas que desenvolvem sítios e que conhecem sobre standards não vêm razão para serem desenvolvidos sítios que não os suportem. Outros pouco ou nada sabem sobre standards - e vários incluindo os produzidos por grandes agências que parecem perceber de ASP, Java, Flash MX e .Net, parecem não perceber nada sobre marcação semântica e estrutural, folhas de estilo e a importância da segregação da estrutura e da apresentação.
Alguns designer, estimulados devido à incompatibilidade entre navegadores, deliberadamente excluíram todas as tecnologias excepto as mais antigas e universais dos seus sítios. Estes sítios funcionam correctamente em todos os navegadores de secretária, mas com o custo de serem pouco apelativos e com poucas funcionalidades para os consumidores. Outos dependem dos editores visuais e ferramentas de edição para gerarem várias camadas de marcação e código optimizado para as excentricidades de vários navegadores populares. Isto é dinheiro desperdiçado em largura de banda e frequentemente os sítios gerados deixam de funcionar na geração seguinte dos navegadores (e nunca funcionaram em todos os navegadores e dispositivos alternativos, de leitores de ecrã ao Lynx a dispositivos de mão a navegadores menos populares como o Opera). A Web está cheia de cadáveres de sítios que foram em tempos impressionantes que não conseguem funcionar em dispositivos e navegadores contemporâneos. Para tornar as coisas mais complicadas, tais sítios estão ainda a ser criados todos os dias.
Alguns designer ficaram tão frustrados que deixaram de ligar de todo aos web standards e começaram a desenvolver sítios em ambientes proprietários. Embora ricos em potencial criativo, tais tecnologias sofrem de uma acessibilidade de largo espectro e não oferecem características de necessidades comuns como as marcas de leitura (marcadores para livros), impressão, cópia e colagem e outras tarefas que os utilizadores da web têm que efectuar em sítios informativos ou transaccionais.
Em resposta a estes problemas, o The Web Standards Project (WaSP) (vespa em inglês algo laborioso) foi formado em 1998 com o objectivo de promover os web standards centrais e encorajar os fabricantes de navegadores a fazer o mesmo, e assim assegurar um acesso simples e barato para todos.
Embora a nossa mensagem inicialmente tenha encontrado alguma resistência (particularmente dos departamentos de marketing e relações públicas das companhias fabricantes de navegadores), eventualmente prevalecemos - em parte porque engenheiros em alguns desses fabricantes acordaram connosco e viram o WaSP como um aliado nas suas batalhas internas com a gestão.
No início de 2000, um após outro dos navegadores de topo passaram a funcionar como prometido de acordo com os standards que tínhamos (por vezes estridentemente) promovido. Actualmente os navegadores de topo, assim como alguns dos seus concorrentes, têm um suporte excelente para HTML 4, compatibilidade com XHTML 1.0, CSS nível 1, ECMAScript (a versão normalizada do Javascript) e o DOM ou estão no caminho de obterem essa conformidade.
Graças a esses navegadores, os designer e pessoas que desenvolvem sítios são finalmente livres de construir com XHTML e CSS e na maior parte dos casos podem separar a estrutura da apresentação para um máximo de portabilidade e acessibilidade. Com cuidado, podem também usar o DOM standard do W3C para adicionarem comportamento sofisticado aos seus sítios.
Então onde é que está o problema e porque é que existe ainda o The Web Standard Project?
Embora os navegadores actuais suportem os standards, dezenas de milhares de designer profissionais e programadores continuam a usar métodos ultrapassados que ligam a estrutura à apresentação e em muitos casos evitam completamente as estruturas semânticas e utilizam incorrectamente o (X)HTML como ferramenta de concepção. Profissionais bem pagos continuam a produzir sítios inválidos e inacessíveis com marcação sem significado semântico, mapas de imagens gigantes, tabelas aninhadas até à medula e scripts de detecção desactualizados que causam problemas de usabilidade que tinham intenção original de evitar.
Há ainda muitos livros de desenvolvimento para a Web que ensinam métodos desactualizados e muitos profissionais têm orgulho em produzir sítios que têm o mesmo aspecto e funcionam da mesma forma em navegadores conformes e não conformes, com custos em termos de acessibilidade, viabilidade de longo prazo, compatibilidade futura e falta de suporte de dispositivos alternativos. Outros produzem sítios que só funcionam numa mão cheia de navegadores mais populares.
Assim um dos objectivos primários do WaSP é providenciar recursos educativos que podem ajudar os nossos pares a aprenderem métodos conforme os standards que são do seu interesse e do interesse dos seus clientes e utilizadores de sítios.
Muitos profissionais utilizam no seu trabalho ambientes de edição visual concebidos no tempo da Guerra Entre Navegadores. Tal como mencionado acima tais ferramentas por omissão criam sítios inválidos, não semânticos optimizados para navegadores na versão 4.0 em modo quirks (esquisito) em vez de ser em modo standards. Em 2002, dois editores visuais melhoraram de forma apreciável o seu suporte em relação aos web standards e acessibilidade (um deles com ajuda do The Web Standards Project). Mas para tirarem partido destas melhorias os profissionais têm que aprender as vantagens de conceber os sítios com web standards. Isto aponta novamente para a necessidade que que as pessoas que desenvolvem sítios voltem a aprender.
Os clientes e os gestores de sítios também necessitam desta informação se querem criar sítios que sejam acessíveis aos navegadores e dispositivos actuais e que se mantenham visíveis à medida que os navegadores e dispositivos se vão actualizando. o WaSP espera, que uma vez informados das vantagens que os standard propiciam, que os proprietários dos sítios deixem de ver os seus sítios como uma espécie de publicidade impressa que deva ser vista exactamente da mesma maneira em todos os ambientes. E que passem a focar-se em seu lugar no fornecimento de conteúdo e funcionalidades apropriadas ao contexto das apresentações que podem diferir de acordo com as necessidades de diferentes navegadores e dispositivos.
A Declaração de Missão original do WaSP feita em 1998 encontra-se disponível em archive.webstandards.org.
rev.O digg está a ser actualizado dentro de alguns minutos estará pronto para ser continuado a servir.
A segurança é um tópico um pouco aborrecido mas que pode tornar-se excitante se fizermos uma grande asneira. Para evitar essas excitações, eis uma lista de verificação para revisão de segurança em modelos, controladores e vistas. Se vir algum buraco (há com toda a certeza vários) faça um comentário e actualizarei a lista.
O que é que falta?
Por omissão a Rails manda todos os parâmetros POST para o livro de ponto (production.log) pelo que deve ser mudado o nível de registo para :warn para evitar o respectivo registo do pedido e os seus parâmetros. Para efectuar esta alteração acrescentar a linha que se segue a config/environments/production.rb:
config.log_level = :warn
Outra possibilidade é, para evitar a perca de informação útil que isto gera, usar um suplemento como o do Kent Sibilev.
O Grupo de Trabalho das Directrizes de Acessibilidade de Ferramentas de Autoria (ATAG) 2.0 lançou a 7 de Dezembro de 2006 o Rascunho de Trabalho das ATAG 2.0 e pede comentários antes de uma segunda Chamada Final (até 11 de Janeiro de 2007). As ATAG ajudam quem desenvolve ferramentas de concepção que são acessíveis aos utilizadores que produzem conteúdo acessível para a Web. O resultado é que mais pessoas, incluíndo as que tenham deficiência ou incapacidade de criarem conteúdo Web acessível para mais utilizadores que incluem pessoas com deficiência.
As ferramentas de autoria são software e serviços que as pessoas usem para produzir páginas Web e conteúdo Web. Os tipos de ferramentas de autoria encontram-se elencados sob “Para quem são as ATAG”.
Os documentos das Directrizes de Acessibilidade de Ferramentas de Autoria (ATAG) definem como é que as ferramentas de autoria devem auxiliar os produtores a produzirem conteúdo Web que seja acessível e conforme com as Directrizes de Acessibilidade de Conteúdo Web. Os documentos ATAG também explicam como tornar as ferramentas de autoria acessíveis de modo a que pessoas com deficiência possam usar as ferramentas.
ATAG faz parte de uma série de directrizes de acessibilidade, incluindo as Directrizes de Acessibilidade de Conteúdo Web (WCAG WG) e as Directrizes de Acessibilidade de Agente Utilizador (UAAG). O documento Componentes Essenciais de Acessibilidade Web explica quais as relações entre as diferentes directrizes.
A quem se destinam as ATAGAs ATAG são principalmente dirigidas a quem desenvolve ferramentas de autoria, incluindo:
As ATAG e os recursos suportados também se pretende que vão de encontro a variadas audiências, incluíndo quem tome medidas políticas, gestores e outros. Por exemplo:
As ATAG 1.0 incluem 28 pontos de verificação que dão orientação sobre:
ATAG 1.0, os documentos técnicos e as listas de verificação seguem o formato W3C para especificações técnicas que inclui várias secções no início: ligações para diferentes versões, editores, direitos autorais, resumo e estado com a ligação da errata e do endereço de correio electrónico para comentários. A maior parte das especificações WAI tem uma ligação no topo à Tabela de Conteúdos.
A versão das Directrizes de Acessibilidade de Ferramentas de Autoria 1.0 foi aprovada em Fevereiro de 2000 e é a versão estável e referenciável.
As ATAG 2.0 estão a ser desenvolvidas para serem compatíveis com as WCAG 2.0, sob desenvolvimento e as WCAG 1.0, que foram terminadas em 1999. O WAI espera completar as ATAG 2.0 em 2007. Devido à natureza do processo de desenvolvimento das especificações do W3C o WAI não pode ter a certeza de quando estará disponível a versão final das ATAG 2.0. As ATAG 1.0 continuaram a ser a última versão aprovada até que a versão 2.0 esteja completa.
Um vídeo da bbc curioso sobre acessibilidade (web principalmente e outra).
Talvez a RTP a SIC e a TVI pudessem ver...
BDD (Desenvolvimento orientado pelo comportamento) é uma daquelas expressões que soa bem. Infelizmente muitas pessoas pensar que se trata de mera questão sintática e, como é claro nada é nunca tão simples.
Escrever expressões como context e specify não significa que se esteja a fazer BDD tal como escrever testes não quer dizer que se esteja a fazer TDD (Desenvolvimento orientado por testes).
Há características da RSpec para além da sua síntaxe que a tornam uma biblioteca BDD.
Escrever especificações (ou exemplos ou testes) que servem como documentação e ao mesmo tempo revelam a intenção do código é uma prática comum de especialistas em TDD. A BDD define esta prática como obrigatória. RSpec torna esta prática fácil de seguir (usando context e specify). O ponto é qualquer sintaxe é boa. Pode seguir a mesma prática usando FIT ou JUnit (ou um de entre as dúzias dos seus clones), uma convenção de identificação e uma ferramenta de reporte como a Testdoc pode gerar algo como isto:
A full stack
- should raise an exception on push
- should allow a pop
RSpec também torna mais fácil exprimir a intenção no próprio código usando construções como:
name.should_match /lak/
Novamente esta síntaxe torna mais fácil escrever código que siga a filosofia BDD mas não é por si só BDD.
Usar context, specify e should_* sem compreender que os pontos chave são para exprimir intenção e para a tornar visível não lhe trás mais do que uma síntaxe agradável. BDD é uma técnica, não uma síntaxe.
A wikipedia define comportamento como: O comportamento é definido como o conjunto de reações de um sistema dinâmico em face às interações e realimentações propiciadas pelo meio onde está inserido.
Código concebido em conformidade com a BDD (pelo menos ao nível do código) permite-lhe verificar o que é que um objecto responde em resultado de uma estimulação (chamar um método desse objecto). Não se trata de ver os valores retornados desse método. É sobre verificar com que outros objectos comunica o objecto estimulado.
É aqui que entram os objectos mock. Objectos Mock (ligados a objectos com que comunica) diz-lhe isso. Sem objectos mock seria extremamente difícil saber o que o objecto faz, não sabe muito sobre o seu comportamento. Assim o que muita gente usa é teste baseado no estado. Isto também é aceitável, mas não se trata de BDD.
Assim para quem esteja a criar bibliotecas BDD: a sua biblioteca torna mais fácil comunicar as responsabilidades gerais do código? Pode usar a biblioteca para exprimeir comportamento?
Se não, é provável que só tenha creado um clone da RSpec.
Piston é um utilitário que facilita a gestão do ramo vendor. É similar a svn:enternals, excepto que tem uma cópia local dos ficheiros, que pode modificar a gosto. Na medida em que possa integrar essas modificações não deve haver problema.
Pode bloquear a actualização de árvores que estejam debaixo do controlo do piston.