Links

­ LORENA E RAFAELARAFA TVBLOG RAFA TVTWITTER LORENA & RAFAELAINSTAGRAM LORENA & RAFAELA

sexta-feira, 15 de agosto de 2014

Arrays - veja como utilizá-las para simplificar e automatizar tarefas

A poucos dias atrás peguei um aplicativo desenvolvido por uma outra pessoa para fazer a manutenção e uma das coisas que me chamou a atenção foi a forma utilizada por essa pessoa para colocar o mês com as iniciais do nome em inglês. A ideia inicial seria que o mês fosse exibido sempre da mesma forma, independente das configurações regionais do computador em que o aplicativo estivesse rodando. Para isso, o programador utilizou algo como abaixo descrito:
Dim mes As String

If Format(rs!Data, "m") = 1 Then
    mes = "JAN"
ElseIf Format(rs!Data, "m") = 2 Then
    mes = "FEB"
ElseIf Format(rs!Data, "m") = 3 Then
    mes = "MAR"
ElseIf Format(rs!Data, "m") = 4 Then
    mes = "APR"
ElseIf Format(rs!Data, "m") = 5 Then
    mes = "MAY"
ElseIf Format(rs!Data, "m") = 6 Then
    mes = "JUN"
ElseIf Format(rs!Data, "m") = 7 Then
    mes = "JUL"
ElseIf Format(rs!Data, "m") = 8 Then
    mes = "AUG"
ElseIf Format(rs!Data, "m") = 9 Then
    mes = "SEP"
ElseIf Format(rs!Data, "m") = 10 Then
    mes = "OCT"
ElseIf Format(rs!Data, "m") = 11 Then
    mes = "NOV"
ElseIf Format(rs!Data, "m") = 12 Then
    mes = "DEC"
End If

Me.datacadastro = mes & Format(rs!Data, "/dd/yyyy")
A ideia seria exibir a data no formato MAY/12/2012. Funciona corretamente. O problema é que após verificar todos os módulos de formulários e relatórios, me deparei com 24 blocos desses, sendo que em alguns tinham até 3 com variáveis nomeadas como mes1, mes2 e mes3, sendo cada uma dedicada a um campo diferente do formulário ou relatório.

Se cada bloco contem 25 linhas de código, multiplicando por 24 chegamos ao total de 600 linhas. Imagina o tempo gasto no processo, mesmo copiando e colando, pois tem que alterar nomes de campos e de variáveis. Tudo isso poderia ser simplificado utilizando uma função pública, na qual seria utilizado apenas um bloco: Public Funtion Meses(Mes As String) As String


Dessa forma, tudo seria reduzido à apenas um bloco com 25 linhas. Mas, pensando bem, podemos reduzir ainda mais se utilizarmos Arrays em uma função pública.

O que é uma Array?

Na programação, Array pode ser definido como uma variável que armazena dados de um mesmo tipo. No exemplo acima, armazenaria a inicial dos nomes dos meses em inglês. Quando colocamos os dados que queremos em um conjunto de dados dentro de uma Array, cada um desses dados recebe um índice que, por padrão, começa no índice 0(zero) igual às coluna de uma combobox ou listbox ou mesmo os índices dos campos de uma tabela. Para utilizarmos um determinado dado do conjunto, basta passar o número do índice. Para o caso dos meses, teríamos índices de 0 a 11.

Como utilizar a Array para capturar o número do mês?

Como dito acima, cada dado de um conjunto de dados de uma Array, possui um número que o identifica, assim como os meses podem ser numerados de 1 a 12. Como a Array, na sua forma padrão, inicia no zero, podemos pegar o número do mês menos 1 para compatibilizar com o número do mês na Array. Para facilitar o processo e deixar a função disponível para qualquer formulário, relatório ou consulta, criaremos um módulo e, dentro desse módulo, criaremos uma função pública:

Public Function Meses() As Variant
    Meses = Array("JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC")
End Function
Pronto, agora basta utilizar a função Meses aonde precisarmos formatar a data. Ainda utilizando o exemplo que deu origem a esse artigo, podemos fazer assim:

Me.datacadastro = Meses(Format(rs!Data, "m") - 1) & Format(rs!Data, "/dd/yyyy")

