12 janeiro 2022

Array Multidimensional - UPDATE#01


UPDATE#01

Obtive uma resposta num comentário que demonstrou uma forma mais interessante de trabalhar com o array multidimensional que provavelmente consome muito menos memória e tem mais apelo prático. No primeiro script eu desejei somente demonstrar que existe e não me ative a testar outra maneira já que aquela também funciona. Apesar de um provável consumo maior de memória do primeiro script que está comentado no código, ter as listas(arrays) internas com nomes específicos, cria-se uma possibilidade de manipular esses dados de outra forma já que o próprio nome da lista(array) poderá fazer referência ao dado que possui. Mas que fique claro que isso não necessariamente significa que seja adequado trabalhar com array numa grande escala. 

Vale ressaltar que algumas outras ferramentas podem ser mais simples de manipular e obter um resultado correto de forma mais direta além de uma melhor persistência do próprio dado.

Sendo assim agradeço Jan Welten - administrador do grupo Classic ASP developers que foi quem mostrou essa solução já adicionada ao código. A lista(array) já é definida no 'ReDim' com a quantidade das duas dimensões enquanto no código comentado se trabalha inicialmente a partir de uma lista(array) dinâmica simples, adicionando cinco outras listas(arrays) que já podem existir no script, tendo estas listas(arrays) qualquer outro nome. Falta confirmar se aceitará sem problemas adicionar listas(arrays) de tamanhos variados e de tipos diferentes.
 
Abaixo o texto anterior com algumas alterações pontuais:

Array multidimensional é nada mais que um array dinâmico simples com um novo array alocado em seus elementos ou um array já com múltiplas dimensões na sua declaração 'ReDim'. Podemos também considerar esse post um 2º update sobre array. Informações acerca do script você encontra nos textos anteriores, tudo ai já foi tratado antes.

Independente da eficácia de um modo ou outro de obter e tratar dados veja este espaço como um depósito de tudo que testo, encontro por ai e principalmente do que vocês me trazem. Compreender array dinâmico levou a entender e executar o multidimensional.

Tendo dificuldades em acompanhar? Volte ao primeiro post sobre ASP classic

26 dezembro 2021

Arrays ASP-C - update 01


Pra ir mais adiante vamos voltar ao array no ASP-C.  Na postagem anterior foi utilizado um exemplo de como trabalhar com array, observe abaixo:

Percebam que três elementos que não foram informados são reconhecidos pelo 'For Each' e por causa disso foi necessário tratar com o 'IF' para que o resultado não ficasse sem sentido. Sendo assim verifique abaixo uma alternativa mais interessante utilizando agora um loop 'For':

Neste caso agora estamos utilizando o 'uBound()' que identifica o tamanho do array lista gerando um valor respectivo. O resultado é exatamente o mesmo. O 'uBound' funciona exatamente como o 'len()' do Python. Podemos também evitar de informar que não tem nada deste modo abaixo:

Foi utilizado o 'Exit For' para isso e como já foi dito é preciso criar uma condição 'If" específica para que funcione.

Indo mais adiante mostrarei um exemplo de como adicionar elementos a um array utilizando o loop 'For', e diferente do que afirmei outrora existe sim array dinâmico e mostrarei ao fim desse post a forma de utilizar. Agora observe abaixo e perceba que deste modo será preciso especificar exatamente para o 'For' a quantidade de vezes que os dados serão inseridos:

Acima fiz questão de utilizar o 'uBound' novamente, mas eu poderia ter informado para ir até 5 na condição do 'For', entretanto o 'uBound' impede que se informe uma quantidade além ou aquém o que pode gerar erro ou um resultado incompleto. 

Com o tempo trarei mais informação se achar necessário sobre o array no ASP-C, contudo se você sentir falta de algo me informe abaixo que procurarei adicionar como update. 

------UPDATE #01 - 03/01/2022

Quando escrevi esse texto realmente achava que arrays dinâmicos não funcionavam em ASP-C. Eu poderia dizer que a quantidade de informação superficial na internet me levou a pensar deste modo e foi exatamente isso que ocorreu. O problema maior destas informações são detalhes muitas vezes mínimos que não ficam explícitos nos erros que recebemos no browser, sendo assim abaixo temos um trecho de código onde podemos ver como de fato isso funciona:

