“Preview features” são novas funcionalidades disponíveis na linguagem Java, Java Virtual Machine (JVM) e/ou Java SE API que são totalmente específicadas e implementadas, mas não são garantidamente permantentes, ou seja, estão disponíveis para o “feedback” da comunidade que usa, principalmente em ambientes de aplicações do mundo real, a partir da opinião da comunidade, essas funcionalidades podem se tornar permanentes em versões futuras da plataforma Java SE.
Fonte (s):
– https://openjdk.org/jeps/12
Categoria: Programação
O Open Cart é uma alternativa para pequenos e-commerce?
Recentemente comecei a estudar o Open Cart (OC) como plataforma para e-commerce no lugar do WooComerce, apesar de pretender levantar mais detalhadamente as vantagens de cada uma das plataformas, o Open Cart me chamou atenção por parecer uma escolha interessante para alguns modelos de negócios como: os que usam inscrições recorrentes (subscriptions/assinaturas) e sistemas de afiliados. Parece que o OC já tem boa parte dessas duas regras de negócio implementadas, mas em compensação a documentação, suporte e extensões da comunidade me parecem ser bem precárias em relação ao WooCommerce.
Continue lendo “O Open Cart é uma alternativa para pequenos e-commerce?”Aplicação web com upload direto para S3 e SQS
Exemplo prático de como usar a SDK em JavaScript da AWS para fazer upload direto de arquivos, a partir do navegador para o serviço Amazon Simple Storage (S3). A principal vantagem de fazer um upload direto para o S3, sem passar por algum tipo de servidor intermediário é diminuir o gargalo que um pré-processamento poderia gerar.
Este exemplo foi apresentado como atividade na disciplina de Tópicos em Engenharia de Software lecionada pelo Dr. Gabriel Costa Silva. Os códigos de upload são idênticos ao exemplo já disponível pela própria Amazon (https://docs.aws.amazon.com/pt_br/sdk-for-javascript/v2/developer-guide/s3-example-photo-album.html), só que ao invés de ser um álbum de fotos, esse sistema funciona como se fosse um simples gerenciador de arquivos apelidado de “cenourinha files”.

Deixando o JQuery: toggleClass em puro JavaScript
O toggleClass() é um método do jQuery que adiciona ou remove uma classe CSS de um determinado elemento, o seu uso mais comum eu diria que é para renderizar ou não determinado elemento HTML, esse efeito conhecido como hide/show funciona adicionando e removendo uma classe com um display: none, mas o toggleClass() é útil para qualquer efeito de mudanças de CSS.
Continue lendo “Deixando o JQuery: toggleClass em puro JavaScript”jQuery não faz sentido para todo projeto
O jQuery teve um papel muito importante em meados de 2007, nessa época as inconsistências entre os padrões adotados por navegadores para se fazer animações, manipular o DOM e fazer requisições assíncronas(“Ajax”) era bem maior que as existentes entre os navegadores atuais.

Instalando imagick no Debian como extensão PHP
O ImageMagick® é um software que permite editar, criar, converter e trabalhar com imagens bitmap em mais de 200 diferentes formatos (PNG, JPEG, TIFF, GIF, etc), ele tem uma licença de distribuição Apache 2.0 que permite a distribuição dele como binário ou em softwares com código aberto ou proprietário.
Como extensão PHP, o ImageMagick ou imagick provê as classes: Imagick, ImagickDraw, ImagickPixel, ImagickPixelIterator e ImagickKernel. Particularmente nunca trabalhei puramente com as classes dessas extensão, mas segundo o WordPress no sistema deles a extensão melhora a qualidade das imagens adicionadas na biblioteca, adiciona um redimensionamento inteligente de imagens pequenas e o suporte as miniaturas de PDF.
Instalar a extensão no Debian e derivados é bem fácil, só exige o restart do Servidor/FastCGI Process Manager do PHP, no meu ambiente com Debian e PHP 7.3 é como no exemplo:
sudo apt-get update sudo apt-get install php-imagick sudo nginx -s reload sudo /etc/init.d/php7.3-fpm restart
Para verificar a instalação do imagick basta criar um arquivo PHP com a função phpinfo();.

Pegando uma linha especifica de um arquivo com PHP
Essa foi a solução mais simples que encontrei para pegar uma linha específica de um arquivo com PHP, sem loop, fseek(), etc, utilizando a classe SplFileObject que suporta a busca por linhas.
Continue lendo “Pegando uma linha especifica de um arquivo com PHP”Recortando e fazendo upload de imagens com preview usando o Croppie.js + PHP
Sobre o Croppie: É uma biblioteca que se propõe a ser leve, rápida e simples nas funções de recortar e fazer pequenas alterações nas imagens no client-side.
Com base nos exemplos da documentação do Croppie, eu fiz um exemplo mostrando como usar um pouco do croppie.js para fazer upload de imagens recortadas para o server-side, usando PHP, e por meio do método .ajax() do jQuery para fazer requisições assíncronas.
Continue lendo “Recortando e fazendo upload de imagens com preview usando o Croppie.js + PHP”
Fatal error: Uncaught Error: Call to undefined method stdClass::
Esse erro ocorre quando você está tentando usar um método de uma classe que não foi definida, ele é similar ao Fatal error: Uncaught Error: Class, mas ele pode ocorrer de uma forma muito sutil, programando no Phalcon Framework por exemplo quando você faz uma busca dessa forma:
$bar = new Class();
$bar = Class::findFirst(); //retorna um objeto ou false se não tive resultado
$bar->delete(); // Fatal error se o método acima retornar false
No código acima se você utilizar o método de Class no objeto sem verificar se foi retornado um objeto de fato, ele irá causar esse erro, logo, a correção é: verificar se o objeto continua sendo o mesmo objeto ao longo da execução das instruções.
Challenge: Binary search(Khan Academy)
Solução para o problema de busca binária no Khan Academy:
/* Returns either the index of the location in the array, or -1 if the array did not contain the targetValue */ var doSearch = function(array, targetValue) { var min = 0; var max = array.length - 1; var guess, count = 0; while(min <= max){ guess = Math.floor((min+max)/2); println(guess); count++; if(array[guess] === targetValue){ println(count); return guess; } else if(array[guess]<targetValue){ min=guess+1; } else{ max = guess-1; } } return -1; }; var primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]; var result = doSearch(primes, 970); println("Found prime at index " + result); Program.assertEqual(doSearch(primes, 73), 20); Program.assertEqual(doSearch(primes, 2), 0); Program.assertEqual(doSearch(primes, 97), 24);