Nesse caso, o Format(rs!Data, "m") captura o número do mês no campo rs!Data de um determinado registro. Se o mês em questão for maio, o número "m" será 5. Na nossa Array, o índice, ou seja, o número de "MAY" é 4, pois a Array começa no 0. Por isso utilizamo o - 1 para subtrair 1 número para fazer a equivalência entre o mês do registro e a Array.

Veja que utilizando Array, o número de linhas de código caiu de 600 para apenas 3, ou seja, 0,5% do total de linhas inicial. Não é uma maravilha? Aqui finalizamos nosso artigo referente à esse assunto. Espero que possa ser útil.

Barra de progresso

Como elas funcionam? Entenda as medidas e velocidades da informática
Quem já baixou algum arquivo da Internet ou instalou um programa no computador,  já viu aquelas barras que exibem o progresso do download ou da instalação do aplicativo, certo? Certo. O que muita gente pergunta é como elas funcionam e se os dados que elas exibem são fiáveis. Bem, vamos tentar entender um pouco o funcionamento dessas barrinhas. Primeiro, precisamos saber que existem barras que exibem o progresso das mais diversas tarefas, como por exemplo: download de um arquivo da Internet, instalação de um programa, cópia de arquivos entre pastas em um computador ou entre computadores de uma rede, trabalho específico de um software como por exemplo a compilação de um vídeo em um dvd, etc.


Progresso de download



Você já deve ter observado que as informações da barra de progresso de download variam bastante, não? Por que isso acontece?

Vamos lembrar como funciona a Internet e a conexão de um pc.

Quando contratamos um serviço de acesso à Internet, temos vários planos de velocidade para escolher de acordo nossas necessidades e principalmente o nível de alegria do bolso. Os planos podem ir de parcos 100 kbits/s (sim, ainda tem operadora que oferece essa merreca de velocidade) até dezenas de megabits por segundo.

Pois bem, muita gente contrata uma certa velocidade e quando vai fazer um download, se decepciona ao ver que a velocidade está muito abaixo daquela contratada. Vamos entender o motivo para isso. Para tal iremos, primeiramente, entender a relação entre as diversas medidas de espaço ocupado por um arquivo no computador ou de velocidade na Internet:

 bit - menor unidade de medida. Pode ser usada para representar dois estados de informações, como Sim ou Não.

Byte - 1 byte é igual a 8 bits. Em termos de armazenamento de dados, podemos dizer que em um arquivo de texto do Word por exemplo, cada caractere ocupa cerca de 1 Byte de espaço no hd;

Kilobyte - 1.024 bytes. À partir daqui, cada unidade de medida equivale a 1024 unidades da medida imediatamente anterior. O Kilobyte pode ser abreviado para KByte ou KB;

Megabyte - 1.024 Kilobytes. Abraviações: MByte ou MB. Um arquivo de música em mp3 ocupa cerca de 1 Megabyte por minuto de duração. Um vídeo mpeg com qualidade razoável pode ocupar cerca de 10 Megabytes por minuto e um vídeo de boa duração, cerca de 30 Megabytes por minuto;

Gigabyte - 1.024 Megabytes. Abraviações: GByte ou GB. Um filme de boa qualidade pode ocupar cerca de 1 Gigabyte. As memórias de computador doméstico estão agora na casa dos Gigabytes;

Terabyte - 1.024 Gigabytes. Abraviações: TByte ou TB. Os discos rígidos domésticos mais recentes chegaram agora à casa dos terabytes. Já temos discos rígidos no mercado com capacidade de mais de 1 Terabyte;

Petabyte - 1.024 Terabytes. Abreviações: PByte ou PB. 1 Petabyte é muita coisa para um computador doméstico. À partir dessa grandeza, essas medidas podem ser vistas em grandes servidores, nos quais podem ter dezenas ou centenas ou mesmo milhares de processadores e discos rígidos para se chegar à essa medida;

Exabyte - 1.024 Petabytes. Abreviações: EByte ou EB;

Zettabyte - 1.024 Exabytes. Abreviações: ZByte ou ZB;

Yottabyte - 1.024 Zetabytes. Abreviações: YByte ou YB;

Brontobyte - 1.024 Yottabytes. Abreviações: BByte ou BB;