Observem que o que permite realmente alterar o tamanho do array é a palavra reservada 'ReDim', contudo há a necessidade de criar o array sem informar a quantidade de índices para que o ASP-C identifique que estamos trabalhando com array dinâmico. Outra coisa que devem ter notado é o uso da palavra reservada 'Preserve'. Esta palavra mantém os itens que a lista já possuía antes e não utilizar fará com que o ASP-C crie um novo array limpo com o mesmo nome. Vale testar como isso ocorre quando diminuímos o tamanho do array ao invés de aumentar como foi no caso acima, testem e comentem abaixo sobre. Para quem está tendo que traduzir o blog vou repetir aqui dois comentários do código acima:

  • os índices que forem informados devem ser do tipo Integer
  • para iniciar o array dinâmico você deverá criar sem informar nenhum valor entre parênteses, o que deve ser mudado antes do uso real dele

Como prometido voltei aqui e atualizei o post com dados mais corretos dessa vez. Qualquer dúvida ou mesmo notar que algo não condiz com a realidade utilizem o sistema de comentários abaixo e me alertem que corrijo. Sobre este último código tudo que usei já foi explicado antes então basta rever os posts anteriores para esclarecer sobre tais detalhes.

20 dezembro 2021

ASP-C Loopings e mais

Voltamos aqui em velocidade máxima pra ganhar tempo. Aqui será tratado vários loopings diferentes e citarei algumas reações das quais me intrigaram e espero que um de vocês ajude confirmando se isso é limitação do ASP-C ou se algo precisa ser feito para obter um resultado coerente. 

Começando pelo 'Do While Loop' e o 'Do Loop While' . Esse looping é usado quando não se sabe exatamente quantas vezes será necessário fazer o procedimento até ser necessário terminar o looping. Entretanto o 'Do Loop While' será executado ao menos uma vez para então testar a condição. Verifique abaixo:

A saída no navegador será como esta imagem ao lado, clique para deixar maior a visualização.

Notem que há um comentário no primeiro exemplo onde falo que o looping não reconhece o operador '=' e por alguma razão foi necessário utilizar o '<=' para que o resultado fosse correto. Acredito que o operador está associando valor à variável ao invés de ser tratado como uma igualdade. Os mestres do ASP-C podem explicar abaixo para que possamos confirmar essa situação.

Seguindo em frente vamos tratar agora do looping 'Do Until Loop' e 'Do Loop Until'. O terceiro exemplo é somente para que possam ver como utilizar o 'Exit Do' e assim sair do loop se alguma outra condição diferente for alcançada. 

Observando bem não há muita diferença entre esses loopings e vai de cada um a utilização deles. Verifique agora os resultados no navegador ao lado e perceba como o 'Exit Do' interfere no resultado final:

Diferente do 'Do While Loop' não houve qualquer problema ao usar o operador '=' e sendo assim acredito que isso possa ser decorrente do fato que o ASP-C já não receber atualizações faz algum tempo. Vamos precisar de ajuda de algum mestre que porventura venha por aqui e se interesse em explicar tal situação.

Por fim vamos agora ao 'While Wend'. Não testei a questão do operador '=' e se vocês notarem algum problema aceito que me alertem abaixo. 

Como podem ver acima o loop irá até atingir a condição. Outro detalhe é que em nenhum destes loops foi necessário incrementar qualquer tipo de contador. O resultado no navegador poderá ser visto ao lado. 

No 'While' loop a condição é sempre testada antes de cada ciclo e portanto só será executado o bloco de código somente se a condição for 'True'. Notem que não há qualquer mistério nesses loopings, apesar de aparentarem fazer a mesma coisa uma avaliação mais detalhada do resultado que se deseja fará com que uns sejam mais úteis do que outro dependendo da situação. Vou aproveitar e colocar abaixo o looping 'For Each' com um array. É preciso declarar o tamanho do array senão será lançado no navegador um erro a menos que se deseje trabalhar com array dinâmico, veja o próximo post para saber mais sobre. No código abaixo vejam que no resultado os espaços do array que não possuem elemento serão apresentados como 'elemento x não contém nada!'. Tente fazer com que ao invés de mostrar isso nada de fato seja apresentado, tentem usar com e sem o 'Exit'. Se conseguirem informe abaixo o seu sucesso.

Com o 'For Each' o loop irá percorrer todos os elementos declarados e não declarados. Outro detalhe é que o contador 'd' só existe dentro do looping para que a saída apresente as posições de cada elemento e não serve de fato para que o looping funcione.

