Agora que a época das férias está praticamente terminada, trazemos para os leitores mais distraídos, um tema que aqui na Programar achámos que não deveria passar em branco… No passado mês de Maio, foi lançada pela Fundação .NET a biblioteca ML.NET.
Vamos por partes… ML significa Machine Learning… ou seja a aprendizagem da máquina, o que nos leva para a área da inteligência artificial, que nos dias de hoje está cada vez mais ativa.
O título parece agressivo, mas não é de todo essa a minha intenção! Dito isto vamos ao artigo propriamente dito!
Em 2008, nos EUA foi eleito o primeiro presidente “Trekkie” (fã da série O caminho das estrelas (original Star Trek), uma serie de ficção muito popular entre os “geeks”). A verdade é que os outrora “náufragos” da popularidade e da cultura pop, começaram a sua ascensão, rumo ao “topo da hierarquia”! Na verdade existem geeks notáveis na história, da tecnologia, como o caso de Steve Wozniack, também conhecido como “wizard of woz”, Bill Gates, Kevin Mitnick, Larry Page e Sergey Brin, etc…
O tema da privacidade está na ordem do dia, devido essencialmente ao escândalo da Cambridge Analytica com os dados do Facebook e ao Regulamento Geral de Proteção de Dados da União Europeia.
A bem da verdade, o regulamento não é propriamente novo uma vez que já existe há dois anos, embora as organizações europeias só agora lhe estejam a dar a devida atenção.
Este regulamento, grosso modo, é a evolução natural no que toca à proteção de dados pessoais e tem como grande passo o maior controlo dos dados pessoais por parte dos seus legítimos detentores. A partir de agora vai ser mais fácil cada um de nós pedir para ser esquecido ou saber como uma empresa obteve os nossos dados e a quem esta os cedeu.
Neste artigo decidi “revisitar” um tema que sempre me despertou interesse e que tive de abordar num projecto que fiz em 2015. O objectivo era encriptar, de forma a que fosse possível desencriptar, dados, bastando para tal saber um conjunto de informações (identificador, chave e chave-mestra), uma vez que a cada dado, apenas corresponde um identificador (fechadura) e para se chegar à chave que acabará por abrir, são precisas duas chaves (chave e a chave-mestra). Quase como a caixa forte do tio patinhas e os irmãos metralha a tentar abrir, mas um pouco mais complexo!
Para fazer executar esta tarefa, o utilizador deve inserir um identificador, neste caso “porta”, um código a ser cifrado, uma chave para o cifrar e a respectiva chave par (chave-mestra). Quando pressionar o botão para cifrar, os dados introduzidos, serão utilizados para cifrar o “código” usando a chave e a chave-mestra, devolvendo o valor do código, cifrado.
UNIX is very simple, it just needs a genius to understand its simplicity.
Começar um artigo por uma citação não será propriamente ortodoxo, não obstante, sendo uma coluna de opinião, de alguém que “não se importa”, não creio que seja “grave”!
Não será de todo estranho, pelo menos para alguns, a necessidade de converter uma lista de um dado tipo para Data- table, em C#. O mais comum, seria criar um novo objecto do tipo DataTable, criar as colunas e iterar a lista, adicionando as linhas ao datatable, a cada iteração. Isto seria no mínimo trabalhoso, além de pouco eficiente. O código seria pouco elegante e semelhante ao seguinte:
Tal como o título sugere, é mais comum do que seria “agradável”, ter de fazer transformações de dados de DataTable, para ficheiros CSV separados por vírgulas ou ponto-e-vírgula, para se transferirem dados nas mais diversas situações! Seria muito mais agradável usar um formato tipo XML ou mesmo JSON do que usar CSV! No entanto o CSV está para ficar, tendo em 2005 sido alvo de RFC para formato comum e Mime Type para transferência de ficheiros (RFC4188).
Ao longo do artigo será apresentada uma classe, bastante simples para escrever dados oriundos de uma DataTable para ficheiro em formato CSV de acordo com o RFC4180 e posteriormente em formato CSV separado por ponto-e-vírgula, conforme é comummente usado para transferência de dados entre sistemas “legados”.
Os dados armazenados num objecto do tipo DataTable, encontram-se num formato suportado pela framework .Net para armazenamento em memória. Como se trata de um objecto existem diversos métodos bastante úteis que podem ser chamados. Muitos deles bastante úteis quando se pretende trabalhar com os dados em memória. No entanto a classe DataTable não tem suporte para escrita de ficheiros CSV.
É possível que para muitos o título possa parecer de uma estranheza absurda, quase atroz talvez, ou mesmo sem nexo. No entanto o título indica exactamente o que é pretendido, ao abordar a aplicação de um livro que data do século V AC, escrito por um estratega militar chinês, Sun Tzu.
O que pode ter um texto sobre guerra a ver com software? Talvez mais do que se imagina, pois muitos dos princípios descritos no livro, têm uma aplicação bastante mais vasta que a vertente bélica, havendo inclusive já estudos sobre a aplicação desses princípios a vertentes como a gestão e o negócio.
O livro, encontra-se dividido em treze capítulos, cada um dedicado a um aspecto concreto, que apesar da amplitude do texto, denota sempre a vertente bélica do mesmo. No entanto isto não invalida a sua aplicação ao software! Ora vejamos.
Uma simples query SQL permite visualizar informação (retornada em formato tabular), sendo essa informação lida por um qualquer programa (app, site, etc.). Mas o que acontece se quisermos que o próprio motor SQL trate a informação?
Consideremos uma tabela de colaboradores duma empresa. Todos os meses temos que processar o ordenado. Para isso executamos algo (e.g. um stored procedure), que tem toda a “magia” e complexidade lá dentro. Mas precisamos de executar tantas vezes quantos registos tivermos. Isso não é possível com um simples SELECT.
Aqui entram os cursores. São uma figura demoníaca muito mal tratada, mas que se virmos bem são até bastantes simples.