sábado, 20 de novembro de 2010

Já podem colocar aqui o vosso código

Para tal só têm de fazer o Edit HTML e colocarem:

/** * SyntaxHighlighter */    
function foo()     
{         
    if (counter <= 10)             
    return;         // it works!     
} 

Linguagens = Cpp, c-sharp, css, java, jscript, php, pyhton, ruby, sql, xml, perl

sábado, 13 de novembro de 2010

Javascript Object Oriented

Depois de várias conversas a tentar defender que o Javascript é Object Oriented perante os meus amigos amantes do Java e .Net, decidi escrever um conjunto de artigos sobre esta linguagem e como a utilizar para ser OO visto que existem muitas pessoas que não sabiam sequer que a linguagem permite este paradigma.

Não vou defender que o JS é melhor que A ou pior que B, apenas irei mostrar como utilizar como OO J.

Para ser sincero nunca tinha tido uma grande experiência com o JS na universidade, mas onde actualmente trabalho é usado em 90%. O mais estranho é que em 90% do mundo profissional JS é utilizado em browser para fazer client side e eu uso numa plataforma para server side (eu gosto de ser do contra J).

Vou tentando explicar com exemplos, se os quiserem testar é só instalar um add-on no IE ou no Firefox que permita “correr” JS (ex. IE -> debugBar)

O objecto Point, é um sério case study em vários livros e cursos de programação e é por esta que irei começar.

Iremos começar com a criação do objecto, propriedades públicas e privadas e como adicionar métodos (privados, públicos e priveligiados).

Não percam os próximos artigos porque nós também não J.

quinta-feira, 11 de novembro de 2010

Mind Games - #1

Nós que gostamos tanto de problemas, acho que uma secção com problemas matemáticos/lógicos era engraçada. Deste modo, aqui vai o primeiro..




Nós temos duas bolas de vidro (exactamente iguais em todos os aspectos) e chegamos uma torre com 100 pisos (99 andares "normais" mais o telhado). O objectivo é saber o andar a partir do qual em que se atirarmos a bola da varanda, ela irá quebrar quando embater no chão.

Regras:

  • Temos duas bolas, quando uma se partir, podemos continuar a realizar lançamentos até a segunda se partir
  • Qualquer piso é candidato, tanto o primeiro como o último.

Qual o majorante de lançamentos necessários para encontrar o piso? 

sexta-feira, 29 de outubro de 2010

XML Native Databases

Depois da cadeira de CT-XML tornei-me num apreciador deste conceito. A livre estrutura do XML, a sua fácil extensibilidade e as técnicas/tecnologias de XPath, XSLT e XQuery deram um novo ponto de vista sobre o armazenamento e pesquisa de dados.

A primeira experiência foi com o eXist. Apesar de algumas limitações, foi o chamado "abre-olhos" de como construir a camada de dados para projectos de pequeno/médio porte de forma bastante robusta.
Agora para o projecto do mestrado, optei pela Sedna que tem uma API para C/C++ (entre outras). Bastante poderosa e de fácil integração com vários exemplos de ajuda.

Links:
Sedna
eXist

domingo, 17 de outubro de 2010

openFrameworks - Uma framework para criatividade

O openFrameworks é uma framework em C++ para facilitar a utilização de imagem, video e audio. Orientado para áreas mais ligadas a multimedia, o oF tem uma comunidade de utilizadores  bastante alargada que contribui para o seu melhoramento assim como na criação de vários addons.

Aqui está um vídeo de uma aplicação bastante engraçada, um gerador de smiles :) em que quando capta um sorriso da pessoa, incluí um :) no MSN, email, etc..


Auto Smiley - Computer vision smiley generator from Theo Watson on Vimeo.

Links:
openFrameworks

sexta-feira, 1 de outubro de 2010

ReSharper

Esta ferramenta torna o Visual Studio num Eclipse com esteroides. Atenção que vai "comer" alguma memória ter isto a correr mas vale muito a pena.

  • Code Analysis
  • Navigation & Search
  • Refactorings
  • Code Generation
  • Build Scripts
  • Code Assistance
  • Code Cleanup
  • Code Templates
  • Unit Testing