Geopbyte - 1.024 Brontobytes. Se o Exabyte é uma medida para a qual iremos demorar muito a ver em um pc, imagina essa. A menos que novas descobertas proporcionem um salto gigantesco para a tecnologia, levaremos milhares de anos para isso.

As operadoras oferecem o serviço em bits enquanto a velocidade de download é medida em Bytes. Mas, qual é a diferença? A diferença é que um Byte contem oito bits como vimos acima. Portanto, para saber a velocidade de download em Bytes, divida a velocidade em bits por oito. Se, por exemplo, a velocidade contratada é de 1 megabit por segundo, e considerando que 1 megabit equivale a 1.024 kilobits, dividimos 1.024 por 8 e obtemos uma velocidade máxima de 128 Kilobytes por segundo.

Mas, por que as operadores de Internet usam o bit ao invés do Byte se tudo mais, ou quase tudo, é medido em Bytes? Por uma razão muito simples: para passar a sensação de que está vendendo um produto muito melhor ou muito mais veloz do que realmente é. O usuário sem conhecimentos logicamente irá preferir uma Internet de 10 megabits por segundo ao invés de uma de 1,25 Megabytes por segundo.

Quanto à pergunta inicial, se podemos confiar no tempo de download informado, eu diria que podemos, apesar da grande oscilação nas informações. Isso acontece porque o sinal de Internet não é contínuo. A velocidade real depende de diversos fatores, entre eles: o número de usuários conectados, o número de programas abertos no computador, o número de programas acessando a rede e o número de downloads simultâneos no computador. Depende, ainda, do número de usuários baixando o mesmo arquivo ou acessando o servidor aonde está o arquivo, alem da configuração do hardware do usuário.

O tempo e a porcentagem de download são medidos mais ou menos assim: tamanho do arquivo dividido pela velocidade de download no momento. Como essa velocidade pode variar, a cada momento o cálculo é refeito. Temos que considerar ainda a impossibilidade de se saber exatamente o espaço que está sendo ocupado pela parte já baixada e talvez o cálculo ser feito por estimativas.

Como exemplo, vamos supor um arquivo de 10 Megabytes, o que dá 10.240 Kilobytes, a uma velocidade inicial de 200 Kbytes por segundo.

10.240 / 200 = 51,2 segundos.

Se ao iniciar o download a velocidade era de 200 KBytes por segundo e, tendo passado 5 segundos, a velocidade caiu para 100 KBytes por segundo, teremos, por estimativa, baixado 1.000 KBytes. Estariam faltando 9.024 KBytes, agora na velocidade de 100 KBytes por segundo. O tempo inicial de 51,2 segundos, nesse momento, estaria em 46,2 segundos (51,2 - 5 = 46,2). Refazendo os cálculos, portanto, teríamos: 9.024 / 100 = 90,24 segundos.

Aqui vimos que, mesmo já tendo baixado uma parte do arquivo e já tendo passado quase 10% do tempo inicialmente estimado, o mesmo quase dobrou. Aqui foi possível entendermos como os dados são influenciados.

Progresso de instalação de programas



A instalação de um programa pode ser apresentada de diversas maneiras, dependendo de como o software foi programado para informar o progresso. Dependendo do programa, dezenas, centenas ou milhares de arquivos são copiados para diferentes locais do disco rígido. A barra de progresso pode exibir a porcentagem de arquivos já copiados e uma estimativa do tempo de término com base nesse número e no tamanho do arquivo, talvez considerando, também, a velocidade de processamento do hardware, que interfere diretamente no tempo.

Quando o progresso é baseado apenas no número de arquivos, poderá haver momentos em que se demora minutos para a barra alcançar 1% e de repente ela avança 50%. Isso pode ocorrer quando se está copiando um arquivo muito grande e em seguida se tem vários arquivos muito pequenos. Em muitos casos, a instalação ainda manipula o registro do windows para guardar informações necessárias à validação e funcionamento do programa e tudo isso é contado.

Há ainda aqueles instaladores que copiam os arquivos ou baixam o instalador real da aplicação pela Internet e considera o download como 50% do progresso e a instalação como os outros 50%. Como, dependendo da velocidade da conexão, pode demorar horas para baixar o instalador, a sensação é que a instalação levou horas para instalar a metade do programa e instalou a outra metade em poucos segundos.