Assim chegamos ao fim de mais um post sobre conceitos básicos do ASP-C e com essas ferramentas muita coisa já poderá ser feita com um nível mais complexo e mais útil pra vida real. Como dito em outro post no futuro trarei informações sobre 'Procedures' ou 'Procedimentos', o que chamamos de função e que no ASP-C temos 'Function' e 'Sub'.

Espero realmente que este esforço seja de grande ajuda pra todos os visitantes do blog e interessados no ASP classic. Como dito antes se qualquer coisa aqui estiver incorreta informe abaixo para que possamos aprender juntos.

13 dezembro 2021

ASP-C no começo

Desta vez não vamos de "Hello world", evitando ao máximo perder tempo.

Vou supor que você já sabe lógica básica e tem algum tipo de conhecimento em alguma linguagem de programação ao menos, portanto com isso em mente evitarei entrar em detalhes maiores. Vou me ater a mostrar variáveis, condições e looping num primeiro momento e se alguma dúvida mais específica surgir utilizem a caixa de comentários abaixo.

Existem quatro formas de declarar variáveis no ASP-C

Como podem ver acima nenhuma das formas que utilizei foi necessário declarar o tipo da variável. O ASP-C detecta automaticamente o tipo e nesse caso não houve nenhuma diferença se pública ou private devido ao fato que o "Response.write" está no mesmo escopo das variáveis. A resposta no browser é esta abaixo:



A primeira variável não possui nenhuma palavra reservada. Ela é criada mas não será alocada na memória e seu tipo é detectado em tempo de execução*. Isso faz com que toda vez que chamar a var01 o ASP procurará no script inteiro para descobrir se já existe o que poderá causar uma diminuição de desempenho. Assim conseguirá poupar espaço na memória, mas exigirá uma busca e isso deve ser bem avaliado. 
A segunda var02 com o Dim (dimension - declare in memory) citado acima terá um espaço próprio na memória e com isso, em sistemas muito limitados outro problema poderá ocorrer que é restringir a memória livre pra outros processos. Para scripts simples provavelmente nada será notado nem na primeira nem nessa segunda, mas em sistemas muito grandes isso poderá ser um problema, portanto, volto a falar que essa decisão deverá ser bem calculada.
As duas outras declarações são autoexplicativas, mas nesse código em específico não fazem diferença alguma. No futuro quando for falar de 'Functions' e 'Sub' explicarei melhor sobre elas. No momento não será preciso fazer uso. Agora vamos avançar um pouco mais:

Acima perceba a estrutura de condição If. Veja como escrever corretamente ela no ASP-C. Nesse caso a primeira condição é a certa e portanto será apresentando o seguinte resultado:




Note que a codificação não está sendo detectada corretamente e para isso será preciso informar no começo do Script a seguinte linha:

Response.CharSet = "UTF-8"

Com essa linha declarada logo no início o retorno no navegador passa a ficar assim:




Avaliem bem todos os termos reservados incluindo o 'Then' que no Python seria os ':'. Algumas pessoas colocam as condições entre parênteses, mas até agora não vejo necessidade e funciona do mesmo modo. Tendo entendido tudo até agora você já é capaz de criar algum tipo de resultado mais prático e mais complexo, bastando um pouco de boa vontade. Agora como podem ver abaixo estamos utilizando o looping 'For': 


Com ele podemos criar uma repetição limitada e ainda podemos escolher de quanto em quanto queremos que isso ocorra utilizando o 'Step' que pode ser negativo e portanto decrescente, quando não informado ele incrementa de um em um. Fiz outra coisa que foi aninhar um 'If' dentro do looping e como a maioria das linguagens poderíamos aninhar vários outros desde que haja real motivo para isso. Observem o caso do 'Exit For' e no comentário que é precedido de uma única aspa simples explico que de outro modo o ASP-C retornaria um erro de sintaxe. Sendo a condição do 'If' correta quando o 'i' for igual a 7 ele retorna que 'Não podemos continuar!' junto à tag do HTML "<br/>" que pula linha dentro das aspas duplas e acaba entrando no segundo 'If' aninhado que também está correto já que 'i' continua valendo 7. O looping 'For' portanto será terminado antes de alcançar o 10. Observe bem e tente fazer diferente para receber os erros relacionados.

