Ferramentas Pessoais
Você está aqui: Home Blog

Blog

Vaga de Estágio em Web Design

por Thiago Tamosauskas em 20/07/2010 16:25

Simples Consultoria, empresa de desenvolvimento de soluções de tecnologia da informação busca um profissional para preencher perfil de estagiário.

 Excelente oportunidade para aprender muito sobre CSS e Plone:

Conhecimentos desejados:

 

 

- Noções de XHTML

- Noções de CSS

- Noções de Photoshop

- Disposição para aprender

 

Atributos da vaga:

 

 

- Carga horária diária: 6h

- Tipo de contrato: Estágio

- Inicio imediato

- Local: Perdizes, São Paulo

 

- Bolsa de R$ 510,00

- Vale Transporte

- Vale Refeição

 

Interessados devem enviar o currículo por e-mail para vagas@simplesconsultoria.com.br, mencionando no assunto: Estágio

.

| Comentários

Plone 4 : novidades para o usuário final

por Thiago Tamosauskas em 29/04/2010 12:00
Categoria: Usabilidade, Plone 4, CMS
Plone 4 : novidades para o usuário final

Durante o World Plone Day 2010, organizamos aqui na Simples Consultoria um evento no qual tive a oportunidade de contar um pouco sobre quais serão as novidades do Plone 4. Este artigo que segue é uma transcrição aproximada do que foi dito na ocasião. O foco da apresentação foram as mudanças de maior impacto ao usuário final, ou seja, o que realmente muda para o usuário nesta nova versão do Plone.

