Escolar Documentos
Profissional Documentos
Cultura Documentos
Revista PROGRAMAR Numero 45
Revista PROGRAMAR Numero 45
EQUIPA PROGRAMAR
Coordenador
Antnio Pedro Cunha Santos
Editor
Antnio Pedro Cunha Santos
Design
Srgio Alves
Twitter: @scorpion_blood
Redaco
Fbio Pinho
Fernando Martins
Igor Nunes
Joo Silva
Lus Soares
Nuno Santos
Paulo Morgado
Sara Silva
Staff
Antnio Santos
Antnio Silva
Jorge Paulino
Rita Peres
Rui Gonalves
Contacto
revistaprogramar@portugal-aprogramar.org
Website
http://www.revista-programar.info
ISSN
1 647-071 0
Antnio Santos
A revista PROGRAMAR um projecto voluntrio sem fins lucrativos. Todos os artigos so da responsabilidade dos autores, no
podendo a revista ou a comunidade ser responsvel por alguma impreciso ou erro.
Para qualquer dvida ou esclarecimento poder sempre contactar-nos.
NDICE
TEMA DE CAPA
6
A PROGRAMAR
13
15
19
26
COLUNAS
34
40
43
ANLISES
46
47
COMUNIDADES
49
Comunidade NetPonto Criando aplicaes Windows Phone 8.1 e Windows 8.1 usando o App Studio da Microsoft
(Sara Silva)
NO CODE
55
EVENTOS
27 de Maio a 26 de Junho - OpenDays Engenharia Informtica IPVC
13 a 14 de Outubro RubyConf
Para mais informaes/eventos: http://bit.ly/PAP_Eventos. Divulga os teus eventos para o email eventos@portugal-a-programar.pt
NOTICIAS
Dar Voz ao AVC" aplicao informtica para ajuda a pessoas com AVC
Nem todas as pessoas que sofreram AVC e tm afasia podero usar a app, porque necessitam que a compreenso esteja
intacta e de possuir recursos intelectuais e cognitivos para
utilizar o tablet e a app.
Para Jorge Ribeiro, atual coordenador do curso de Engenharia Informtica, este e outros projetos de ex-alunos refletem o
conhecimento e as competncias adquiridas ao longo do curso, possibilitando-lhes reunir um conjunto de competncias e
know-how na rea da Engenharia Informtica. Reflete tambm o facto de permitir aos alunos estarem preparados para
saber fazer e por as mos na massa, refletindo-se o seu
desempenho na elevada taxa de empregabilidade e na boa
reputao do curso por parte dos empregadores, quer a nvel
regional, nacional e internacional.
Segundo Manuel Sousa, a falha afetava todo o domnio adobe.com, no sendo necessrio o utilizador estar registado no
site da companhia que produz o Photoshop para se tornar
vtima de um hacker que tentasse explorar a vulnerabilidade
Fonte IPVC.pt
TEMA DE CAPA
Estendendo uma aplicao criada no App Studio da Microsoft
TEMA DA CAPA
Estendendo uma aplicao criada no App Studio da Microsoft
Este artigo tem como objetivo explicar como extender uma
aplicao que foi inicialmente gerada pelo App Studio da
Microsoft.
No meu ltimo artigo, Criando aplicaes Windows Phone
8.1 e Windows 8.1 usando o App Studio da Microsoft, foi
apresentado o servio da App Studio, os vrios tipos de
templates para criar aplicaes, as vrias fases do
desenvolvimento da aplicao no servio e por fim a gerao
dos pacotes e a obteno do cdigo.
TEMA DA CAPA
EXTENDENDO UMA APLICAO CRIADA NO APP STUDIO DA MICROSOFT
Em seguida da pgina de detalhe:
possvel importar dados de um ficheiro CSV ou inserir manualmente, neste caso, apenas foi criada uma entrada manualmente.
De seguida, devemos editar a seo Twitter, para definir
uma entrada de dados para teste e para definir os Bindings
do DataTemplates.
TEMA DA CAPA
EXTENDENDO UMA APLICAO CRIADA NO APP STUDIO DA MICROSOFT
Para alterar esta pgina, para que use dados reais do Twitter
necessrio fazer algumas alteraes no projecto AppStudio.Data
TEMA DA CAPA
EXTENDENDO UMA APLICAO CRIADA NO APP STUDIO DA MICROSOFT
Em TwitterDataSource, devemos alterar o mtodo LoadData
para:
public
async
Task<IEnumerable<TwitterSchema>>
LoadData()
{
if (_data == null)
{
try
{
var serviceDataProvider =
new TwitterDataProvider();
_data = await serviceDataProvider.Load();
}
catch (Exception ex)
{
AppLogs.WriteError
("TwitterDataSource.LoadData",
ex.ToString());
}
}
return _data;
}
const
const
const
const
string
string
string
string
ConsumerKey = ".";
ConsumerSecret = "";
AccessToken = " ";
AccessTokenSecret = "";
App\packages\linqtotwitter.3.0.2\lib\portablewin8+net45+wp8 e deve-se selecionar a dll LinqToTwitterPcl.dll e assim o projeto AppStudio.Data ir ter a referncia do LinToTwitterPcl.
public TwitterDataProvider()
{
var auth = new SingleUserAuthorizer()
{
CredentialStore =
new SingleUserInMemoryCredentialStore
{
ConsumerKey = ConsumerKey,
ConsumerSecret =
ConsumerSecret,
AccessToken = AccessToken,
AccessTokenSecret =
AccessTokenSecret
}
};
}
return data;
Pgina de detalhes
TEMA DA CAPA
EXTENDENDO UMA APLICAO CRIADA NO APP STUDIO DA MICROSOFT
</ListView>
<ProgressBar Width="380" Height="40"
Foreground="White" VerticalAlignment="Top"
IsIndeterminate="True" Visibility="{Binding
ProgressBarVisibility}" />
</Grid>
</DataTemplate>
<!-- ListPhotoLeftDescription Item -->
<DataTemplate x:Key="TwitterItem">
<Grid Width="380">
<Grid.RowDefinitions>
<RowDefinition Height="80"/>
<RowDefinition Height="60"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Image Grid.Row="0" Grid.Column="0"
Margin="0, 8" Source="{Binding ImageUrl}"
MaxHeight="50" MaxWidth="50"
Stretch="UniformToFill"
VerticalAlignment="Center" />
<StackPanel Grid.Row="0"
Grid.Column="1">
<TextBlock Margin="16, 8, 5, 10"
Style="{StaticResource ItemHeaderWrapText}"
MaxHeight="50" VerticalAlignment="Center"
Text="{Binding Title,
Converter={StaticResource TextPlainConverter},
ConverterParameter=140}" />
<TextBlock Margin="16, 8, 5, 10"
Style="{StaticResource ItemSubheaderText}"
MaxHeight="110" VerticalAlignment="Top"
Text="{Binding Subtitle}" />
</StackPanel>
<TextBlock Grid.Row="1"
Grid.ColumnSpan="2" Margin="0, 0, 5, 0"
Style="{StaticResource ItemSmallText}"
MaxHeight="200" VerticalAlignment="Top"
Text="{Binding Description}" />
</Grid>
</DataTemplate>
Para a verso de Windows 8.1, podemos alterar
10
<DataTemplate x:Key="TwitterListSnapped">
<Grid Width="230">
<GridView ItemsSource="{Binding PreviewItems}" SelectedItem="{Binding NavigationItem,
Mode=TwoWay}"
SelectionMode="None"
IsSwipeEnabled="False"
ScrollViewer.VerticalScrollBarVisibility="Hidden"
ItemTemplate="{StaticResource
TwitterItemSnapped}">
</GridView>
<ProgressBar
Height="40"
Foreground="White" VerticalAlignment="Top" IsIndeterminate="True" Visibility="{Binding ProgressBarVisibility}" />
</Grid>
</DataTemplate>
<!-- ListPhotoLeftDescription Item -->
<DataTemplate x:Key="TwitterItem">
<Grid Width="480" Height="240">
<Grid.RowDefinitions>
<RowDefinition Height="0"/>
<RowDefinition Height="130"/>
<RowDefinition Height="160"/>
TEMA DA CAPA
EXTENDENDO UMA APLICAO CRIADA NO APP STUDIO DA MICROSOFT
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="140"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
E assim obtemos um novo aspeto da aplicao, para Windows Phone 8.1 iremos ter:
AUTOR
Escrito Por Sara Silva
Licenciada em Matemtica Especialidade em Computao, pela Universidade de Coimbra e Microsoft Certified Profissional Developer. Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps. O seu Blog
www.saramgsilva.com e o twitter @saramgsilva.
11
A PROGRAMAR
JSF - Parte 3 (Managed beans)
Pascal array de argumentos
Criar uma aplicao para Android com mapa
C# CRUD (Create, Read, Update & Delete)
A PROGRAMAR
JSF - Parte 3 (Managed beans)
Este o 3 artigo da srie. Assume portanto que j tem um
projeto de exemplo JSF a funcionar. altura de fazer algumas experincias, nomeadamente criar um backing bean.
Um backing bean uma classe Java que responde a pedidos e gere o estado dos componentes JSF. uma espcie
de servlet de alto nvel. Entre vrias outras funes, faz a
ligao camada dos servios que pode ser uma BD, um
servidor remoto ou outro. Uma aplicao pode conter mltiplos backing beans.
package pt.revista.programar;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class ClientesBean implements Serializable
{
String nome;
public string getNome(){
return nome;
}
Session: o bean existe por utilizador; til para dados referentes ao que utilizador est a fazer durante um periodo de
utilizao;
<h:form>
<h:inputText Value="#{clientsBean.nome}" />
<h:commandButton Acton="resultado
"value="enviar" />
</h:form>
Tal cdigo ir comunicar com o managed bean criado anteriormente. O boto ir submeter o formulrio.
6.
7.
8.
Para exemplificar como funciona um managed bean criemos um. Para efeitos de aprendizagem, comecemos com um
bean de sesso, o que apresenta menos desafios. Para tal,
aps ter o projeto JSF (criado no artigo anterior) aberto:
Agora, crie uma propriedade com getter/setter chamada nome. Ficar com o seguinte cdigo:
Clique com o boto direito do rato em Source Packages e faa New > Java Class:
<h:body>
<h:outputText value="Boa tarde #
{clientesBean.nome}" />
</h:body>
13
A PROGRAMAR
JSF - PARTE 3 (MANAGED BEANS)
9.
() uma espcie
de servlet de alto nvel. Entre vrias outras funes, faz a ligao camada dos servios que pode ser
uma BD, um servidor
remoto ou outro ()Um
managed bean representa o Controller no
padro MVC ()
Isto porque provvel que ele resolva o nosso problema e
no seja preciso escrever cdigo especfico. Seja chamadas
Ajax, personalizao do componente, utilizao da query
string, entre outros, o JSF j pensou nisso. Se precisamos
de um componente mais avanado, existem as bibliotecas
de componentes (ICEfaces, RichFaces, PrimeFaces), que
trazem componentes muito ricos, flexveis e funcionais.
improvvel que tenhamos de recorrer a cdigo JavaScript
para operaes comuns; a ideia de usar uma framework
server-side mesmo essa: ser tudo personalizvel por via
dos atributos XHTML dos componentes.
Espero que tenha gostado do artigo. Qualquer dvida, sintase vontade para me contactar. Consoante o interesse da
comunidade poderei escrever mais artigos sobre o tema,
nomeadamente sobre a integrao e utilizao do PrimeFaces.
AUTOR
Escrito por Lus Soares
Formado em Engenharia Informtica e de Computadores no Instituto Superior Tcnico (Licenciatura e Mestrado). Sou web
developer, _tendo j colaborado em projetos de telecomunicaes e dos _media. Gosto de linguagens de alto nvel, de reutilizar cdigo, de refactoring para simplificar. Gosto de ensinar. Escrevi um livro sobre jQuery (goo.gl/nw2Zb).
Os meus contactos esto em luissoares.com para qualquer dvida sobre o artigo ou outra informao.
14
A PROGRAMAR
Pascal array de argumentos
A definio da linguagem Pascal estabelece desde os seus
primrdios regras bastante rgidas acerca da passagem de
argumentos a uma funo ou procedimento. No seu conjunto, uma das consequncias destas regras a impossibilidade de se implementarem funes varidicas, isto , funes com um nmero indefinido de argumentos s quais
podemos fornecer virtualmente uma infinidade de argumentos, no havendo a restrio de ser possvel passar apenas
N argumentos em determinada ordem e com determinados
tipos.
Todo o cdigo presente neste artigo foi compilado recorrendo ao Free Pascal Compiler, verso 2.6.2, em ambiente Windows, sendo totalmente portvel para outras plataformas.
Todas estas funcionalidades compe aquilo a que se denomina de passagem de arrays abertos (em ingls, open
arrays): a possibilidade de receber um array sem conhecimento prvio da sua dimenso, bem como a possibilidade de
realizar a passagem parcial de um array.
15
A PROGRAMAR
PASCAL ARRAY DE ARGUMENTOS
Como primeira nota, h que referir que estruturas no podem
ser passadas nestes arrays. Apenas tipos de dados simples
(tipos numricos, alfanumricos e apontadores), objectos, classes e interfaces podem.
Vamos criar um procedimento que recebe um array of const e
nos d informaes acerca dos argumentos recebidos:
PROCEDURE FOO(ARGS : ARRAY OF CONST);
Quando o procedimento recebe este array, ocorre uma converso dos seus elementos para um record variante com caractersticas particulares. Segundo a documentao do Free Pascal,
esta a sua definio:
TYPE
PTRINT = LONGINT;
PVARREC = ^TVARREC;
TVARREC = RECORD
CASE VTYPE : PTRINT OF
VTINTEGER
:
(VINTEGER: LONGINT);
VTBOOLEAN
:
(VBOOLEAN: BOOLEAN);
VTCHAR
:
(VCHAR: CHAR);
VTWIDECHAR
:
(VWIDECHAR: WIDECHAR);
VTEXTENDED
:
(VEXTENDED: PEXTENDED);
VTSTRING
:
(VSTRING: PSHORTSTRING);
VTPOINTER
:
(VPOINTER: POINTER);
VTPCHAR
:
(VPCHAR: PCHAR);
VTOBJECT
:
(VOBJECT: TOBJECT);
VTCLASS
:
(VCLASS: TCLASS);
VTPWIDECHAR :
(VPWIDECHAR: PWIDECHAR);
VTANSISTRING :
(VANSISTRING: POINTER);
VTCURRENCY
:
(VCURRENCY: PCURRENCY);
VTVARIANT
:
(VVARIANT: PVARIANT);
VTINTERFACE :
(VINTERFACE: POINTER);
VTWIDESTRING :
(VWIDESTRING: POINTER);
VTINT64
:
(VINT64: PINT64);
VTQWORD
:
(VQWORD: PQWORD);
END;
Para tal, ser til controlar quantos argumentos foram passados. Esta informao pode ser obtida com a funo Length.
Caso no haja argumentos, iremos mostrar a mensagem
Sem argumentos.
PROCEDURE FOO(ARGS : ARRAY OF CONST);
VAR I : SMALLINT;
BEGIN
IF LENGTH(ARGS) > 0 THEN
// ANLISE DOS ARGUMENTOS
ELSE
WRITELN('SEM ARGUMENTOS.');
END;
Para proceder anlise dos argumentos, iremos iterar pelos
elementos do array. Sendo este um open array, cuja dimenso desconhecemos, necessitaremos das funes Low e
High que devolvem, respectivamente, os ndices menor e
maior do array (isto , as posies do primeiro e ltimo elemento).
FOR I:=LOW(ARGS) TO HIGH(ARGS) DO
// ANLISE DOS ARGUMENTOS
No sendo objectivo do presente artigo fazer uma explorao exaustiva de todos os tipos de dados possveis de serem
passados no array of const, iremos tratar apenas os mais
comuns e alguns que possuem algumas particularidades.
16
A PROGRAMAR
PASCAL ARRAY DE ARGUMENTOS
Sendo um Integer, o campo variante vinteger possui o valor
deste argumento. Notificamos acerca do tipo de dados do argumento, seguido do valor. O mesmo se aplica aos tipos de
dados Boolean e Char.
No entanto, alguns tipos de dados necessitam de uma forma
diferente de aceder ao valor. Alguns campos variantes so, na
verdade, apontadores (o seu tipo de dados comea por P, como por exemplo PShortString). Para alguns destes necessitamos de recorrer ao operador ^, o qual nos indica o valor armazenado no ponteiro que lhe fornecemos (apontador^). Para
outros casos, necessitaremos de fazer type casting uma vez
que os seus tipos de dados permitem a recepo de um apontador, devolvendo automaticamente o valor l armazenado (por
exemplo, o tipo de dados AnsiString).
Comecemos por analisar o tipo de dados Extended:
VTEXTENDED :
WRITELN('EXTENDED = ',
ARGS[I].VEXTENDED^);
Este um caso simples. No entanto, as strings tm algumas
diferenas. No Pascal moderno (leia-se Free Pascal, Object
Pascal e Delphi), no existe apenas um tipo de dados string. O
tipo de dados string apareceu aps o aparecimento do Pascal,
e apenas podia armazenar 255 caracteres. Hoje em dia, existem vrios tipos de dados da famlia da string, sendo os mais
proeminentes os seguintes:
17
A PROGRAMAR
PASCAL ARRAY DE ARGUMENTOS
Como ltima referncia, de notar o output para a varivel
sl: o procedimento informou-nos que esta uma classe,
mais propriamente a classe TStringList.
END
ELSE
WRITELN('SEM ARGUMENTOS.');
WRITELN;
END;
{$MODE OBJFPC}
PROGRAM ARTIGO45;
// DECLARAO STANDARD DA FUNO
PROCEDURE PRINTF(FMT : PCHAR;
ARGS : ARRAY OF CONST);
CDECL; EXTERNAL 'C';
BEGIN
PRINTF('%S IGUAL A %D.',
['DOBRO DE 3', 6]);
END.
{$MODE OBJFPC}
PROGRAM ARTIGO45;
USES ARGMGR, CLASSES;
VAR S : STRING = 'VARIAVEL S';
SL : TSTRINGLIST;
O Free Pascal oferece uma utilidade que outros compiladores, incluindo o prprio Delphi, no oferecem do mesmo modo. Com os arrays of const, possvel criar facilmente um
binding com a funo printf da linguagem C. O seguinte
cdigo indica como se deve declarar a funo do standard
da linguagem C, exemplificando de seguida o seu uso:
BEGIN
S := TSTRINGLIST.CREATE;
FOO([]);
FOO(['IGOR NUNES', 31]);
FOO([@FOO, NIL, FALSE, 'K']);
FOO([S, SL, 3.14]);
S.FREE;
END.
Conclumos assim a nossa viagem pelos arrays de argumentos, comummente designados apenas por arrays of const, os
quais nos permitem simular procedimentos e funes varidicos. No , decerto, uma das ferramentas mais utilizadas
pelos programadores de Free Pascal, Object Pascal e Delphi. Todavia, um instrumento til que est disposio, o
qual fornece imensa flexibilidade na passagem de argumentos a procedimentos e funes.
AUTOR
Escrito por Igor Nunes
Curioso na rea da tecnologia e em especial da programao, tem uma saudvel relao com o Object Pascal e conhecedor das bases de outras linguagens de programao, como Haskell, C, Python e VB.NET. No P@P, membro da Wiki Team
e Moderador Global.
18
A PROGRAMAR
Criar uma aplicao para Android com mapa
Android
Android um sistema operativo baseado no ncleo do Linux 6
para dispositivos mveis, desenvolvido pela Open Handset
Alliance, liderada pela Google. Segundo a Google, mais de 1
milho de utilizadores. Este sistema foi adoptado por vrias
marcas de topo de mercado HTC, Samsung, Sony, Motorola,
LG e Nokia.
Next
O Android est disponvel com cdigo aberto desde 21 Outubro de 2008. O Google publicou todo o cdigo sob a licena
Apache. No entanto, ele depende de uma autorizao da prprio Google para poder aceder biblioteca de aplicaes, Play
Store.
Com a API do Google Maps v2 para Android, possvel adicionar mapas com base em dados do Google Maps numa aplicao. A API, que lida automaticamente com acesso aos servidores do Google Maps, possui mtodos que permitem adicionar marcadores, polgonos, sobreposies, e ainda mudar a
viso de uma rea do mapa.
Ide
O Ide mais utilizado para o desenvolvimento de android o
Eclipse. A empresa multinacional de servios e software, Google, disponibiliza uma verso optimizada onde permite o download gratuito, em http://developer.android.com/sdk/index.html.
Aps descarregar o IDE tem reunidos os elementos necessrios para o desenvolvimento de aplicaes para o android.
Com o processo de download terminado, ir ter uma pasta de
trabalho contendo o nome: adt-bundle-windows-x86_6420131030 (pode diferir um pouco mediante a verso).
Passos a seguir:
Criar um projecto
19
Next
A PROGRAMAR
CRIAR UMA APLICAO PARA ANDROID COM MAPA
Next
Finish
20
Passos a seguir:
A PROGRAMAR
CRIAR UMA APLICAO PARA ANDROID COM MAPA
Passo a seguir:
Ok
Alterar Manifest
Neste momento o projeto est criado, necessrio configurar o ficheiro AndoridManifest.xml. Este ficheiro tem como
objetivo, entre outros, definir as permisses que a aplicao
ter. Imaginemos um exemplo prtico, os mapas da google
permitem saber a nossa localizao. Para isso o nosso
telemvel precisa de utilizar o gps ou a internet, e se essas
permisses no forem dadas neste ficheiro, essa funcionalidade no est disponvel.
Passos a seguir:
<permission
android:name="<NAMESPACE>
.permission.MAPS_RECEIVE"
android:protectionLevel="signature"/>
<uses-feature android:glEsVersion="0x00020000"
android:required="true"/>
<uses-permissionandroid:name="<NAMESPACE>
.permission.MAPS_RECEIVE"/>
<uses-permissionandroid:name="android.permission.
INTERNET"/>
<uses-permissionandroid:name="android.permission.
WRITE_EXTERNAL_STORAGE"/>
<uses-permissionandroid:name="com.google.android.
providers.gsf.permission.READ_GSERVICES"/>
<uses-permissionandroid:name=
"android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission
.ACCESS_FINE_LOCATION"/>
<uses-permissionandroid:name="android.permission
.READ_CONTACTS"/>
<uses-permissionandroid:name="android.
permission.ACCESS_NETWORK_STATE"/>
21
A PROGRAMAR
CRIAR UMA APLICAO PARA ANDROID COM MAPA
No
AndroidManifest.xml
trocar
onde
<NAMESPACE> pelo que acabas de copiar
tem
Obter a API_Key
APIs & auth > Credentials > Create New Key > Andorid Key
Passos a seguir:
A chave do Google Maps API v2 baseada num pequeno formulrio de certificado digital do aplicativo, conhecido como
SHA-1 fingerprint. Porque a fingerprint nica, o Google
Maps pode us-la como forma de identificar a sua aplicao.
(foste buscar isto a algum lado?)
Existem dois tipos de certificado: o certificado de debug ( o que
vamos usar e serve apenas para propsito de testes e desenvolvimento) e certificados gerados que nos permitem, por
exemplo, colocar a aplicao no Google Play.
Passos a seguir:
Abrir o projeto > APIs & auth > APIs > Activar o Google
Maps Android API v2
22
A PROGRAMAR
CRIAR UMA APLICAO PARA ANDROID COM MAPA
<?xmlversion="1.0"encoding="utf-8"?>
<fragmentxmlns:android="http://schemas.android.com/
apk/res/android"
android:id="@+id/map"
android:name=
"com.google.android.gms.maps.MapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
Alterar a Activity
Passos a seguir:
Uma Activity representa uma interface que nos apresentada e, alm do ficheiro XML que define o aspeto grfico, existe um ficheiro .JAVA onde definido o cdigo das funcionalidades.
Neste caso, bastar codificarmos o mtodo onCreate que faz
parte do ciclo de vida de uma atividade e executado sempre que a atividade mostrada ao utilizador. Neste mtodo o
que iremos fazer associar o layout XML que acima definimos.
Passos a seguir:
23
A PROGRAMAR
CRIAR UMA APLICAO PARA ANDROID COM MAPA
package com.programar.mapa;
import
import
import
import
Ok
Start Avd
Ok
com.google.android.gms.maps.GoogleMap;
com.google.android.gms.maps.MapFragment;
android.app.Activity;
android.os.Bundle;
New
24
A PROGRAMAR
CRIAR UMA APLICAO PARA ANDROID COM MAPA
No final deste tutorial possvel visualizar no emulador ou dispositivo mvel um mapa como este.
AUTOR
Escrito por Joo Silva
natural de Viana Castelo. Atualmente aluno do curso de Engenharia Informtica no Instituto Politcnico de
Viana do Castelo (IPVC). Teve o primeiro contacto com programao para dispositivos mveis nas Unidades
Curriculares de Projeto e Computao Mvel do referido curso.
25
A PROGRAMAR
C# CRUD (Create, Read, Update & Delete)
Introduo
Estrutura
2.
3.
Resultado final
Neste artigo necessrio a criao de duas classes distintas. A primeira classe (dbconfig) ir tratar da configurao do
acesso base de dados. A segunda classe (dbhandler) ir
permitir a realizao de queries / operaes CRUD.
O artigo tambm exemplifica a utilizao do controlo DataGridView em pleno, usufruindo da possibilidade de imagens
e listas de itens dentro do mesmo. Todo o cdigo abaixo
escrito ser utilizado dentro dos eventos deste controlo, pelo
que no ser necessrio a adio de mais nenhum objecto
ao formulrio.
class dbconfig
{
private
private
private
private
string
string
string
string
server;
user;
password;
database;
O leitor poder fazer download do projecto para fins educacionais (ver link 4).
26
A PROGRAMAR
C# CRUD (CREATE, READ, UPDATE & DELETE)
No construtor da classe desde logo foi assumido quais os valores por defeito de ligao base de dados. No entanto dada
a possibilidade de, aquando a iniciao da classe, definir a
configurao desejada.
/* output: 'tabela' */
string table = matches[0].Value.Replace
("FROM ", "");
this.dAdapter.Fill(this.dSet, table);
return this.dSet;
}
A utilizao de um DataSet bastante benfico (em comparao com o DataReader) por vrias razes:
Funo set() Realiza as operaes de Criar (Create), Actualizar (Update) e Eliminar (Delete).
Para que a utilizao desta classe funcione em pleno ser necessrio adicionar quatro referncias.
dbconfig db;
MySqlConnection connection;
MySqlCommand command;
MySqlDataAdapter dAdapter;
DataSet dSet;
if (this.connection.State !=
ConnectionState.Open) {
this.connection.Open();
}
public dbhandler()
{
db = new dbconfig();
connection = new MySqlConnection
(db.get());
}
return this.command.ExecuteNonQuery();
// retorna o nmero de linhas afectadas
if (__param != null)
{ this.command.Parameters.AddRange(__param); }
this.dAdapter= new MySqlDataAdapter
(this.command);
this.dSet = new DataSet();
Referncias e Variveis
Para que tudo funcione em pleno necessrio adicionar a
referncia do MySQL
using MySql.Data.MySqlClient;
27
A PROGRAMAR
C# CRUD (CREATE, READ, UPDATE & DELETE)
Bem como adicionar algumas variveis privadas a este formulrio:
private libs.dbhandler dbQuery =
new libs.dbhandler();
/* Retm o indce e ID respectivos a cada jogador
na DataGridView */
private Dictionary<int, int>
_dicJogadores = new Dictionary<int, int>();
};
this.dataGridView1.Columns.AddRange(foto, nome,
data_nascimento, valor_estimado, clube);
this.dataGridView1.RowTemplate.MinimumHeight = 50;
Como o leitor poder comprovar, neste trecho de cdigo
apenas foram delineadas as queries necessrias construo da DataGridView, assim como toda a estrutura das colunas. Falta ento adicionar dados informativos provenientes
da base de dados.
Eventos e Funes
No evento Load vamos criar toda a estrutura da DataGridView,
desde os tipos de colunas (Textbox, Image e Combobox), bem
como selecionar o contedo proveniente da base de dados.
if (dSetJogadores.Tables[0].Rows[i].
ItemArray[4].ToString() != string.Empty){
_img = new Bitmap(imageResize(new
Bitmap(Application.StartupPath + "/imagens/
jogadores/" +dSetJogadores.Tables[0].
Rows[i].ItemArray[4].ToString()),
new Size(64, 64)));
}
E por fim os eventos onClick e MouseDown vo criar uma estrutura capaz de eliminar informao bem como de actualizar a
foto de um jogador, tudo isto atravs da criao, em run-time,
de um ContextMenuStrip atribudo DataGridView.
Ler dados
this.dataGridView1.Rows.Add(new
object[] { _img, _nome, _datanascimento,
_valorestimado, _clube });
}
E finalizamos o evento load. Recapitulando o processo: definimos as queries; definimos a estrutura da DataGridView;
atribumos a informao das queries s linhas.
Se o leitor correr a aplicao neste momento, possivelmente
dar-lhe- erro na funo imageResize(), pois esta ainda no
foi adicionada ao formulrio.
28
A PROGRAMAR
C# CRUD (CREATE, READ, UPDATE & DELETE)
Adicionar dados
Para que seja possvel a adio de novas linhas directamente
na base de dados, precisamos de dois eventos para garantir a
fiabilidade dos dados e evitar possveis erros.
private void dataGridView1_UserAddedRow(object
sender, DataGridViewRowEventArgs e)
{
_userAddedRowIndex =
this.dataGridView1.CurrentRow.Index;
}
if (e.RowIndex != _userAddedRowIndex)
{
if(e.RowIndex == _userAddedRowIndex){
DateTime _datanascimento =
(this.dataGridView1.Rows[e.RowIndex].
Cells[2].Value == null ? DateTime.Today :
Convert.ToDateTime(this.dataGridView1.Rows
[e.RowIndex].Cells[2].Value.ToString()));
double _valorestimado =
(this.dataGridView1.Rows[e.RowIndex].
Cells[3].Value == null ? 0.0f :
Convert.ToDouble(this.dataGridView1.Rows
[e.RowIndex].Cells[3].Value.ToString()));
MySqlParameter[] _sqlParams =
new MySqlParameter[] {
new MySqlParameter("@nome", _nome),
MySqlParameter[] _sqlParams =
new MySqlParameter[] {
new MySqlParameter("@nome", _nome),
new MySqlParameter
("@datanascimento",_datanascimento),
new MySqlParameter("@valorestimado",
_valorestimado),
new MySqlParameter("@id_clube", _id_clube)
};
new MySqlParameter
("@datanascimento",_datanascimento),
new MySqlParameter("@valorestimado",
_valorestimado), new MySqlParameter
("@id_clube", _id_clube),
new MySqlParameter("@id", _dicJogadores
[e.RowIndex])
};
dbQuery.set("UPDATE jogadores SET nome =
@nome, data_nascimento = @datanascimento,
valor_estimado = @valorestimado, id_clube =
@id_clube " + "WHERE id = @id", _sqlParams);
_dicJogadores.Add(e.RowIndex, _lastid);
}
}
O leitor decerto notar que nesta insero no est incutida a
coluna foto, por razes estruturais. A insero da foto ser
29
A PROGRAMAR
C# CRUD (CREATE, READ, UPDATE & DELETE)
(object _sender, EventArgs _e) {
eliminarLinha_click(sender, e, _hit.RowIndex); };
_alterarFoto.Click += delegate(object
_sender, EventArgs _e) { alterarFoto_click(sender,
e, _hit.RowIndex); };
}
}
O cdigo acima representa a criao do controlo ContextMenuStrip apenas quando o boto direito do rato for pressionado. Verifica se no se trata de uma nova linha, pois caso se
trate no faz sentido mostrar este controlo e por fim cria dois
mtodos capazes de tratar da informao da forma que desejarmos.
private void eliminarLinha_click(object sender,
EventArgs e, int index)
{
int id = _dicJogadores[index];
MySqlParameter[] _sqlParams =
new MySqlParameter[] {
new MySqlParameter("@id", _dicJogadores
[index])
};
Eliminao dados
Para que tudo funcione na perfeio, vamos precisar de criar
dois mtodos de click (Eliminar linha e Alterar foto) e utilizar o
evento MouseDown que a DataGridView nos fornece para criar
o ContextMenuStrip.
Sempre que elimina uma linha da base de dados necessrio tambm eliminar essa mesma linha do dicionrio de jogadores de forma a manter ambas as estruturas de dados correctas.
this.dataGridView1.ClearSelection();
this.dataGridView1.Rows
[_hit.RowIndex].Selected = true;
this.dataGridView1.ContextMenuStrip =
null; // Limpa os ContextMenuStrip existentes
if (_opf.ShowDialog() ==
System.Windows.Forms.DialogResult.OK) {
int id = _dicJogadores[index];
MySqlParameter[] _sqlParams =
new MySqlParameter[] {
new MySqlParameter("@id", _dicJogadores
[index]), new MySqlParameter("@foto", id +
"/" + _opf.SafeFileName.ToString())
/* O caminho correcto a inserir na base
de dados: id/nome_ficheiro.extenso */
};
_menu.Items.AddRange(new ToolStripItem[]
{ _eliminarLinha, _alterarFoto });
this.dataGridView1.ContextMenuStrip = _menu;
/* enviado por parmetro o indce da
linha actual */
_eliminarLinha.Click += delegate
30
A PROGRAMAR
C# CRUD (CREATE, READ, UPDATE & DELETE)
(_path);
// Caso no exista, ir criar a pasta
/* Copia o ficheiro seleccionado
para a pasta do jogador */
System.IO.File.Copy(_opf.FileName,
_path + _opf.SafeFileName, true);
this.dataGridView1.Rows[index].Cell[0].
Value = new Bitmap(imageResize
(new Bitmap(_path + _opf.SafeFileName),
new Size(64, 64)));
Por fim, no se permite a seleco de ficheiros que no preencham os requisitos do filtro; actualiza-se a informao na base
de dados; envia-se a foto selecionada para a pasta do jogador;
actualiza-se a clula da foto da DataGridView.
Concluso
Neste artigo construmos uma estrutura vantajosa em termos
de utilizao de classes, seguindo um modelo mais orientado a
objectos. Definimos tambm um modelo bastante reduzido em
termos de cdigo, mantendo mesmo assim o melhor da segurana e rapidez.
Links de referncia
A primeira classe
(dbconfig) ir tratar da
configurao do acesso base de dados. A
segunda
classe
(dbhandler) ir permitir
a realizao de
queries
CRUD.
operaes
AUTOR
Escrito por Fbio Pinho
Programador entusiasta nas mais diversas linguagens, sendo PHP, .NET e Java (Android) as suas preferncias.
site pessoal: http://stuffpinho.com
31
COLUNAS
C# - Novas Funcionalidades Do C# 6.0 Anteviso De Abril De 2014
Visual(NOT)Basic - Mtodos de extenso o que preciso, como quero
Core Dump [12] - Programador ^ Gestor
C#
C# - NOVAS FUNCIONALIDADES DO C# 6.0 ANTEVISO DE ABRIL DE 2014
ter qualquer valor para alm do valor por omisso do seu
tipo.
Introduo
No passado evento //build/, a Microsoft disponibilizou uma
verso de anteviso da verso 6.0 da linguagem de programao C#.
Trata-se de uma verso preliminar, pelo que algumas funcionalidades podero sofre alteraes, no fazer parte da verso final ou novas funcionalidades podero ainda ser adicionadas.
Esta nova verso da linguagem inaugura tambm uma nova
postura da Microsoft no que diz respeito ao cdigo aberto e
participao da comunidade.
Construtores Primrios
Alm do cdigo fonte, foram publicadas as notas das reunies de desenho, onde se pode consultar o racional por detrs de cada nova funcionalidade.
Nota: O desenho desta funcionalidade foi alterado e seguese a descrio do novo desenho. No entanto, no foi possvel ter estas alteraes na verso de anteviso, pelo que,
podero ser encontradas situaes que correspondem
semntica anterior: os parmetros so capturados implicitamente e no existe sintaxe para a captura explcita.
Inicializao De Auto-Propriedades
Passa a ser possvel adicionar inicializadores a autopropriedades (auto-property) da mesma forma que se pode adicionar a campos (field):
Obter o mesmo efeito sem construtores primrios teria requerido campos privados para guardar os valores de nome e
apelido, um construtor explcito para os inicializar e um corpo
de leitura para Nome e Apelido para os expor:
34
C#
C# - NOVAS FUNCIONALIDADES DO C# 6.0 ANTEVISO DE ABRIL DE 2014
trutores primrios e auto-propriedades apenas de leitura
inicializadas.
O objetivo desta funcionalidade expressar os tipos de forma mais concisa. Note-se, no entanto, que tambm remove
uma diferena importante na linguagem entre tipos mutveis
e tipos imutveis: as auto-propriedades eram uma forma
abreviada apenas disponvel se se estivesse na disposio
de tornar a classe mutvel e, por isso, a tentao para o
fazer por omisso era enorme. Agora, com autopropriedades apenas de leitura, mutvel e imutvel passam
a estar em p de igualdade.
Parmetros Campo
Nota: Os campos parmetro (field parameters) no funcionam na corrente verso de anteviso.
Construtores explcitos podem chamar-se entre si, mas direta ou indiretamente tero de chamar o construtor primrio no
final porque o nico construtor que pode chamar o inicializador base().
Por omisso, os parmetros de um construtor primrio existem apenas em tempo de inicializao. Membros como as
propriedades e mtodos no se podem a eles referir porque,
quando so chamados, o objeto j foi construdo e o parmetro desapareceu.
Incializador Base
O construtor primrio chama sempre, implcita ou explicitamente, o inicializador base. Se no for especificado um inicializador base, como com todos os construtores, ser chamado o construtor base sem parmetros.
A forma de explicitamente chamar o inicializador base passando uma lista de argumentos na especificao da classe
base:
class BufferFullException()
: Exception("Buffer full")
{
}
Tipos Parciais
Para evitar isto, existe uma sintaxe para capturar explicitamente em campos os parmetros dos construtores primrios
Using Static
35
C#
C# - NOVAS FUNCIONALIDADES DO C# 6.0 ANTEVISO DE ABRIL DE 2014
Esta funcionalidade permite especificar um tipo numa clusula using, tornando todos os membros estticos acessveis
desse tipo sem qualificao no cdigo subsequente:
using System.Console;
using System.Math;
class Program
{
from s in strings
select int.TryParse(s, out int i) ? i : -1;
Intuitivamente, o escopo das variveis declaradas numa expresso estendese para o bloco exterior mais prximo,
instruo estruturada (como if ou while) ou instrues embebidas (como o corpo de um if ou while). Tambm corpos de
expresses lambda, clusulas de consulta e inicializadores
de campos e propriedades atuam como limites de escopo.
Mtodos De Estenso
Os mtodos de extenso so mtodos estticos. Isto levanta
a questo de como uma diretiva using static os vai expor.
Como um mtodo de topo no escopo? Como um mtodo de
extenso? Ambos? Vejamos um exemplo:
Na maioria dos casos, as expresses de declarao permitem var apenas se existir um inicializador de que se possa
inferir o tipo, tal como nas instrues de declarao. No entanto, se a declarao da expresso passado num parmetro de sada (out), ser tentada a resoluo de sobrecargas (overlaod resolution) sem o tipo desse argumento e inferido o tipo a partir do mtodo selecionado:
Filtros De Excees
Os filtros de excees j existiam no Visual Basic e no F# e
agora existem tambm no C#. Este o aspeto que tero:
try
{ }
catch (Exception e) if (myfilter(e))
{
Expresses De Declarao
As expresses de declarao permitem declarar variveis
locais no meio de expresses, com ou sem inicializao.
36
C#
C# - NOVAS FUNCIONALIDADES DO C# 6.0 ANTEVISO DE ABRIL DE 2014
Literais Binrios E Separadores De Dgitos
xador que receba uma nica chave do tipo string. No entanto, dada a fraca receo pela comunidade desta funcionalidade, foi decidida a sua remoo na verso final.
No C# 5.0 a palavra-chave await no era permitida em blocos catch e finally porque se pensava no ser possvel a
sua implementao. Finalmente descobriuse como poderia
ser implementado.
}
catch (ResourceException e)
{
// Agora pode-se fazer isto ...
await res.LogAsync(res, e);
}
finally
{
// ... e isto
if (res != null) await res.CloseAsync();
}
No caso de as chaves serem strings, algumas vezes querese pensar nelas quase como sendo um tipo fraco de membros do objeto. Este o caso, por exemplo, quando se tem
dados semiestruturados em formatos de comunicao como
JSON, que como se fosse um objeto mas no fortemente
tipado em C#. adicionada nesta verso uma sintaxe para
membros indexados, que permitem fazer de conta que uma
chave literal string como se fosse um membro:
Funcionalidades No Implementadas
Algumas funcionalidades no foram ainda implementadas
mas esto j planeadas ou em considerao para verso
final do C# 6.0. Sendo assim, algumas funcionalidades podero ainda sofrer alteraes ou ser retiradas em funo do
feedback da comunidade.
37
C#
C# - NOVAS FUNCIONALIDADES DO C# 6.0 ANTEVISO DE ABRIL DE 2014
Inicializadores De Eventos
Associatividade Esquerda
Esta opo significaria que sequncias do tipo a?.b?.c seriam equivalentes a ((a?.b)?.c). Uma consequncia desta
abordagem que, uma vez usado o operador de propagao de null (?.), teria de ser usado em todas os acessos posteriores na sequncia porque o valor sobre o qual se estaria
a aceder ao membro seguinte poderia ser nulo (null).
Associatividade Direita
Esta opo significaria que sequncias do tipo a?.b?.c seriam equivalentes a (a?(.b?.c)). Uma consequncia desta
abordagem que o operador de propagao de null (?.) pode ser usado em combinao com o operador . em qualquer
combinao. Cdigo como o seguinte seria vlido:
Operador ;
Esta funcionalidade ainda em considerao permitiria que
uma sequncia de instrues seja combinada de forma a
formar uma nica instruo lgica:
(var x = Foo(); Write(x); x*x)
int? l = cliente?.Nome.Length;
Params IEnumerable
()a
Microsoft
disponibilizou uma verso de anteviso da
verso 6.0 da linguagem de programao
C# () inaugura tambm uma nova postura
da Microsoft no que diz
respeito
ao
cdigo
aberto ()
is \{p.Age}
years old."
Trata-se de uma funcionalidade que tem gerado alguma discusso que pode ser seguida aqui.
Operador NameOf
Esta funcionalidade ainda em considerao permitiria a obteno do nome de um membro de um tipo semelhana de
tipeof:
string s = nameof(Console.Write);
Propagao De Null
Esta funcionalidade planeada vai permitir escrever cdigo
mais conciso quando est em causa um acesso encadeado
em que podem ocorrer valores null.
No caso mais simples, ir permitir quando agora se escreve:
var temp = GetCustomer();
string name = (temp == null) ? null : temp.name;
Private Protected
A combinao dos modificadores de acessibilidade protected
e internal em C# corresponde ao modificador de acesso FamillyOrAssembly da CLR. A aplicao deste modificador
significa que este membro ou tipo apenas acessvel por
tipos que estejam na mesma assembly do tipo declarante ou
sejam derivados deste.
passar a escrever:
var temp = GetCustomer()?.name;
Mas como que este novo operador (?.) se vai comportar
em sequncias? Existem duas hipteses: ou associativo
esquerda ou associativo direita.
38
C#
C# - NOVAS FUNCIONALIDADES DO C# 6.0 ANTEVISO DE ABRIL DE 2014
Uma vez que a CLR tambm tem um modificador de acesso
FamillyAndAssembly que faz com que o membro seja acessvel apenas por tipos que estejam na mesma assembly do
tipo declarante and sejam derivados deste.
A proposta inicial foi a utilizao combinada dos modificadores private e protected, mas no foi bem recebida pela comunidade. Aps longa discusso pblica, ainda no h, data
da escrita deste artigo, uma deciso definitiva. Foi criado um
inqurito para escolher a opo mais consensual, mas poder j no estar disponvel na altura que este artigo for publicado.
Recursos
Concluso
Esta verso no introduz funcionalidades fraturantes como
foi o caso do LINQ ou async-await porque os esforos da
equipa tm estado na nova plataforma de compiladores. Mas
mesmo assim foram introduzidas algumas funcionalidades
//build/
Anders Hejlsberg
Projeto Roslyn
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electrnica e Telecomunicaes (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informtica pela Faculdade de Cincias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funes relacionadas com o desenvolvimento, distribuio e manuteno de software h mais de 10 anos. Participa
em diversas comunidades nacionais e internacionais (pontoNETpt, NetPonto, SharePointPT, SQLPort, Portugal-a-Programar,
CodeProject, CodePlex, etc.). Pelo seu contributo para com estas comunidades, a Microsoft premeia-o com o prmio MVP
(C#) desde 2003. ainda co-autor do livro LINQ Com C# da FCA. http://PauloMorgado.NET/ - @PauloMorgado
39
S para estarmos a pensar na mesma situao, quando escrevo mtodos auxiliares estou a pensar naqueles pequenos
mtodos que ajudam a desempenhar um ou vrios processamentos sobre um tipo, como por exemplo, validar uma
String, formatar uma String, verificar se um nmero mpar,
remover duplicados de um array, contar o nmero de palavras de uma String, e por a adiante.
Isto significa que podemos at acrescentar mtodos diretamente na classe String ou Integer? Bom, sim!
Note-se que os mtodos de extenso no se tratam de material novo! Foram implementados na verso 9 do VB (includa
no Visual Studio 2008).
Vou utilizar, a ttulo de exemplo, um mtodo auxiliar que coloca um ponto final em uma frase (String) e uma letra
grande no incio, por exemplo: gostava de escrever melhor passa para Gostava de escrever melhor.
So no entanto, (e por razes que desconheo) pouco conhecidos, se bem que tenha a certeza de que j tenham
usado extenses centenas de vezes sem darem por isso.
<Extension()>
Public Sub FazerNada(Str As String)
'fao o que prometo!
End Sub
um mtodo de extenso da classe String.
classe
CompilerServices
em
System.Runtime.CompilerServices. O mdulo que usarem para
descrever as extenses dever importar este namespace
para facilitar o uso do atributo.
O tipo que o mtodo pretende
do primeiro parmetro, o que
extenso tenha, no mnimo,
mais parmetros, j iro fazer
do.
Estamos a falar, portanto,
A primeira grande vantagem de utilizar extenses, em detrimento de mtodos auxiliares, o facto de estas se encontra-
de magia do compilador!
40
Invocao: MinhaFrase.Pontuar()
frase = Pontuar(Pontuar(frase))
O resultado da invocao interior era utilizado como alvo de
trabalho
na
invocao
exterior.
Com extenso, a sintaxe torna-se muito mais natural, e est
acompanhada por o Intellisense:
<Extension()>
Public Sub [Debug](valor As Object)
Dim momento As DateTime = Now()
Dim output As New System.Text.StringBuilder("[")
output.Append(momento.ToShortDateString)
output.Append("][")
output.Append(momento.ToShortTimeString)
output.Append("] Dump de varivel: ")
output.Append(valor.ToString)
System.Diagnostics.Debug.WriteLine
(output.ToString)
End Sub
frase = frase.Pontuar.Pontuar()
Frase uma String que processada com a primeira extenso e produz uma String que processada com a extenso
que lhe sucede.
Existe uma inegvel vantagem em utilizar extenses em tudo
o que toca, no s organizao e legibilidade do cdigo,
mas tambm ao vosso ndice de produtividade. Enfim, todas
as vantagens que se podem ter com a utilizao do Intellisense, aplicadas a um pedao de cdigo escrito para trabalhar tipos que no controlamos diretamente. E quem diz mtodos auxiliares diz qualquer tipo de mtodo. Manda a necessidade e criatividade.
Invocao: MinhaVariavel.Debug()
Uso os parntesis retos porque Debug j o nome de uma
classe existente nos namespaces importados por defeito.
Ainda que neste caso no houvesse perigo de coliso, boa
prtica.
Com uma simples invocao, o mtodo regista em debug a
data e hora, seguida da representao.
41
<Extension()>
Public Sub Falar(texto As String)
Dim s As New System.Speech.Synthesis.
SpeechSynthesizer()
s.Speak(texto)
End Sub
Invocao: TextoAFalar.Falar()
Estendemos a String e usamos o sintetizador de discurso
para falar o contedo da String.
<Extension()>
Public Function Palavras(ByVal texto As String) As
Integer
While texto.Contains(" ") Or
texto.Contains(vbTab)
texto = texto.Replace(" ", " ").
texto.Replace(vbTab, " ")
End While
Dim p As String() = texto.Split(" ")
Dim inc As Integer = 0
For Each tmp As String In p
If tmp.Length > 1 Then inc += 1
Next
Return inc
End Function
Devolve: {2,4,9}
Como identificar extenses que j usava?
J tiveram, certamente, oportunidade de reparar que a extenso identificada na caixa de sugestes com um smbolo
ligeiramente diferente do smbolo do mtodo: a extenso
apresenta uma pequena seta escura, no sentido descendente, do lado direito.
Invocao: AMinhaFrase.Palavras()
Por fim, e como exemplo mais interessante, podemos jogar
com os tipos genricos e implementar um mtodo semelhante ao Where das colees de IEnumerable, mas para aplicar
em arrays:
<Extension()>
Public Function Filtrar(Of T)(arr As T(), filtro
As Func(Of T, Boolean)) As Array
Dim ret(0) As T
For i As Integer = 0 To arr.Length - 1
Dim tmp As T = arr(i)
If filtro.Invoke(tmp) Then
If i < arr.Length - 1 And i <> 0 Then
ReDim Preserve ret(ret.Length)
ret(ret.Length - 1) = tmp
End If
Next
Return ret
End Function
AUTOR
Escrito por Srgio Ribeiro
Curioso e autodidata com uma enorme paixo por tecnologias de informao e uma saudvel relao com a .NET Framework.
Moderador global na comunidade Portugal@Programar desde Setembro de 2009. Alguns frutos do seu trabalho
podem ser encontrados em http://www.sergioribeiro.com
42
CoreDump
CORE DUMP [12] - PROGRAMADOR ^ GESTOR
Uma evoluo tpica na carreira de programador chegar a
gestor. O PM, a carinhosa abreviatura de Project Manager,
muitas vezes algum que chega gesto de projeto tendo
feito um percurso tcnico e, tantas vezes, sem formao em
gesto.
O facto de se ser um bom programador no habilita ningum a ser um bom gestor de equipa ou de projeto na
rea das tecnologias de informao. Infelizmente, comum
promover os melhores engenheiros de software a gestores
menos capazes.
Este percurso parece lgico na viso das organizaes, em
particular das mais tradicionais, que no compreendem a
necessidade de proporcionar uma carreira tcnica a estes
profissionais. Como tal, na sua viso, o resultado do bom
trabalho que desenvolvem no desenvolvimento de software
a promoo para cargo de gesto.
Foto: filme Office Space
AUTOR
Escrito por Fernando Martins
Faz parte da gerao que se iniciou nos ZX Spectrum 48K. Tem um Mestrado em Informtica e mais de uma dcada de experincia profissional nas reas de Tecnologias e Sistemas de Informao. Criou a sua prpria consultora sendo a sua especialidade a migrao de dados.
43
Anlises
Segurana em Redes Informticas (4. Ed. Aumentada)
Estruturas de Dados e Algoritmos em C
Review
Segurana em Redes Informticas (4. Ed. Aumentada)
Ttulo: Segurana em Redes Informticas
(4. Ed. Aumentada)
temas: o Carto de Cidado e o captulo novo relativo a Protocolos de Autenticao de pessoas e sistemas em redes
informticas.
- Criptografia
- Gesto de Chaves Pblicas (inclui uma descrio detalhada do funcionamento do nosso Carto de Cidado)
- Sistemas de Deteco de Intruso (inclui os casos de estudo dos sistemas mais populares actualmente - Tripwire,
Snort e Antisniff)
- Redes Privadas Virtuais
AUTOR
Escrito por David Sopas
Analista de segurana web, programador, fundador, editor do WebSegura.net e lder do projeto ScanPW.
Colabora regularmente com a comunicao social em assuntos relacionados com a segurana da informao.
46
Review
Estruturas de Dados e Algoritmos em C
gramao defensiva, estudo das principais estruturas de
dados dinmicas, principais classes de algoritmos, implementao de diferentes tipos de memrias e por fim o estudo
dos tipos de dados abstracto grafo / dgrafo e os seus algoritmos mais importantes.
No final de cada sub-captulo existe um resumo dos contedos a reter o que facilita de certa forma a reviso de contedos quando j sabemos previamente em que tema se insere.
Pginas: 616
ISBN: 978 972 722 769 3
Programao, a linguagem do futuro permite executar praticamente tudo, se no mesmo tudo aquilo que a nossa imaginao possa equacionar. No entanto o desenvolvimento de
solues de software de mdia e elevada complexidade trs
consigo a necessidade de aprofundar os conceitos algortmicos que no fundo so a base da programao.
com esse mesmo objectivo de aprofundar os conceitos
algortmicos dos programadores que se apresenta este livro
Estruturas de Dados e Algoritmos em C.
Ao nvel fsico da edio no tenho nada de errado a apontar, sendo que a tipografia de qualidade permitindo uma
fcil e rpida percepo visual dos contedos abordados.
O livro Estruturas de Dados e Algoritmos em C uma obra
que se destina a programadores e a alunos de programao,
apresentando nfase na decomposio funcional das solues recorrendo implementao de tipos de dados abstractos.
A organizao dos contedos foi escolhida mediante a sua
importncia e dependncia entre contedos, incluindo exemplos de cada tipo de implementao, exerccios complementares e at algumas recomendaes de outras leituras sobre
a temtica em questo.
Dividido em cinco grandes temas e onze captulos principais,
as primeiras pginas da obra so orientadas a uma pequena
introduo ao que a obra se propes a abordar assim como
a tecer algumas consideraes sobre a utilidade e importncia das estruturas de dados e algoritmos na programao.
AUTOR
Escrito por Nuno Santos
Curioso e autodidacta com uma grande paixo pela programao e robtica, frequnta o curso de Engenharia Informtica na
UTAD alimentando o sonho de ainda vir a ser um bom Engenheiro Informtico. Estudante, Blogger, e moderador no frum
Lusorobtica so algumas das suas actividades. Os seus projectos podem ser encontrados em: http://
omundodaprogramacao.com/
47
COMUNIDADES
Comunidade NetPonto Criando aplicaes Windows Phone 8.1 e Windows 8.1 usando o App Studio da Microsoft
COMUNIDADE NETPONTO
http://netponto.org
CRIANDO APLICAES WINDOWS PHONE 8.1 E WINDOWS 8.1 USANDO O APP STUDIO DA MICROSOFT
Este artigo tem como objetivo apresentar o App Studio da
Microsoft, de forma a criar aplicaes para Windows Phone
8.1 e Windows 8.1.
O
servio
pode
ser
acedido
a
partir
de
appstudio.windowsphone.com. E para comear a us-lo
necessrio uma conta Outlook, Live Id ou no caso de no ter
uma conta destas deve usar uma conta que esteja associada
ao Windows Live Id. Caso no esteja associado, pode
associar qualquer endereo de email a este servio na
seguinte referncia: http://bit.ly/1gywtmO ou na pgina de
login, clicar em Inscrever.
49
COMUNIDADE NETPONTO
http://netponto.org
CRIANDO APLICAES WINDOWS PHONE 8.1 E WINDOWS 8.1 USANDO O APP STUDIO DA MICROSOFT
orientao na aplicao que est a construir e apenas ter
que alterar os dados e customizar a aplicao a seu gosto.
Note-se que neste caso o utilizador poder mudar
radicalmente toda a aplicao inicialmente criada pelo
template.
50
COMUNIDADE NETPONTO
http://netponto.org
CRIANDO APLICAES WINDOWS PHONE 8.1 E WINDOWS 8.1 USANDO O APP STUDIO DA MICROSOFT
Apesar de esta pgina no mencionar o tamanho das
imagens, quando fazemos editar aparece um ecr que nos
informa sobre o tamanho possvel de cada imagem.
Tema (Theme)
Publicar (Publish)
Mosaicos (Tiles)
51
COMUNIDADE NETPONTO
http://netponto.org
CRIANDO APLICAES WINDOWS PHONE 8.1 E WINDOWS 8.1 USANDO O APP STUDIO DA MICROSOFT
clicar no boto Generate obtemos um ecr onde podemos
escolher qual a aplicao que pretendemos gerar.
Entre outras
Web App Template
Com j foi referido, este template s est disponvel para
aplicaes de Windows Phone e trata-se uma aplicao
Web. Vejamos ento na prtica como usar este template.
52
COMUNIDADE NETPONTO
http://netponto.org
CRIANDO APLICAES WINDOWS PHONE 8.1 E WINDOWS 8.1 USANDO O APP STUDIO DA MICROSOFT
Ao selecionar o Web App Template iremos ter a seguinte
pgina
AUTOR
Escrito Por Sara Silva
Licenciada em Matemtica Especialidade em Computao, pela Universidade de Coimbra e Microsoft Certified Profissional Developer. Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps. O seu Blog
www.saramgsilva.com e o twitter @saramgsilva.
53
No Code
O Windows Phone 8.1 e a atualizao do Windows 8.1
No Code
O Windows Phone 8.1 e a atualizao do Windows 8.1
De salientar, que o menu rpido personalizvel e o Action
Center est acessvel mesmo que o dispositivo esteja
bloqueado (LockScreen).
55
No Code
extensvel e poder interagir com outras aplicaes, como
por exemplo o Skype, Facebook ou Twitter.
56
No Code
Storage Sense, and Battery Saver, salientando que este ir
ter acesso informao de quais as aplicaes que esto a
consumir mais recursos. Poder editar a sua playlist e gerir a
sua coleo online de forma fcil e eficiente, e poder
comprar ou alugar vdeos atravs do Xbox Music e
finalmente possvel subscrever podcasts atravs de RSS
feeds ou atravs de pesquisa no Bing em todos os pases
em que o Windows Phone est disponvel.
57
No Code
Na Keynote do //Build/ foi apresentado o regresso do boto
iniciar com uma interface que inclui Live Tiles e foi ainda
apresentado aplicaes modernas a correr dentro de janelas,
no entanto estas novidades ainda no esto disponveis
nesta atualizao.
A atualizao do Windows 8.1 est disponvel via MSDN a
partir do dia 2 de Abril e apartir do dia 8 de Abril para o
pblico em geral atravs do Windows Update.
A pesquisa do Windows passa a estar integrada com a Loja,
permitindo que as pesquisas procurem por aplicaes que
satisfaa o termo inserido. Se no resultado da pesquisa
aparecer uma aplicao que pretendemos desinstalar,
possvel faze-lo atravs do menu de contexto e possvel
definir se pretende remover a aplicao de todos os PC
sincronizados pela atual conta.
AUTOR
Escrito Por Sara Silva
Licenciada em Matemtica Especialidade em Computao, pela Universidade de Coimbra e Microsoft Certified Profissional Developer. Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps. O seu Blog
www.saramgsilva.com e o twitter @saramgsilva.
58
e muito mais em
www.revista-programar.info