Computação é a mais masculina das profissões

As senhoras que leem este blog, por favor, não se chateiem. Não é nada pessoal, mas sim uma constatação e uma questão.

Existem pilotas de avião, jogadoras de futebol, engenheiras civis e até urologistas. No entanto é raro, muito raro encontrar uma programadora.

Já tinha pensado nisso, mas nunca tinha chegado a uma explicação. Não tenho também uma estimativa estatística sobre o assunto, mas o fato é que a profissão onde tenho visto menos mulheres é a computação.

Na faculdade conheci uma programadora boa, que até onde sei continua exercendo a profissão com competência. Depois nunca mais vi uma programadora competente e que gostasse de computação.

Será que os interesses profissionais de homens e mulheres são tão distintos que as mulheres não se interessam por algoritmos, ponteiros, classes, métodos? Será que é o ambiente ogro dos desenvolvedores? Será uma questão cultural.

Você leitor, e sobretudo você leitora, dê uma luz para nós nos comentários.

Francis Allen da IBM trabalhou e trabalha com otimização para compiladores
Francis Allen da IBM trabalhou e trabalha com otimização para compiladores
Jeri Ellsworth fabrica máquinas de Pinball
Jeri Ellsworth fabrica máquinas de Pinball

A rotina diária de um programador de 4 horas

Todo mundo conhece a rotina, chegar ao trabalho às 9 da manhã, sentar na frente do computador, escrever código durante todo o dia, e ir para casa às 5. Agora, graças a sujeitos como Tim Ferris eu comecei a repensar como eu trabalho e que me faz produtivo como um desenvolvedor de software.

Recentemente, eu fiz algumas mudanças grandes na minha semana. Durante muito tempo, eu fiz as coisas exatamente como todos os outros programadores que eu conheço. Mas durante o segundo semestre de 2011, eu comecei a experimentar para ver que tipo de organização diária faz com que seja mais produtivo. Este ainda é um modelo em andamento, e eu não sou caxias – Eu posso levantar 20 minutos mais cedo ou mais tarde, por exemplo – mas aqui está a minha agenda atual:

04h30 -07h00: Meditação, Escrever, Revisão das Metas e Café da manhã em Família

Levantar às 4h30 na verdade não é tão difícil. Todo mundo é um pouco diferente, mas o corpo geralmente precisa de algo entre 7 a 9 horas de sono. A maneira de saber se você está tendo a quantidade suficiente é acordar sem despertador. Basta ir para a cama cedo o bastante que você pode acordar às 4h30 também.

Imediatamente após me levantar, eu bebo meio litro de água, não de café! Eu deixei de tomar café por um bom tempo, e eu não perdi nada com isso. Na verdade, me sinto melhor sem ele. Então eu tomo um banho para começar bem o dia.

Medito por 30 minutos todas as manhãs. É melhor meditar um pouco antes ou durante o nascer do sol. Não vou explicar por que a meditação é boa para você, há muita pesquisa na Internet. Se você quer um bom livro sobre meditação, eu recomendo Meditation for Dummies. Apesar do título, é um dos melhores livros que já li sobre o assunto.

Depois disso, eu gasto 30-45 minutos escrevendo conteúdo para o meu blog. Eu tento escrever entre 500 e 800 palavras. Eu descobri que eu posso render bastante nisso se eu fizer essa tarefa logo após a meditação. Além disso, o cérebro funciona durante toda a noite enquanto dormimos, por isso o melhor é fazer um dump do cérebro antes de passar para outras tarefas mentais. Uma dica sobre a escrita: use esse tempo para um primeiro rascunho. Não tente fazer a edição, pesquisa, etc deixa isto para mais tarde.

Então é a hora de checar as pendências. Eu verifico meus e-mails, Twitter, LinkedIn, etc, e me atribuo tarefas. Falando de tarefas, eu sigo o método GTD e oriento a minha vida em torno do software OmniFocus. Eu rodo isso no meu iPad, iPhone e MacBook Air (ok, então eu sou um fã da Apple). Concordo que o OmniFocus é um pouco caro para um software de gerenciamento de listas, mas como toda a minha vida gira em torno dele, vale a pena o preço. Eu percorro a minha lista e comparo com os meus objetivos – tudo, desde os pequenos objetivos para hoje até as metas de longo prazo. Cada item da lista deve relacionar-se a uma meta. Se isso não acontecer, eu removo.

Café da manhã se aproxima. Existem várias escolas de pensamento sobre quando você deve tomar café da manhã e o que você deve comer. Eu tentei muitas coisas diferentes. Acho que algo rico em fibras com baixo carbohidrato e alta proteína funciona melhor para mim. Já tentou comer aveia com manteiga de amendoim? Perfeito para mim! Eu também gostaria de incluir frutas e chá. Além disso, tentamos tomar café da manhã como uma família. Às vezes nós conseguimos que isto funcione, e às vezes não. Meu objetivo é fazer com que consigamos 100% este ano.

07:00-11:00: 4 horas de programação

Este é o tempo que eu uso para programar. 4 horas por dia pode parecer ridiculamente pouco, mas eu descobri que eu posso obter muito mais linhas de programação de boa qualidade nestas quatro horas do que a maioria das pessoas pode fazer em uma semana. Algumas pesquisas mostram que pessoas que têm uma agenda consistente produzem melhor do que pessoas com um horário de trabalho aleatória. Para mim, é 7-11 da manhã, todos os dias. Tudo o que faço durante este tempo é programação, nada mais. Existem algumas regras básicas:

Primeiro, desligue todas as comunicações – telefone, email, chat. Você não deve ter distrações. Você pode dar há algumas pessoas uma maneira de encontrá-lo se algo é realmente urgente. As pessoas que podem ter uma razão para me contactar em caso de emergência sabem como fazê-lo, e eu ainda não vi ninguém usá-lo. Eu treinei minha esposa, que costumava querer respostas imediatas a cada pergunta, a respeitar este bloco de quatro horas. Você também deve focar em um único projeto. Não tente trabalhar em 5 de coisas diferentes.

Segundo, não faça qualquer pausa: seja e-mail, navegar na net ou algo parecido. Eis o porquê: Em uma hora, eu posso conseguir um número x de funções desenvolvidas. Descobri que se eu trabalhar durante quatro horas contínuas, posso entregar não apenas quatro vezes, mas 8 a 16 vezes a quantidade de trabalho que faço em uma hora. Você vai experimentar isso quando você ficar 100% focado em um objetivo e não pensar em mais nada. Isto é o que chamamos de estado de fluxo mental. Eu pretendo escrever mais sobre o estado de fluxo mental no futuro.

Então porque não aplicar o mesmo princípio a um dia de trabalho de 8 horas? Porque há limites para a produtividade humana. O cérebro é como um músculo. Você pode correr em uma esteira durante oito horas? Como os nossos músculos, o cérebro precisa de descanso de tempos em tempos. O limite é um pouco diferente para cada indivíduo. Por tentativa e erro eu descobri que 4 horas é o meu máximo.

Também vale ressaltar que eu não ponho um alarme para parar as 11:00. Eu terminar o trabalho quando sinto meu cérebro cansado e minha produtividade diminuindo. Alguns dias eu trabalho três horas e em outros eu trabalho 5 horas; 4 é a média.

Eu trabalho de casa para evitar perturbações. Se você é está em um ambiente de escritório, veja se seu chefe permite que você trabalhe de casa durante o seu horário mais produtivo. O deslocamento diário para o escritório pode desfazer os benefícios da yoga e da meditação. Depois de dirigir no trânsito e escutar todo o ruído do escritório, seu cérebro pode estar tão estressado que os benefícios da meditação desaparecem. Você provavelmente vai ser mais produtivo trabalhando de casa.

11:00-13:00: Academia, Almoço e Compras

Eu vou a academia todos os dias. Há bons livros que mostram como a ciência prova que o exercício diário é bom para o cérebro. Mas não recomendo fazer seus exercícios todos os dias no mesmo lugar. Eu faço yoga três dias por semana numa academia, spinning dois dias em outra e musculação 2 dias numa terceira academia, onde eu tenho um treinador. Ter algum alguém para me empurrar é a melhor motivação e para isso um treinador ajuda muito.

Eu adoro academias por causa dos serviços extra. Você pode pegar 5 toalhas sem a sua esposa reclamar. Você pode tomar um banho de 30 minutos sem ninguém esperando lá fora e gritando “Já acabou?” … O que acontece muito na minha casa.

Eu também faço compras de mantimentos todos os dia, numa loja que fica a pouca distância da minha casa. Por que comprar todos os dias? Em muitos países, especialmente na Ásia, as pessoas compram mantimentos todos os dias em vez de comprar para duas semanas e estocar no freezer e na geladeira. Desta forma, você compra apenas o que você precisa e reduz o desperdício. Quantas vezes você encontrou alguma coisa não identificável ​​no fundo da geladeira e não tinha a mínima idéia de quanto tempo aquilo estava ali? Eu costumo almoçar fora sempre. Num bar de saladas agradável. Ou então, como eu amo comida japonesa, eu, às vezes, compro alguns sushi ou uma caixa de “bentô”.

13:00-18:00: Aprendizado e Tempo para conversar

Eu tento agrupar meus compromissos para que eu não tenha que dirigir para o trabalho todos os dias. Normalmente, isto envolve reuniões, entrevistar candidatos, apresentações, treinar desenvolvedores, revisões de código, etc Eu não faço qualquer desenvolvimento durante este tempo a menos que haja uma correção de bugs urgente ou incêndios para apagar.

Eu também dedico um tempo significativo para aprender. Passo muito tempo lendo coisas de outras pessoas, tudo, desde livros até código fonte em blogs relacionados à tecnologia e neurociências; tento aprender algo novo todos os dias. A melhor maneira de permanecer motivado e no caminho certo é escrever algumas linhas de notas sobre cada assunto e, em seguida, marcar as referências. Software como o EverNote é muito bom para isso.

Também dou uma olhada em outros produtos que estão no mercado, o desenvolvedor de software mais produtivo é alguém que escreve zero linhas de código para resolver um problema. Eu não quero reinventar a roda se alguém já fez o trabalho. Olhar o CodePlex, GitHub e Source Component ajuda muito nisto.

Eu aprendi uma lição com a experiência de minha esposa, durante sua residência médica. Todas as manhãs, os médicos novos passam a visita aos seus pacientes. Depois, na parte da tarde, todos eles se reúnem para discutir as complicações que encontraram e como eles resolveram problemas. No meu caso eu tento realizar uma autopsia de minhas atividades. Eu examino, onde eu fiquei empacado quando eu estava programando no período da manhã, como eu gastei tempo demais em um bug ou como eu fiz uma apresentação em Powerpoint, a pauta de uma reunião e assim por diante. Procuro aprender com meus erros e evitar repeti-los.

18:00 – 20:00: Tempo para a família

Minha esposa é médica e tem uma agenda cheia, mas nós fazemos todo o possível para passar este tempo em família. Tentamos  jantar juntos. Ajudo o meu filho com o trabalho de casa. Conversamos.

20:00 para 20:30: Reflexão

Eu não medito à noite. Em vez disso, sento e reflito sobre o dia inteiro. É incrível o quanto você aprende e melhora, se gastar 15 minutos sentado em um lugar calmo refletindo sobre o seu dia.

A seguir propor algum trabalho para o cérebro. É um fato bem conhecido que o cérebro trabalha enquanto dormimos. Então o melhor é dar-lhe algum trabalho. Eu tenho feito uma lista com tópicos que eu preciso escrever na parte da manhã. Penso neles como tags. Costumo anotá-la em vez de digitar no computador.

Algumas vezes, eu penso sobre alguma questão de programação ou problemas de algoritmos. Mais uma vez, eu escrevo ou esboço a idéia num papel. É incrível como muitas vezes eu vejo a solução na manhã seguinte! Para estas tarefas eu mantenho uma caderneta boa, sem forro, de tamanho carta. Uma folha de papel em branco branco faz com que eu seja mais criativo. Eu deito na cama entre 20:30 e 21:00. Quanto mais cedo melhor.

Essa é a minha rotina diária. Isso muda quando viajo, é claro, eu aproveito muito tempo na estrada para o trabalho. Também não mantenho esta rotina nos fins de semana. Mas pretendo escrever sobre fins de semana num post futuro.
E você? Que tipo de rotina faz com que seja mais produtivo?

Traduzido do blog JayOnSoft com autorização de Jay Janarthanan

Visite http://dilbert.com/strips/comic/2010-12-26/
Reproduzido de http://dilbert.com/strips/comic/2010-12-26/

Escrever código porco ajuda a ganhar este prêmio

The International Obfuscated C Code Contest é um concurso em que vence aquele que escrever o código C mais difícil de se ler e que faça uma coisa útil.

Por incrível que pareça não é uma tarefa tão simples, veja um dos ganhadores da última edição (2006)

#define			      q [v+a]
#define			     c b[1]
#define			    O 1 q
#define			   o 0 q
#define			  r(v,a\
)v<0&&(			 v*=-1,		a*=-1);
#define			p(v,m,	    s,w)*c==*#v?2 q\
<m?(c++		       ,d=1,3	   q=0,5      q=m,main\
(a+3,b)		      ,o=o*s	 q,O=O*		 w q):0:
static		     d,v[99	];main		  (int a,
char**b		    ){d=7;     if(*c?!		  (p(+,3
,4 q+O*		   3,4)p(			   -,(o?3
:(O=1,6		  )),4 q			  -O*3,4)
p(*,4,3		 ,4)p(/				  ,5,4,3)
p((),d,		0+3,0+				 04)*c==
')'?2 q	       <02?(c				++,0):0
:(o=012	      *o+*c-			      '0',c++
,O=1)):	     2 q?3-			   2:printf(
"%d/%d"	    "\n",o		       ,O))return
1;d=a,r    (o,d)r		     (O,d)3 q
=o<O?(4	  q=o,O)		   :(4 q=O,
	 o);r(d,		 o)a+=3;O?
				 1:(O=1,2
				q=1);while
				(2 q=o%1 q)a++;v[d]/=O;d[
				v+1]/=O;return main(d,b);}

Acho que pode ser divertido …

O desafio de aprender uma nova linguagem

Uma historinha off-topic para alegrar o fim de semana.

No primeiro semestre de 1995, eu estava iniciando o meu curso de graduação na UFRJ e a linguagem que aprendíamos na época, em Computação I, era o bom e velho Pascal para DOS e o ambiente de desenvolvimento era o Turbo Pascal da Borland.

