A venda de ingressos para o Mineirão e o despreparo técnico das empresas envolvidas
Sobre macaca, macaca-de-auditório, macacal, macacão, macacar, macacarecuia, macacaria, macaco, macacoa*, macaco-adufeiro, macaco-aranha, macaco-barrigudo, macaco-cabeludo, macaco-da-meia-noite, macaco-da-noite macaco-de-bando, macaco-de-cheiro, macaco-inglês, macaco-japonês, macaco-narigudo, macaco-patrona, macaco-prego, macaco-prego-do-peito-amarelo e TI.
Marcadores: tracemonkey
Como trocar o conteúdo de duas variáveis sem usar um temporário?
Algumas pessoas me cobraram o grande período sem posts. Pois bem. Prometo postar com mais freqüência.
set pingresult to do shell script "ping -c 1 google.com;echo -n"
set paras to number of paragraphs in pingresult
if paras < 5 then display alert "Script de Backup"
message "Sem internet não tem backup!"
else set question to display dialog ¬
"Hora do Backup!" with title ¬
"Script de Backup"
buttons {"Agora não. Tô com pressa!", "Claro!"}
default button 2
set answer to button returned of question
if answer is equal to "Claro!" then
tell application "Mail" to activate
do shell script
"cd ~;mkdir transfer ;
tar -czf transfer/`date +%Y-%m-%d`.tgz #pasta-origem/*"
set p to do shell script "ls -t1 ~/transfer |head -1"
set target_file to "/Users/#seu-usuario/transfer/" & p
tell application "Mail"
set newMessage to make new outgoing message with properties ¬
{subject:"[BKP] " & target_file, content:"Backup automatico"}
tell newMessage
make new to recipient at beginning of to recipients with properties ¬
{address:"#seu-login@gmail.com"}
tell content
make new attachment with properties {file name:target_file} ¬
at after the last word of the last paragraph
end tell
end tell
send newMessage
display alert "Script de Backup" message
"Arquivo foi colocado na caixa de saida"
end tell
do shell script "cd ~;rm -rf transfer"
end if
end if
Evoluir sim, Quebrar jamais
Toda vez que surge um produto de vanguarda a indústria fica alvorecida esperado um novo cara que vai enterrar aquele que é a atual referência. O exemplo mais clássico é o do iPhone e seus iPhone killers. Pois bem, eu descobri o verdadeiro MacBook Killer, no sentido mais amplo do Killer: Limplex.
Quando criança, ficava digitando umas listagens de BASIC no MSX que vinha no seu manual. Não sabia o que cada comando fazia, apenas digitava para ver se acontecia alguma coisa. E nunca acontecia. Demorei uns dois anos para descobrir que depois de digitar eu tinha que dar o comando "Run" que era acionado pela tecla F4. A minha maior graça era quando a listagem digitada desenhava alguma coisa na tela, mas eram muitas horas de frustração para um quadradinho monocromático na tela.
Juro que estava com preguiça de escrever, achei que ninguém estava interessado, mas como me cobraram (Jesus e Jânio) segue o que eu achei do FISL 9.0:
Exceto por esse pequeno transtorno e pela inconstância da rede wifi, o resto foi muito bom. O clima é o mais legal da feira. Na área que fica concentrada os grupos de usuários, o pessoal fica esparramado pelo chão. Cada um com seu note. As palestras em geral foram boas. Assisti 18. Segue em ordem de preferência com um breve comentário sobre elas:
18 - Django para desenvolvimento Web - Christiano Anderson
Essa nem consegui acabar de ver, vários problemas técnicos aconteceram e o palestrante não consegui dar seu recado.
17 -Kernel Open Session - Theodore Ts'o
Esta foi uma sessão aberta de perguntas sobre o Kernel. Em alguns momentos eu boiei completamente.
16 - Enabling Real-Time Rich Internet Application with Apache Derby and Comet - Francois Orsini e Jean Francois Arcand
Essa começou legal, mas quando o segundo palestrante começou a falar tive dificuldades de entender seu inglês com sotaque francês.
15 - Desenvolvimento ágil de software com XP e Scrum - Guilherme Chapiewski
A sala estava lotada o que demonstra o grande interesse no assunto, mas faltou ritmo à apresentação. Tinha expectativa de mais visto que o autor mantém um ótimo blog que recorrentemente trata desse assunto.
14 - JBoss Drools: Mudando as regras do jogo - Fenando Meyer
A palestra foi legal, mas o tempo corrido não permitiu que o exemplo fosse devidamente explicado.
13 - Ganeti - Cluster-based virtualization management software - Micheal Hanselmann
O Ganeti parece ser bacana e ajudar bastante no gerenciamento, porém o palestrante só recomendou seu uso para aplicações mais leves.
12 - Firefox in Brazil and Beyond - Crris Hofmann
Foi legal ver o crescimento do Firefox. Apesar de não ser uma palestra técnica foi bem interessante.
11 - Open solutions for distributed systems development - Rodrigo Damazio
O cara mostrou alternativas open-source para os já famosos GFS e Bigtable. Legal!
10 - Memory Leaks in Java Applications - Different Tools for Different Types of Leaks - Gregg Sporar
Muito pertinente o assunto. Foram mostradas várias ferramentas que ajudam na identificação de memory leaks
9 - Kernel
A palestrante demonstrou a criação de um driver para controlar uns leds ligados na paralela. Até que não é muito complicado não!
8 - OpenOffice.org programmabillity - at a glance - Jurgen Schmidt
Eu já tinha sofrido uma vez que programei uma integração com o OpenOffice e a apresentação serviu para esclarecer algumas dúvidas que tinham ficado deste então.
7 - Sapos Piramidais, episodio XII: "Pontes" de PI. - Pedro Rezende
Juro que só fui nessa palestra porque achei o nome muito curioso. Valeu a pena. O palestrante é um professor antenado e fez um resumo dos movimentos políticos que aconteceram no mundo do software livre no último ano. Bem bacana.
6 - Modern Graphics in Qt - Andreas Hanssen
Apesar do foco ser o Qt o cara deu várias dicas importantes sobre a construção de interfaces gráficas. Os exemplos que ele mostrou em Qt eram espetaculares.
5 - Internet sob ataque - Sérgio Amadeu
Até concordo que o Sérgio Amadeu seja xiita, mas devo confessar que gosto das coisas que ele fala. A palestra estava lotada e acho que o tema que ele abordou (Empresas de infra-estrutura interferindo na camada de aplicação) é extremamente relevante.
4 - The Smalltalk Seaside Web Framework - Randal Schawartz
Fantástico. Foram apenas 35 minutos, mas tempo suficiente para já ter me feito instalar o Squeak.
3 - O Fantasma do Espectro - Sérgio Amadeu e Gustavo Gindre entre outros.
Fui um debate legal sobre o modelo de concessão de espectro. Gostei da idéia do Open Espectro.
2 - Large Scale PHP - Rasmus Ledorf
Apesar do tema ser “large scale” o cara falou muito de segurança de aplicações Web. Gostei muito dessa palestra.
1 - Fun and software livre! - Return of the Jedi! - Jon "maddog" Hall
O papai Noel simplesmente detonou. Já tinha o assistido outras duas oportunidade, mas nenhuma chegou perto dessa. Fui divertida e empolgante, o pessoal presente entrou em êxtase no auditório. “Parecia” um culto religioso.
Eu continuo sem entender...
Foi a maior concentração de macs que já vi. Você pode pensar: “Tudo bem, o macbook pro é o melhor hardware para se rodar Windows deve ser também o melhor para rodar o Linux”. Fiz questão de cada vez que eu via um mac dar uma olhadinha no canto superior esquerdo da tela. A maça sempre estava lá. Algumas azuis e na maioria das vezes pretas (geeks são early adopters!), não vi nenhum mac rodando outra coisa senão o OS X. Nada contra o OS X, que aliais é o meu OS preferido (depois do MCP), o fato e que eu continuo sem entender porque Apple pode?
Já ia me esquecendo das fotos.
Pretendo começar a falar mais sobre os aplicativos bacanas que utilizo no meu E61. A maioria deles também deve funcionar nos outros celulares Nokia com Symbian S60 3rd Edition.
Em uma viagem recente aluguei junto com o carro um GPS modelo Airis T92A.
O objetivo de ter o GPS em mãos era claro, eu gostaria de ir em lugares que eu não tinha a mínima idéia de onde eram e inocentemente pensei que bastava o GPS. Não bastou.
Contextualizando
A cidade era Salvador, a escolha da locadora Hertz se deu exclusivamente porque era a única que tinha GPS com mapas da cidade. Ao fazer a reserva escolhi a loja mais próxima do hotel que estávamos. A Hertz tem três lojas em Salvador, uma no aeroporto, e duas na mesma avenida que se chama Octavio Mangabeira, uma numa ponta e outra na outra. A Hertz não tem opção de incluir o GPS na reserva feita na internet sendo necessário posterior contato por telefone para associar o GPS a reserva. Assim o fiz.
Quando peguei o táxi no hotel em direção a locadora o taxista disse a avenida era bastante extensa e pediu pelo radio o telefone da loja. Ele mesmo ligou, confirmou pelo telefone o endereço e o numero da loja. A confirmação apontou para uma loja que ficava próxima ao aeroporto e bem distante do hotel. Fiquei desconfiado já que eu tinha olhado no mapa e escolhido a loja que ficava mais perto do hotel e eu mesmo liguei para a loja confirmando o número:
- O numero daí é 3370?
- Sim senhor, é sim.
- Mas fica perto do Aeroporto?
- Sim senhor, fica sim.
- Ok. Obrigado
Segue então. 40 minutos depois, chegamos a loja:
- Bom dia, eu fiz uma reserva...
- Senhor, não existe nenhuma reserva
- Como
- A reservado do senhor foi para outra loja nessa mesma rua.
- O que? Mas eu liguei confirmando, o numero aqui não é 3370?
- Não, aqui é 40.
- Ahhhhh?
- ....(Podem imaginar a discussão que se sucedeu)
- Mas eu não posso pegar o carro aqui, não? Esta no caminho da onde estou indo (Litoral norte)
- Sim, mas não temos GPS nessa loja, senhor. Você pode pegar o carro e ir até a loja que o senhor fez a reserva e retirar o GPS.
- Mas como eu vou chegar na outra loja se o GPS era justamente para me dar os caminhos?
- Não sei não senhor.
Pegamos outro táxi e seguimos 30 minutos até a outra loja na mesma rua.
- Bom dia, eu fiz uma reserva...
- Sim senhor, seu carro está pronto.
- Ahhh que ótimo.
5 minutos depois...
-Cadê o GPS?
- Que GPS?
- O que eu reservei.
- Não consta nenhuma reserva de GPS não senhor. GPS só na loja do Aeroporto.
- O que?????
Contei toda estória para a mulher que foi bastante compreensiva e reconheceu o erro e me ofereceu um upgrade para compensar o problema. Aceitei de bom agrado, claro, mas não resolvia, como eu ia chegar ao aeroporto de carro, numa cidade desconhecida e que tem um dos trânsitos mais pervertidos que já tinha visto? Quem tem boca vai a Roma e também ao aeroporto. Assim fomos.
Pegamos o bendito GPS e pensamos: Agora e só ir para a praia. Não foi.
Setei o endereço de onde eu queria ir. Já sabia que o caminho era pela linha verde que passa pertinho do aeroporto. Logo na saída do aeroporto o GPS me manda virar a direita, obedeci e cai dentro de um estacionamento de uma empresa de táxi, em seguida me mandou pegar a direita de novo. Era uma viela de terra que mal passava uma carroça. O sinal amarelo acendeu e eu voltei para a rua que eu tinha saído porque tinha visto placas indicando a estrada. Peguei a estrada e ele começou a me mandar sair da estrada. Que diabos! Pensei. Eu sabia que meu primeiro destino era 50km distante por essa estrada. Por um lapso de subserviência a maquina resolvi atender o que ele queria.
- Deve ser um atalho. Justifiquei.
- Humm. Respondeu secamente minha namorada que já estava irritada por perder parte da manhã de sol por causa do GPS.
-Vire a esquerda em 800 metros.
-Vire a direita em 500 metros.
O GPS me mandou para uma quebrada que não da para descrever e nesse momento aprendi a primeira lição:
Primeira lição: Quem manda é você. Se o GPS te mandar entrar num beco não entre. O bobo aqui entrou.
Desliguei o maldito. Procurei um lugar seguro e perguntei para um taxista o caminho e fui embora até o meu destino, sem o GPS fácil, fácil.
- Como vamos voltar? Você sabe chegar no hotel? Ela perguntou.
- Hotel. Humm... Hotel, sei não.
- Vamos tentar o GPS de novo quem sabe agora ele não funciona.
E ele não funcionou. Não consegui setar o endereço do hotel e então coloquei um ponto arbitrário no bairro que ficava o hotel. Se conseguíssemos chegar lá era só perguntar de novo. Quase anoitecendo pegamos a estrada e quando chegamos dentro da cidade o sujeito insistia em me mandar sair da avenida em que eu estava, mas dessa vez depois de ter aprendido a 1ª lição não sai. A cidade é bem sinalizada e resolvi seguir as placas e chegamos no hotel numa boa.
Claro que como um bom geek não me daria por vencido.
-Porque você está tirando o GPS do carro?
-Vou levar ele para o quarto.
-O que? Você não desistiu ainda não? Não acredito.
Enquanto ela tomava banho, eu ainda com os pés cheio de areia peguei o manual do bichinho. Ele tava todo configurado errado, o sujeito que estava anteriormente com ele tinha configurado para priorizar o tempo de calculo de rota invés da precisão. Além disso, quando eu setei o endereço eu não especifiquei a cidade, nesse caso ele calcula o mais próximo do ponto atual, por infeliz coincidência as duas cidades tinham praias com o mesmo nome.
Segunda lição: Leia o manual antes de usar.
No resto do final de semana o GPS foi muito útil, fui aprendendo a lidar com ele aos poucos, ignorando as contramãos que ele me mandava e sempre acompanhando as placas para ver se estava no rumo certo. Até ela se surpreendeu:
- É. Até que ele acertou dessa vez.
Dia 19 de Janeiro acontece à primeira reunião do BH Coding Dojo. A idéia é reunir gente que gosta de programar independente da linguagem. Na primeira sessão acontecerá um PreparedKata onde um alguém levará uma solução baseada em TDD ou BDD para ser discutida com a galera. Nas próximas reuniões a idéia e que role um RandoriKata com participação de todos.
Quando e Onde
Dia 19-Jan-2008 às 10:00, na Solin, Av. Raja Gabáglia, 3348.
Exibir mapa ampliado
A entrada é franca, mas o espaço é limitado por isso cadastre-se na lista DOJO-BH para garantir seu lugar.
Aconteceu o primeiro Minas on Rails, excelente iniciativa do pessoal que com muita garra e pouco dinheiro conseguiram organizar um bom evento em tão curto espaço de tempo. Eu cheguei tarde e perdi todas as palestras da manhã. Queria muito ter assistido a palestra do TaQ e pelo que me falaram eu não teria me arrependido.
Gostei de mais de ver o pessoal da PUC lá: Jânio, Gustavo, Jesus, Davison, Arruda, Pablo e Breno. Até me sinto de certa forma responsável por ter martelado pouco RoR na cabeça desse povo nos últimos dois anos. Vejam um dado inútil: Se o publico total que compareceu ao evento foi de 100 pessoas, então éramos 8% do total, o que é bem expressivo e mostra o interesse do pessoal na plataforma.
Melhor do que tudo isso foi mesmo poder encontrar com meu POJO amigo Diogenes. Já tinha uma cara que agente não se encontrava pessoalmente e como sempre conversar com esse sujeito é muito bom!
Momento surreal do dia: Ao deixarmos o TaQ no embarque em Confis, uma menina(que pelo jeito trabalha lá) pediu carona até BH. Não neguei, afinal voltávamos eu, o Diógenes e o Ronaldo e sobrava um vaga no carro. Não me importo de dar carona, principalmente quando não estou sozinho já que me sinto mais seguro. Na volta embarcamos num papo ultra geek percorrendo uma dúzia de linguagens de programação diferentes, de Smalltalk a IO, passando por Haskell e Prolog. Ao descer do carro ela fez uma confissão, disse que era a primeira vez que ela voltava de carona de Confis sem dizer uma única palavra. Duas coisas pipocaram na minha cabeça depois disso: 1º Como deve ser para uma pessoa normal passar 50 minutos dentro de um carro escutando aquele papo ultra nerd? 2º Será que a mocinha estava acostumada a vim recebendo cantadas no seu trajeto diário e se espantou quando foi completamente ignorada?
Que venha o próximo Minas on Rails.
O Google liberou está semana o SDK do Android, uma plataforma completa e open source para desenvolvimento de softwares para telefones celulares. Já instalei e comecei a brincar! Algumas coisas já me chamaram atenção positivamente: A facilidade de se criar interfaces gráficas, o renderizador do browser que vem no emulador e a qualidade da documentação que já esta disponível no site do projeto. Neste documento, por exemplo, tem várias dicas para se melhorar a performance dos aplicativos do Android. As dicas são tão boas que algumas delas podem facilmente ser aplicadas em outras plataformas embarcadas e também no desenvolvimento do dia-a-dia.
Outro dia meu sobrinho de 12 anos me chamou para ver um vídeo que ele tinha feito. Pensei que tivesse gravado alguma coisa com a WebCam. Fiquei surpreso com o que vi. Ele tinha feito uma sobreposição usando o PaintBrush e gravado o áudio com o Voice Recorder. O resultado, como não poderia ser diferente, ficou bastante rudimentar, mas me fez refletir sobre como é imenso o domínio da tecnologia por essa nova geração. A tecnologia que para nós é fim, para eles é naturalmente um meio de expressão.
Para organizar melhor os códigos que foram feitos para o Code Constest da Mega Sena criei este novo post.
Array.new(100000){rand(60)+1}.inject(Hash.new(0)){|hash, i| hash if hash[i] += 1}.invert.sort.reverse[0..6].each{|t, n| puts "#{n}repeated #{t} times"}
x = [item for item in sorted([(k, len(list(g))) for k, g in groupby(sorted([randrange(1,61) for item in xrange(0,100000)]))],key=itemgetter(1),reverse=True)][:6]rint(x)
for (var i, array = new Array(), j = 0; j < i =" Math.round(59" j ="=">
int main() { for(int freq[] ={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60},i = 0; i == 100000 ? printf("%d %d %d %d %d %d\n", freq[59]%100,freq[58]%100, freq[57]%100, freq[56]%100, freq[55]%100,freq[54]%100)*0 : 1;sort(freq, freq+sizeof(freq)/sizeof(int)), i++,freq[rand()%60]+=100); }
int main() {for(vector<> v(60,0),i(0,0); i[0] == 100060 ? printf("%d %d %d %d %d %d\n", v[59]%70, v[58]%70, v[57]%70, v[5 6]%70, v[55]%70, v[54]%70)*0 : 1; v[i[0] <>
sorted([ (x.count(k),k) for x in [[ random.randint(1,60) for z in xrange(100000) ]] for k in xrange(1,61) ], reverse=True)[:6]
for (1..100001) { ($_ == 100001) ? print join(" ", (sort { $h{$b} <=> $h{$a} } keys %h)[0..5]) . "\n": $h{int(rand()*60+1)}++ }
for(var i,ra=new Array(),j=0 ; j<10000 i="Math.round(59*Math.random())+1,ra[i]=">
h := Map;
100000 repeat(if(h hasKey(n := Random value(1, 60) round asString), h atPut(n, h at(n)+1), h atPut(n, 1)))
h asList sortBy(block(f, s, f at(1) > s at(1))) slice(0, 6) foreach(k, writeln(k at(0), " --> ", k at(1)))
def hist = [:], v
100000.times{hist[v = 1 + Math.random() * 60 as int] = !hist[v] ? 1 : hist[v] + 1}
println hist.keySet().toList().sort{-hist[it]}[0..5].join(‘,’)
| s |
s := ((OrderedCollection withAll: ((1 to: 100000) collect: [:each | 60 atRandom])) groupBy: [:each | each] having: [:each | true]) asSortedCollection: [:a :b | b size <>
Um pequeno desafio:
Array.new(100000){rand(60)+1}.inject(Hash.new(0))Por problemas no layout( que ja passou da hora de ser revisto) tive que quebrar a linha, mas acreditem é uma só;
{|hash, i| hash if hash[i] += 1}.invert.sort.reverse[0..6].each{|t, n| puts "#{n}
repeated #{t} times"}
Quando uma empresa decide a plataforma que seu sistema vai rodar nem de longe ela imagina o impacto que isso pode ter na vida de um simples usuário.