Infelizmente não é gratuita e ainda custa  uns bons trocos mas tente convencer os vossos chefes.

Links:
ReSharper

quinta-feira, 30 de setembro de 2010

Eclipse

Eclipse IDE
Um velho conhecido dos tempos de universidade e ainda hoje o meu ambiente de desenvolvimento preferido.
IDE significa Integrated Development Environment, ou seja, um ambiente de desenvolvimento integrado. Uma ferramenta de ajuda à criação de software que neste caso é multi-linguagem (JAVA, PHP, C/C++, Javascript, etc) através do seu sólido mecanismo de extensões (plugins) permitindo adicionar funcionalidades e características conforme a necessidade do utilizador.
Algumas das funcionalidades que vêm com a instalação base são JAVA e CVS. Dando o exemplo do Java existe várias funcionalidades user friendly como auto-complete, highlight, auto-correct, suggestions, debug entre outras.
É possível criar os nossos próprios plugins sejam estes para adicionar ou melhorar funcionalidades especificas, seja para criar funcionalidades para partilhar na comunidade link ou para comercialização. Alguns dos plugins mais conhecidos são para o desenho de UML, desenvolvimento de PHP, ligação a sistemas de gestão de Base de Dados, desenvolvimento de Web Design.
Existe uma permissa nesta ferramenta “Eclipse is a plug-in” com a excepção de um pequeno runtime kernel.
Para comprovar a capacidade de modularidade e escalabilidade da ferramenta podemos consultar o conjunto de ferramentas existentes , muitas destas com vertente para ambientes profissionais e comerciais.
Uma óptima ferramenta para todos os níveis de expertise.

Links:
Eclipse
Conjunto de ferramentas

quinta-feira, 23 de setembro de 2010

Google StyleGuide

As práticas recomendadas pela Google para um conjunto de linguagens, entre as quais: C++, Objective-C, XML, R, Python, JavaScript.

Links
Google StyleGuide

terça-feira, 21 de setembro de 2010

Apple e as API secretas

Para programação para o ambiente Mac, a linguagem Cocoa/Objective-C é a escolha natural e tem uma boa documentação da sua API.
No entanto, a Apple esconde certas funções da API CoreGraphic. Felizmente houve um grupo que fez uma interface para essas funcionalidades escondidas e podemos fazer o download aqui.

Links:
Undocumented-goodness

sexta-feira, 17 de setembro de 2010

Gastronomia #2 - Restaurante Capricciosa

Tal como prometido vou fazer mais alguns posts sobre restaurantes italianos que conheço.

Começo pelo Capricciosa (presente em Alcântara - entre à estação de comboios de Alcântara-Terra e a de Alcântara-Mar -, Parque das Nações, Carcavelos - junto à Pastorinha - e Cascais. Eu apenas tive o prazer de visitar a de Carcavelos portanto em relação às outras não teço qualquer comentário. ;)

Efectivamente não é um restaurante barato mas também não o acho caro (cerca de 20€ por pessoa se não abusarem) e tendo em conta que a qualidade e a vista também se pagam podem dar o dinheiro por bem empregue. :) Convém reservarem com antecedência porque o restaurante é muito concorrido e a espera chega facilmente à 1h (mesmo o restaurante sendo enorme).

Em relação à comida têm as habituais tostas com mozarella e tomate cherry, carpaccio, pizzas, massas, lasanhas, canellones, etc. Tudo com muita variedade e qualidade. Nas sobremesas, para quem tem o pecado da gula ,também há muita coisa boa e bem arranjada (que os olhos também comem). Não recomendo nada em especial porque acho que gostos não se discutem e cada um saberá escolher o que mais lhe agradar.

Sobre o espaço podem optar pelo interior ou pela esplanada (nos dias de maior calor) ambos com uma vista fantástica sobre o mar. Para quem aprecia a vista que Lisboa nos proporciona e gosta de aproveitar ao máximo o facto de viver nesta cidade é um sítio a ter em conta. ;) Tem também umas esperguiçadeiras que podem ser utilizadas durante a tarde para relaxar enquanto se bebe algo à beira-mar.

Sem dúvida um sítio a visitar de preferência com um grupo de amigos porque este restaurante é pouco dado a romântismos (infelizmente :P). Para coisas mais intímas...esperem pelas próximas recomendações que há muita coisa boa por aí. ;)

Links:
www.grupodocadesanto.com.pt/capricciosa/carcavelos/default.aspx

quarta-feira, 15 de setembro de 2010

SOAPUI - Testar webServices

Já vos aconteceu estar a desenvolver um webService e não terem como testar o cliente ou o servidor? É possível essa tarefa com o SOAPUI, uma ferramenta Open Source que permite testar webServices de forma rápida e simples.

Através deste aplicativo conseguimos simular tanto o lado do cliente como do servidor. Existe a possibilidade de criar baterias de testes na chamada a um servidor.
Para verificar as mensagens que estão a circular o SOAPUI tem ainda a possibilidade de definir um proxy, que monitoriza todo o tráfego de e para o SOAPUI. Esta ferramenta permite detectar mais facilmente erros na construção/definição das mensagens do webService.

Posteriormente será aqui colocado um tutorial de utilização do SOAPUI.

Links:
Página oficial: http://www.soapui.org/
Donwload: http://sourceforge.net/projects/soapui/files/

terça-feira, 14 de setembro de 2010

JavaFX

O Tiago falou na última jantarada de querer começar um projecto para desenvolver uma aplicação para ajudar a metodologia Scrum que tem utilizado no trabalho.
A ideia dele era de desenvolver esta ferramenta em Java e que eu sugeri que a tornasse numa webapp e o JavaFX tem os dois mundos.
Já agora Tiago quando decidires avançar com isto, avisa ;)

Links:
Scrum
JavaFX

segunda-feira, 13 de setembro de 2010

Gastronomia #1 - Restaurante Picanha

Para não parecer que somos uns anti-sociais e que o nosso mundo se passa entre 4 paredes em frente a um PC aproveito para dizer que eu e a maioria da minha equipa fizemos um jantar neste restaurante e gostámos muito (pelo menos eu gostei e ninguém reclamou portanto...).
O restaurante não prima pela variedade mas o que oferece é tão bom que se perdoa... Temos apenas 3 pratos principais: Picanha à descrição, prato de Picanha e "Picanha" do Mar (neste caso Cherne). No entanto o dito produto é tão bom que vale a pena a visita... A carne é macia q.b. e pode ser pedida nos habituais mal/médio/bem passado. Está sempre a vir (por isso não se assustem se virem pouca carne dentro do primeiro "tacho") quentinha e saborosa. O peixe (diz quem comeu) também é muito bom e as batatas que o acompanham são fantásticas. A sangria também estava muito boa e é sempre uma boa companhia para a festa. :) O preço não é propriamente convidativo mas para um dia de confraternização não é exagerado.
Cada um dos "menus" à descrição custa 15€ c/Picanha, arroz, feijão e salada à descrição (o Cherne vem acompanhado com batatas assadas em vez de arroz e feijão) e entradas, bebidas e sobremesas à parte. Nós pagámos cerca de 25€ por pessoa mas se incluirem a sobremesa pode ir aos 30€. No entanto esticámo-nos nas sangrias (foi 1/1,5 jarro para cada 2) e também não nos "poupámos" nas entradas. :)

Qualidade: 9/10 - faltava umas batatas e banana fritas que eu gosto imenso e o arroz não era muito do meu agrado (mas eu não aprecio arroz lol)
Preço: 7/10 - é um bocado caro para o tipo de comida que apresenta no entanto a carne é realmente de excelente qualidade (comparada com rodízios e outros restaurantes que conheço)
Espaço: 7/10 - é agradável mas não é muito grande (convém marcar em dias de fim-de-semana) e se tiver muito cheio torna-se barulhento