Acontece que, no final do primeiro período, o nosso excêntrico e simpático professor de Cálculo Vetorial e Geometria Analítca, Felipe Acker (alguém tem notícias dele?), resolveu nos passar um trabalho que, para nós, que estávamos começando a aprender a programar, era um verdadeiro desafio.

O trabalho, lembro claramente até hoje, consistia em fazer um programa no qual, dados os parâmetros de uma cônica qualquer, ax²+bxy+cy²+dx+ey+f=0, ele teria de dizer se ela correspondia a um círculo, a uma elipse, a uma parábola ou a uma hipérbole, e, se possível, desenhá-la na tela (teoricamente no DOS em modo gráfico 320×200 ou 640×480).

Os problemas, neste caso, eram bem grandes, a saber:

  1. Ainda não tínhamos noção de autovalores e autovetores. Só veríamos essa matéria em Álgebra Linear II, no período seguinte
  2. Não sabíamos por onde começar a procurar informações, nem sabíamos que precisaríamos saber autovalores e autovetores. 🙂
  3. O Google só iria ser lançado três anos depois. 🙂
  4. Só alguns de nós tinham acesso à Internet em terminais burros de favor num laboratório sombrio da Engenharia Eletrônica, o MAGMA, o que não adiantava nada para a pesquisa.
  5. Nem todo mundo sabia programar ainda no final do semestre, quanto mais em modo gráfico.

O meu primeiro passo foi perguntar para um amigo professor aonde eu conseguiria um livro para resolver aquele problema. Esse meu amigo me falou para procurar entender o que eram autovalores e autovetores e que tinha um livro de Álgebra Linear que poderia ajudar nesse problema. Hoje, um simples telefonema para o celular desse amigo e uma busca no Google me resolviam o problema, mas lembre-se, estávamos em maio ou junho de 1995 e o Larry Page e o Sergey Brin ainda não pensavam em criar o Google, nem eu nem meu amigo tínhamos celular e nem tínhamos Internet disponível, por isso, precisei ir até o amigo e depois até a biblioteca.

Depois de entendermos como resolver o problema matemático, eu e um grande colega chamado Rodrigo Gevaerd (o que será feito dele?) resolvemos que não iríamos fazer o programa em DOS. Resolvemos ousar a fazer o programa para Windows (ohhhhhh) usando o recém-nascido Delphi 1 (ele foi lançado em Fevereiro daquele ano). 😮

Essa decisão tornava-se ainda mais arriscada porque tínhamos que entregar o trabalho em poucos dias e ele valeria como uma prova na média da matéria.

O resultado é que conseguimos aprender aquela joça (o Delphi 1) e fazer o programa que o professor queria dentro do prazo. Viramos muitas noites programando (e aprendendo), mas o resultado ficou muito legal (para nós que éramos alunos do primeiro período, é claro).

Para conseguir essa façanha, programação orientada a objetos, eventos, canvas e outras coisas que nunca tínhamos visto tiveram que ser aprendidas a toque de caixa e sem Internet. Além disso, tínhamos de resolver o problema das cônicas.

O trabalho era individual e, mesmo tendo aprendido a programar no Delphi juntos, fizemos programas diferentes. Tenho que admitir que o programa do Gevaerd ficou mais maneiro que o meu. 🙂 Acabamos sendo os únicos da turma a fazer o programa para Windows, o que não tira o mérito dos outros colegas que conseguiram fazer para DOS.

Afinal, porque eu escrevi esse caso? Por esses dias, 15 anos e meio depois desse fato, me vi obrigado a aprender uma nova linguagem e pensei: “Caraca! Outra linguagem, outra IDE, outros macetes, outros bugs, outra sintaxe… Essa viagem é realmente necessária?”. Na verdade quase sempre é. No início, a necessidade existe porque o professor pediu que fosse assim, mais tarde isso acontece porque o chefe pediu assim ou porque o cliente quer assim. Não tem muito jeito.

Quase sempre fui obrigado a aprender as linguagens por necessidade. Não sei se isso acontece com outras pessoas, mas, pelo menos comigo foi assim. A grande vantagem que temos atualmente é a facilidade com que conseguimos as informações, principalmente em fóruns e blogs, que compartilham trechos de código e tiram dúvidas recorrentes. Outra vantagem é que quase nunca uma linguagem é totalmente diferente das outras que você já aprendeu até hoje. Sempre se aproveitam muitos conceitos e muitos macetes de outras linguagens. O passo mais difícil é aprender a primeira. As demais acabam vindo por tabela.

E você? Prefere aprender uma linguagem nova sob pressão ou por vontade própria? 😀

Hello World – Leitura de Final de Semana

Quando as pessoas aprendem a programar, a primeira coisa que talvez façam é testar a coisa mais simples que se faz naquela linguagem de programação.

Em 1974 no Bell Labs quando Brian Kernhigan escrevia seu livro sobre a linguagem C, ele colocou o seguinte exemplo:

 #include <stdio.h>
 int main() 
 {
        printf("hello, world");
        return 0;
 }

Apesar do fato do próprio Kernighan já ter usado o hello world num exemplo da linguagem B o código acima foi o que ficou famoso.

De lá para cá, em muitas linguagens de programação se fez exemplos de Hello World.

Eu lembro que quando aprendi a programar, era o ano de 1985, tinha 10 anos na época e o computador era um TK85 rodando Basic. O primeiro programa que escrevi nele foi:

10 PRINT "OI"
20 GOTO 10

Nada sofisticado, mas para um garoto de 10 anos era algo fascinante.

O legal dos programas deste tipo é que para o programador experiente dão uma idéia do jeitão da sintaxe daquela linguagem:

program hello;
 
begin
  Writeln('Hello, world!');
end.

Quem adivinha qual é a linguagem abaixo?

:- write('Seu mane nao use o Google!'),nl.

Para quem tiver curiosidade de ver como é o hello world em quase todas as linguagens de programação, dê uma olhada neste texto do WikiBooks ou nesta coleção com 400 exemplos.

Ou então clique abaixo e se divirta com a piadinha famosa…
Continuar lendo Hello World – Leitura de Final de Semana

Um comentário que vale um post

Um leitor, o Eduardo que tem o blog
evolubit.com.br fez o comentário que vai abaixo no post “grandes empresas, pequenos programadores” – muito bom argumento que comento ainda hoje.


Cara, assim como o TIRANOREX te informou que isso é normal eu te digo que tanto é normal como o exemplo batido das faculdades de informática (sou formado em Sistemas de Informação) é péssimo para explicar o sentido da transação.

Eu já trabalhei em uma empresa que cria software para essas máquinas e o que os “gersons” conseguem fazer é inimaginável. Olha esse caso que eu vou contar e tu vais entender por que mesmo com um erro na entrega das notas o valor deve ser debitado.

A máquina possui as seguinte peças (que são importantes para esse caso):
– Os cartuchos (onde ficam separadas uma pilha de notas, contadas. E cada cartucho possui notas de somente um valor). Na hora que a máquina é carregada o software (que possui um backoffice) solicita que tal quantidade de quais notas seja inserida e o número deve bater com o cadastro no banco de dados central do banco)
– O selecionador de notas (que junta as notas que vêm de cada cartucho e as conta. Alguns equipamentos possuem identificação óptica através daquele conjunto de símbolos que há nas notas – no canto esquerdo da face da cédula)
– O dispenser, um equipamento externo que disponibiliza as notas.

