A pegadinha dos subtítulos de menus

Recentemente passei por uma situação que deixou-me sentindo como um novato. Utilizando um tema premium, vi que ele tinha um menu especial, que exibia subtítulos de uma maneira muito interessante.

Imagem

Inicialmente inseri o subtítulo no campo “Title Attribute” na configuração do menu e nada. Não funcionou. Após isso, como se tratavam de categorias, inseri o texto na descrição da categoria, e nada. Comecei a ficar confuso, não conhecia mais nenhum lugar para inserir estes dados.

E aí está a pegadinha. O campo “Description” do menu é que é utilizado para criar estes subtítulos, não apenas no tema em questão, mas por padrão, fica escondido na interface administrativa de menus. Para que ele seja exibido, é necessário clicar em Screen Options, no topo da tela, e habilitar a opção “Description”. E pronto, a mágica está feita.

Imagem

Espero que este post poupe minutos preciosos do seu dia.

Valeu galera!

WordPress 3.7

Apesar de ter alguns dias de atraso em relação ao previsto, foi liberada ontem, 24/10, a versão 3.7 do WordPress, chamada “Basie”. O nome da versão é uma referência ao pianista Count Basie.

Entre as principais mudanças, destacam-se os updates automáticos, as recomendações de senha e algumas melhorias para outros idiomas. Foram quase 400 tickets resolvidos na ferramenta de acompanhamento de bugs e novas funcionalidades, o Trac (que merece um post só para ele, é um open source animal!).

Se você ainda não baixou esta versão, não perca tempo. Para o meu outro blog, foi muito tranquilo, como sempre.

Para finalizar, vale notar que a versão 3.8 será liberada em dezembro.

Como descobrir as palavras no draw something

Só para falar um pouco sobre descontração…

Que o Draw Something virou febre, ninguém contesta. O jogo tem milhões de usuários pelo mundo e isso se deve a diversos fatores:

  • A versão gratuita é ótima
  • Permite jogar com amigos quando você puder
  • Incentiva o jogador a ter moedas para comprar novas cores
  • Conecta com FB
  • É simples

Mas, como fazer para sempre descobrir o que o seu amigo desenhou de maneira simples e rápida? É muito fácil, basta acessar o site http://wordsolver.net, selecionar a opção Drawing Something e digitar as letras que apareceram para você (conforme imagem ao lado).

O site vai listar várias palavras que podem ser formadas, separadas por quantidade de letras. Então você conta quantas letras tem a palavra que seu amigo desenhou e pronto. Simples e rápido, certeza de acertar.

Afinal, vai que seu amigo desenha muito mal, não é mesmo?

Valeu!

Características de um time ágil

Rodando pela internet localizei este vídeo que fala sobre as características que um bom time ágil deve ter. Simples de entender, muito objetivo e correto.

Valeu e até a próxima.

Sucesso

Estava dando uma lida no Agile Scout e vi algumas definições de sucesso que são muito legais.

Valeu!

Terra TV – Prós e contras

Nesta semana tive a oportunidade de experimentar o serviço do Terra TV, locação e venda de filmes via streaming.

Uma das coisas que mais gosto de fazer é assistir um bom filme mas, pela falta de tempo, quase não o faço. Como sobrara um tempinho extra, resolvi testar o serviço com os R$ 10,00 que havia ganho pelo meu cadastro.

O filme escolhido foi “A Origem”, uma obra-prima de Christopher Nolan indicada a nada menos que 8 oscars. A excelência do filme a parte, não tive dificuldades para escolher o que assistir, mais pela falta de títulos no site do que por dúvidas.

Dos poucos filmes disponíveis, muitos estão apenas para venda via download. As séries são ainda mais escassas e não existe opção de locação. Cada episódio é absurdamente caro.

O processo de pagamento foi simples e sem dores, afinal, já tinha os R$ 10,00 de crédito. Inserir mais créditos em minha conta também pareceu ser um processo simples. As interfaces do site são bem construídas e a usabilidade é ótima.

Antes de dar o play selecionei o filme que gostaria de ver em minha lista de filmes alugados, e escolhi as opções de áudio e legenda – algo que também me deixou bem feliz. Os vídeos alugados, antes de dar o play, ficam em uma lista e podem ser vistos a qualquer momento.

Como o próprio site do serviço recomenda uma conexão mínima de 2 Mb e a minha conexão em casa é de apenas 1 Mb de velocidade, resolvi deixar o filme carregando. Para minha surpresa, em pouco tempo já tinha 20 minutos de filme em buffer, o que me levou a pensar na qualidade do vídeo e deixou-me um pouco preocupado.

Após um tempo o carregamento do vídeo travou com 1:28:00 e não ia mais para frente. Tentei dar play e pause para ver se o filme continuava carregando e nada. Fui até o último minuto carregado e dei play. Aparentemente o filme poderia ser visto em streaming normal mesmo mas, ainda cético com a velocidade de minha conexão, tirei o áudio do computador, abri mais uma aba em meu browser e deixei o vídeo passando enquanto navegava na internet.

