domingo, 30 de novembro de 2008

JavaFX - impressões de um fim de semana

Nessa preview (JavaFX Preview SDK), bug pra caramba! impraticável! vamos esperar a release em 04/12! só funfa os exemplos deles, e alguns botões, sliders, bem simples; me pareceu, e pelo que li nos foruns, que a API não foi toda liberada e a integração com netbeans, tá meio loucona... ele se perde pra importar um script, ou scene, etc... tem que colocar na mão! doc da API ainda é draft.

O bom! simples, simples, simples! os scripts (a linguagem FX) é uma mistura de javascript com java e pedaços da XLib (X11) ; a idéia são conjuntos, grupos, frames,
scenes, gradients, widgets, eventos de keys e mouse, etc. A integração com java me pareceu tranquila, pelos menos nos Sysout.out da vida... ops, é OO! a idéia de script, nos tira os objetos da cabeça... hehe!

Muito rápida, muito rápida! o weather ficou show (exemplo deles), lendo do google weather pra infinidade de png que tem, pra os efeitos das nuvens, raios, chuvas, trovoadas, lua, sol, etc, é bem rápida! nos exemplos, muita matemática, circle, vector, area, lightning... o posicionamento dos ponteiros, é uma composição seno/coseno mesmo! isso me lembrou flash! shadows, infinity, texture,... quem conhece o Photoshop, deve lembrar aquela parada de ficar brincando com sombras, angles, opacidade, camadas... é por aih,... toin! mas, tá bem voltado pra desenvolvedor, coisa que não acho no flash... mas, dêem uma olhadinha num estilo de script... (vejam no ImageView um pedaço de Java... oh meu Deus!)
Group {
transform: bind Transform.rotate(angle, 50, 50)
translateX: bind x
translateY: bind y
content: [
Circle {
opacity: bind shape.value
centerX: 50 centerY: 50 radius: 50
stroke: Color.YELLOW
fill: RadialGradient {
centerX: 50 centerY: 50 radius: 50
focusX: 70 focusY: 30
proportional: false
stops: [
Stop {offset: 0 color: Color.YELLOW},
Stop {offset: 1 color: Color.WHITE}
]
}
},
Text {
transform: bind Transform.rotate(33, 10, 100)
opacity: bind text.value
content: "Duke"
},
ImageView {
transform: bind Transform.translate(31, 27)
opacity: bind image.value
image: Image {url: this.getClass().getResource("duke.png").toString()}
},
]
}
Tem o Project Nile, que são plugins para exportar do Photoshop ou Illustrator para o FX; nada mais que vetorizar as imagens no padrão SVG; só usei png mesmo, pois o bicho capotava quando tratava os vetores... ahh, ele deixou eu criar um projeto com o mesmo nome no workspace (ouch!!) e quando fui apagar, ambos foram pro espaço! depois quando tentei reabrir, o bicho ficou doidão!

O velho e bom Quicktime, o Fenix, volta a aparecer como a principal ferramenta para exibir vídeos no FX, e, também na API disponibilizada, só tem ele; deve aparecer logo coisas pra Windows Media Player, Winamp,... e o flash player?

Detalhe, para os desavisados... não rodei nada dentro do browser, fiz tudo no IDE; entretanto, o grande atrativo dessa tecnologia, pra mim, é você "arrastar" (criar um link!) de dentro do browser e colocar no desktop, e rodar como uma aplicação qualquer, e, depois pode-se criar um link no desktop, tipo JNLP (Java web start launcher)... pronto! do browser pro desktop num piscar de olhos... e o link fica lá,... clicou, aplicação rodou... ou roda localmente, ou de um server; não se preocupem, tem como fazer cache também! Nesse ponto ficou uma dúvida... ele usa a cache do browser, usa o engine do browser default? no meu caso, ele usou o xlrunner do firefox? bom, o Dudu elucidou o dilema; o próprio webstart tem todo esse mecanismo de configuração, praticamente o mesmo mecanismo dos browsers, como arquivos temporários, tamanho da cache, JVM disponíveis, certificados, etc...

Bom, pra ficar bonitinho, tem que ter um trabalho gráfico, mas se quiser uma interface com botões e sliders, fica "fofo!" (nada de boiolices, vlw?! hehe)

Li bastante coisa do projeto,... agora, vou esperar dia 04/12, baixar e começar a brincar! como eu iria pra flash e tava achando dificil demais, vou agora gastar tempo com o FX!

Recomendo a galera dar uma olhada e compartilhar a impressão... ainda apanho um pouco com o netbeans... ahh, soh roda no 6.1 segundo a Sun; espero que a release rode no 6.5, mas a Sun não garante... fiz o teste, e rodou... esquisito?! achei naum!

Por enquanto o SDK JavaFX só tem pra Windows e Mac... pobre pinguim! mas encontrei dicas e "marretas" pra rodar no Linux a partir do pacote Mac (diga-se kernel FreeBSD), mas não tentei.

nesse link, sabe-se quase tudo sobre o projeto: http://www.javafx.com/

fui!

quarta-feira, 26 de novembro de 2008

What is the Apache C++ Standard Library?

The Apache C++ Standard Library project (code name stdcxx, pronounced "standard C++ library", not S-T-D-C-X-X) is a collection of algorithms, containers, iterators, and other fundamental components of every piece of software, implemented as C++ classes, templates, and functions essential for writing C++ programs.

The goal of the Apache C++ Standard Library is to provide a free implementation of the ISO/IEC 14882 international standard for C++ that enables source code portability and consistent behavior of programs across all major hardware implementations, operating systems, and compilers, open source and commercial alike. An additional goal is to achieve maximum implementation efficiency on each platform by taking advantage of platform-specific high-performance facilities and features which are often unique to the type of hardware, the operating system or the compiler.

As the starting point for future efforts, in summer 2005 Rogue Wave Software has contributed its commercial implementation of the C++ Standard Library to the Apache stdcxx project, a proven code base that has been shipping for over a decade and is among the most widely used cross-platform implementations of the library.

The key features of the stdcxx project at the time of submission include:

  • Full conformance to the C++ standard
  • Complete implementation of the localization library independent of the underlying operating system, including a large set of locale definition files, character set description files, and utility programs to process these files and generate locale databases
  • User control over strict or permissive conformance checking
  • Thread-safe implementation of strings, iostreams, and locales
  • Reference counted basic_string implementation using atomic locking with the ability to switch to a non-reference counted implementation
  • Excellent runtime performance
  • Optimized for fast compiles and extremely small executable file sizes
  • Portable to and fully tested on a large set of operating systems, including AIX, HP-UX, Linux, Solaris, Windows, etc.
  • Portable to most leading commercial as well as open source compilers
  • Debugging facilities such as safe iterators, precondition and postcondition checking, and the ability to generate stack traces
  • Fully documented configuration and build infrastructure
  • Thorough, well-maintained documentation
  • Ten years of deployment in the world's most critical enterprise systems

Histórico da Linguagem C

A primeira versão de C foi criada por Dennis Ritchie em 1972 nos laboratórios Bell para ser incluído como um dos softwares a serem distribuídos juntamente com o sistema operacional Unix do computador PDP-11, na equipe certificada por Ken Thompson.

Ao ponto de vista técnico, o surgimento do C iniciou com a linguagem ALGOL 60, definida em 1960. ALGOL era uma linguagem de alto nível, que permitia ao programador trabalhar "longe da máquina", sem se preocupar com os aspectos de como cada comando ou dado era armazenado ou processado. Foi criado para substituir o FORTRAN. ALGOL não teve sucesso, talvez por tentar ser de muito alto nível em uma época em que a maioria dos sistemas operacionais exigiam do usuário um grande conhecimento de hardware.

Em 1967 surgiu CPL (Combined Programming Language) nas universidades de Londres e Cambridge com o objetivo, segundo a equipe do projeto, de "trazer ALGOL à terra", ou "manter contato com a realidade de um computador real". Da mesma forma de ALGOL, CPL não foi bem aceita, em especial pelos projetistas de sistemas operacionais que a consideravam difícil de implementar.

Ainda em 1967, em Cambridge, Martin Richards criou o BCPL (Basic CPL), uma simplificação do CPL, tentando manter apenas as "boas coisas do CPL".

Em 1970, Ken Thompson, chefe da equipe que projetou o UNIX para o PDP11 do Bell Labs, implementou um compilador para uma versão mais reduzida do CPL. Batizou a linguagem de B.

Tanto BCPL quanto B mostravam-se muito limitadas, prestando-se apenas para certas classes de problemas. Isto se fez sentir especialmente na primeira versão do PDP11, lançado no mercado em 1971. Um dos fatores que levou à isto foi a intenção do grupo responsável pelo UNIX de reescrevê-lo todo em uma linguagem de alto nível, e para isto B era considerado lenta.

Estes problemas levaram a que o projetista Dennis Ritchie, do Bell Labs, fosse encarregado de projetar uma nova linguagem, sucessora do B, que viria então, a ser chamada de C.

A linguagem C buscou manter o "contato com o computador real" e ainda sim dar ao programador novas condições para o desenvolvimento de programas em áreas diversas, como comercial, científica e de engenharia.

Por muitos anos (aproximadamente 10) a sintaxe (formato) tida como padrão da linguagem C foi aquela fornecida com o UNIX versão 5.0 do Bell Labs. A principal documentação deste padrão encontra-se na publicação "The C Programming Language", de Brian Kernighan e Dennis Ritchie (K&R), tida como a "bíblia da linguagem C".

O mais interessante desta versão de C era que os programas-fonte criados para rodar em um tipo de computador podiam ser transportados e recompilados em outros sem grandes problemas. A esta característica dá-se o nome de portabilidade. Com ela, uma empresa que desenvolve um programa pode fazê-lo rodar em diferentes computadores sem ter um elevado custo a cada vez que isto for feito.

Em 1985, ANSI (American National Standards Institute) estabeleceu um padrão oficial de C o chamado "C ANSI".