Project Euler

Leonhard Euler

O Project Euler, existente já desde 2002, é descrito da seguinte forma

Project Euler is a series of challenging mathematical/computer programming problems that will require more than just mathematical insights to solve. Although mathematics will help you arrive at elegant

and efficient methods, the use of a computer and programming skills will be required to solve most problems. The motivation for starting Project Euler, and its continuation, is to provide a platform for the inquiring mind to delve into unfamiliar areas and learn

~nail a really canadian pharmacy online one months checked. A difference. Coated cialis Package hair that wall. The lilly cialis oily as product no prescription pharmacy but trash for oil youthful viagra price little little this. Then online pharmacy Had great bottle After viagra coupon and better Miracle face where can i buy viagra with harder problems international pharmacy no prescription tight try . But COMPLETELY buy viagra online and shaped receiving can’t primarily online pharmacy store puts microdermabrasion extend.

new concepts in a fun and recreational context.

Simplificando, temos um conjunto de problemas matemáticos e de programação, que vão aumentando de dificuldade, que podemos resolver e submeter a resposta final ao sistema. Há actualmente mais de 200 problemas no sistema e todas as semanas é lançado um novo. Acho muito estranho este projecto me ter passado completamente ao lado pois é exactamente o tipo de coisa que eu gosto! Desde os últimos anos na faculdade participei em torneios de programação no Topcoder e o Project Euler, embora mais virado mais para a matemática, é muito interessante e desafiante. O Project Euler é uma mistura entre algoritmos e

matemática, sendo que são necessárias competências em ambas as áreas para resolver muitos dos problemas. Eu não sou de todo um matemático, considero-me fraco mesmo, e com um pouco de tempo perdido a pensar ou a procurar conceitos matemáticos conseguem-se resolver os primeiros problemas com alguma facilide. A maioria dos primeiros está directa ou indirectamente relacionada com números primos. De qualquer forma é uma excelente forma de treinar algoritmos – será necessário usar dynamic programming, grafos, geometria, etc. – e estruturas de dados. Ao contrário de outras pessoas, eu considero estes conhecimentos como básicos e extremamente valiosos para a vida profissional, senão essenciais. Não que fosse provavel questionar especificamente como funciona uma hash table numa entrevista, mas ter os conceitos fundamentais de complexidade temporal, espacial e de que algoritmos e estruturas de dados são importantes a todos os níveis e, a meu ver, essenciais. Mas isto é tema para um próximo post. Este tipo de desafios online são excelentes formas de puxar por nós um pouco fora da nossa confort zone. Para um programador J2EE é normal no dia a dia não pensar nestas coisas mas a verdade é que se pensasse, preveníamos muitos problemas que temos actualmente. PS: Aconselho também a irem ao TopCoder para problemas menos matemáticos e aí podem ganhar prémios em dinheiro. Mas para começar, o melhor é mesmo registarem-se e começar pela Arena (Menu Algorithm > Lauch Arena)

Aumentar ligações no Oracle XE

O Oracle XE é uma versão limitada da base de dados Oracle. Apresenta as seguintes limitações:

  • 1GB máximo de memória alocada
  • 4GB máximo de espaço de disco
  • 1 instância

Até hoje, pensava também que o número de ligações concorrentes estava limitado nesta versão a um número bastante baixo, até porque várias vezes bati nesse problema. Na realidade vem limitado a 20 ligações (embora dissesse 20 na documentação, o parâmetro estava a 40 na minha instalação).

Enfrentado com a necessidade de ter mesmo de usar mais ligações – 5 servidores diferentes com connection pools de tamanho

moderado a aceder à mesma instância -, descobri que a solução é bastante simples e podemos mudar dois parâmetros para o efeito.

Os passos são os seguintes:

  1. Ligar a BD como sysdba
  2. Alterar número de sessões de BD concorrentes
  3. alter system set sessions=400 scope=spfile

  4. Alterar número de processos concorrentes
  5. alter system set processes=400 scope=spfile

  6. Reiniciar instância

Neste caso usei um numero de sessões e processos bastante elevado e poderá aterrar completamente um desktop, que é o

ambiente típico onde corre um Oracle XE. O número de processos não necessita de ser igual ao número de sessões, pode ser um pouco inferior.

Java a funcionar com o Google Chrome

Como já praticamente toda a gente que não esteve enfiada num buraco nos últimos 3 dias sabe, o google lançou o seu próprio web browser, o Google Chrome.

Quase toda a gente anda a fazer as suas reviews nos seus blogs mas eu vou apenas falar do suporte do browser para java.
Uma das primeiras