Após poucos minutos, entusiasmado para ver o filme resolvi parar o carregamento, colocar no minuto 0 e assistir. Conectei o notebook na televisão (via cabo normal, não era HDMI), o aúdio no Home Theater e me preparei. Antes de dar o play notei que poderia configurar tamanho e cor da legenda, outra funcionalidade bem legal.

Iniciei o filme e gostei da qualidade de imagem e som, que se equiparou a do DVD comum (obviamente não se compara com o blu-ray numa televisão FullHD). Sem o vídeo ter sido todo carregado antes de eu assistir, continuava preocupado com o que aconteceria quando chegasse no ponto onde seria necessário o streaming normal. Esta preocupação passou pois fiquei entretido com o filme e o assisti até o final sem ter um único travamento, mesmo com apenas 1 Mb de conexão com a internet.

O melhor de tudo foi, no final, não ter que ir devolver o DVD na locadora.

Resumindo:

  • Contras:
    • Pouca variedade de filmes
    • Alto preço para venda e locação
    • Vídeo não carregou completamente em buffer
  • Prós:
    • Crédito gratuito pelo cadastro
    • Boa usabilidade geral
    • Escolha de áudio e legenda
    • Configurações de exibição da legenda
    • Qualidade do vídeo e do áudio
    • Todo o processo é feito pela internet

Obviamente existem outras opções, como o download via Torrent que, por ser ilegal, deixa de ser uma opção para mim. Dentro da legalidade, podemos utilizar o serviço da NetMovies, que peca por não ter um plano livre de assinatura mensal, mas que é muito mais barato para quem assiste muitos filmes e tem mais variedade na locação via streaming. Mais um ponto positivo para a NetMovies é que eles trabalham também com mídias físicas, entregando e buscando o filme na casa do cliente.

Pode-se ainda optar pela boa e velha locadora da esquina, mas eu não acredito que este serviço continue se encaixando hoje em dia.

Valeu, e até a próxima.

Como funciona a relevância no Solr

Existem fatores básicos (BEM básicos) que determinam o score de um documento para uma uma busca. São eles:

  • TF (Term Frequency) – Quanto mais vezes um determinado termo aparece num documento, mais importante é aquele documento;
  • IDF (Inverse Document Frequency) – Documentos que tem termos raros contam mais do os que tem termos extremamente comuns;
  • Coord (Coordination Factor) – Se uma busca tem mais de um termo, quanto mais termos são encontrados num documento, maior o seu score;
  • LengthNorm – Campos com menos termos tem mais importância do que campos com muitos termos. Abordamos este assunto mais profundamente no post Omitnorms – Desvendando os segredos desta propriedade;
  • Index-Time boost – Se foi definido boost para um documento em tempo de indexação, pesquisas que retornem aquele documento farão com que ele tenha maior relevância;
  • Query Clause Boost – Quando é definido um boost em tempo de query, a parte que recebeu o boost terá maior peso no cálculo de relevância dos documentos.

Valeu

Turbinando o DataImportHandler com o ScriptTransformer

Em um dos projetos em que trabalhei, foi necessário mais do que simplesmente fazer a importação dos dados do repositório principal para o Solr, em muitos casos tivemos que tratar os campos antes de serem enviados.

Fora as discussões de “em qual camada da aplicação estes dados devem ser tratados”, alguns deles foram modificados em tempo de indexação. E não existe lugar melhor para fazer do que no DataImportHandler.

Existem várias maneiras de se tratar os dados no DIH. Um deles é com o TemplateTransformer, que utilizamos da seguinte forma (no caso abaixo estou utilizando um FileListEntityProcessor com um XPathEntityProcessor):

<entity name="x" processor="XPathEntityProcessor" forEach="/SEU/XPATH/AQUI" url="${f.fileAbsolutePath}" transformer="TemplateTransformer">

...

<field column="seucampo" template="${x.campoorigem} texto fixo" />

Isso fará com que o campo “seu campo” tenha o valor de “teste texto fixo” quando o valor do campo origem for “teste”.

E a maneira mais flexível (e complexa) de alterar um registro em tempo de indexação é com a utilização de scripts no DIH. Para isso, o primeiro passo é incluir a chamada ao script em seu “entity”:

<entity name="x" processor="XPathEntityProcessor" forEach="/SEU/XPATH/AQUI" url="${f.fileAbsolutePath}" transformer="TemplateTransformer,script:SuaFuncao">...

Após isso, você insere a sua tag script após a abertura da tag dataConfig, recebendo um parâmetro para o registro que você está trabalhando, relacionado ao entity corrente (o script será executado uma vez para cada registro) e com o nome definido um passo atrás, como eu fiz no exemplo abaixo:

<script>
<![CDATA[
function SuaFuncao(linha) {
return linha
}
]]>
</script>