Abaixo, ao final temos o 'Next' do 'For', diferente do 'End' do 'If' esse 'Next' implica que o 'i' será automaticamente incrementado pelo valor do 'Step' e virá assim o próximo ciclo. Veja a linha que codifica para UTF-8 acima de todo Script.

De uma forma muito rápida vimos várias coisas aqui que já dão possibilidade de criar vários resultados interessantes. No futuro virei com outros tipos de loopings e provavelmente um início sobre 'Functions'. Qualquer dúvida não deixe de perguntar abaixo e se encontrou alguma inconsistência no que apresento aqui informe para que possamos aprender juntos.

Siga o link para saber como utilizar o ASP-C na sua máquina Windows

10 dezembro 2021

ASP Classic

Com um título desses eu devo ter chamado a atenção de alguém, ao menos um jurássico na área ou alguém se deparando com a necessidade de estudar. Claro que o ASP não tem nada muito além do que qualquer outra linguagem a não ser um detalhe: documentação ZERO!

É, eu estou usando de uma hipérbole e não vejo tanto exagero assim. É simplesmente um deserto. Num universo conectado os mecanismos de busca acabam dando mais trabalho do que deveriam. E aqui eu alfineto de fato todos eles. O melhor momento desses buscadores foi no início desse processo onde tudo sem filtro algum aparecia na sua tela e você evitava de clicar em certas coisas. Porém...

Digamos que você é feito eu e odeia muita enrolação e quer ver o cru da coisa e testar. 

Digamos que você Jurássico já trabalhou anos seguidos com tal estrutura de programação que se utiliza de scripts¹, e sabe que algo sempre vem à mente para ser garimpado e muito pouco é encontrado. 

Não prometo nada e digo logo, aqui vou colocar meus passos pelo ASP Classic e já consegui alguns livros. Um me decepcionou bastante já que contém erros absurdos. Ainda acho que foi proposital do autor pra fazer os leitores aprenderem de fato como utilizar tamanho monumento histórico ao corrigir o livro em quase todos os exemplos.

Pra ficar mais fácil de entender:

De início consegui testar algumas poucas linhas num servidor da empresa que utiliza o ASP-C. Tudo muito normal, variáveis, padrões e palavras reservadas como sempre. Decidi correr atrás de livros pra não perder tempo na internet. Não sei se foi a melhor decisão. Dois em inglês e um destes acho que não vou usar tão cedo. Dois em português que contém várias discrepâncias como citado acima. Com isso em mãos, mais exatamente num Kindle, me vi pensando em como rodar aqui no meu notebook como consigo com o PHP por intermédio do XAMPP e assim estudar com certa facilidade.

Por fim comecei a ler mais sobre IIS - Internet Information Services - ou serviço de informações da internet. IIS é  um pacote de software projetado pra windows server²,  mas eu não estou usando o Windows Server. Eu utilizo aqui o 11 e decidi mesmo assim seguir alguns passos.

Primeiro abra pela pesquisa do windows o painel de controle ou aperte "windows + i". 

Pelo painel de controle clique em "Programas" depois "Ativar ou desativar recursos do Windows". Nesta nova tela você ativará todas as opções abaixo e tudo que tiver dentro delas tb:

  • .NET Framework 3.5 (inclui .NET 2.0 e 3.0)
  • .NET Framework 4.8 Advanced Services
  • Serviços de informações da Internet
  • Serviço de ativação de processos do Windows


Pela tecla de atalho "Windows+i" será aberto "Configurações". Vá para "Aplicativos" depois clique em "Recursos Opcionais", depois em "Mais recursos do Windows" no fim da tela. A mesma janela aparecerá bastando ativar os recursos citados acima.

Tendo feito isso será preciso fechar tudo e reiniciar o Windows 11. Isso mesmo, não adianta reclamar, tem de fazer. Quando reiniciar corra atrás do Windows Update e faça uma verificação. Atualize seu sistema e reinicie novamente se houver update. Ao reiniciar abra o browser que você usa e escreva localhost. A imagem abaixo precisa aparecer para comprovar que já está funcionando. O próximo passo depende do nível de segurança do seu Windows sobre as pastas do sistema:

 