Bom, diminuindo a explicação:
Se o erro acontece no cartucho (notas grudadas por exemplo), ou no selecionador (a contagem não condiz com o valor) essas notas são descartadas (há um local dentro da máquina que recebe esses valores e um ticket é registrado, a máquina pode tentar novamente ou até mesmo bloquear a opção de saques. Agora, se o erro é no dispenser, como por exemplo o cliente esquecer de pegar o dinheiro (é, acontece) a máquina recolhe as notas e conclui a transação (bancária).

Parece burro né? Pois é, mas já teve gente que faz o seguinte: Como a máquina identifica apenas que “há” ou não notas no dispenser, o cara manda sacar R$200, aí a máquina disponibiliza 2 notas de R$50, 3 notas de R$20 e 4 notas de R$10, o cara cuidadosamente retira as notas centrais, a máquina recolhe o dinheiro por que ele não foi pego e se não fosse debitado o cara repetia essa operação até terminar o dinheiro da máquina.

Hoje se tu tentar alegar que pediu R$200 e não veio os caras vão identificar o tíquete, conferir nas câmeras e te devolver só os R$60, isso se não acionarem as autoridades.

É meu amigo, duvido que tu tinhas pensado nisso.

Grandes empresas pequenos programadores

Da mesma forma que não existe uma mulher ligeiramente grávida, ou um homem meio Padre, em computação há operações que ou ocorrem totalmente ou não ocorrem. São conhecidas como transações.

O exemplo clássico de transação é uma operação bancária onde A saca dinheiro no caixa eletrônico. As seguintes operações devem ocorrer de forma atômica ou seja indivisíveis:

– Conferir a senha e o cartão

– Aprovar o valor

– Remover o valor da conta do cliente

– Entregar o dinheiro para o cliente.

Se uma destas operações falhar todas elas tem que ser desfeitas como se nunca tivessem ocorrido. Qualquer aluno de computação ou que tenha o mínimo conhecimento de Banco de Dados sabe disto.

Bem, pelo menos deveria saber….  O Banco Santander é um dos maiores bancos do mundo, no entanto já não é a primeira vez que vejo um bug horrível no sistema deles.

Hoje fui sacar dinheiro no caixa eletrônico de uma agência do Santander: senha, código de segurança, pedi 100 paus, confirma, abençoa, autoriza de novo, tem certeza mesmo, e pimba autorizado.

Ouvi o ruído caracteristico da máquina contando dinheiro e para minha surpresa aparece uma tela do Windows XP avisando que o sistema estava sendo reiniciado.

Esperei um pouco para ver se voltava, como demorasse fui ao caixa ao lado para sacar o dinheiro. Saquei o dinheiro e ia indo embora quando tive um estalo: será que eles debitaram da minha conta os primeiros 100 paus? Minha cabeça de engenheiro de computação disse:

– Claro que não, transações são atômicas.

No entanto como sou doutor em Medicina também, meu alter ego disse: vai lá e confere. Tirei um extrato e dito e feito, dois saques de cem paus e recebi apenas um deles.

Agora tenho que ir discutir com o gerente para recuperar meu suado dinherinho.

Para quem duvida, tirei algumas fotos.

Transação Maluca

Santander #Fail

Ovi SDK

Hoje a primeira novidade do Nokia World foi o Ovi SDK, uma API para ajudar os desenvolvedores a fazer aplicativos para os celulares da Nokia.

A grande vantagem dessa plataforma de desenvolvimento é que ela será a mesma para Symbian e Maemo, uma vez que é baseada em Web (HTML, CSS e Javascript). Isso ajudará a uniformizar a interface e o desenvolvimento, facilitando muito a vida do usuário e do desenvolvedor.

O SDK integra-se perfeitamente com o Ovi Maps e oferece uma gama de possibilidades para o desenvolvedor produzir aplicativos baseados na localização do usuário. O vídeo abaixo (em inglês) mostra exatamente essa característica, com exemplos reais de empresas que já estão desenvolvendo suas aplicações baseadas no Ovi Maps.

O SDK traz consigo um emulador que facilita muito os testes dos aplicativos. Ele é gratuito e pode ser baixado no Forum Nokia (é preciso registrar-se) no endereço abaixo:

http://www.forum.nokia.com/Ovi/

Console Bluetooth no Ubuntu (e outros Linux)

Até hoje eu só conseguia usar o console bluetooth do Python S60 no Windows, o que me fazia ter o desgosto de usar o Windows para fazer programas em python para meu celular.

Hoje resolvi tentar para valer e consegui rodar o bluetooth console no meu Ubuntu seguindo os conselhos do Wiki do Forum Nokia e com um pouco de paciência e persistência.

Pelo que li nos vários lugares que pesquisei, esses passos não funcionam no Ubuntu 8.04. Eu consegui fazer funcionar no meu Ubuntu 8.10 64-bits e várias pessoas relataram sucesso com o 7.04 e com o 7.10. Alguns lugares disseram que esses passos também funcionam no Debian, mas eu não testei.

OBS.: Vou colocar no tutorial abaixo alguns comandos para serem executados no terminal. Os comandos sempre estarão em negrito. Tudo que não estiver em negrito nas caixas cinza não fazem parte do comando e, por conseguinte, não devem ser digitados.

Passo Zero: Arranje um computador com Linux. Ele vai precisar também de um adaptador bluetooth interno ou um adaptador bluetooth USB devidamente instalado.

Você também precisará ter no seu celular o interpretador Python e o Python Shell instalados. Se ainda não tem esses dois programas, visite o link abaixo e instale.

http://opensource.nokia.com/projects/pythonfors60/

Passo 1:
Instale no Ubuntu os programas e bibliotecas necessárias para o funcionamento do processo digitando a linha abaixo no terminal:

~$ sudo apt-get install gnome-bluetooth gnome-vfs-obexftp libopenobex1 obex-data-server bluez-gnome bluez-utils cu

(Não se preocupe, se você já tiver tudo isso instalado, esse comando não vai fazer besteira nenhuma.)

Passo 2:
Verifique se o adaptador bluetooth está funcionando corretamente digitando o seguinte comando no terminal:

~$ hcitool dev
Devices: hci0 XX:XX:XX:XX:XX:XX

Obs.: Eu substituí o endereço dos meus adaptadores bluetooth por XX:XX:XX:XX:XX:XX

Passo 3:
Registre a porta serial:

~$ sdptool add –channel=3 SP
Serial Port service registered

Alguns tutoriais disseram não ter conseguido conectar no canal 3. Se não funcionar com o channel=3, mude para channel=2

Passo 4:
Ative a porta para ficar aguardando uma conexão:

~$ rfcomm listen rfcomm0 3
Waiting for connection on channel 3

Passo 5:
Ative o bluetooth no celular e abra o Python Shell também no celular. (Aplicativos -> Python)

Depois clique em Opções -> Bluetooth console e escolha o bluetooth do computador como padrão.

Nesse momento você receberá a mensagem abaixo no terminal do computador:

~$ rfcomm listen rfcomm0 3
Waiting for connection on channel 3
Connection from XX:XX:XX:XX:XX:XX to /dev/rfcomm0
Press CTRL-C for hangup

Se você receber uma mensagem de erro igual a essa abaixo, não se preocupe, volte ao passo 4 e tente novamente. Deve funcionar na segunda vez.

~$ rfcomm listen rfcomm0 3
Waiting for connection on channel 3

Can’t open RFCOMM device: Permission denied

Passo 6:
Abra o console serial no computador e comece a usar o python do celular pelo terminal do computador (é feio o nome desse programa, mas é esse, fazer o quê?):

~$ cu -l /dev/rfcomm0
Connected.

>>>

Para testar, execute as duas linhas abaixo para abrir uma tela de alerta no celular:

>>> import appuifw
>>> appuifw.note(u”NokiaBR”)

É isso!

Caso você consiga fazer funcionar com outra versão do Ubuntu ou com outra distribuição de Linux, comente essa postagem para nos contar a distribuição do seu Linux e o celular que você usou para testar.

Tutorial de desenvolvimento em Python para S60 – Parte I

Depois de desenvolver alguns programas para uso próprio em Java ME, primeiro para S40 e depois para S60; resolvi aprender a desenvolver em Python para S60. Talvez por um pouco de pressão do Pedro Paulo do Bugs & Soluções, talvez pela excelente palestra que o Daniel Rocha fez no Forum Nokia Tech Days de 2008 eu me motivei a aprender mais essa linguagem.

O objetivo dessa primeira parte do tutorial é ensinar a instalar e testar os seus primeiros scripts feitos em Python. Não devo falar sobre a linguagem em si (variáveis, blocos de programa, funções etc.). Se você já tem alguma experiência em qualquer outra linguagem (Java, C++, Pascal, VB etc.), vai achar muito simples programar nessa linguagem. Vou deixar essas explicações para a próxima parte desse tutorial.

Chega de blá blá blá… Vamos ao que interessa!

Passo Zero: Arrume um computador com Windows.

Parece idiota esse passo, mas eu uso, como muita gente, o Ubuntu como sistema operacional principal no meu computador mas o SDK da Nokia só funciona em Windows. Ainda bem que eu mantive a partição com Windows que veio no notebook.

Passo 1: Baixe o SDK da plataforma S60

Para poder testar os programas no emulador e instalar o SDK de desenvolvimento do Python, é preciso ter instalado o SDK da plataforma S60 no seu computador.

Para isso, entre no site do Forum Nokia e baixe o último SDK da plataforma S60.

O link direto para a página de download é o:
http://www.forum.nokia.com/info/sw.nokia.com/id/ec866fab-4b76-49f6-b5a5-af0631419e9c/S60_All_in_One_SDKs.html

Você vai ter que baixar mais ou menos uns 450Megabytes. Tenha paciência. Vá lavar a louça do almoço e deixe baixando o arquivo. Você vai ganhar pontos com sua esposa ou sua mãe.

Passo 2: Instalando o SDK

Depois de lavar a louça toda, secar e guardar, você vai voltar ao computador e encontrar o SDK da plataforma S60 prontinho (dependendo da quantidade de louça e da velocidade da internet isso pode não acontecer). Decompacte o arquivo e execute-o, seguindo os passos para a instalação.

Dica importante: Não instale numa pasta com espaços no nome. Vá por mim, não é uma boa idéia. Use a pasta padrão ou instale numa pasta sem espaços no nome. (ex.: d:\s60 ou c:\symbian ou c:\SymbianS60 etc.)

Passo 3: Baixar o SDK do Python.

Eu perdi bastante tempo tentando instalar o SDK do Python no emulador e só depois de muita surra descobri que o SDK na versão 1.4.5 (a mais recente atualmente) tem algum problema com a última versão do emulador.

O pulo do gato é instalar uma versão anterior que funcione. A versão que eu instalei e que funcionou foi a 1.4.3. Você tem que baixar o SDK, não o arquivo SIS de instalação do Python. O nome do arquivo deve ter a seguinte forma: PythonForS60_1_4_3_SDK_3rdEd.zip

O link direto de download dessa versão é o que está logo abaixo:

http://sourceforge.net/project/downloading.php?group_id=154155&use_mirror=ufpr&filename=PythonForS60_1_4_3_SDK_3rdEd.zip&15832013

Caso você queira instalar outra versão, visite a página do Python para S60 no endereço abaixo:

http://opensource.nokia.com/projects/pythonfors60/

Passo 4: Instalar o SDK do Python

Não é complicado isso, mas também não é automático.

Descompacte o conteúdo do Zip que você baixou. Dentro dele haverá outro zip e um arquivo do tipo cmd (script do prompt de comando do Windows).

Descompacte o sdk_files.zip nessa pasta e copie a pasta Epoc32 (que irá aparecer) e o arqivo uninstall_PythonForS60_SDK_3rdEd.cmd para a pasta do SDK. No meu caso a pasta do SDK é a seguinte: C:\S60\devices\S60_3rd_FP1

Na hora de colar a pasta e o arquivo, o Windows vai perguntar se você quer mesclar as duas pastas, uma vez que já existirá uma pasta chamada Epoc32 nesse diretório (Se não existir, você está na pasta errada). Mescle as pastas e siga em frente.


Pronto! Agora você poderá testar seus programas feitos em Python no emulador. Depois de testá-los você poderá transferir para o celular e usá-los.

Para começar a desenvolver, veja os arquivos de exemplo na pasta C:\S60\devices\S60_3rd_FP1\Epoc32\winscw\c\python

Na hora de editar os arquivos .py, eu uso o freeware Notepad++ que já traz consigo o syntax highlight do Python (e de dezenas de linguagens). Ele pode ser encontrado no site http://notepad-plus.sf.net. É um ótimo editor que eu já uso desde as primeiras versões.

E lembre-se, o Python separa os blocos pela identação (o que parece bizarro, mas força o código a ficar legível). Use tab ou 4 espaços para identar o código. Não misture a identação. Escolha uma e use até o fim, para evitar problemas.

No próximo post desse tutorial vou dar uns exemplos de programas em Python. Enquanto isso, fiquem brincando com os exemplos que já vieram no SDK.

Aguardem!

Calculadora Médica S60 – Versão Alpha

O Pedro Paulo, do Bugs & Soluções, está desenvolvendo uma calculadora médica para celulares Symbian S60 (2nd e 3rd Edition) e me pediu para divulgar aqui para ter beta testers (médicos, de preferência). (Não se preocupe, se você não é médico, não vai precisar dela. Ela não tem as quatro operações)

O programa é feito em Python, por isso, você precisa ter instalado o interpretador do Python antes de instalar o .SIS da calculadora.

Calculadora Médica

A calculadora tem funções para UTI (Gradiente Arterial Alveolar), Neuro (Glasgow CS, Teste mental abreviado e Zung Depressão) e alguns cálculos gerais (BSA, BMI e BEE).

O programa ainda está na versão alfa, e, portanto, ainda tem muita coisa para ser aumentada e melhorada. De qualquer forma, você pode baixá-lo gratuitamente clicando aqui.

No blog dele você terá mais informações sobre a calculadora e o e-mail de contato dele.

Desenvolvendo em C++ para S60 também com Qt

Hoje pela manhã, o pessoal da Trolltech revelou a boa notícia que havia portado o Qt para celulares Symbian S60.

Antes de mais nada, Qt é uma biblioteca de desenvolvimento em C++ e em Java multiplataforma. Ela já existe para fazer programas que rodam no Windows, Linux e Mac. A versão móvel da biblioteca só permitia desenvolvimento para Embedded Linux e Windows CE, mas hoje incluiu o S60 no seu portfólio. Isso quer dizer que um programa pode ser compilado, sem modificar o código-fonte, para Symbian S60, Windows CE e Embbeded Linux.

A notícia é do blog See into S60, que postou um vídeo muito legal demonstrando as características do Qt num celular Nokia, num HTC e num Neo.

Caso queira saber mais sobre o Qt para S60, clique aqui.

A biblioteca possui licenças OpenSource e Comerciais.

Forum Nokia Tech Days 2008

Hoje, como vocês devem ter visto no post anterior, foi o primeiro dia do Forum Nokia Tech Days 2008, um evento patrocinado e organizado pelo Forum Nokia para facilitar e estimular o desenvolvimento para as plataformas S40, S60 e Maemo.

O dia foi bastante intenso com várias palestras. Primeiro tivemos as institucionais sobre a Nokia, o Forum Nokia e o INdT (Instituto Nokia de Tecnologia).

Também tivemos uma palestra de um caso de sucesso de um Forum Nokia Code Champion, o Felipe Andrade da I2 Tecnologia, a empresa que faz o jogo Anina Dress Up e o framework Flyer (Flash + Python).

Depois começaram as palestras sobre as plataformas de desenvolvimento propriamente ditas: C++, Python, WRT e Java2ME. Muito boas as palestras! Só a de C++ que eu achava que deveria ser maior, mas isso é por causa da minha preferência por essa linguagem.

Por falar em linguagem, fiquei impressionado com o Python. Eu confesso que tinha um certo preconceito com essa linguagem, mas depois da palestra sobre Python, revi meus conceitos.

Por último, fizeram uma pequena palestra sobre o dia de amanhã e as ferramentas que precisávamos trazer instaladas no notebook e sortearam um N95 8GB novinho! Não fui sorteado, mas fiquei muito contente com o cara que levou o aparelho.

Amanhã teremos um campeonato de programação de duplas em Widgets e Flash Lite. Vão dar dois N95 8GB para a dupla que fizer a melhor aplicação. Quem sabe não volto pro Rio com um desses brinquedos na mala (ou no bolso). Se não ganhar, já valeu muito o evento.

Abaixo temos a foto da vista do restaurante do hotel no 23° andar, onde se vê o parque Trianon logo em primeiro plano.

Por último, a foto (não ficou muito boa) do pessoal que deu as palestras ouvindo uma pergunta, no final do dia. (Os que estão de fone não são brasileiros)