E então, dentro deste script existem várias coisas que podem ser feitas, avalie o simples exemplo abaixo, basta apenas um pouco de conhecimento de javascript:


<script>
<![CDATA[
function SuaFuncao(linha) {

var textoManual = new java.util.ArrayList();
var campo1 = linha.get("campo1");
var campo2 = linha.get("campo2");
var suites = linha.get("suites");
var vagas = linha.get("vagas");
var tipooferta = linha.get("tipooferta");

if (campo1 != null)
textoManual.add(campo1 + " descrição do campo");

if (campo2 == "teste" || campo2 == "aquivai")
textoManual.add(campo2);

//Adicionar uma palavra fixa
textoManual.add("palavra-para-todos-os-campos");

linha.put("textomanual", textoManual);
return linha;

}
]]>
</script>

Com um pouco mais de imaginação dá para fazer muitas coisas legais. Para saber um pouco mais sobre o ScriptTransformer, visite o site oficial: http://wiki.apache.org/solr/

Bem galera, é isso, qualquer dúvida, estou à disposição.

Paz!

Omitnorms – Desvendando os segredos desta propriedade

Se olharmos na documentação oficial do Solr, encontraremos a seguinte explicação:

  • This is arguably an advanced option.
  • Set to true to omit the norms associated with this field (this disables length normalization and index-time boosting for the field, and saves some memory). Only full-text fields or fields that need an index-time boost need norms.

Começamos mal… A primeira vez que eu li isso eu nem entendi direito, então fui atrás tentar descobrir o que era.

Mas, logo de cara, entendi que isso desabilitava boost em tempo de indexação e liberava um pouco de memória. Ou seja, por padrão defino os campos com omitnorms = true, pois a maioria dos campos não são fulltext e nem precisam deste tipo de boost.

Então começo a definir quais devem ter normas. Pela rápida explicação do tutorial, os campos que precisam de boost em index-time não tem negócio, então estes vão ter mesmo omitnorms=false, pois as normas são que guardam os dados deste tipo de boost.

Dentre aqueles que são fulltext, vamos entender quais vão precisar das normas. Para isso tive que entender o que são as normas. Normas são:

  • Um fator de score específico para cada campo de um documento
  • É calculado em tempo de indexação
  • Baseado no boost do documento, do campo e no lenghtNorm

Do que esta na explicação acima, temos como novidade apenas a questão do LengthNorm, que é um valor calculado de acordo com o conteúdo do campo. De forma que campos com menos conteúdo tenham mais relevância no cálculo final do valor da norma. Esta norma é calculada multiplicando-se os valores do boost do documento, com o lenghtNorm e o boost do campo.

Para tentar tornar a explicação um pouco mais simples, a norma é um dos fatores que são levados em consideração na hora de se determinar quais documentos são mais importantes para uma determinada busca – o score daquele documento.

Basta agora apenas saber que este valor de norma perde precisão no processo de indexação e busca, ou seja, as modificações de valores de boost devem ser realizadas com cuidado e muitos testes.

Ou seja, se seu campo fulltext deve ser levado em conta na hora de se determinar o score de um documento com base na quantidade de dados nele, determine que ele armazene a norma (omitnorms=false), caso contrário não. Dica: campos fulltext muito pequenos normalmente não vão necessitar de normas.

Mas afinal, que diferença faz eu colocar omitnorms=false para todos os campos fulltext? Não é mais simples?

E aqui mora o perigo. Por não entendermos corretamente o que esta propriedade faz podemos comprometer a utilização da memória de nosso servidor. Um exemplo nos ajudará a entender melhor o que quero dizer:

As normas são armazenadas no índice utilizando 1 byte por campo por documento. Quando, através de um IndexReader, elas são carregadas, são criados arrays com o tamanho do número total de documentos no índice (new Array[maxdoc]), sendo um array por campo. Isso significa que, mesmo que apenas um documento num índice de 6 milhões de registros tenha o campo com normas, será alocado na memória um Array de aproximadamente 6 Mb na RAM. E isso porque estamos falando de apenas um campo, se este mesmo índice tiver 10 campos assim, estamos falando de 60 Mb. Em alguns cenários, com mais campos ou mais registros, podemos estar falando de uma pequena catástrofe (não se surpreenda se 1 Gb de RAM sumir de seu servidor quando o Solr for iniciado).

Notas:
Index-time boost é diferente de query-time boost. Para boost em tempo de query não são necessárias as normas para o campo, ou seja, podemos definir como omitnorms=true.

Valeu e até a próxima.

Scrumtable – Release 1.0

Hoje encontrei um vídeo de um projeto de software chamado ScrumTable. Vejam o vídeo e entendam melhor.

Legal né? Isso acaba com os post-its em papel (o que já acontece com outros projetos similares) e também dá conta do Planning Poker.

Sei que existem projetos muito parecidos, mas achei este bem legal.

Fica a dica.

Valeu!

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Junte-se a 475 outros seguidores

%d blogueiros gostam disto: