Académique Documents
Professionnel Documents
Culture Documents
índice
3 notícias Novos Horizontes
4 tema de capa
- GWT
a programar
11 - Processamento de texto Esta é a nossa primeira edição como coordenadores, depois da saída do Miguel
em AWK Pais anunciada na última revista. Parece-nos estranho, mas o diferente cargo
- Microsoft Windows
14 que agora ocupamos não tornou o ciclo de preparação desta edição diferente
Powershell
20 GNU/Linux de qualquer outro em que já estivemos envolvidos. Mas, no final de contas, é
- Linux Graphics Stack bastante natural que não sintamos grande diferença - coordenar, articular,
26 internet preparar cada edição da revista apenas a partir da vossa colaboração voluntária
foi o que sempre fizemos, e é o que pretendemos continuar a fazer agora, da
mesma forma, embora agora com uma diferente responsabilidade.
Por outro lado, é claro que o novo cargo não é exactamente igual àqueles que
desempenhámos durante todo este tempo. Acresce-nos agora a
equipa PROGRAMAR
responsabilidade de darmos a cara pelo projecto, de conseguirmos mantê-lo
coordenadores sem o suporte do Miguel Pais da maneira a que nos habituámos e é nessa
Joel Ramos frente que apostamos para tornar a mudança na equipa o menos brusca
Pedro Abreu possível. Desta forma, e no seguimento de algumas sugestões do antigo
coordenador, tencionamos mudar vários aspectos relativos à equipa.
editor
António Silva
Em primeiro lugar, e uma vez que nenhum de nós tem muita experiência na
gestão de uma equipa e de um projecto destas dimensões, vamos procurar
redacção
expôr todos os assuntos internos da revista a toda a equipa, envolvendo mais
Cristian Gonçalves
Fábio Ferreira
os restantes colaboradores na gestão desta. Assim, vamos também recolher
João Matos opiniões da equipa antes de tomar quaisquer decisões, porque vinte cabeças
Paulo Cabral pensam sempre melhor que duas.
equipa de revisão Em segundo lugar, também numa tentativa de procurar suporte adicional à
Bruno Oliveira nossa coordenação e de colmatar algumas falhas que nos têm sido apontadas,
Fernando Martins criámos dois grupos responsáveis, respectivamente, pela revisão linguística dos
Miguel Rentes artigos e pela divulgação da revista. Esperamos que a diferença se faça notar já
Nuno João a partir desta edição, com menos erros linguísticos e um discurso mais
Sérgio Lopes apropriado a uma publicação como a nossa, se possível culminando num maior
número de downloads.
equipa de divulgação
David Ferreira Finalmente, fruto dos resultados do recente inquérito do Portugal-a-
Programar, confirmámos que a mudança da imagem, quer da própria revista,
contacto quer da sua presença na web, é uma das nossas maiores prioridades. Este é um
revistaprogramar dos aspectos em que nos vamos concentrar ao longo das próximas edições,
@portugal-a-programar.org embora os resultados visíveis ainda possam tardar.
website Destaque ainda para o novo editor, António Silva, colaborador frequente do
www.revista-programar.info
projecto há já algum tempo. Resta-nos apenas esperar que a nova equipa
consiga manter o seu trabalho ao nível do que tem sido este projecto, cada vez
issn
mais uma referência para os programadores em Portugal e além fronteiras.
1647-0710
<2>
notícias
Próximos eventos
<3>
tema de capa
<4>
tema de capa
JAVA[script]?
Java para Javascript dizem vocês… Vamos, como se costuma
dizer, “take a look inside the Box”. O que acontece é que o
GWT possui um compilador Java-to-JavaScript responsável
por traduzir todo o vosso código Java para o respectivo
código JavaScript tendo em conta factores importantes
como optimização de espaço, ou seja, o código JavaScript
gerado, é percorrido e analisado de forma a determinar se
todo o código é utilizado, pelo que se houver alguma secção
que nunca é utilizada, esta é simplesmente descartada. Por
outro lado, são apenas incluídas as bibliotecas que são Ao abrir a respectiva pasta podemos reparar em dois
realmente utilizadas. aplicativos: o applicationCreator e o projectCreator, que já
Espaço e optimização foram factores considerados permitem, através da linha de comandos, criar a estrutura
fundamentais pela equipa que desenvolveu o GWT. da aplicação e do projecto respectivamente, para que este
possa ser então importado no Eclipse.
Java-to-JavaScript – Mas… Passo 2: Variáveis de Ambiente - Adicionar o
No meio de todo este processo engraçado existe um “Mas”, GWT ao PATH
ao qual precisamos de ter muita atenção. É que, como Uma vez que os aplicativos anteriores são invocados por
muitos sabem a linguagem Java é mais madura e mais linha de comandos e para evitar colocar todo o endereço
evoluída que a linguagem JavaScript e, como tal, existem sempre que estes são invocados, o melhor a fazer é
classes e bibliotecas da primeira que não são suportadas por adicionar a aplicação GWT ao PATH do sistema, ou seja, às
esta última. Falando concretamente no GWT 1.5 (última Variáveis de Ambiente. Para isso vá até ao menu “Iniciar”,
versão disponibilizada para a comunidade) que já é clique com o botão direito do rato sobre “O meu
compatível com Java 1.5, e onde por exemplo, genéricos já computador” e escolha “Propriedades”.
são suportados. Mas para uma visão geral e completa, o
melhor mesmo é consultar a documentação disponibilizada
pela Google (http://code.google.com/docreader/#p=google-
web-toolkit-doc-1-5&s=google-web-toolkit-doc-1-
5&t=RefJreEmulation).
<5>
tema de capa
Finalmente surge a janela das Variáveis de Ambiente. Clique Passo 3: Gerar a estrutura do Projecto
sobre a variável PATH e de seguida clique em “Editar”.
Uma vez que o GWT já foi adicionado ao PATH do sistema é
agora mais fácil invocar os aplicativos applicationCreator e
projectCreator na linha de comandos. As linhas executadas
para os aplicativos têm a seguinte sintaxe, para o
applicationCreator:
applicationCreator -eclipse
NOMEDOPROJECTO -out LOCALIZAÇÃO
gwt.myfirst.sample.NOMEDOPROJECTO.clien
t.NOMEDOPROJECTO
<6>
tema de capa
<7>
tema de capa
4. Para concluir o processo clique em “Finish” e pronto, já Cliquem em “Run” e a aplicação será então executada
está, a aplicação “Hello World” foi importada no Eclipse com através do Browser interno do GWT.
sucesso.
<8>
tema de capa
Bibliografia
Esta é a aplicação por defeito. A partir daqui podem
começar a desenvolver a vossa aplicação Web. Foi aqui [DevGuide Java Compatibility]
demonstrado o “modo manual” para trabalhar com a http://code.google.com/p/google-web-toolkit-doc-1-
plataforma para que pudessem entender um pouco a 4/wiki/DevGuideJavaCompatibility
estrutura e o processo de criação de um projecto GWT. No [GWT Brasil]
entanto, já existem plugins como o “GWTDesigner”, que http://www.gwt.com.br/
infelizmente não é freeware mas na qual é disponibilizado [GWT Tutorial - Introduction to GWT]
um trial, e que dá suporte ao desenvolvimento de aplicações http://developerlife.com/tutorials/?p=80
GWT sobre o Eclipse. O “IntelliJ Idea” (outro IDE Java) já [Google Documentation Reader – Google Web Toolkit]
permite também criar projectos GWT dando também muito http://code.google.com/docreader/#p=google-web-toolkit-
e bom suporte ao desenvolvimento deste tipo de aplicações. doc-1-5&s=google-web-toolkit-doc-1-5&t=GettingStarted
[GWT Designer]
http://www.instantiations.com/gwtdesigner/
Concluindo… [IntelliJ Idea - GWT]
O Google Web Toolkit é uma plataforma muito interessante http://www.jetbrains.com/idea/features/gwt.html
e sem dúvida será cada vez mais requisitada na medida em
cristian.goncalves@portugal-a-programar.org
Cristian Gonçalves
<9>
<10>
a programar
Neste caso não existe input, mas caso exista ele pode ser
enviado através do standard input.
print $2
Estrutura de um programa em AWK Para além das variáveis de campo é possível definir e
manipular variáveis (geralmente para guardar valores
Os programas em AWK são constituídos por uma série de intermédios). Estas variáveis não têm associado um tipo e
pares condição-acção, com a seguinte sintaxe: são automaticamente inicializadas com 0 ou ”” (string
O programa vai ler o input sob a forma de registos vazia), dependendo da forma como forem utilizadas.
Existem ainda, definidas por omissão as seguintes variáveis
condição { acção } especiais:
<11>
a programar
Neste caso a expressão regular equivale a uma string, mas BEGIN { sum = 0 }
podem ser usadas expressões regulares mais complexas: { sum += $1 }
END { print sum }
• /ˆprogramar/: Registos que começam com
programar;
• /programar$/: Registos que terminam com • O mesmo que a anterior, mas somando apenas os
programar; números menores que 20:
• /ˆprogramar$/: Registos que sejam iguais a
programar; BEGIN { sum = 0 }
• /[Pp]rogramar/: Registos que contêm Programar ou $1<20 { sum += $1 }
programar; END { print sum }
• /p@p|programar/: Registos contendo p@p ou
programar; • Média de uma lista de números:
• /[a-z]/: Registos contendo uma letra minúscula;
• /[ˆa-z]/: Registos não contendo uma letra minúscula;
BEGIN { sum = 0 }
• /[a-zA-Z]/: Registos contendo uma letra maiúscula ou
{ sum += $1 }
minúscula.
END { print sum/NR }
Estas condições procuram a expresão regular em todo o
registo. Para a procurar apenas num campo utiliza-se o • Números das linhas que contêm a palavra
operador ˜. Por exemplo, a seguinte condição verifica se o “programar” (case-sensitive):
segundo campo do registo contém uma letra maiúscula:
/programar/ { print NR }
$2˜[A-Z]
• O mesmo que a anterior, mas case-insensitive:
É também possível definir duas condições para delimitar um
bloco de texto. Por exemplo, a seguinte condição define o
/[Pp][Rr][Oo][Gg][Rr][Aa][Mm][Aa][Rr]/
bloco entre duas linhas que começam com programar:
{ print NR }
/ˆprogramar/,/ˆprogramar/
• Selecção das linhas ímpares:
Em seguida estão alguns exemplos simples de programas • Selecção apenas das linhas entre “INÍCIO” e “FIM”:
escritos em AWK:
/ˆINÍCIO$/,/ˆFIM$/ { print }
• Contagem de palavras:
BEGIN { words = 0 }
{
words += NF # Cada palavra é um
campo.
}
END { print words }
<12>
a programar
fabio.ferreira@portugal-a-programar.org
Fábio Ferreira
<13>
a programar
Set-Executionpolicy Unrestricted
Instalação
Para instalar o PowerShell, necessitam da Framework 2.0 da Comandos Essenciais
Microsoft, e de fazer download do respectivo pacote
PowerShell Get-Help
http://www.microsoft.com/windowsserver2003/technologies Get-Service
/management/powershell/download.mspx. Get-Command
Após a instalação do PowerShell, devem aceder à consola do
Windows PowerShell e executar o seguinte comando.
<14>
a programar
Capturar input
$a = Read-Host “Nome ?”
Write-Host "Olá " $a Nota: O conceito de pipe “|” está muito enraizado no uso do
Powershell !
<15>
a programar
Se desejarem apenas saber quais as propriedades, basta • Algo mais elaborado… Listar todos os meus serviços,
filtrarem pelo -MemberType exportá-los para HTML, separando por cores os que estão a
correr dos que estão parados.
get-process | select-object -first 1
| get-member -MemberType property get-service | ConvertTo-Html -Property
Name,Status | `
Eis o “dump” do último comando … foreach { if($_ -like
"*<td>Running</td>*") {$_ -replace
"<td>", "<tr bgcolor=green>"} `
Name MemberType else {$_ -replace "<tr>", "<tr
BasePriority Property bgcolor=red>"}} >.\get-service.html
Container Property
Id Property Com estes pequenos exemplos verificamos as enormes
potencialidades desta “linguagem”.
MachineName Property Agora um exemplo maior:
MainModule Property
………. Property
………. Property # Todos os ficheiros, recursivamente,
cujo tamanho seja maior que 20MB
Threads Property get-childitem -recurse c:\temp |
TotalProcessorTime Property where-object {$_.length -gt 2000000}
UserProcessorTime Property
# Todos os ficheiros *.Doc que não
VirtualMemorySize Property sejam readonly
get-childitem *.doc | foreach-object
VirtualMemorySize64 Property
{$_.Isreadonly = 0}
WorkingSet Property
WorkingSet64 Property # Ler um ficheiro
$a = Get-Content "c:\servers.txt"
foreach ($i in $a) {$i}
• Ver o tamanho do meu event log “System”
# Criar um ficheiro excel (2003) com
get-eventlog -list | where-object os dados de um serviço.
{$_.logdisplayname -eq "System"} $a = new-object -comobject
excel.application
$a.Visible = $True
• Listar os últimos 3 eventos “System”, formatando-os
$b = $a.Workbooks.Add()
$c = $b.Worksheets.Item(1)
get-eventlog system -newest 3 | $c.Cells.Item(1,1) = "Nome Serviço"
format-list $c.Cells.Item(1,2) = "Estado"
$i = 2
get-service | foreach-object{
• Listar todos os ficheiros excepto os temporários,
$c.cells.item($i,1) = $_.name;
imprimindo o nome e o tamanho
$c.cells.item($i,2) = $_.status;
$i=$i+1}
Get-childitem c:\* -exclude *.tmp | $b.SaveAs("c:\Test.xls")
select-object name, length $a.Quit()
# Who Am I
• Listar todos os serviços e exportá-los para HTML
[System.Security.Principal.WindowsIdent
ity]::GetCurrent().Name
get-service | convertto-html
<16>
a programar
<17>
a programar
# Fazer Logoff a uma máquina remota $MyInvocation Informação sobre o script actual
$strComputer = "Servidor-Blade"
$Host Host actual
(gwmi win32_operatingsystem -
ComputerName $strComputer $LastExitCode O codigo de saída da última aplicação
).Win32Shutdown(0) nativa que foi executada
# Forçar Shutdown
(gwmi
Ajudas
win32_operatingsystem).Win32Shutdown(12
) Caso necessitemos de aceder à ajuda de algum cmdlet,
basta invocar o comando get-Help
# Fazer Reboot
(gwmi
#ajuda sobre o cmdlet export-csv
win32_operatingsystem).Win32Shutdown(2)
get-Help export-Csv -full
<18>
a programar
paulo.cabral@portugal-a-programar.org
Paulo Cabral
<19>
gnu/linux
<20>
gnu/linux
específicas para cada placa gráfica, atingindo assim As novas versões do OpenGL também fazem uso de
aceleração gráfica 3D. As funcionalidades não suportadas funcionalidades como FBOs (“Framebuffer objects”) que
pela placa gráfica podem ser “emuladas” no processador, permitem fazer render directamente para uma zona de
utilizando a implementação do OpenGL via software, como memória da placa gráfica. Estas funcionalidades não são
previamente referido. bem suportadas pela arquitectura actual, pois não existe um
gestor de memória global para a placa gráfica. É por isso que
Hoje em dia as placas gráficas são bem diferentes do que grande parte dos drivers existentes no X não suportam
eram há uns anos atrás, quando grande parte da versões recente do OpenGL, à excepção dos drivers da
arquitectura do sistema gráfico X foi desenhada. Enquanto NVIDIA, que não utilizam grande parte da plataforma do X.
antigamente a placa gráfica dedicava grande parte da área
de silício a funcionalidades relacionadas com gráficos 2D, A arquitectura do X não foi desenhada com nenhum destes
hoje em dia essas funcionalidades são menos exploradas. factores em conta, o que leva a que ao longo dos anos
Grande parte da placa gráfica é dedicada para a tenham sido aplicados muitos remendos e soluções pouco
apresentação de gráficos 3D e processamento de shaders. eficientes para conseguir adicionar as novas funcionalidades
As placas gráficas modernas também apresentam suportadas pelos novos modelos de placas gráficas
capacidades consideráveis de memória de vídeo (chamada constantemente lançados no mercado.
VRAM) que precisa de ser gerida, tal como a memória
principal do sistema “RAM”. Vamos analisar mais profundamente a interacção do
hardware gráfico com o kernel e com o sistema gráfico.
<21>
gnu/linux
<22>
gnu/linux
<23>
gnu/linux
Esta biblioteca abstrai as diferentes APIs gráficas do modelo componente DRI2. Tal como o próprio autor diz, o objectivo
de programação do driver do ch ipset da placa não é substituir o X, mas sim tentar novas abordagens e
gráfica,permitindo futuras adições de APIs aos drivers sem ideias que mais tarde possam ser utilizadas no X.
esforço adicional de programação. Um exemplo seria criar
um “state tracker” para a API gráfica da Microsoft, Direct3D. Estado actual da remodelação
Isto seria útil para executar jogos através do Wine, que tem
de converter chamadas dos jogos para a API em chamadas Actualmente, diferentes famílias de placas gráficas
equivalentes em OpenGL. Ou até mesmo para facilitar o suportam diferentes funcionalidades. Algumas estão bem
“porte” de jogos de Windows para Linux sem necessidade de encaminhadas nesta remodelação, outras nem por isso,
re-escrever o código do motor de jogo. principalmente por falta de investimento das empresas. A
comunidade muitas vezes também não pode ajudar porque
Outro aspecto interessante e inovador do Gallium3D, é que as empresas não lançam os manuais de programação dos
utiliza outra biblioteca de código fonte livre chamada LLVM ch ips das placas, pelo que se torna uma tarefa
(Low-level Virtual Machine) para optimizar o código dos exageradamente difícil criar um driver de raiz.
programas (“shaders”) que correm nas placas gráficas. O
LLVM suporta muitos passos de optimização, e está a usar A Intel tem contribuído bastante para toda esta
financiado e usado pela Apple para este efeito no sistema remodelação, com o seu gestor de memória GEM e código
operativo Mac OS X e também como optimizador de código para kernel modesetting nos seus chips, ambos já
nos seus compiladores (o código gerado para o iPhone, por integrados na próxima versão do kernel do Linux (2.26.29).
exemplo, é optimizado por esta biblioteca). Além disso, continuam a lançar novas versões de drivers
Outros desenvolvimentos a que se têm assistido “in the
graphics land” são o aparecimento de novas APIs para
aceleração de decoding de vídeos utilizando a capacidade de
processamento da placa gráfica para libertar o processador
dessa carga. Por parte da NVIDIA, houve o lançamento da
API VDPAU (Video Decode and Presentation API for Unix)
que suporta vários formatos modernos (H.264, VC-1). Por
parte da Intel também apareceu o VA-API (Video
Acceleration API), outra API semelhante. A AMD (ATI)
também se encontra a desenvolver uma API para o mesmo
efeito, chamada XvBA (X-Video Bitstream Acceleration). O
tempo dirá qual irá prevalecer.
<24>
gnu/linux
joao.matos@portugal-a-programar.org
João Matos
<25>
internet
Smashing Magazine
Blog dedicado a oferecer aos seus leitores dicas e a informá-los das últimas
tendências e técnicas em todos os assuntos relacionados com o webdevelopment.
Um óptimo repositório de ideias gráficas, assim como de imagens grátis e
técnicas para a criação e manutenção de websites.
http://www.smashingmagazine.com/
ThemeForest
http://www.themeforest.net/
Wiki P@P
http://wiki.portugal-a-programar.org/
Joel on Software
http://www.joelonsoftware.com/
<26>
Queres participar na Revista
PROGRAMAR? Queres integrar este
projecto, escrever artigos e ajudar a
tornar esta revista num marco da
programação nacional?
Vai a
www.revista-programar.info
para mais informações em como
participar,
ou então contacta-nos por
revistaprogramar
@portugal-a-programar.org
Precisamos do apoio de todos para
tornar este projecto ainda maior...
Equipa PROGRAMAR
Um projecto Portugal-a-Programar.org
<27>