Da próxima vou referir alguns dos restaurantes italianos que conheço...

Link:
http://picanharestaurantes.com/ (eu fui ao das Janelas Verdes)

Pérola #1 - Função que não faz nada

Esta foi uma das primeiras pérolas que já tive o prazer de encontrar pelo meu "caminho". Existem várias coisas deste género (que vou reportando assim que puder) e não percebo qual a sua utilidade (nesta caso só mesmo enganar o utilizador que vê ali um link mas que depois não faz nada LOL). No entanto quem fez há-de ter um objectivo...digo eu. :P

function nada() {}


function function1(){
(...)
aux.href = "javascript:nada()";
}
 
Além da função ser ridícula...ainda é mais rídiculo ser chamada. :P

Mapeamento de objectos Hibernate com outros objectos não mapeados em Hibernate

Boas! Peço desculpa pelo título longo mas não sabia como reduzir isto...

Esta situação que falo ocorre regularmente no sítio onde trabalho porque existem objectos que estão guardados através de um "hibernate" com 15 anos, que é um framework proprietário e que se chama RecDatos. Posteriormente passou a usar-se o Hibernate (quando este passou a estar disponível LOL) e agora temos objectos mapeados em Hibernate e em RecDatos. Isto obviamente dá problemas quando se querem fazer ligações N-N entre objectos mapeados nos diferentes frameworks. Inicialmente optámos por mapear a tabela de junção em hibernate e usá-la como se fosse uma ligação de 1-N entre o objecto hibernate e esse outro objecto que mapeava a tabela de junção. No entanto isto obrigava a um trabalho extra (criação do hbm.xml, do POJO e do objecto) que se (no futuro) o outro objecto passa-se a estar em Hibernate seria deitado ao lixo...
Portanto ataquei pela teoria do KISS (Keep It Simple & Short) e fiz um mapeamento da tabela de junção através de um set. O Hibernate permite que usando set's se defina em que tabela guardar esse set (podemos usar set's no objecto que depois não são mapeados em nada na BD). No meu caso apenas precisava de uma string por isso o mapeamento é muito simples:
<set name="set1" table="table1">
    <key column="id_element"/>
    <element type="java.lang.String" column="id_table2"/>
</set>
Mas podem ser usados tipos mais complexos:
<set name="set2" table="table2">
    <key column="id_element"/>
    <composite-element class="class1">
        <property name="var1" type="java.lang.Long" column = "column1"/>
        <property name="var2" type="java.lang.String" length="255" column = "column2"/>
        <property name="var3" type="java.lang.String" length="255" column = "column3"/>
    </composite-element>
</set>
Em ambos os casos a teoria é sempre a mesma:
Um set no objecto com o nome definido (name="set1") guardado numa determinada tabela na BD (table="table1"). O id do elemento pai é a key (e define-se o nome da coluna que guarda esse id) e os element são as restantes colunas e têm de corresponder aos tipos dentro do Set definido. O name dentro do property tem de ser igual ao da variável dentro da class (para o hibernate conseguir fazer set's e get's) e o resto é "magia" do hibernate... ;)

Espero que esta dica vos venha a ajudar e alguma dúvida é só perguntarem.

Links:
Hibernate

domingo, 12 de setembro de 2010

Editorial

Depois de sair da faculdade e chegar ao mundo do trabalho novos desafios aparecem. A experiência é um factor fundamental e este blog servirá como plataforma para a troca de conhecimento.

Os colaboradores deste blog serão:
  • António Costa
  • João Mateus
  • Ricardo Mateus
  • Rui Chambel
  • Tiago Ribeiro
Vai ser possível encontrar neste blog dicas sobre linguagens de programação, ferramentas que possam aumentar a produtividade, projectos, etc.
Para acalmar o stress e rir um bocado, serão publicadas aquelas pérolas que se encontramos de código martelado ou conversas de quem já não tem uma boa noite de sono.

exit(0);