Inicialmente é legal destacar que foram selecionados e implementados 40 “PLIPs” (“Plone Improvement Proposal"), que são sugestões de melhora propostas pela própria comunidade. Isso faz do Plone 4 a versão que recebeu o maior número de melhorias de toda a história do Plone.

Muitas destas mudanças são internas, de modo que o próprio Eric Steele confessou durante o Plone Symposium South America que se sentia um tanto frustrado, porque embora tenha existido muito e muito trabalho pesado ele não tinha muito o que mostrar quando um usuário comum perguntava o que ia mudar para ele. A verdade é que houveram poucas mudanças para estes usuários, mas estas mudanças foram bastante significativas. Veremos algumas delas agora:

Novo Tema


Do ponto de vista do usuário está é provavelmente a mudança mais aparente. Após vários anos usando o mesmo layout padrão o Plone finalmente muda de cara. O design padrão tornou-se minimalista, de uma simplicidade quase franciscana. O novo tema é muito mais simples e por isso mesmo muito mais fácil de editar. O pai da criança, Alexander Limi, também durante o Plone Symposium, descreveu-o como "propositalmente vazio". A idéia por trás disso é ter um layout bom o bastante para ser usado assim que o Plone foi instalado, mas também flexivel o bastante para ser alterado sem dificuldade. Uma tela onde os designers podem trabalhar sem perder as vantagens de usabilidade e facilidade de uso do Plone. Em termos de codificação e css na pratica temos uma base muito mais fácil de personalizar e os designer terão muito menos necessidade de bug fixes e workarounds.

Outro ponto importante no novo tema é a adoção oficial do jQuery como linguagem padrão para rodar do lado do Cliente. O KSS continua disponível, mas apenas de maneira opcional. Além das vatagens técnicas do JQuery, isso colocará os desenvolvedores de Plone em contato com uma comunidade muito maior, e consequentemente muito mais criativa e produtiva.

Adoção do TinyMCE como Editor Padrão


Embora diversos outros editores estejam disponíveis por meio de produtos instaláveis, por anos o Kupu foi eleito como o editor html padrão do Plone. Basicamente ele ganhou gosto da comunidade por sua simplicidade e pelo HTML bem formatado que produzia. Entretanto os usuários parecem preferir a maior liberdade que o TinyMCE promete dar, com todos os seus recursos de formatação. O TnyMCE também tem a vantagem de já ser o editor padrão de outros CMS's comerciais e livres, colocando o Plone na favorável companhia de seus desenvolvedores e com um público bem grande  já acostumado com sua interface.

Registro de usuário


Uma parte do Plone que frequentemente os usuários finais pediam para ser modificada é o formulário de registro. Isso é possivel agora no Plone 4, embora ainda aconteça de maneira timida. Dentro de Configurações do Site, nas configurações de Grupos e usuários ganhamos uma nova aba onde essas modificçaões podem ser feitas.

Busca Aprimoradas


A busca sempre foi um ponto forte do Plone frente aos concorrentes. Desafio qualquer pessoa a mostrare um CMS que tenha um sistema de busca tão perfeito e eficiente. Essa vantagem foi ainda mais explorada agora no Plone 4. A busca continua simples e eficaz como sempre, mas foram incluídas novas opções na busca avançada. O desafio era duplo: simplificar a interface das várias opções avançadas que já existem e além disso incluir novos recursos. A solução foi permitir que estes recursos sejam retirados ou fornecidos pelo administrador do site em Configurações de Busca, além de um tratamento inteligente das opções menos utilizadas, via jQuery.

Gerenciamento de imagens


O Plone fornece aos usuários formatações automáticas para cada imagem colocada no site. São os famosos, image_preview, image_thumn. image_mini, etc.. Há agora no Plone 4 uma nova opção nas configurações do site que permite ao próprio usuário final modificar os tamanhos padrão para as imagens do Plone. Não apenas isso, mas ele pode também criar tamanhos novos de imagens sem ter que saber um linha de código e nem sequer entrar na ZMI.

Gerenciamento de Portlets aprimorado


Do Plone 2 para o Plone 3 o gerenciamento de Portlet deu um salto de qualidade incrível, sendo provavelmente a novidade mais querida pelos usuários finais. Agora é possível também configurar quais portlets são visiveis ou não sem a necessidade de retirá-los para depois ter que coloca-los no lugar novamente. Isso porque cada portlet ganhou uma função de Ocultar/Mostrar que regula de modo rápido e fácil quando um portlet deve ou não ser exibido.

Coleções Aprimoradas


A interface das Coleções (antigas Pastas Espertas) está recebendo um tratamento especial no Plone 4. Em vez de ter que salvar várias vezes cada um dos critérios e ter que ficar pulando entre as abas de visão e edição, agora o usuário consegue criar suas próprias coleções com uma interfase imensamente mais amigável. Isso resultará em uma produtividade muito maior nas edições na medida que vai poupar o tempo do usuário.

Velocidade


Aquelas "mudanças internas" que comentei no inicio deste artigo tem haver com este tópico final. Um grande esforço foi feito para melhorar a performance do Plone e levar sua velocidade a niveis não apenas satisfatórios, mas admiráveis. A adoção do Python 2.6 é parte desta mudança em busca de uma melhor rapidez. Some-se a isso o suporte a BLOBs, que permite guardar arquivos grandes no filesystem, a adoção das "Pastas Gigantes" como solução padrão para o tipo pastas e muitos outros aprimoramentos e começaremos a entender como o Plone 4 conseguiu superar em performance o Plone 3, que por sua vez já estava mais rápido que outros sistemas menos robustos como o Joomla, Drupal e o Wordpress.

Conclusão


Todas estas melhorias vem unier-se a todas as outras vantagens já conhecidas do Plone desde suas primeiras versões. O lançamento do Plone 4 está previsto ainda para o primeiro semestre este ano. Quem quiser ver de perto a evolução destas e de muitas outras melhorias pode acompanhar pelos próprios relatórios disponíveis no site de desenvolvimento do projeto: http://dev.plone.org/plone/milestone/4.0 Seja como for podemos estar certos que a equipe de desenvolvedores estará empenhada em cria ruma solução para gerenciamento de conteúdo cada vez melhor, sempre focada nas necessidades dos usuário final.

| Comentários

Lançado produto de tema para World Plone Day 2010

Lançado produto de tema para World Plone Day 2010

Já virou tradição. Todos os anos, como parte da organização do World Plone Day, a Simples Consultoria lança um tema novo para a comunidade com um layout especialmente criado para esta data especial, que já esta em sua terceira edição.

Para quem ainda não sabe, o World Plone Day é um dia  marcado por uma série de eventos, palestras e treinamentos organizados ao redor do mundo pelos usuários, desenvolvedores e empresas pertencentes a comunidade Plone. É uma grande oportunidade que temos para divulgar esta maravilhosa ferramenta de gestão de conteúdo e celebrar em conjunto nossa forte comunidade internacional.

Desde a primeira edição a Simples Consultoria lança produtos de tema que são então usados por muitas pessoas. Os temas desenvolvidos nos anos passados receberam ampla aceitação da comunidade, e foi usado em muitos países e em diversos idiomas, incluindo romêno, alemão e grego. Neste ano o desafio foi criar um tema que pudesse ser instalado tanto no Plone 3 quando no Plone 4.

O resultado pode ser baixado na página do pypi ou diretamente no site oficial do Plone

| Comentários

Plone para IPhone e outros aparelhos móveis

por Thiago Tamosauskas em 29/03/2010 14:59
Categoria: Portabilidade, Design, Plone
Plone para IPhone e outros aparelhos móveis

Atualmente é moda criar versões especiais dos grandes sites para aparelhos móveis. A tendência já chegou em praticamente todos os grandes portais de notícias.: G1, R7, é só juntar uma letra com um número e você pode ter certeza que será levado, ao acessar a página, para uma versão especialmente feita para ser vista no seu celular.

O Plone, desde seu nascimento, sempre teve esta preocupação com portabilidade. O próprio fato de ser escrito segundo os padrões da W3C já garante a universalidade do seu código fonte. Entretanto eu devo confessar que sempre olhei com desconfiança essa história de criar layouts diferentes para mídias diferentes. Hoje confesso que talvez isso seja um pouco de trauma de quem passou pela guerra dos browsers nos anos 90 e tinha escrever várias versões para uma mesma formatação. Mas este post do blog é para dar meu braço a torcer.

A verdade é que, embora o conteúdo deva ser sempre o mesmo, pelo menos hoje dia, a lógica de um aparelho móvel é completamente diferente de um acesso via computador. A tela é obviamente menor e não há espaço para qualquer extravagância, o teclado na maioria das vezes não é tão prático, e em geral a pessoa está com uma das mãos ocupadas.

Foi trabalhando num projeto aqui na Simples Consultoria  que me dei conta desta necessidade.  Está meio na cara quando todos os peixes grandes fazem alguma coisa, mas só vendo o resultado final que fiquei realmente convencido. Criamos um tema próprio para acesso via celular para a Rede Brasil Atual, nosso cliente. A novidade já está no ar. Quem quiser experimentar basta acessar http://redebrasilatual.com.br/.

Pelo celular é claro.

| Comentários

CMFContentPanels: Novas posições sem dor nas colunas

por Thiago Tamosauskas em 20/01/2010 10:42
Categoria: CMFContentPanels, Plone


O CMFContentPanels é um produto bastante usado em site em Plone para a montagem e gerenciamento de páginas iniciais, especialmente em portais de notícia ou com bastante conteúdo. Algumas vezes surge a necessidade de uma disposição um pouco diferente dos destaques. Este breve tutorial mostrará como usar um recurso não muito conhecido do CMFContentPanels que permite a exibir uma linha com 1 coluna e logo abaixo outra linha com duas colunas, tal como mostrado na figura a seguir:

cpp5.png

Basicamente o que vamos fazer é criar um painel de conteúdo dentro do outro. Para isso, siga os passos abaixo:

1 - Crie um Painel de Conteúdo novo.

cpp1.png
2 - Neste Painel de Conteúdo inclua uma nova página, clicando no ícone semelhante a uma folha de papel no canto superior direito.

Com isso você terá um novo painel com o qual trabalhar:

cpp2.png

3 - No primeiro painel (Page 1), delete uma coluna. Para isso, basta clicar no ícone vermelho no topo da coluna.

Com isso você já tera uma linha com 1 coluna e uma segunda linha com 2 colunas.

cpp3.png

3 - Adicione os destaques em cada uma delas, e o resultado será algo próximo a imagem a seguir.
cpp4.png

| Comentários

Content Rules: regras de conteúdo no Plone

por Thiago Tamosauskas em 21/12/2009 10:05
Categoria: Plone, Content Rules
Content Rules: regras de conteúdo no Plone

Content Rules, em português, Regras de Conteúdo é um poderoso recurso de gestão de conteúdo disponível a partir do Plone 3.  Trata-se de uma maneira inteligente de tratar o conteúdo de seu site por meio de gatilhos e ações que automaticamente fazem coisas sempre que um conteúdo é criado, deletado ou modificado. 

Nada melhor do que um exemplo para esclarecer. É comum depois que um site esteja pronto e entregue ao cliente que a arquitetura  da informação planejada seja gradualmente desrespeitada pelos usuários na correria do dia a dia. Depois de alguns meses temos a raiz do site cheia de arquivos de difícil identificação, sem falar de conteúdos duplicados espalhados por toda parte. Pois bem, o Content Rule permite um controle maior da organização sem delegar ao usuário final novas responsabilidades. Podemos facilmente escrever uma regra de modo que toda vez que uma notícia for publicada em qualquer lugar do site ela seja movida para a pasta de notícias. Da mesma forma você pode definir que todo o evento criado seja imediatamente copiado para a pasta 'Agenda' de seu site ou ainda sempre que uma imagem for adicionada no portal ela seja copiada para o seu banco de imagens local. Na prática é como se o site tivesse uma faxineira para organizar a bagunça que é feita como conseqüência da rotina de trabalho e desatenção dos usuários finais.


Por padrão o Plone pode aplicar as regras de conteúdo para os seguintes eventos:

  • Quando um objeto é Adicionado
  • Quando um objeto é modificado
  • Quando um objeto é removido
  • Quando o estado do workflow do objeto é alterado.


A estes gatilhos podemos especificar condições como a seguir:

  • Aplicar a regra para um tipo de conteúdo específico (noticia, evento. imagem, etc...)
  • Aplicar a regra para uma extensão de arquivo em especial (*.doc, *.pdf, *.wmv, etc...)
  • Aplicar a regra para um estado de workflow em particular (privado, esboço, publicado, etc..)
  • Aplicar a regra para grupos específicos de usuário (administradores, usuários autenticados, etc..)
  • Aplicar a regra para usuários que tenham um papel em particular (contribuidores, revisores, membros, etc..)


Por fim, satisfeitas as condições que especificamos podemos aplicar as seguintes ações:

  • Exibir uma mensagem de registro do sistema
  • Notificar usuário
  • Copiar para pasta
  • Mover para pasta
  • Deletar objeto
  • Alterar estado de workflow
  • Mandar um e-mail


Importante ressaltar que tudo isso é feito na interface do próprio Plone, sem a necessidade de escrever códigos complicados ou mesmo de realizar alterações na ZMI ou no filesystem. Vejamos a seguir um exemplo simples de como criar um Conte Rule para organizar as noticias num plonesite.

Criando a sua Regra de Conteúdo

Neste exemplo mostraremos como criar uma regra de conteúdo para que todo item do tipo notícia seja movido para a pasta de Notícias de nosso site. Isso é feito em quatro fáceis etapas:

  1. Adicionar uma nova regra
  2. Configurar as condições
  3. Configurar a ação desejada
  4. Aplicar a regra as pastas do site

 

1. Adicionar uma nova regra


Logue-se em seu plonesite e vá ate as “Configurações do site” e sem seguida clique em “Regras de Conteúdo”. Você verá uma página como a representada abaixo. Clique no botão “Adicionar  Regra de Conteúdo.”

fig1.gif

 
Você entrará agora na página de inclusão da nova regra. Vamos entrar os dados para nossa regra de notícias como na ilustração a seguir:


fig2.gif

Na janela “Adicionar condição”, escolha a opção “Content type” e clique em adicionar. Na página seguinte, escolha o item “Notícias” e salve, como demonstrado na ilustração.

fig3.gif

2. Configurar as condições


Clique em Organizador de Notícias. Iremos agora configurar as condições e as ações de nossa regra. Você deverá estar vendo a seguinte página:

fig4.gif

 

Na janela “Adicionar condição”, escolha a opção “Content type” e clique em adicionar. Na página seguinte, escolha o item “Notícias” e salve, como demonstrado na ilustração.

fig5.gif

 

3. Configurar a ação desejada

De volta a página de configuração da nossa regra de conteúdo em Adicionar ação, escolha agora a opção “Move to folder” e clique em “adicionar”

fig6.gif

Seleciona a pasta, “Noticias” e salve as alterações:


fig7.gif

 

4 Aplicar a regra as pastas do site

Nossa regra de conteúdo esta criada. Precisamos agora apenas aplicá-la ao site. No nosso exemplo aplicaremos esta regra na raiz, de modo que seja herdada por todas as subpastas, mas poderíamos também aplicar regras apenas a subpastas específicas. Para isso vá até a raiz de seu site e clique na aba “Regras”. Selecione então nosso “Organizador de Notícias” e clique em Adicionar:

fig8.gif

Selecione gora nossa regra na lista que vai aparecer e então clique em “aplicar a subpastas”

fig9.gif

Nosso “Organizador de Notícias” está pronto e funcinal. Faça um teste agora criando uma notícia em qualquer pasta do site. Se você seguiu corretamente os passos verá que estes itens sempre serão movidos para a página de notícias do site.


Criando novos eventos e ações


Vimos com criar uma regra simples, mas o poder do Content Rule é bem maior do que um mero organizador de conteúdo. É um recurso fácil de aprender que está sendo estendido pela comunidade de desenvolvedores para ficar ainda mais poderoso. Já é possivel por exemplo encontrar produtos como o collective.contentrules.webservices que permite a publicação de anúncios no Twitter e em outros sites semelhantes.

Veremos agora como cria ruma nova condição que verifica as Palavras Chaves de um conteúdo. Embora esse exemplo mostre como criar um novo tipo de conteúdo, o processo de criar uma nova ação é muito similar. Sempre que as diferenças entre estes dois processos ocorrerem elas serão especificadas.

Criando um pacote

Em primeiro lugar é preciso criar um novo pacote onde colocaremos nossa nova condição. Usaremos um pacote egg e instalaremos ele em nosso buildout.

No diretório src; de seu produto:

$ cd src

$ paster create -t plone collective.keywordcondition

Selected and implied templates:

  ZopeSkel#basic_namespace  A project with a namespace package

  ZopeSkel#plone            A Plone project

Variables:

  egg:      collective.keywordcondition

  package:  collectivekeywordcondition

  project:  collective.keywordcondition

Enter namespace_package (Namespace package (like plone)) ['plone']: collective

Enter package (The package contained namespace package (like example)) ['example']: keywordcondition

Enter zope2product (Are you creating a Zope 2 Product?) [False]: False

...

Enter zip_safe (True/False: if the package can be distributed as a .zip file) [False]: False



Atenção a pergunta sobre o namespace e name de seu pacote (package), no nosso exeplo correspondendo ao egg name collective.keywordcondition. Atenção também ao zope2products status que no caso deve ser Falso, pois não precisaremos do Generic Setup ou outro comportamento do Zope2. por fim, zip-safe deve ser falso também, como em todos os pacotes do Zope.

Em seguida instale como um egg em seu buildout de modo que o Zope reconheça seu pacote. faça isso editando o arquivo buildout.cfg:



[buildout]

...

eggs =

  ...

  collective.keywordcondition

developer =

  ...

  src/collective.keywordcondition

...

[instance]

...

zcml =

...

collective.keywordcondition

Rode novamente seu buildout.

Adicionando uma condição


Uma condição do Content Rule consiste em:

1 - Uma interface que descreve os aspectos configuraveis da condição
2 - Um objeto permanente usado para armazenar as configurações da condição
3 - Um adaptador usado para executar a condição quando a regra é executada
4 - Um view e um view de edição que permite que o usuário configure as condições.

Tudo isso será colocado em um arquivo que chamaremos no nosso exemplo de keyword.py dentro do pacote collective.keyword

Em primeiro ligar vamos importar alguns elementos importantes:

from persistent import Persistent

from OFS.SimpleItem import SimpleItem

from zope.interface import implements, Interface

from zope.component import adapts

from zope.formlib import form

from zope import schema

from zope.app.component.hooks import getSite

from zope.component.interfaces import IObjectEvent

from plone.contentrules.rule.interfaces import IExecutable, IRuleElementData

from plone.app.contentrules.browser.formhelper import AddForm, EditForm

from Acquisition import aq_inner

from collective.keywordcondition import MessageFactory as _

Perceba que usamos o MessageFactory para fins de tradução. Ele é definido em __initi__.py no nosso pacote collective.keywordcondition:

from zope.i18nmessageid import MessageFactory

MessageFactory = MessageFactory('collective.keywordcondition')

Agora, definimos a interface usado zope.schema, que descreve os aspectos configuráveis de nosso condição. No nosso caso, uma lista de palavras chave. O título, descrição e outros metadados serão usados por zope.formlib nos formulários de edição e adição. Veja o pacote zope.schema para mais informações sobre como cada campo é usado.

class IKeywordCondition(Interface):

    """Interface for the configurable aspects of a keyword condition.   

    This is also used to create add and edit forms, below.

    """   

    keywords = schema.Tuple(title=_(u"Keywords"),

                            description=_(u"The keywords to check for."),

                            required=True,

                            value_type=schema.TextLine(title=_(u"Keyword")))

Agora, criaremos a implementação de armazenamento da condição:

class KeywordCondition(SimpleItem):

    """The actual persistent implementation of the keyword condition element.   

    Note that we must mix in SimpleItem to keep Zope 2 security happy.

    """

    implements(IKeywordCondition, IRuleElementData)   

    keywords = []

    element = "collective.keywordcondition.Keyword"   

    @property

    def summary(self):

        return _(u"Keywords contains: ${names}", mapping=dict(names=", ".join(self.keywords)))



As variáveis da palavra chave, definem o valor padrão do campo na interface IKeywordCondition já mencionada. O elemento especificada apenas um nome para esse elemento da regra (condições e ações costumam ser chamados de elementos da regra (element rule). Por convenção este nome possui o nome do pacote separado por um ponto de modo a garantir que seja único. O nome do elemento será referenciado novamente mais tarde no arquivo configure.zcml


O objeto de armazenagem deve também implementar uma propriedade summmary. Ela é usada para no Painel de Controle  termos um resumo do que a condição faz.

O Executor


Depois de definir a condição de armazenamento, definimos o executor:


class KeywordConditionExecutor(object):

    """The executor for this condition.   

    This is registered as an adapter in configure.zcml

    """

    implements(IExecutable)

    adapts(Interface, IKeywordCondition, IObjectEvent)        

    def __init__(self, context, element, event):

        self.context = context

        self.element = element

        self.event = event

    def __call__(self):

        context = aq_inner(self.event.object)

        keywords = frozenset()

        try:

            keywords = frozenset(context.Subject())

        except (AttributeError, TypeError,):

            # The object doesn't have a Subject method

            return False

        return (len(keywords.intersection(self.element.keywords)) > 0)



É simples adaptar o tipo de objeto de conteúdo por contexto (nesse caso, não nos interessa que tipo de objeto será usado, assim especificamos Interface, que é a interface mais genérica de todas), o tipo de condição (nossa interface recém definido IKeywordCondition) e o tipo de evento ( no nosso caso IObjectevent, uma interface genérica que descreve eventos sobre objetos.

ATENÇÃO: É possível sobrescrever implementações do executor para diferentes contextos ou eventos através do registro de novos adaptadores.

O executor tem ainda um método importante, o __call__9) que é chamado durante a execução da regra, Ele deve retornar verdadeiro ou falso. Em caso de True, a execução continua, par a a próxima condição ou ação, caso contrário o processo é abortado.

Se você está criando um action seu adaptador é quem farpa o verdadeiro trabalho da ação. Ele também deve retornar true ou false para indicar se o processo pode continuar.

Perceba como o executor é escrito de uma maneira defensiva, afinal as regras podem ser invocada para uma variedade de eventos e circunstancias.

Formulários


Finalmente devemos definir os formulários de inclusão e edição que usaremos para criar ou modificar nossa nova
condição. Usaremos a biblioteca zope,formlib e nossa interface IkeywordCondition da seguinte maneira:


class KeywordAddForm(AddForm):

    """An add form for portal type conditions.

    """

    form_fields = form.FormFields(IKeywordCondition)

    label = _(u"Add Keyword Condition")

    description = _(u"A keyword condition makes the rule apply only to content with certain keywords.")

    form_name = _(u"Configure element")   

    def create(self, data):

        c = KeywordCondition()

        form.applyChanges(c, self.form_fields, data)

        return c

class KeywordEditForm(EditForm):

    """An edit form for portal type conditions

    """

    form_fields = form.FormFields(IKeywordCondition)

    label = _(u"Edit Keyword Condition")

    description = _(u"A keyword condition makes the rule apply only to content with certain keywords.")

    form_name = _(u"Configure element")


As classes AddForm e EditForm prestam suporte ao plone.app.contenrules com os boões e validadores padrão.

Configurando o componente


Com o código no lugar devemos agora registrar nosso componente no configure.zcml

<configure

    xmlns="http://namespaces.zope.org/zope"

    xmlns:browser="http://namespaces.zope.org/browser"

    xmlns:plone="http://namespaces.plone.org/plone"

    xmlns:five="http://namespaces.zope.org/five"

    i18n_domain="collective.keywordcondition">

    <include package="plone.contentrules" />

    <include package="plone.contentrules" file="meta.zcml" />   

    <!-- the keyword condition -->

    <adapter factory=".keyword.KeywordConditionExecutor" />

    <browser:page

      for="plone.app.contentrules.browser.interfaces.IRuleConditionAdding"

      name="collective.keywordcondition.Keyword"

      class=".keyword.KeywordAddForm"

      permission="cmf.ManagePortal"

      />

    <browser:page

      for="collective.keywordcondition.keyword.IKeywordCondition"

      name="edit"

      class=".keyword.KeywordEditForm"

      permission="cmf.ManagePortal"

      />

    <plone:ruleCondition

        name="collective.keywordcondition.Keyword"

        title="Keyword"

        description="Apply only when the current content object has one of the given keywords"

        for="*"

        event="zope.component.interfaces.IObjectEvent"

        addview="collective.keywordcondition.Keyword"

        editview="edit"

        />

</configure>


Aqui em primeiro lugar importamos os elementos de configuração necessários de plone.app.contentrules e registramos nosso adaptador, e os views de inclusão e edição. O nome do view de inclusão deve corresponder ao nome do elemento (collective.keywordcondition.Keyword  no nosso caso) conforme fora definido na classe. O nome da edição deve ser sempre edit

Finalmente registraremos o tipo de condição:

Atenção: Quando criando uma ação use a diretiva <plone:ruleAction />. Ela usa os mesmos atributos de <plone:ruleCondition/>

Novamente, o nome deve corresponder ao definido na classe. O título e descrição são usamos na interface do usuário.

Os atributos for e event são usados para controlar quando o elemento está disponível. Nesse caso, ele é disponível em todos os contextos de eventos e objeto.

Muitos dos eventos registrados no Content Rules são herdados de IObjectEvent. A interface simplesmente garante que haverá um atributo de objeto no evento que contem o objeto para qual o evento foi colocado. Se você quer restringir a condição para um evento ou tipo mais específico você pode definir uma interface diferente aqui. Isso geralmente só é necessário se você precisa de informações adicionais para executar a condição.

Atenção: Deve haver pelo menos um adaptador aplicável ao evento na qual a condição ou ação for registrada.


Fontes:
http://plone.org/documentation/tutorial/creating-content-rule-conditions-and-actions/tutorial-all-pages

http://www.slideshare.net/wooda/kamon-ayeva-let-the-machine-work-for-you-using-plone-content-rules-for-more-productivity/

 

| Comentários

Recuperando arquivos deletados no Plone

por Thiago Tamosauskas em 17/12/2009 17:05
Categoria: CMS, Plone

Deletou um arquivo ou uma pasta que não devia? Nem tudo está perdido. O Plone permite que o administrador veja o histórico de todas as ações feitas por seus usuários e dependendo do caso permite ainda a recuperação de conteúdos deletados.

Essa característica do sistema permite que você desfaça alterações feitas tanto nas configurações como no conteúdo de seus objetos. É uma tarefa relativamente simples, mas que pode eventualmente salvar o seu dia. Veja como fazer isso:

Primeiramente digite no final de sua url /undo_form

Fazendo isso você entrará na tela de Desfazer Ações. Note que esta é uma tela contextual, se você digital /undo_form logo depois da raiz do seu portal terá acesso a todas as últimas ações, se entrar numa área específica verá as ações apenas daquela pasta para dentro.

De qualquer forma você chegará a uma página semelhante a esta:

undo.gif


Agora é necessário encontrar a página que foi deletada. Ela poderá ser identificada no campo "Ação Realizada", que dará tanto o caminho até a pasta, seu título e a ação "Deleted", como no modelo abaixo:

undo2.gif

Depois de ter encontrado a ação que apagou seu arquivo, você poderá desfazê-lo. Para isso selecione-o com o checkbox a esquerda da tabela e então clique no botão 'Desfazer' no final da página.

Não vai haver nenhuma página de resultados, depois de desfeita você deve voltar para a pasta em questão e o conteúdo recuperado já deverá estar lá lhe esperando.

É importante ressaltar que mesmo que uma ação seja exibida na tabela, isso não é certeza de que você poderá desfazê-la. Isso acontece porque algumas transações posteriores podem modificar a pasta em questão ou usar o mesmo id anterior. Por isso, lembre-se que esse é um recurso de emergência e nunca substituirá o cuidado que o usuário deve ter com seus arquivos.

| Comentários

Plone Symposium South America: o Sprint

Plone Symposium South America: o Sprint

Está acontecendo neste exato momento o sprint do Plone Symposium South America. É curioso e muito gratificante ver pessoas de vários países trabalhando juntos para um objetivo em comum. Considerando que hoje é dia de Ação de Graças, a conversa do almoço com @cleberjsantos acabou nos lembrando de uma antiga narrativa bíblica que acho que pode fazer um paralelo interessante ao que está acontecendo hoje.

Para quem não sabe, a certa altura do livro de Gênesis, os habitantes da Babilônia decidem trabalhar juntos para construir uma torre tão alta e majestosa que levaria a humanidade a conquistar os céus. Um projeto ambicioso para a época diga-se de passagem. Por motivos que me escapam o Deus bíblico achou essa empreitada pretensiosa demais, e resolveu confundir um pouco as coisas. Subitamente, cada um dos trabalhadores começou a falar uma língua diferente, a confusão se instalou e o projeto não pode ser levado a diante. Essa é a origem bíblica dos vários idiomas humanos.

Acontece que o que foi um problema para os babilônicos da história não está sendo um problema aqui hoje. Estamos um pouco mais organizados depois de alguns milênios. Enquanto escrevo este post tenho ao meu redor pessoas de vários países diferentes e pelo menos três idiomas sendo usados. Mas isso não desanima ninguém, pelo contrário torna o ambiente ainda mais interessante.

O enfoque da 'Cayapa' é a internacionalização. Nosso objetivo é resolver alguns bugs e especificamente melhorar ainda mais a interface para os idiomas português e espanhol.  É sempre bom lembrar que este sempre foi um ponto forte do Plone, contando hoje com mais de 40 idiomas suportados, incluindo diversos dialetos.

Vale ainda um especial agradecimento a presença de @limi, @esteele, @robertoallende e @macagua  que vieram de seus países para nos dar essa força. Pessoas especiais que estão ajudando a fazer o mundo um lugar menor e ao mesmo tempo mais grandioso.

| Comentários

Tratando CSS no Plone por seção, template ou id

por Thiago Tamosauskas em 10/11/2009 10:05
Categoria: Webdesign, Plone, CSS
Tratando CSS no Plone por seção, template ou id

Uma coisa que vira e mexe acaba aparecendo para todo webdesigners é a necessidade de tratar de maneira especial alguma seção ou mesmo alguma página específica do seu site. Seja por motivos de organização ou por questões puramente estéticas, não é difícil um cliente pedir para que uma seção tenha um cabeçalho próprio ou algum detalhe especial no layout para ser diferenciado do resto da página.

Como fazer isso sem precisar duplicar templates inteiros é uma questão que pode ser resolvida com facilidade no Plone. Por meio da linguagem ZPT o Plone já trás sempre em sua tag body algumas classes específicas.

O código, que se encontra no main_template é o seguinte:

<body tal:attributes="class string:${here/getSectionFromURL} template-${template/id};">


E quando visualizado por exemplo em uma notícia, fica assim:

<body class="section-news template-newsitem_view">


Ou seja, ele varia conforme o local do portal e o template usado. A primeira classe, .section-news, é aplicada dentro de todo diretório news. Esse comportamento se repete em todo portal. A segunda classe, .template-newsitem_view aparece em todos os templates de notícia.

Com o uso inteligente do css podemos agora tratar de maneira especial cada uma dessas situações. No exemplo abaixo, colocamos um cabeçalho próprio para toda a seção de notícias do site:

.section-news #portal-header {background: url(cabecalho-noticias.png) no-repeat;}


Apenas isso já dá um poder imenso para o designer mudar suas páginas e as diversas áreas do site. Mas existe ainda uma maneira de ser ainda mais pontual nessa customização. basta adicionar a linha destacada em negrito a tag body do main_template:

<body tal:attributes="id string:${here/id};

                      class string:${here/getSectionFromURL} template-${template/id};">



Após ser renderizado em uma página esta tag vai ganhar um id igual ao id do Plone e poderia aparecer assim:

<body id="quem-somos" class="section-institucional template-template-document_view">


É claro que não é sadio nem muito inteligente tratar todas as páginas de maneira independente,  mas mesmo assim esse recurso pode ser bastante útil para situações muito específicas ou casos de emergência.

| Comentários

Atributos de atalho no CSS

por Thiago Tamosauskas em 05/08/2009 09:20
Categoria: Webdesign, CSS
Atributos de atalho no CSS

Hoje vamos falar de um conceito extremamente simples de css mas que passa batido por algumas pessoas.  Um conceito que quando começar a ser aplicado dará ao seu código uma aparência muito mais profissional. Basicamente, trata-se de uma forma de dizer mais falando menos ou, se preferir, de codificar mais escrevendo menos. Vamos a ela.

Primeiro, considere o código abaixo:

p {
font-size: 12px;
font-family: Arial;
font-weight: bold;
line-height: 1.5em;
font-style: italic;
font-variant: small-caps;
}


Note que este mesmo código pode ser escrito encapsulando todos os atributos em um único atributo 'font':

p {font: 1em/1.5em bold italic small-caps Arial;}

Sete linhas a menos! O atributo font é uma propriedade de atalho que permite que todos aqueles atributos sejam definidos de uma só vez. Se algum deles foi omitido então é assumido o seu valor padrão.

Outros exemplo interessante:

#box {
background-color: transparent;
background-image: url(imagem.png);
background-repeat: no-repeat;
background-attachment: scroll;
background-position-y: 10px;
background-position-x: 15px;
}

Compare com:

#box { background:transparent url(imagem.png) no-repeat scroll 10px 15px; }

Muito melhor, não é? É claro que estes são exemplos extremos mas de linha em linha seu código pode ficar consideravelmente menor no final do projeto se você se lembrar desta dica que é fácil, mas bastante poderosa.

| Comentários

Como usar jQuery no Plone

por Thiago Tamosauskas em 24/07/2009 16:16
Como usar jQuery no Plone

jQuery oferece uma vasta gama de possibilidades e recursos que podem ser amplamente usados pelos desenvolvedores web. De fato, ele é tão útil que já vem pré-instalado no Plone. No entanto o processo exato de instalação de um add-on pode ser um pouco confuso para quem não tem experiência. Pensando nisso separamos aqui o procedimento de uma maneira simplificada:

Em primeiro lugar suba para o seu site o add-on que quer instalar. Atenção, como mencionado acima, não é preciso subir novamente o arquivo jquery.js, pois este já está instalado no Plone.

O segundo passo é renomear o seletor '$' que vem na imensa maioria dos add-ons e mudá-lo para 'jq' ou 'jQuery'. Isso é importante para que o script não entre em conflito com outros scripts que já estajam instalados e operantes no Plone. Então, por exemplo se a chamada está $(”#portal-logo”), deve ficar jq(”#portal-logo”) ou jQuery(”#portal-logo”).

Depois disso entre na ZMI e em seu plonesite acesse o portal_javascripts. É aqui que são feitos os registros dos javascripts usados no seu site. Em ID/URL coloque o nome do seu arquivo. Deixe as opções Condition e Conditional Comment em branco e o tipo de compreensão 'safe'. A opção Merging allowed deve estar desabilitada também.

Vale dizer que o processo acima só funcionará para scripts bem feitos. Se eventualmente você se deparar com um add-on que insiste em não funcionar, existe ainda a última opção de registrar ele diretamente no template em que você o quer. No main_template temos um slot destinado para estas inclusões de javascript. Se este for o seu caso, esta é uma maneira prática de fazer isso:

<script type="text/javascript" tal:attributes="src string:$portal_url/SEU-JAVASCRIPT.js" ></script>

| Comentários

HTML 5: Um Guia Rápido

por Thiago Tamosauskas em 10/07/2009 13:24
HTML 5: Um Guia Rápido

Quem trabalha com internet deve se acostumar a viver com mudanças. Todo dia surge algo novo e em pouco tempo a tecnologia de ponta se torna ultrapassada. Publicações e sites especializados ao redor do mundo já começam a falar da aposentadoria do XHTML e o começo da carreira do HTML 5.

Segundo o W3C News Archive, os dois grupos atualmente trabalhando com XHTML estarão encerrando as atividades até o fim de 2009 de modo que a W3C poderá aumentar os recursos e pessoal disponíveis para o desenvolvimento da nova geração da linguagem de marcação.

Note que as especificações ainda estão em andamento e devem durar um bom tempo até estarem concluídas. No entanto é de se esperar que partes do HTML 5 já sejam implementadas nos navegadores em um futuro muito mais próximo.

Por esse motivo preparamos aqui um rápido guia de referência com todas as novas tags e as tags que foram definitivamente banidas. Esta folha pode ser impressa e facilmente consultada por quem já quiser ir se preparando para o que vem por ai:

 

| Comentários

Como salvar metadados no sistema de arquivos

por Thiago Tamosauskas em 03/07/2009 09:30
Como salvar metadados no sistema de arquivos

É importante que no desenvolvimento de um layout em plone, os arquivos de customização: css, imagens, scripts e templates sejam levados para o sistema de arquivos para que com eles seja gerado um novo produto de tema.

Trabalhar via ZMI (Zope Management Interface), pode ser muito prático e rápido, mas deixar os arquivos lá pode comprometer a velocidade do site no futuro. Migrar as imagens e os estilos é relativamente tranquilo, mas e no caso das mudanças feitas na aba properties?

Nesse breve post veremos que isso também pode ser bastante simples.

Fazer isso permite por exemplo dar Títulos amigáveis aos elementos evitando que id's de page-templates e scripts apareçam para o usuário final. A maneira mostrada a seguir permite que estes títulos e demais metadados sejam levados ao produto de tema:

Primeiro crie um arquivo com o mesmo nome do seu page-template, mas adicionando a extensão .metadata. Ou seja se o seu arquivo se chama folder.pt o seu arquivo irmão se chamará folder.pt.metadata

Agora, no arquivo de metadados adicione as seguintes linhas:

[default]
title=Titulo do Template

É simples assim. Usando este método por exemplo com o logo.gif você poderá colocar nele o título do seu site evitando que o atributo alt da imagem exiba o nome do arquivo.  Estes detalhes são importantes para entregar ao visitante uma interface mais bem resolvida e são valiosíssimos para aumentar a acessibilidade de suas páginas.

| Comentários

Plone.uservoice: uma boa idéia

por Thiago Tamosauskas em 23/06/2009 14:30
Plone.uservoice: uma boa idéia

O Plone é um sistema em constante melhoria. Diariamente alguém desenvolve um novo produto ou aprimora alguma funcionalidade. Diariamente também os usuários do Plone tem ideias de como o sistema pode ficar ainda melhor. Pode ser algo pequeno como um link no lugar certo ou uma revisão completa de alguma parte da estrutura do CMS. Sabendo do valor que a criatividade tem a comunidade Plone acabou de lançar o plone.uservoice.

Ainda em testes, plone.uservoice trata-se de uma nova e simples ferramenta para sugerir, discutir e votar novas ideias que vão fazer com que o Plone fique cada vez mais completo e funcional. Embora a barreira da língua ainda seja uma realidade para alguns usuários daqui o novo sistema permitirá aos que dominam o inglês uma forma mais amigável e flexível para sugestão de melhorias no Plone.

O novo sistema, complementa, mas não substitui o já consagrado PLIP (Plone Improvement Proposal). o UserVoice é focado na geração de ideias enquanto o PLIP são mudanças e melhorias que serão inclusas por alguém nas próximas versões do Plone. Basicamente, se você tem uma boa idéia, mas não tem tempo ou conhecimento para implementá-la, use o plone.uservoice e não o PLIB. Para mais informações, o plone.org disponibilizou um breve FAQ a respeito.

Obviamente, nem toda ideia sugerida no UserVoice será implementada, mas sem dúvida esta será uma maneira mais certeira de espelhar e entender o que os usuários do Plone querem. Para dar a sua sugestão ou mesmo avalar as sugestões dos outros, acesse: http://plone.uservoice.com. Além disso, esta será também uma maneira mais ágil para os desenvolvedores. Se você quer contribuir com o desenvolvimento do Plone, mas não sabe como, basta dar uma olhada naquilo pelo que o povo está clamando.

Um dos conceitos incluídos no plone.uservoice é que cada participante tem apenas 10 votos. O poder por trás disso é o de que o valor está na escassez. Tendo um limitado número de votos, as pessoas terão que fazer escolhas mais cuidadosas sobre o que elas realmente aprovam. Uma forma de garantir que apenas as melhorias mais desejáveis ganhem destaque.

E ai, alguma grande ideia para hoje?

| Comentários

Portlets com bordas arredondadas no Plone

por Thiago Tamosauskas em 19/06/2009 16:25
Categoria: Webdesign, Plone
Portlets com bordas arredondadas no Plone

Um detalhe que pouca gente presta atenção é que o Plone trás no código de seus portlets marcações padronizadas com as classes específicas para cada um de seus quatro cantos. Com essas marcações  podemos, entre outras coisas criar bordas as arredondadas de nossos layouts. É isso o que veremos neste post.

Em primeiro lugar crie as quatro bordas no seu editor de imagens favorito.  Os quatro cantos do portlets serão colocadas em um mesmo arquivo portlet-corners.gif, como no exemplo abaixo:

portlet-corners.gif portlet-corners.gif


Depois aplique o seguinte estilo em seu site:

.portlet {
border-bottom:0pt none;
margin-left:2px;
margin-bottom:0px;}

.portlet dd {margin-left:0px;}

dd.portletFooter{border-top:0px !important;}

.portletHeader, .portletFooter, .lastItem {
    position: relative !important;
    border:none;
    background-color:transparent;
}

.portletTopLeft {
    background: transparent url(portlet-corners.gif) top left no-repeat;
    position: absolute;
    height: 5px;
    width: 5px;
    border: none;
    left: 0px;
    top: 0px;
}

.portletTopRight {
    background: transparent url(portlet-corners.gif) top right no-repeat;
    position: absolute;
    height: 5px;
    width: 5px;
    border: none;
    top: 0px;
    right: 0px;
}

.portletBottomLeft {
    background: transparent url(portlet-corners.gif) bottom left no-repeat;
    position: absolute;
    height: 5px;
    width: 5px;
    border: none;
    bottom: 0px;
    left: 0px;
}

.portletBottomRight {
    background: transparent url(portlet-corners.gif) bottom right no-repeat;
    position: absolute;
    height: 5px;
    width: 5px;
    border: none;
    bottom: 0px;
    right: 0px;
    margin-right: 0px;
}

Este css simplesmente posiciona e exibe em cada um dos cantos do portlet a porção equivalente da imagem que criamos. Essa técnica de usar vários posicionamentos de uma mesma imagem de fundo é um recurso bastante poderoso que pode ser usado em várias situações. Em breve abordaremos elas aqui no blog também.

| Comentários

O site que virou livro

por Thiago Tamosauskas em 08/06/2009 10:49
O site que virou livro

Em 2008 o Estatuto da Criança e do Adolescente completou 18 anos. Nessa época a Simples teve privilégio de fazer um site lembrando esta data encomendado pela Rede ANDI Brasil, uma rede de 11 organizações dedica a colocar em pauta na mídia a situação das crianças e dos adolescentes em nosso país. O site logo ganhou um conteúdo riquíssimo que vai de relacionamento familiar à gastos públicos, de trabalho infantil à abuso e exploração sexual de menores. Esse trabalho continúa disponível ao público em http://www.redeandibrasil.org.br/eca/

Até ai tudo bem. Site entregue, mais um cliente satisfeito. Mas qual não foi nossa surpresa ao saber que esse trabalho rendeu frutos insuspeitos. As matérias e textos criados para o site viraram agora em 2009 conteúdo um livro reunindo todas essas informações para os jornalistas.

Numa tiragem de  6 mil exemplares e no formato de bolso com 136 páginas o livro traz importantes informações. Dados vitais que todo jornalista deve saber  para escrever com conhecimento de causa sobre as condições dos menores de idade no Brasil

| Comentários

Lançado o site da Rede Brasil Atual

por Thiago Tamosauskas em 29/05/2009 17:14
Categoria: Cidadania, Plone

Todo trabalho entregue é motivo de orgulho e alegria. E esses sentimentos são sempre proporcionais ao envolvimento que temos com cada projeto, pois quanto maior o empenho em realizar algo maior a satisfação de vê-lo pronto. Esta semana tivemos bem essa sensação ao colocar no ar no novo site da Rede Brasil Atual.

Este portal de notícias será o braço virtual da Revista do Brasil que, com quase 60 entidades sindicais por trás  atinge hoje mais de 750 mil leitores ao redor do país com sua distribuição gratuíta. O site faz parte de um esforço em levará esta comunicação popular a um novo patamar e usará diversas das vantagens do Plone para levar uma alternativa democrática, moderna e cidadã as mídias digitais. 

Aqui na Simples, desejamos sucesso a todos os envolvidos nessa nova empreitada, não apenas porque é um projeto admirável, mas porque este será também um sucesso parcialmente nosso.

Assista ao vídeo sobre o lançamento do projeto:

 

 

| Comentários

Skins da Simples usadas ao redor do mundo

por Thiago Tamosauskas em 22/05/2009 17:15
Skins da Simples usadas ao redor do mundo

Um indício de que algo está na moda é que esteja sendo usado em vários países ao redor do mundo. Se isso é mesmo verdade então os temas do Plone que desenvolvemos e abrimos à comunidade já podem ser enquadrados na categoria de sucesso. Para se ter uma idéia os skins feitos para celebrar o World Plone Day respectivamente em 2008 e 2009 já acumulam juntos mais de dois mil downloads segundo os números registrados pelo Pypi.

Sabemos que o Plone tem uma comunidade internacional fortíssima, mas uma coisa é saber isso intelectualmente, outra bem diiferente é ver essa comunidade interagir na prática. O mais legal porém, não é nem a quantidade de downloads que foram feitos, mas sim poder ver os casos específicos de alguns desses sites que estão no ar usando nossos temas.

Eles estão espalhados em vários países, com conteúdos em línguas que não entendemos nada e em contextos que nem imaginamos. Abaixo alguns exemplos encontrados graças ao google analytics:

Se você ainda não conhece esses temas aproveite também a chance para visitar as páginas dos projetos no plone.org, talvez possa ser exatamente a solução que você esteja procurando:

| Comentários

Plone Fondation abre votação sobre licença do Plone

por Thiago Tamosauskas em 13/05/2009 18:09
Plone Fondation abre votação sobre licença do Plone

O Plone faz parte do movimento do Software livre. Dai podemos tirar muitas de suas vantagens em comparação aos outros sistemas de gerenciamento de conteúdo, dentre as quais podemos destacar o custo benefício na hora da implementação e o suporte e desenvolvimento de uma comunidade internacional forte e atuante. Falando mais especificamente, o Plone existe hoje sob a licença GPL, a mesma que rege por exemplo a tecnologia da Wikipédia.

Na prática GPL, ou General Public License (Licença Pública Geral) quer dizer que o Plone seja distribuído e reaproveitado livremente, com a segurança de que ele permanecerá aberto, pois toda modificação no sistema só será liberada se ela mesma usar a mesma licença.

Entretanto com um código cada vez mais baseado em componentes outros projetos passaram a reutilizar partes do framework do Plone, mas por diferentes motivos estes projetos não querem ou não podem usar a mesma licença GPL. Por este motivo esta aberta na Plone Foundation uma votação para permitir o relicenciamento em casos específicos, segundo uma nova política que está sendo proposta.

Segundo seus idealizadores essa nova politica permitiria uma interação mais profunda entre a comunidade Plone e as demais comunidades baseadas em Zope e Python. A votação tem caráter consultivo, pois votações decisórias não podem acontecer fora da reunião anual. O resultado sai no sábado dia 17.

| Comentários

Rua Lisboa, a fronteira final

por Thiago Tamosauskas em 08/05/2009 17:30
Rua Lisboa, a fronteira final

A partir desta semana os simplificadores estão de casa nova. A Simples Consultoria foi transferida para um novo lugar no continuo espaço-tempo. Mas a mudança não foi tão drástica assim, mudamos da Rua Lisboa 307 para a Rua Lisboa 293. Terei que andar 5 passos a mais para chegar no trabalho e 5 passos a menos para ir ao Mc'Donalds. O risco de um ataque cardiaco deve subir também.

A casa nova é bem bacana, muito bem cuidada e o ambiente acabou ganhando um melhor aproveitamento de espaço. Algumas salas já foram batizadas, como a salinha do servidor, nossa "Sala das Máquinas" e a sala de desenvolvimento que ganhou rapidamente o nome de "Sala da Justiça". A parte da decoração ainda está tímida, mas o Superman e a Mulher Maravilha já estão na minha mesa, assim como o poster o Einstein e do novo filme do Star Trek.

Por falar em Star Trek, a Simples está passando por outra mudança nesse meio tempo. Coincidência ou não, na semana em que Jornada nas Estrelas chega ao seu 11º filme do cinema, Érico Andrei assumiu o comando da equipe como nosso CEO.

E já estamos começando a ver as boas conseqüências de ter um trekker no comando.

Vida longa e próspera.

| Comentários
Ações do documento