Desde que comecei a usar Linux há alguns anos atrás sempre fiquei me perguntando como outras pessoas da área de TI conseguiam usar Windows em suas máquinas. Sempre travando, dando erro e reiniciando sozinho, pra mim o Windows é uma alternativa inviável. Se os caras trabalham com tecnologia é de se esperar que tenham pelo menos curiosidade de testar outras alternativas, mas não.. As pessoas parecem achar que computador pessoal é sinônimo de Windows.
Depois que fui pro Linux percebi que meu computador simplesmente tinha parado de travar. Nunca mais travou. Nenhuma vez mesmo. Enquanto isso, milhares de pessoas ao redor do mundo estão levando a famosa tela azul, achando super normal e pensando: “É.. deve ter dado uma travadinha”. Apertam o botão de reiniciar e ficam tranquilos, esperando a prõxima vez que tiver que reiniciar. Mecheu na configuração: reinicia. Instalou programa? Reinicia. Desinstalou? Adivinha? Reinicia!
Essa rotina infeliz fazia parte da minha vida e eu não largava o Windows porquê ainda era dependente meia dúzia de bons aplicativos que foram escritos somente pra ele. Foi quando descobri o Wine e fiquei sabendo que poderia rodar o Photoshop, MS Office, mIRC e outros no Linux. Em um primeiro memento achei que não fosse funcionar direito mas fui testando vários aplicativo e a maioria funiciona sem alterações na funcionalidade.. certinho!
Já testei o Wine no Debian, instalando pelo apt-get e no Slackware, compilando o código-fonte. Nas duas distribuições os resultados foram satisfatórios.
É claro que ainda existem alguns pequenos probleminhas. Alguns aplicativos não ficam tão “bonitos” no Wine e outros apresentam alguma perda de funcionalidade, mas a maioria esmagadora roda sem problemas. É provável que daqui a pouco tempo o Wine já tenha sido melhorado, pois o projeto está em desenvolvimento ativo.
Se você ainda não tentou, não custa nada tentar! http://www.winehq.org
Vale a pena dar uma olhada na lista dos aplicativos que á foram testados com Wine.
http://appdb.winehq.org/
São centenas de programas. Mas se infelizmente seu programinha preferido não roda, vê se toma vergonha na cara e arruma outro open source pra fazer a mesma coisa! =)
Aloha! Este é meu primeiro post. Espero continuar com tempo e paciência pra manter este blog. Por enquanto vou escrevendo meus posts toscos e deixando-os arquivados aí. Se for útil pra alguém, melhor ainda. Não espere textos bem redigidos ou com muita coerência.
Estou pra escrever esse texto desde que Tcl8.5 foi lançado. Meses depois, aí está.
Vejamos os highlights da nova versão (retirado do site oficial da linguagem):
Highlights of Tcl 8.5
* Speed: 8.5 now runs 10% faster than 8.4 with bytecode improvements, object caching and reduced memory usage.
* Bignums: Tcl now supports arbitrary-precision integers, which improves math operations on large integers.
* Safer interps: Tcl’s powerful safe interpreter mechanism now has improved control of time and command limits in slave interpreters.
* clock command: More robust implementation of command for specifying time, with significant l10n and i18n improvements.
* dict command: New data structure that allows access to data by value rather than a variable name, which is substantially faster.
* Additional improvements: Faster list search, new and improved mathematics procedures, anonymous procedures, new ways to package Tcl extensions, Tcl-level custom channel types, file and line location information for each command, and more.
Agora vejamos.. “runs 10% faster than 8.4″. Quando vi esse tópico a primeira reação foi de felicidade. “Que beleza! 10% a mais é bastante coisa..”. Mas depois pensei “Será que é isso tudo mesmo?”. Vamos aos testes!
Vou testar o seguinte script bisonho que fiz aqui em 40 segundos:
#——————– inicio ——————–
#!/usr/bin/tclsh
# Testando stdout
foreach item [list a b c d e f g h i j l m n o p q r s t u v x z] {
puts $item
}
# Testando loops
set i 0
while {$i <= 100} {
incr i
}
for {set i 0; set j 0} {$i <= 100} {incr i} {
incr j
}
# Testando lsort
set sorted [lsort -dictionary [list z x v u t s r q p o \
n m l j i h g f e d c b a]]
#——————– fim ——————–
Gostaria de realizar os testes no meu Slackware mas infelizmente estou diante de um Windows XP.
Vou rodar o script 3 vezes em cada versão do interpretador Tcl (8.4 e 8.5) e computar os tempos. Ambas as distribuições Tcl são da ActiveState (ActiveTcl). Chamarei os executáveis via Cygwin, usando o aplicativo ‘time’ do próprio Cygwin para contar o tempo.
Vamos aos resultados: (a quarta coluna é a média das três primeiras)
Tcl8.4 ————————— média
————————————————-
real 0m0.060s - 0m0.059s - 0m0.055s - 0m0.058s
user 0m0.020s - 0m0.040s - 0m0.040s - 0m0.033s
sys 0m0.050s - 0m0.030s - 0m0.030s - 0m0.036s
————————————————-
Tcl8.5 ————————— média
————————————————-
real 0m0.066s - 0m0.065s - 0m0.073s - 0m0.068s
user 0m0.020s - 0m0.010s - 0m0.020s - 0m0.016s
sys 0m0.000s - 0m0.010s - 0m0.000s - 0m0.003s
————————————————-
Acho que já dá pra perceber que é mais rápido mesmo. Não quer que eu calcule quantos porcento
mais rápido né? =)
Ainda falando de performance, podemos testar também o novo comando lassign, usado para separar em variáveis cada item da de uma lista. Antes de Tcl8.5 você teria que usar:
set primeiroParametro [lindex $lista 0]
set segundoParametro [lindex $lista 1]
set terceiroParametro [lindex $lista 2]
Agora podemos comprimir isso em apenas um comando:
lassign $lista primeiroParametro segundoParametro terceiroParametro
Além de melhor organizado, o seu script fica mais rápido.
Vamos testar também o lassign. Vou testar o método antigo no interpretador Tcl8.4 e o método do lassign no interpretador Tcl8.5.
#——————– inicio ——————–
#!/usr/bin/tclsh
# Testando método antigo
set lista [list a b c d e f g h i j l m n o p q r s t u v x z]
set p1 [lindex $lista 0]
set p2 [lindex $lista 1]
set p3 [lindex $lista 2]
set p4 [lindex $lista 3]
set p5 [lindex $lista 4]
set p6 [lindex $lista 5]
set p7 [lindex $lista 6]
set p8 [lindex $lista 7]
set p9 [lindex $lista 8]
set p10 [lindex $lista 9]
set p11 [lindex $lista 10]
set p12 [lindex $lista 11]
set p13 [lindex $lista 12]
set p14 [lindex $lista 13]
set p15 [lindex $lista 14]
set p16 [lindex $lista 15]
set p17 [lindex $lista 16]
set p18 [lindex $lista 17]
set p19 [lindex $lista 18]
set p20 [lindex $lista 19]
set p21 [lindex $lista 20]
set p22 [lindex $lista 21]
set p23 [lindex $lista 22]
#——————– fim ——————–
#——————– inicio ——————–
#!/usr/bin/tclsh
# Testando lassign
set lista [list a b c d e f g h i j l m n o p q r s t u v x z]
lassign $lista p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 \
p11 p12 p13 p14 p15 p16 p17 p18 p19 p20 p21 p22 p23
#——————– fim ——————–
Resultados:
Tcl8.4 (lindex) ——————— média
————————————————-
real 0m0.040s - 0m0.039s - 0m0.039s - 0m0.039s
user 0m0.030s - 0m0.030s - 0m0.020s - 0m0.026s
sys 0m0.020s - 0m0.020s - 0m0.030s - 0m0.023s
————————————————-
Tcl8.5 (lassign) ——————– média
————————————————-
real 0m0.059s - 0m0.056s - 0m0.054s - 0m0.056s
user 0m0.010s - 0m0.010s - 0m0.010s - 0m0.010s
sys 0m0.010s - 0m0.010s - 0m0.000s - 0m0.006s
————————————————-
Está comprovado. Tcl8.5 é realmente mais rápida. Muito bom, já que a compatibilidade com scripts antigos é total. Assim eu posso atualizar meu ambiente sem alterar nada nas aplicações.
Outra novidade interessantíssima é o comando dict. Ele permite estruturar suas listas de modo a representar estruturas de dados mais complexas, algo parecido com structs em c. É um avanço considerável, pois além de tornar o tratamento de dados muito mais elegante também trás ganho em velocidade de execução.
Os dicts, ou dicionários, quando representados em formato string, tem a seguinte aparência:
% dict set clientes 1 nome joao
1 {nome joao}
% dict set clientes 1 idade 25
1 {nome joao idade 25}
% dict set clientes 2 nome maria
1 {nome joao idade 25} 2 {nome maria}
% dict set clientes 2 idade 23
1 {nome joao idade 25} 2 {nome maria idade 23}
Concluindo, acho que o novo interpretador Tcl teve mudanças significativas. É uma boa opção migrar seu ambiente Tcl atual para a nova versão 8.5. Os impactos são mínimos e ainda temos de quebra o Teacup, praticamente um “apt-get” de pacotes Tcl, pra ajudar no gerenciamento de pacotes de extensão (bibliotecas).
Recomendo o ActiveTcl-8.5 da ActiveState, que já vem compilado e com algumas extensões importantes instaladas. Nunca me deixou na mão.
Por hoje é só… Um abraço pra quem meche com Tcl no Brasil, raridade nos dias de hoje!