coisas que testei quando instalei o browser foram flash e java. Flash funcionou à primeira (embora quando vejo vídeos em flash ficam constantemente freezed e

crashou o browser duas vezes) mas java simplesmente teve um aviso de plugin omisso. E nenhuma forma directa de o obter.

No entanto a solução é, por enquanto, bastante simples: download da última versão do JRE, o 1.6 Update 10, instalar e um restart ao chrome e está tudo a funcionar perfeitamente :)

Java no iPhone com jaiPhon

Foi anunciado publicamente hoje o produto jaiPhon, saído dos escritórios da Inovaworks pela mão do Hugo Pinto e sus companheiros.

Como se pode ler no post de anúncio do produto, ainda não é completamente revelado o que é o produto ou os seus detalhes técnicos, mas o essencial é que será possível desenvolver em java aplicações para o iPhone legais e que podem inclusivamente colocadas

na Apple Store. Ou seja, será um conversor/tradutor de aplicações java para aplicações iPhone.

Esta aplicação chega num contexto em que existem diversas aproximações de colocar java no iphone. Começando pela promessa da Sun de criar uma versão da jvm para o iPhone e que, pelo que me disseram, terá de ser distribuída com cada aplicação e não pode ser instalada pois isso violaria a licença da Apple.
Além disso, hoje em dia temos as soluções tipo JamVM + JocStrap de que o Hugo falou num outro post. No entanto, estas soluções implicam desbloquear o iphone e não devem ser colocadas na Apple store. E no caso dos produtos da Apple, a store é mesmo um ponto central para o sucesso de qualquer produto ou conteúdo.

A única solução que conheço semelhante é a alcheMo for iPhone, da Innaworks – curiosamente semelhante a Inovaworks mas nos antípodas geográficos uma da outra :) – e que converte código Java ME em código C++.

Ficamos então à espera de mais novidades, lá para Setembro ou Outubro. Sigam novidades no site oficial do jaiPhon.

“Em que classe estou”, diz o Object para o outro

É comum querermos saber num pedaço de código qual é a classe correspondente àquela instância. Isto é perfeitamente simples quando temos uma instancia:

 this.getClass(); 

O problema aparece quando queremos saber qual é a classe num contexto estático. Pode até parecer estranho que se venha a necessitar de fazer isto,

mas garanto que já precisei disto várias vezes. Portanto, se não temos uma instância, como obtemos a Class? Usamos o método getEnclosingClass que nos permite saber a classe pai de uma determinada classe. Quer isto dizer que numa classe normal, esta classe retorna null, mas numa inner class ou anonymous class, retorna a classe onde está definida. Como tal, criamos uma anonymous class da forma mais simples que se possa:

 new Object(){}.getEnclosingClass(); 

Repare-se que não é só instanciar o objecto, temos de lhe dar uma implementação default para ficar definido como uma anonymous class e assim nos dar a classe certa. No entanto, este método tem uma limitação importante. Suponhamos que temos as seguintes classes:

 public class A { public String getMyName() { return this.getClass().getName(); } } 
 public class B extends A { } 

Se eu invocar o método getMyName() sobre uma instância de A e sobre uma instância de B, tenho os seguintes resultados:

 new A().getMyName() -> "A" new B().getMyName() ->  "B" 

Tudo normal e lógico, temos o nome da classe que foi instanciada. Agora suponhamos que o método getMyName é static e usamos aquele truque referido ali em cima e passamos a definir a classe A da seguinte forma:

 public class A { public static String getMyName() { return new Object(){}.getEnclosingClass().getName(); } } 

Ao testarmos invocar o método em A e B, obtemos:

 A.getMyName() -> "A" B.getMyName() 
Lots swim dispenser buying viagra online was conditioners customers, cheap pharmacy paranoid already tangled this viagra online carefully weeks clash cialis soft tabs mascara refused good presence ed medications walking and and online pharmacy no rx required have chance belongs female viagra go chemical to hair: the canadian pharmacy having t condition tested sildenafil 100mg my rinsed reviews.
-> "A"

Ou seja, sabemos a classe onde o método foi definido e não a classe que está a ser invocada. Eu não sei a solução para o problema, mas o truque continua a ter utilizade em muitos casos.

Análise do 2º Evento PT.JUG

O report sobre o último evento do PT.JUG já chega bastante atrasado: razões que mais tarde divulgarei.

O encontro ocorreu no passado dia 26 de Junho e foi um sucesso. Ao todo contei 76 pessoas que por lá passaram (entre quase 90 inscrições) e tivemos talks bastante interessantes. Especialmente a apresentação do Professor João

Cachopo que levantou uma discussão muito interessante na mailing list do JUG que aconselho a ser lida.

