Velocity – incluindo diversos arquivos através de um loop

O Chris já publicou aqui um tutorial de Velocity, uma linguagem de templates que estou usando diariamente no trabalho.

Como eu não conhecia a linguagem até começar a trabalhar aqui, existem várias coisas que são são novidades para mim – e os blogs e docmentações estão ajudando a aumentar a produtividade.

Para compartilhar o que aprendi (e servir para minhas consultas futuras), fiz algumas contribuições com posts aqui no O Desenvolvedor, e entre as relacionadas ao Velocity (e Java) destaco duas:

  1. Formatação de datas em Java
  2. Loop no Velocity com limite numérico (foreach)

 

Velocity – Loop de includes usando variáveis

Estava estudando métodos para dar include (parse) em arquivos com o Velocity, e em um caso específico queria incluir diversos arquivos através de um loop: código enxuto, ao invés de adicionar uma linha para cada parse.

Se você não sabe como funciona o parse no Velocity, veja este exemplo de código.

 

 

Para ilustrar este post, criei um "problema" e abaixo explico a solução.

 

Problema
Necessário fazer diversos includes a partir de uma lista de arquivos (string).

Solução
Pegar a lista, transformar em array e usar o parse para cada elemento do array

 

Supondo que você tem a string: "include1,include2,include5" e estes são os nomes de arquivos que você precisa incluir, o primeiro passo é dar um split pelas vírgulas e transformar isso em um array.

 

 

Primeiro setamos uma variável ($inc) com a lista de includes que serão feitos

#set($inc = "include3,include4,include9")

Abaixo utilizo o método split (ler documentação) na variável $inc gerada anteriormente, separado os elementos pela vírgula e criando um array com os nomes dos arquivos (o array poderia ser criado diretamente, porém usei o string para enriquecer mais o exemplo).

#set($arr = $stringUtils.split($inc,","))

Pronto, agora temos um array com o nome dos arquivos e é aqui que a "mágica" começa. Criamos um loop (foreach) para o array, e dentro dele definimos uma variável com o caminho do arquivo que será incluído e chamamos o parse para a variável do caminho ($dir).

#foreach($o in $arr)
   #set($dir = "includes/vm/"+$o+".vm")
   #parse($dir)
#end

 

Tentei concatenar o nome do arquivo (elemento do array) com o caminho direto na linha do parse e não funcionou. O workarround de definir a variável antes resolve o problema!

Espero que seja útil, esse script pode ser bastante útil para o controle de includes!

Como colocar o Twitter no seu blog (quase sem programar)

Essa semana tive que implementar em um box com os últimos tweets de determinada conta, em um blog para um cliente da MM Café.

A solução mais simples que encontrei foi consumir os dados da API do twitter através do javascript mesmo. Para isso busquei uma solução pronta e a melhor que encontrei foi o Twitterjs. Script extremamente simples de usar, você pode fazer o download da última versão no Google Code ou utilizar o hotlink direto, como no exemplo abaixo:

<script 
 
src="http://twitterjs.googlecode.com/svn/trunk/src/twitter.min.js"
 
type="text/javascript">
</script>

Com o script linkado na sua página tudo o que você precisa é chamar a função que irá requisitar os tweets e passar as configurações desejadas.

Um exemplo simples, que será explicado após o código:

getTwitters("myTweets", { 
id: "andafter",
count: 10,
enableLinks: true,
ignoreReplies: true,
clearContents: true,
template: "<li> %text% <a href="http://twitter.com/%user_screen_name%/statuses/%id%/">%time%</a></li>"
});

No exemplo acima eu vou exibir no meu elemento html com id "myTweets" os últimos 10 tweets do @andafter em forma de lista. O html é simples:

<ul id="myTweets"> <li>Aguarde, carregando tweets...</li> </ul>

Pronto!

Agora vamos a algumas explicações, primeiro das configurações quando você chama a função:

Opções de configuração