- Primeiro procure na partição C: a pasta "inetpub", dentro acesse a pasta "wwwroot". Ao acessar tente criar um arquivo de texto nesta pasta clicando com o botão direito. Se conseguir está tudo ok e você poderá vincular a pasta ao seu workplace e IDE qualquer que você use. Se não permitir isso você precisa acessar as configurações da pasta e alterar a segurança da mesma para que seu usuário tenha acesso, talvez mesmo sendo administrador seja preciso. Observe a imagem à direita abaixo qual usuário eu selecionei e perceba que marquei todas as opções da pasta na parte de "permissões para usuários" aplicando em seguida.


 Pronto! Agora você conseguirá codificar em ASP e verá o resultado no seu browser padrão. Sem ter de subir pra onde quer que seja que já esteja preconfigurado pra isso e possa testar.

Vale colocar mais um detalhe: por padrão os erros do ASP não aparecerão no browser e isso precisa ser corrigido da seguinte forma: 

Abra a pesquisa do Windows e digite "IIS". Clique no "Gerenciador do Serviços de Informação da Internet". Perceba na imagem ao lado que eu escolho entre duas opções de aplicação com quase o mesmo nome. Com ele aberto procure o ícone ASP e clique duas vezes. Clique em "Propriedades de Depuração", depois em "Enviar erros ao Navegador", troque False por True. À direita desta mesma tela tem uma opção "Aplicar" ou "Cancelar". Clique em "Aplicar" e pronto!

Agora haverá algum avanço no seu estudo do ASP-Classic. No futuro trarei alguns códigos básicos, mas para um teste definitivo crie um arquivo "index.asp" dentro da pasta "wwwroot". Nele adicione essa pequena tag ASP e salve: 

<%  Response.write "O ASP está funcionando normalmente!" %>  

Para abrir no navegador digite "localhost/index.asp". A resposta no browser será essa última imagem abaixo à esquerda. Perceba que há erro de codificação, é preciso informar qual utilizar pra corrigir isso, mas num próximo post eu falo sobre este e outros detalhes mais específicos da linguagem. 

Por fim espero que isso sirva tanto quanto me serviu. Ainda que muitos digam que ASP é uma linguagem morta é bom saber que isso é completamente fora da realidade pois muitos sites ainda hoje insistem em utilizar o ASP Classic e muitos destes tem dificuldade em avançar pra ASP.NET ou outras. 


Um detalhe importante para quem usa Xampp ou qualquer outro serviço por meio do localhost. Será preciso alterar a porta padrão do Xampp que é 80 para qualquer outra livre. Aqui alterei para 8012 o que me faz ter de escrever no navegador da seguinte forma: 'localhost:8012/' para poder acessar meus estudos e projetos em PHP.

Para fazer isso basta clicar dentro do Painel de Controle do Xampp em 'Explorer'. Dentro desta pasta procure por 'apache\conf' e abra com o bloco de notas o arquivo 'httpd.conf'. Dentro deste arquivo clique 'ctrl + f' e busque por 'Listen'. Troque 80 por 8012 ou uma porta de seu desejo que esteja livre. Se não tiver certeza de qual escolher clique no botão 'Netstat' dentro do Painel de controle do Xampp para verificar quais portas estão sendo usadas e assim escolher alguma não listada nesta tela. Para mim isso foi suficiente não tendo que alterar mais nada. Feche o arquivo e salve as alterações. Vá no navegador e digite: 'localhost:8012/' ou a porta de sua escolha. Com isso você verá seus arquivos, pastas ou se houver algum 'index.html' ou 'index.php' ele será lido e apresentado automaticamente. Não ocorrendo isso volte no arquivo e procure qualquer entrada lá que não esteja comentada '#' que faça referência à porta 80 e adicione os detalhes pertinentes. Salve e teste novamente. Ainda não obtendo resultado procure no google algo mais detalhado sobre esse assunto. Como falei acima aqui não precisei trocar nada além do que citei e portanto acredito que na sua máquina ocorrerá do mesmo modo. Vale ressaltar que não sou um expert em nada do que falei aqui e portanto se você explodir sua máquina o problema é seu por acreditar em um post na internet e/ou por não saber seguir instruções.

Entretanto fiz exatamente tudo aqui com o Windows 11 e nada, nada ocorreu de errado até agora. Portanto eu atesto que isso seja por sua conta e risco já que há alteração de recursos do sistema. Tendo dito isso e confirmando que estou tirando o corpo fora de qualquer absurdo que você faça na sua máquina, espero que seja de fato muito útil essa informação e que muitos comentários lindos e agradecidos apareçam por aqui. Na próxima vou tratar mais da linguagem(Script!) em si e trazer alguns exemplos dela sendo executada na minha máquina. 

Até breve!