No caso de processos internos de um programa, como por exemplo a realização de um backup ou a queima de um dvd, o processo é semelhante á instalação de um programa.

Aqui terminamos esse pequeno artigo sobre o funcionamento e fiabilidade das barras de progresso. Espero que seja útil para alguns pelo menos. Abraço e até a próxima matéria.

Access VBA - Variáveis módulos e funções

Hoje estou deixando um exemplo que eu elaborei para mostrar como usar funções, variáveis e módulos em um aplicativo vba, fazendo com que o tempo de programação reduza bastante, pois essas técnicas ocupam muito menos linhas de código em diversas situações. Deixo tambem um vídeo aonde eu explico como usar esses elementos e, para completar, um texto com algumas outras explicações. O material aqui postado destina-se aos programadores em início de aprendizado. Espero que seja útil.



Programação VBA - Usando variáveis, funções e módulos

Quando começamos a aprender programação, somos apresentados a três grandes amigos: O If, o Else e o Then. Com essas instruções, que significam SeEntão e Caso contrário, podemos passar um grande número de comandos para o nosso programa.Isso todo iniciante em programação sabe, certo? Acontece que, por vezes, precisamos referenciar uma mesma ação diversas vezes utilizando os mesmos campos em diversos formulários. Imagine um sistema com 1 formulário. Esse formulário tem um subformulário que pode receber como fonte de objeto 20 outros formulários que contem, cada um, 20 botões de comando para o qual o usuário irá clicar em um desses botões dependendo de uma escolha. Imagine ainda que tenham 20 caixas de texto que Irão guardar a escolha do usuário no formulário principal. Se formos escrever tudo isso em Ifs e Thens, serão necessárias umas 40 linhas de código para cada botão. Multiplicando 40 por 20 botões e ainda por 20 formulários, chegaremos ao total de 16 mil linhas de código. Isso para cada tipo de comando que necessitarmos passar ao nosso aplicativo. Agora, imagine que dependendo da situação, precisaremos passar uns cinco tipos de comando diferentes. Essas 16 mil linhas pulam para 80 mil linhas de código. Mesmo copiando e colando o código em todos os botões, isso levará um bom tempo para ser feito, concorda? É aqui que entram as variáveis, as funções e instruções como Do e For. A matemática nos ensina que uma variável é um termo utilizado para representar um valor desconhecido, que pode assumir uma infinidade de valores dependendo da necessidade. Na programação, variável é um objeto capaz de armazenar na memória um valor ou uma expressão. As variáveis são usadas em tempo de execução, ou seja, uma vez fechado o objeto do qual ela faz parte, seu valor se perde. E o que são funções na programação? Uma função pode ser compreendida como um encapsulamento de instruções e variáveis que podem ser chamadas a qualquer momento por diversos controles sem a necessidade de escrevê-los repetidamente para cada controle. Existem funções privadas e funções públicas. As funções privadas só podem ser chamadas por controles que estejam dentro do formulário ou relatório no qual ela foi declarada. Esse tipo de função deve ser usado em casos aonde os comandos serão utilizados apenas para o objeto do qual a função fizer parte . As funções públicas, por sua vez, podem ser chamadas em qualquer formulário ou relatório. Se os comandos que você vai passar para o aplicativo precisar ser repetido para mais de um objeto, sendo esses objetos, formulários, relatórios, consultas, macros, etc, declare a função como pública. Quando temos diversas funções, podemos abrigá-las em módulos. Instruções como Do e For servem para fazer com que um comando seja repetido enquanto uma condição for verdadeira. Por exemplo:

Do While Variável <= Campo → Faça enquanto a Variável for menor ou igual ao Campo

For Each txtVar In Me.Controls → Para cada txtVar na minha lista de controles

A instrução Do termina com um Loop, que faz com que a instrução seja repetida até que a condição imposta deixe de ser verdadeira. A instrução For termina com um Next, que faz com ela passe para o próximo controle da lista após analisar o controle anterior. No caso citado acima, é essencial que os objetos e controles do aplicativo tenham nomes em comum. Por exemplo, se temos 20 formulários, 20 botões de comando e 20 caixas de texto, usaremos como nomes para os formulários frm01 até frm20, para os botões, usaremos btn01 à btn20 e para as caixas de texto usaremos txt01 à txt20. Dê uma olhada no vídeo aqui postado e nos módulos aplicativo para entender melhor como tudo isso funciona. Espero que goste e que possa ser útil para o seu aprendizado. Pode ser que esse texto passe por edições periódicas afim de ficar cada vez mais mais completo e claro de ser entendido.

VBA/Access como linguagem de programação


Tem se falado muito sobre a performance dos sistemas desenvolvidos em Access e a consistência dos dados. Muitos programadores de outras linguagens depreciam o Access, dizendo que o mesmo foi feito para principiantes, que é uma brincadeira de criança, devido à aparente facilidade de se desenvolver um sistema nele. Na minha opinião, o que fez muitos desacreditarem no Access, foi essa falsa ideia que surgiu de que criar sistemas nele era tarefa para qualquer um e, por isso, começou a surgir muita besteira feita no Access (lógico que uma ferramenta usada por "qualquer um" só poderia dar nisso). Na verdade, uma agenda simples pode sim ser feita por qualquer usuário, mas o Access vai muito alem disso, muito alem mesmo. Podemos fazer praticamente o que quisermos nele. A questão é que "qualquer um" não sabe nem o que é vba, sql, api, dll, ocx, integração com elementos feitos em flash, acesso por odbc, asp, php, não fazem nem ideia do que é lógica de programação, normalização relacional e etc. Por isso, devido às várias lambanças feitas por "qualquer um", até mesmo programadores tarimbados no meio viram o Access com um olhar desacreditado e, por isso mesmo, muitas das vezes, nem se interessaram em checar se a ferramenta era mesmo ruim ou não. Na verdade, "qualquer um" nem é culpado por isso, pois "qualquer um" foi induzido pela própria Microsoft de que era fácil desenvolver sistemas no Access. O problema é que a Microsoft não explicou a diferença entre fazer uma agendinha usando assistentes e macros e desenvolver um sistema robusto para uma empresa. O Access é uma ferramenta que oferece uma plataforma de trabalho recheada de recursos prontos para serem usados, no entanto, a maioria desses recursos podem ser melhorados e até modificados via códigos vba e sql. O usuário comum não faz ideia de como fazer isso, nem mesmo da existência de tais possibilidades. Por isso criou-se a falsa ideia de que o Access é brincadeira para criança. Lógico que o Access, assim como qualquer ferramenta de programação, tem seus prós e seus contras. Cabe ao programador identificar os pontos fracos e procurar soluções de adaptações e/ ou implementações, assim como ocorre com qualquer outro SGBD. O Access possui uma incrível capacidade de integração com componentes dll, ocx, flash entre outros, alem da possibilidade de se trabalhar em conjunto com as APIs do Windows, o que aumenta substancialmente as possibilidades de criação, pois temos milhares desses componentes citados acima alem de milhares de APIs prontas a serem integradas ao sistema, isso sem contar os controles ActiveX que poderão ser adicionados ao aplicativo. No quesito segurança, existem várias soluções que podemos implementar para tornar os sistemas práticos e seguros. Por tudo isso podemos afirmar que o Access pode ser uma ferramenta extremamente poderosa nas mãos de quem sabe utilizá-lo com maestria ou pode ser um brinquedo nas mãos do usuário comum. No entanto, o usuário comum criará suas agendinhas simples enquanto o programador competente criará verdadeiros sistemas.

quarta-feira, 13 de agosto de 2014

Curso de formatação e instalação do Windows XP – por Criquio Calavera


Nesse curso, tento explicar de forma detalhada, como fazer backup de seus drivers e dos arquivos importantes. Depois, explico os passos necessários para se formatar um hd e instalar o Windows XP. Por último, explico como reinstalar os drivers os quais foi feito backup antes da formatação.
Espero que goste, foi feito com carinho.
Você pode baixar uma cópia desse video juntamente com o simulador de instalação do Windows, alem de uma versão demo do Driver Genius. Clique aqui
Criquio Calavera
Olá galera! Sejam todos muito bem vindos ao meu novo espaço bloguístico. Estou movendo minhas postagens para cá devido a questões técnicas. Espero que continuem visitando o blog.

Abração a todos.