Agora vou explicar as configuração quando você chama a função:

  • id: seu user no twitter
     
  • count: quantidade de tweets exibidos
     
  • clearContents: se for true, limpa o elemento html que carregará os tweets
     
  • enableLinks: true/false – deixa os links do tweet clicáveis
     
  • ignoreReplies: true/false – exibir ou não os seus replys para outras pessoas

  • template: o HTML que irá exibir o tweet, neste item que irão as variáveis do tweet , que são explicadas mais a frente neste post
     
  • prefix: mensagem exibida antes de cada tweet (no caso de não usar template)
     
  • timeout: Millisegundos antes de executar a ação do "onTimeout"
     
  • onTimeout: função executada quando o tempo setado acima acaba
     
  • newwindow: true/false – define se os links dos tweets irão ou não abrir em uma nova janela (ou aba)
     
  • callback – Função chamada quando completa a requisição e exibição dos tweets. Esta função não é chamada em caso de timeout.

 

Variáveis do template

Abaixo a explicação das variáveis que você pode usar para exibir seus tweets (no item "template" da configuração):

  • text – a mensagem do tweet
     
  • id – id do tweet
     
  • time – tempo "amigável" da postagem, ex: 2 hours ago
  • created_at – tempo da criação
     
  • user_name – Nome do usuário
     
  • user_screen_name – Username
     
  • user_id – ID do usuário
     
  • user_profile_image_url – Avatar do user
     
  • user_url – Url do user
     
  • user_location – Localização do user
     
  • user_description – Bio do user

 

 

 E o resultado, já apresentei lá em cima, segue um exempo um pouco diferente:

getTwitters("myTweets", { 
id: "andafter",
count: 10,
enableLinks: true,
ignoreReplies: true,
clearContents: true,
template: "<li> %text% <a href="http://twitter.com/%user_screen_name%/statuses/%id%/">%time%</a></li>", timeout: 15, onTimeout: function(){ alert("No momento o twitter não está respondendo."); }
});

Entendendo os números do CHMOD

E escrevo hoje para compartilhar com vocês uma tabela bacana que explica os números referente as permissões do chmod.

Mas primeiro, vamos definid chmod para quem não faz idéia do que estou falando…

O que é CHMOD?

Não consegui resumir mais do que esta frase da Wikipédia:

chmod é um comando unix/linux usado para alterar permissões de arquivos (ou ficheiros) e diretórios (directórios ou pastas).

Wikipedia

É um comando utilizado para dar permissões de arquivos, coisa comum em gerenciamento de servidor. O @mnetto encontrou um post dele antigo, falando sobre o assunto e vou compartilhar a ótima explicação…

Ao final do artigo cito exemplos do comando completo, mas primeiro vamos entender os números e as permissões…

Números binários

Para entender o que significa cada número no chmod vamos entender primeiro números binários, vamos lá:

  0 - 000
  1 - 001
  2 - 010
  3 - 011
  4 - 100
  5 - 101
  6 - 110
  7 - 111

 

As permissões do chmod

Existem 3 tipos de permissões: leitura (r), escrita (w), execução (x).

Unindo isso a tabela de números binários, temos o seguinte:

      rwx
  0 - 000
  1 - 001
  2 - 010
  3 - 011
  4 - 100
  5 - 101
  6 - 110
  7 - 111

 

Na tabela acima é possível ver que 0 (zero) não tem nenhuma permissão "ligada" nos binários, e 7 tem todas "ligadas". Ou seja, 7 é o nível máximo de permissão: leitura, escrita e execução.

 

O comando CHMOD

O comando chmod funciona da seguinte forma:

chmod [dono][grupo][outros] nomedoarquivo.ext

Entre [ ] deve ir o valor numério (de zero a 7, na tabela apresentada acima) referente ao: dono, grupo e outros usuários.

Exemplo:

chmod 755 abc.doc

Neste exemplo o dono do arquivo tem permissão total, enquanto todos os outros usuário tem permissão de leitura e execução apenas.

 

Espero que tenham gostado, a ótima referência das tabelas estão no l-dicas.

Criar atalhos no teclado com Javascript e jQuery

Depois de publicada a tabela de Key Codes para javascript vamos aprender algumas formas mais avançadas para criar atalhos de interface para sites utilizando o teclado.

O exemplo simples já foi dado no post da tabela de keycodes, fiz um exemplo um pouco mais complexo que permite verificar quando duas teclas estão pressionadas, para criar atalhos para por exemplo salvar um post que o usuário está escrevendo com o CTRL+S, ou permitir a um usuário da internet utilizar o CTRL+O para abrir um documento…

O exemplo abaixo não utiliza nenhuma biblioteca e comentei as linhas para facilitar o entendimento, segue o código:

