<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tiago Silva</title>
	<atom:link href="http://www.tiagosilva.eu/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tiagosilva.eu</link>
	<description>Tec. Informação e Hobbies pessoais</description>
	<lastBuildDate>Wed, 13 Jul 2011 13:48:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
		<item>
		<title>Making arrays in WSDL (RPC/encoded)</title>
		<link>http://www.tiagosilva.eu/web-technologies/wsdl/how-to-make-array-types-in-wsdl/</link>
		<comments>http://www.tiagosilva.eu/web-technologies/wsdl/how-to-make-array-types-in-wsdl/#comments</comments>
		<pubDate>Mon, 04 Jul 2011 10:21:05 +0000</pubDate>
		<dc:creator>Tiago Silva</dc:creator>
				<category><![CDATA[WSDL]]></category>
		<category><![CDATA[Array]]></category>
		<category><![CDATA[RPC]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[XSD]]></category>

		<guid isPermaLink="false">http://www.tiagosilva.eu/?p=150</guid>
		<description><![CDATA[This article covers how to create an array of any type within an WSDL document. Why is the array type so hard to find? Because in WSDL this is not a type, but rather, an encoding restriction and this means that not all bindings are allowed to carry arrays. Many may use the light HTTP [...]]]></description>
			<content:encoded><![CDATA[<p>This article covers how to create an array of any type within an WSDL document.</p>
<p>Why is the array type so hard to find? Because in WSDL this is not a type, but rather, an encoding restriction and this means that not all bindings are allowed to carry arrays.<br />
<span id="more-150"></span><br />
Many may use the light HTTP POST and/or GET bindings, but these are a little limited, they do not provide any array encoding type from out of the box. Of course there is JSON, which does the job very well, but this article will cover an well known and used encoding type, the SOAP encoding.<br />
&nbsp;<br />
Have in mind that this example is having in mind that you are already using SOAP within your WSDL.<br />
&nbsp;<br />
Here goes an example of WSDL code snippets showing an ordinary string being encoded in an array.<br />
&nbsp;<br />
First of all, to use this encoding restriction you must import the namespace "http://schemas.xmlsoap.org/soap/encoding/" in your WSDL types schema.<br />
Example:</p>
<pre class="brush: xml; highlight: [10, 25];">
<xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/" schemaLocation="http://schemas.xmlsoap.org/soap/encoding/"/>
</pre>
<p>&nbsp;<br />
Then, you define your array restrictions, like any other custom type.<br />
Example:<br />
&nbsp;</p>
<pre class="brush: xml; highlight: [10, 25];">
     <xsd:complexType name="StringArray">
          <xsd:complexContent>
               <xsd:restriction base="SOAP-ENC:Array">
                    <xsd:attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="xsd:string[]"/>
               </xsd:restriction>
          </xsd:complexContent>
     </xsd:complexType>
</pre>
<p>&nbsp;<br />
If you noticed, this complex type uses the SOAP-ENC namespace to get this restriction and thus, encoding the string object in an array restriction on the SOAP envelope.<br />
&nbsp;<br />
There is also one last thing. You must tell the importing client that you are using this encoding in your binding operation input or output.<br />
Example:</p>
<pre class="brush: xml; highlight: [10, 25];">
<output>
     <soap:body use="encoded" namespace="urn:WebServiceName" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</output>
</pre>
<p>&nbsp;<br />
This means that you can have different bindings together, but remember that array restrictions are just for SOAP, they will not work with HTTP POST or GET bindings. To use HTTP POST or GET bindings and work with arrays you must learn about how to serialize and deserialize objects into JSON (for example).<br />
&nbsp;<br />
Until then, have fun understanding WSDL and SOAP!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tiagosilva.eu/web-technologies/wsdl/how-to-make-array-types-in-wsdl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como detectar Phishing bancário [PT]</title>
		<link>http://www.tiagosilva.eu/it-security/como-detectar-phishing-bancario/</link>
		<comments>http://www.tiagosilva.eu/it-security/como-detectar-phishing-bancario/#comments</comments>
		<pubDate>Wed, 23 Mar 2011 10:51:56 +0000</pubDate>
		<dc:creator>Tiago Silva</dc:creator>
				<category><![CDATA[IT Security]]></category>
		<category><![CDATA[Phishing]]></category>

		<guid isPermaLink="false">http://www.tiagosilva.eu/?p=123</guid>
		<description><![CDATA[Para alem deste post ser meramente informativo, é também um relato sobre este caso especifico. Existem vários tipos de phishing (termo que vem do verbo inglês pescar), mas os mais frequentes são os que visam clientes de diversos bancos. O phishing normalmente começa com um isco, que toma a forma comum de um e-mail para [...]]]></description>
			<content:encoded><![CDATA[<p>Para alem deste post ser meramente informativo, é também um relato sobre este caso especifico.</p>
<p>Existem vários tipos de <em>phishing</em> (termo que vem do verbo inglês pescar), mas os mais frequentes são os que visam clientes de diversos bancos. O <em>phishing</em> normalmente começa com um isco, que toma a forma comum de um e-mail para a vitima, nesse mesmo e-mail (99,9%) está uma hiperligação para um suposto documento resultante de uma actividade bancaria, seja um deposito, transferência, etc... Sempre algo que seja convidativo para a vitima, e em tempos de crise, ver uma transferência de dinheiro para a nossa conta é sempre um elemento apelativo.<br />
<span id="more-123"></span><br />
A vitima por sua vez clica nessa mesma hiperligação e aparece uma janela para abrir um documento (que normalmente é um spyware/software de espionagem) ou uma pagina semelhante à do banco, pedido ao utilizador que digite todos os campos do seu cartão matriz ou de outro elemento de segurança na posse do utilizador, sem a qual ninguém conseguiria efectuar uma verdadeira operação bancaria.</p>
<p>Se o utilizador não possuir informação suficiente pode mesmo chegar a preencher esses dados de segurança e acabar por ficar sem dinheiro na conta...</p>
<p>E dada a situação, sem suspeito, não há crime.</p>
<p>Assim, a forma mais fácil de detectar e evitar este tipo de actividade criminosa, para alem de um bom controlo das actividades bancarias e sociais, ou seja, saber o que se passa ou se expecta acontecer é validar as hiperligações nesses mesmos e-mails enviados, isto só por si elimina qualquer tentativa de <em>phishing</em>!</p>
<p>Veja o caso abaixo de um e-mail recente:<br />
<a href="http://www.tiagosilva.eu/wp-content/uploads/2011/03/IT-Security-Suspect-E-Mail-0001.png"><img class="aligncenter size-medium wp-image-124" title="IT-Security-Suspect-E-Mail-0001" src="http://www.tiagosilva.eu/wp-content/uploads/2011/03/IT-Security-Suspect-E-Mail-0001-300x162.png" alt="" width="300" height="162" /></a></p>
<p>Neste exemplo ao passar o cursor do rato por cima da hiperligação "Nr Documento 782900000092220137" conseguimos ver que o explorador ou software de e-mail nos remete para "<strong>http://210.18.21.12.sify.net/images/view.asp?4959322000000</strong>"... (Isto para uma pessoa com bastante experiência em tecnologias de informação pode ser óbvio, mas para alguém sem formação adequada pode ser catastrófico)</p>
<p>Se esta mensagem fosse legitima nunca sairia do contexto do servidor do banco em questão, ou seja, para fornecer informações sejam de que tipo, no caso em estudo, o endereço teria de ter um inicio de hiperligação (nome de domínio) idêntico a "<strong>https://www.bpionline.pt/</strong>" para o caso de um documento de uma operação ou "<strong>http://www.bancobpi.pt/</strong>" para o caso de publicidade institucional.</p>
<p>A melhor forma de se precaver é ser sempre séptico ou procurar ter uma formação sobre segurança na Internet. Pois a Internet é uma rede extremamente segura quando utilizada correctamente. Os serviços são igualmente seguros, quando certificados por entidades fidedignas.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tiagosilva.eu/it-security/como-detectar-phishing-bancario/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Para que serve um ThreadPoolExecutor ? [PT]</title>
		<link>http://www.tiagosilva.eu/programming/what-is-a-threadpoolexecutor-for/</link>
		<comments>http://www.tiagosilva.eu/programming/what-is-a-threadpoolexecutor-for/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 08:55:08 +0000</pubDate>
		<dc:creator>Tiago Silva</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Java SE]]></category>

		<guid isPermaLink="false">http://www.tiagosilva.eu/?p=73</guid>
		<description><![CDATA[As duas principais questões que muitos podem ter são: Para que serve? Preciso de utilizar um no meu projecto? Um ThreadPoolExecutor é uma classe Java que conceptualmente serve, essencialmente, para  gerir por nós, de forma muito eficiente, um conjunto de Threads! Conceptualmente, porque, se mal configurado pode ter um efeito deficiente. Agora, em termos práticos, [...]]]></description>
			<content:encoded><![CDATA[<p>As duas principais questões que muitos podem ter são:</p>
<p><strong>Para que serve?</strong></p>
<p><strong>Preciso de utilizar um no meu projecto?</strong></p>
<p><span id="more-73"></span>Um <em>ThreadPoolExecutor </em>é uma classe Java que conceptualmente serve, essencialmente, para  gerir  por nós, de forma muito eficiente, um conjunto de <em>Threads</em>! Conceptualmente, porque, se mal configurado pode ter um efeito deficiente.</p>
<p>Agora, em termos práticos, esta classe serve para executar tarefas que consistem em classes que implementem a interface <em>Runnable</em>, que possa ser executada.</p>
<p>Se notarem, de forma similar, uma <em>Thread </em>pode receber no seu construtor uma classe que implemente uma interface <em>Runnable </em>também!</p>
<p>Internamente o <em>ThreadPoolExecutor</em> tem um numero para a quantidade do núcleo e um para a quantidade máxima de <em>Threads</em> activas, o tempo que uma <em>Thread </em>pode permanecer inactiva, uma fila para armazenar as tarefas e uma classe que cria as <em>Threads </em>a partir da fila de tarefas!</p>
<p>Um <em>ThreadPoolExecutor </em>é normalmente utilizado em aplicações que seja necessária a  capacidade de executar em simultâneo varias tarefas em detrimento da prioridade das mesmas.</p>
<p>Um bom exemplo disso pode ser um servidor web, pois existem vários pedidos concorrentes, sem uma prioridade estabelecida, mas que no entanto todos eles têm de ser atendidos.</p>
<p>Então, se o projecto consiste em um servidor ou outra aplicação em que se exija executar concorrentemente varias tarefas, utilizar um <em>ThreadPoolExecutor </em>é quase obrigatorio.</p>
<p>Para alem de gerir todas as tarefas, é também possível configurar de forma a adquar ao sistema alvo, podendo fazer funcionar em a favor do sistema ou da aplicação.</p>
<p>O funcionamento de um <em>ThreadPoolExecutor </em>não é muito complicado de perceber. Inicialmente existe um numero definido de <em>Threads </em>concorrentes no núcleo, ou seja, quando mandamos executar uma tarefa é criada uma nova <em>Thread </em>até atingir esse mesmo numero. Se o núcleo estiver preenchido, mas o numero máximo de <em>Threads </em>permitir, são criadas <em>Threads </em>extra para auxiliar. Assim que uma <em>Thread </em>extra se torne inactiva, entra em funcionamento um temporizador que dispara mal o tempo máximo de inactividade seja atingido e as mesmas são libertadas, no entanto, as <em>Threads </em>do núcleo, mesmo que estejam inactivas, nunca são libertadas. Consequentemente, novas tarefas em espera para serem executadas são enviadas para a primeira <em>Thread </em>inactiva, seja do núcleo, seja uma extra.</p>
<p>Com este procedimento é possivel manter um numero de recursos constantemente alocado à execução de tarefas, sem comprometer o funcionamento da aplicação.</p>
<p>O <em>ThreadPoolExecutor </em>possui uma fila interna em que podemos inclusive definir o tipo de armazenamento, se queremos objectos ligados, armazenamento vectorial... etc... Podemos também desenvolver o nosso próprio sistema de armazenamento desde que implemente uma fila.</p>
<p>Todas as <em>Threads </em>são criadas por um objecto especifico para criar <em>Threads </em>a partir das tarefas, por isso também as <em>Threads </em>criadas podem ser especificas para a nossa aplicação.</p>
<p>Quando bem configurado um <em>ThreadPoolExecutor </em>aumenta a fiabilidade, pois temos a certeza que as tarefas vão ser executadas eventualmente e que os recursos atribuídos à aplicação nunca vão oscilar entre níveis muito diferentes dos esperados, tornando a aplicação mais estável e evitando pedir novas <em>Threads </em>desnecessariamente.</p>
<p>A próxima publicação será uma explicação pratica de como configurar um <em>ThreadPoolExecutor</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tiagosilva.eu/programming/what-is-a-threadpoolexecutor-for/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Validação de Número de Documento do Cartão de Cidadão (Versão 1.0 &#8211; Jan. 2010) em Java SE [PT]</title>
		<link>http://www.tiagosilva.eu/programming/validacao-de-numero-de-documento-do-cartao-de-cidadao-versao-1-0-jan-2010-em-java-se-pt/</link>
		<comments>http://www.tiagosilva.eu/programming/validacao-de-numero-de-documento-do-cartao-de-cidadao-versao-1-0-jan-2010-em-java-se-pt/#comments</comments>
		<pubDate>Fri, 13 Aug 2010 14:01:25 +0000</pubDate>
		<dc:creator>Tiago Silva</dc:creator>
				<category><![CDATA[IT Security]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Portuguese Citizen Card]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.tiagosilva.eu/?p=53</guid>
		<description><![CDATA[O código de autenticação de numero de documento do cartão de cidadão em Java. Já existia o mesmo em C# .Net, achei pertinente criar uma versão em Java SE. Espero que seja útil para alguém. public class CCValidator { public static boolean ValidateNumeroDocumentoCC(String numeroDocumento) throws Exception { int sum = 0; boolean secondDigit = false; [...]]]></description>
			<content:encoded><![CDATA[<p>O código de autenticação de numero de documento do cartão de cidadão em Java. Já existia o mesmo em C# .Net, achei pertinente criar uma versão em Java SE. Espero que seja útil para alguém.<br />
<span id="more-53"></span></p>
<pre class="brush: java; highlight: [10, 25];">public class CCValidator
{
     public static boolean ValidateNumeroDocumentoCC(String numeroDocumento) throws Exception
     {
          int sum = 0;
          boolean secondDigit = false;

          if (numeroDocumento.length() != 12) {
               throw new Exception("Tamanho inválido para número de documento.");
          }

          for (int i = numeroDocumento.length() - 1; i &gt;= 0; --i)
          {
               int valor = getNumberFromChar(numeroDocumento.charAt(i));

               if (secondDigit)
               {
                    valor *= 2;
                    if (valor &gt; 9)
                    {
                         valor -= 9;
                    }
               }

          sum += valor;
          secondDigit = !secondDigit;
     }

return (sum % 10) == 0;
}

public static int getNumberFromChar(char letter) throws Exception
{
     switch (letter)
     {
          case '0':
               return 0;
          case '1':
               return 1;
          case '2':
               return 2;
          case '3':
               return 3;
          case '4':
               return 4;
          case '5':
               return 5;
          case '6':
               return 6;
          case '7':
               return 7;
          case '8':
               return 8;
          case '9':
               return 9;
          case 'A':
               return 10;
          case 'B':
               return 11;
          case 'C':
               return 12;
          case 'D':
               return 13;
          case 'E':
               return 14;
          case 'F':
               return 15;
          case 'G':
               return 16;
          case 'H':
               return 17;
          case 'I':
               return 18;
          case 'J':
               return 19;
          case 'K':
               return 20;
          case 'L':
               return 21;
          case 'M':
               return 22;
          case 'N':
               return 23;
          case 'O':
               return 24;
          case 'P':
               return 25;
          case 'Q':
               return 26;
          case 'R':
               return 27;
          case 'S':
               return 28;
          case 'T':
               return 29;
          case 'U':
               return 30;
          case 'V':
               return 31;
          case 'W':
               return 32;
          case 'X':
               return 33;
          case 'Y':
               return 34;
          case 'Z':
               return 35;
          }

          throw new Exception("Valor inválido no número de documento.");
     }
}</pre>
<p>Caso tenham alguma necessidade especifica sobre o cartão de cidadão aproveitem e comentem!<br />
O meu comentário sobre o cartão do cidadão é que, embora seja um cartão que contem um micro-controlador que corre uma <em>Java Virtual Machine</em>, ou seja, é um <em>Smart Card</em> bastante avançado e robusto, os comandos para invocar as funções internas, para obter os dados públicos por ex., ainda é um mistério, ou seja, embora seja um produto para uso publico, onde está a informação para comunicar a baixo nível com o próprio cartão?</p>
<p>Para um cartão extremamente seguro não compreendo o porquê de tanto secretismo. O cartão nem permite a escrita por entidades não autorizadas.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tiagosilva.eu/programming/validacao-de-numero-de-documento-do-cartao-de-cidadao-versao-1-0-jan-2010-em-java-se-pt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Uma visita ao Professor Doutor André Zúquete!</title>
		<link>http://www.tiagosilva.eu/it-security/uma-visita-ao-professor-doutor-andre-zuquete/</link>
		<comments>http://www.tiagosilva.eu/it-security/uma-visita-ao-professor-doutor-andre-zuquete/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 19:10:06 +0000</pubDate>
		<dc:creator>Tiago Silva</dc:creator>
				<category><![CDATA[Cryptography]]></category>
		<category><![CDATA[IT Security]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.tiagosilva.eu/?p=40</guid>
		<description><![CDATA[Depois de uma interessante palestra dedicada à criptografia, em especial à importância dos vectores de inicialização nas cifras síncronas, no modo CBC (encadeamento do bloco da cifra) e como os dados de dos vectores de inicialização devem ser geridos, muito por necessidade da criação do formato (ou estrutura) dos ficheiros encriptados pelo meu programa de [...]]]></description>
			<content:encoded><![CDATA[<p>Depois de uma interessante palestra dedicada à criptografia, em especial à importância dos vectores de inicialização nas cifras síncronas, no modo CBC (encadeamento do bloco da cifra) e como os dados de dos vectores de inicialização devem ser geridos, muito por necessidade da criação do formato (ou estrutura) dos ficheiros encriptados pelo meu programa de criptografia baseado no algoritmo Rijndael e que segue o standard AES (por defeito com chaves de 256 bits ou 32 octetos) o Professor Doutor André Zúquete e eu acabamos por terminar a nossa conversa com o autógrafo de um exemplar do seu livro intitulado “Segurança em Redes Informáticas – 2ª Edição Aumentada”. Aproveito para informar que já saiu a 3ª edição do mesmo, a editora é a FCA.</p>
<p style="text-align: center;"><a href="http://www.tiagosilva.eu/wp-content/uploads/2010/06/Segurança_Em_Redes_Informáticas_2ª_Edição_Aumentada-Autografado.jpg"><img class="size-medium wp-image-44 aligncenter" title="Segurança_Em_Redes_Informáticas_2ª_Edição_Aumentada-Autografado" src="http://www.tiagosilva.eu/wp-content/uploads/2010/06/Segurança_Em_Redes_Informáticas_2ª_Edição_Aumentada-Autografado-300x207.jpg" alt="" width="300" height="207" /></a></p>
<p style="text-align: left;"><a href="http://www.tiagosilva.eu/wp-content/uploads/2010/06/Segurança_Em_Redes_Informaticas_2a_Edição_Aumentada-Autografado.jpg"><br />
</a>Aproveito para dar os parabéns pela 3ª edição, agora de 2010, que prova que realmente temos excelentes peritos em segurança de redes informáticas em Portugal e também os meus sinceros agradecimentos pessoais pela atenção oferecida.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tiagosilva.eu/it-security/uma-visita-ao-professor-doutor-andre-zuquete/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>À procura do melhor chá!</title>
		<link>http://www.tiagosilva.eu/uncategorized/the-search-for-the-best-tea/</link>
		<comments>http://www.tiagosilva.eu/uncategorized/the-search-for-the-best-tea/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 20:54:14 +0000</pubDate>
		<dc:creator>Tiago Silva</dc:creator>
				<category><![CDATA[Tea]]></category>

		<guid isPermaLink="false">http://www.tiagosilva.eu/?p=33</guid>
		<description><![CDATA[Caros leitores, estou a publicar este artigo para recolher as vossas opiniões pessoais sobre as melhores misturas e marcas de chá. Para uma possível resposta apenas é necessária a marca e o nome da mistura, se puderem colocarem uma breve descrição sobre a vossa experiência será extremamente apreciada. Tenham em mente que este artigo é [...]]]></description>
			<content:encoded><![CDATA[<p>Caros leitores,</p>
<p>estou a publicar este artigo para recolher as vossas opiniões pessoais sobre as melhores misturas e marcas de chá. Para uma possível resposta apenas é necessária a marca e o nome da mistura, se puderem colocarem uma breve descrição sobre a vossa experiência será extremamente apreciada. Tenham em mente que este artigo é dedicado ao chá, ou seja, à planta  Camellia Sinensis (arbusto do chá verde, preto, etc...).</p>
<p>Em vez de informar do nome da mistura e da marca, uma boa alternativa será descrever uma receita para uma mistura vossa!</p>
<p>Espero anciosamente por um comentario vosso!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tiagosilva.eu/uncategorized/the-search-for-the-best-tea/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