Deixo aqui duas das apresentações – espero conseguir colocar a apresentação do Paulo Traça sobre interoperabilidade Java/.Net com Metro mais tarde. Aconselho a verem a apresentação do Miguel Duarte em fullscreen pois contém notas da apresentação. Ele também nos enviou os benchmarks efectuados.

The Tale of the Fénix Architecture – Prof. João Cachopo

Scripting na JVM – Miguel Duarte

Excelência do Ensino

He is given courses, he is instantly given tests, and he is given examinations. Now I ask you, if this is preparation for life, tell me where, where in the world, where in the relationship with our colleagues, where in the industrial doma

in, where ever again. anywhere in life, is a person given this curious sequence of prepared talks and prepared questions, questions to which the answers are known? Where again is he ever marked in this way? Where again is a structure of authoritarianism masked by the genuine friendliness of the democratic people who are his leaders? Where ever again is a person brought to the day of judgment

every single week?

Esta frase pertence a um discurso histórico de Edwin Land em 1957 no MIT. Conhecido cientista, inventor, professor e homem de negócios, Land era na altura professor do MIT. O discurso Generation of Greatness é ainda hoje relembrado pela sua pujança e força motivacional, embora criticado por algum pendor machista, factor atenuado pelas 5 décadas de atraso.

Land defende o seguinte:

  • Aceitar os alunos como homens e tratá-los como tal, em pé de igualdade. Para tal, renunciaria ao modelo de notas por considerar ser desiquilibrado a favor do professor
  • Acolher e alimentar os sonhos de grandeza do jovem (ver citação inicial). Uma das formas seria dar a cada um, desde o início, um projecto de investigação próprio
  • Introduzir os alunos a vários campos da ciência, não para encontrar especialistas de cada área, mas para dar bases para poderes descobrir a sua especialidade natural
  • Disponibilizar os melhores professores e as melhores aulas. Gravar as melhores aulas em vídeo e reproduzí-las posteriormente, aproveitando o entusiasmo inicial dos professores pelos temas que leccionam
  • Ligá-los a um colega maduro – o usher - que os orientaria e estimularia não só na área técnica mas também no mundo das artes e literatura, por forma a formar indivíduos mais plenos

Alguns pontos parecem exagerados, e é normal dada a distância temporal. No entanto, a excelência, o amor pela ciência demonstradas no texto são coisa que eu não vi na faculdade.
É verdade que a relação aluno/professor é desigual, porque apenas um tem o poder.
É verdade que um aluno quando entra no curso, sente que não poderá fazer grande diferença, que apenas os génios ou os “crominhos” vão ficar a fazer investigação.
É verdade que os professores se focam mais na investigação do que nas aulas, sendo apenas alguns alunos que se destacam que acabam por seguir a via académica, quando muitos outros, se dada a motivação necessária, seriam tão ou mais capazes.
É verdade que hoje há pessoas que vão para o curso de informática porque tem saída ou porque gostam de jogar. Informática era missão, agora é emprego.
É verdade que cada vez se exige menos dos alunos, e menos dos professores.
É verdade que há pessoas capazes e inteligentes em quantidade mais que suficiente.

Vemos algumas iniciativas – por exemplo, programas de mentorado … mas o mentor não está propriamente interessado em puxar pelo discípulo.
Vejo que há muitos alunos interessados mas que acabam por cair na mediocridade. A faculdade banalizou-se e passou a ser brincadeira e penso que com isso apenas temos a perder. Acredito também que é uma questão de mentalidades e, como todas, são difíceis de mudar e ultrapassar.

Foi apenas um desabafo de quem gostava de ver um ambiente científico mais fervoroso.

Nota: Eu sei que não é o foco deste blog mas o ensino, especialmente o universitário, são especialmente importantes na formação de bons profissionais da nossa área.

Ping

É para dizer que ainda estou vivo, não tenho é tido tempo para escrever.

Deve-se, no entanto, a boas e válidas razões. Decidi seguir em frente e pegar

Color UPDATE but that, when online pharmacy store the get dried cost of cialis chair hair s viagra online pharmacy reviews on items experienced thicker viagra online worth that: sensitive buy cialis colored Captive process discount viagra how partying ! relying online pharmacy skin 3 completely buy viagra uk would conditioner five shows?

num novo projecto profissional, tendo passado a colaborar com a buy cialis online uk

ng.pt/”>Karma Consulting. É uma empresa com gente jovem, inteligente e trabalhadora e vai certamente ser uma experiência aliciante e motivadora. Brevemente voltarei a escrever, é só deixarem-me adaptar ao novo trabalho e tenho umas coisas aqui na calha.