var pressedCtrl = false;
//Quando uma tecla for liberada verifica se é o CTRL para notificar que CTRL não está pressionado
document.onkeyup=function(e){
	if(e.which == 17)
	pressedCtrl =false;
}
// Quando alguma tecla for pressionada:
// Primeiro if - verifica se é o CTRL e avisa que CTRL está pressionado
// Segundo if - verifica se a tecla é o "s" (keycode 83) para executar a ação
document.onkeydown=function(e){
	if(e.which == 17)
		pressedCtrl = true;
	if(e.which == 83 && pressedCtrl == true) {
		//Aqui vai o código e chamadas de funções para o ctrl+s
		alert("CTRL + S pressionados");
	}
}

No caso acima utilizei uma variável "pressedCtrl" que controla quando a tecla CTRL está pressionada e só se este caso for true ele executará as ações dos atalhos.

Com jQuery fica quase a mesma coisa – agora sem os comentários.

 

var pressedCtrl = false;
$(document).keyup(function (e) {
	if(e.which == 17)
		pressedCtrl=false;
})
$(document).keydown(function (e) {
	if(e.which == 17)
	pressedCtrl = true;
	if(e.which == 83 && pressedCtrl == true) {
		//Aqui vai o código e chamadas de funções para o ctrl+s
		alert("CTRL + S pressionados");
	}
});
 

Com os exemplos simples acima é possível incrementar atalhos mais complexos de mais do que 2 teclas, e outras combinações de teclas também.

Agora vamos a um exemplo de atalho de navegação, controlar a paginação de um site pelas teclas direita e esquerda do teclado.  O código abaixo utiliza a tecla da direita para redirecionar a página para a url do link <a> com id="next" e a tecla da esquerda para o link com id "prev".

$(document).ready(function(){
	$("document").keyUp(function(e){
		e.keyCode == 39;
		window.location = $("#next").atrr("href");
	});
	$("document").keyUp(function(e){
		e.keyCode == 37;
		window.location = $("#prev").atrr("href");
	});
});

 

Com um pouco de criatividade é possível aumentar a usabilidade do seu site utilizando estes atalhos – e para interface de intranets é possível melhorar bastante e além da usabilidade aumentar a produtiivdade dos usuários.

Referências

 

 

Tabela de Key Codes para Javascript

Com o javascript é possível identificar as teclas pressionadas pelo usuário e com isso ativar funções: atalhos, controle de interface, jogos, etc.

Comecei um post sobre o controle da interface com teclado utilizando jQuery mas achei interessante (e útil) antes publicar a tabela com todas as Keycodes (códigos que identificam cada tecla do teclado) para javascript.

Segue a tabela com o código de cada tecla:

Key Pressed Key Code
backspace 8
tab 9
enter 13
shift 16
ctrl 17
alt 18
pause/break 19
caps lock 20
escape 27
page up 33
page down 34
end 35
home 36
left arrow 37
up arrow 38
right arrow 39
down arrow 40
insert 45
delete 46
0 48
1 49
2 50
3 51
4 52
5 53
6 54
7 55
8 56
9 57
a 65
b 66
c 67
d 68
e 69
f 70
g 71
h 72
i 73
j 74
k 75
l 76
m 77
n 78
o 79
p 80
q 81
r 82
s 83
t 84
u 85
v 86
w 87
x 88
y 89
z 90
left window key 91
right window key 92
select key 93
numpad 0 96
numpad 1 97
numpad 2 98
numpad 3 99
numpad 4 100
numpad 5 101
numpad 6 102
numpad 7 103
numpad 8 104
numpad 9 105
multiply 106
add 107
subtract 109
decimal point 110
divide 111
f1 112
f2 113
f3 114
f4 115
f5 116
f6 117
f7 118
f8 119
f9 120
f10 121
f11 122
f12 123
num lock 144
scroll lock 145
semi-colon 186
equal sign 187
comma 188
dash 189
period 190
forward slash 191
grave accent 192
open bracket 219
back slash 220
close braket 221
single quote 222

 

Para verificar qual tecla foi pressionada você pode conferir o Key Code no javascript, utilizando o código abaixo:

document.onkeyup=function(e){

   if(e.which == 17){
          //Pressionou CTRL, aqui vai a função para esta tecla.
     return false;
   }

}

Depois publico algumas utilizações dos keycodes, como por exemplo utilizar uma combinação do teclado para dar submit em um form, validar dados, etc…