Blog::Programação


Netbeans não completando código PHP

Ontem estava configurando o Selenium 2 pra funcionar com PHP no Netbeans, e notei que o editor não estava completando código das funções do runtime do PHP.

Super útil, afinal uma das coisas chatas do PHP é que não existe padrão na ordem dos parâmetros.

Aí, procurando na web, achei a solução:

Com o Netbeans fechado, vá até a pasta onde ficam os arquivos de cache das variáveis do Netbeans para o seu usuário, e apague todos os arquivos e diretórios que estiverem lá dentro.

No Linux esta pasta é: ~/.netbeans/6.9/var/cache

No XP é: C:\Documents and Settings\\6.9\var\cache

E no Vista: C:\Users\\6.9\var\cache

Pronto, basta abrir o Netbeans e ele irá reconstruir o cache das variáveis.






Tela em branco com PHP 5.3 e Windows Vista/7

Estes dias precisei instalar o PHP 5.3 em várias máquinas, entre elas alguns Windows Vista/7, e sempre me deparava com uma tela em branco (ou blank screen, se preferirem).

Para os que chegarem aqui através de mecanismos de busca, vou ser bonzinho e já separar o post em "blá blá blá" e a resolução do problema.

 

Problema

Tempos atrás vi uma implementação relativamente decente de ActiveRecord pro PHP. Claro que pra isso, eles se basearam na versão do Ruby.

Bom, pra funcionar, essa biblioteca depende de ter instalado o PHP 5.3, que corrige alguns erros históricos de design do PHP e traz algumas melhorias (não, a bagunça das funções nunca vai ser arrumada ou vão usar pacotes pra organizá-las).

No Linux, foi que é uma maravilha. Mas no Windows, eu instalei manualmente, com instalador, versão thread safe, não thread safe, mas todas davam o mesmo final: tela em branco.

Procurei no Oráculo, e vi que existe algum conflito do PHP 5.3 e do IPV6 do Windows Vista/7. Mesmo para aqueles que usam XAMPP ou WAMP.

Interessante que o IPV6 já está desabilitado nesta máquina, mas mesmo assim o PHP insiste em ter conflito com ele.

 

Resolução

Enfim, resolvi testar a resolução do site (cujo link eu não estou mais achando, em inglês tem vários apontando o problema, em português nenhum!), e não é que funcionou?

Para isso, é preciso editar o arquivo C:\Windows\System32\drivers\etc\hosts com privilégios de administrador (senão você não vai conseguir salvar as modificações).

Neste arquivo, comente a linha que começa com ::1 (este ::1 é o equivalente ao 127.0.0.1 - ou localhost - para o IPV6).

Para comentar, coloque o sinal de jogo da velha (#) no começo da linha. Ou seja, agora essa linha deve começar com #::1 (o resto da linha não altere).

Reinicie o Apache.






Cada sorriso, um Flash!
Categoria(s): Programação TI Web

Tá, eu sei que já falei de Flash ultimamente, mas o aplicativo da Adobe voltou a ser assunto estes dias.

Primeiro, porque o iPad saiu oficialmente, e realmente sem suporte ao Flash. Enquanto alguns dizem que isso é primordial, a Apple publicou uma lista de sites que suportam o iPad.

Na prática, isso quer dizer: sites que rodam sem Flash. Ou melhor ainda: sites que detectam que o navegador é o Safari Mobile, e exibem uma versão sem Flash.

Seria isso o suficiente para as empresas criarem sites sem o uso do plugin?

Enquanto isso, a Google anuncia que o Chrome virá com o plugin do Flash já por padrão em seu navegador. Não acredito que a empresa veja o plugin como futuro (já que ela vem investindo fortemente no HTML5 em seus produtos exatamente para substituir o Flash).

Acredito que seja apenas uma alfinetada à Apple e ao seu iPad, já que a notícia foi dada praticamente em conjunto com o lançamento do iPad - e como vocês sabem, as duas empresas vem batendo de frente ultimamente, principalmente no que toca aos celulares e seus respectivos sistemas, concorrentes.

E ainda por último, mas não menos importante, ontem um amigo meu me mandou um link dessa biblioteca Javascript, o Spritely, que diz substituir perfeitamente o Flash no que diz respeito à animações. O que vocês acham?






Atualização no tutorial de Templates

Atualizei a biblioteca de Templates com um novo método para checar se uma variável de template existe antes de atribuir valor para a mesma.

Fiz isso porque boa parte das dúvidas que me enviam por email é relacionado a isso.

Também atualizei o tutorial e a documentação em inglês e português.

Agora preciso dormir porque o dia foi longo e amanhã me espera!

Espero que seja útil! :)






Gravando vídeo da web

Nesse post vou falar descrever meu calvário ao tentar fazer um gravador de vídeo para web, no início tentando fazer ele com Java, e depois partindo para uma solução em Flash.

Aproveitando meu trabalho anterior com multimídia em Java, a mesma empresa que me pediu o trabalho do player multimídia, me solicitou que eu fizesse um gravador de vídeo que usasse a webcam do usuário. Porém, rodando na web.

Além disso, o gravador de vídeo também deveria capturar o som do microfone.

Parte 1: Tentando com Java

Bom, lá fui eu tentar usar o JMF novamente, já que ele captura o vídeo quando instalado na máquina do usuário. Achei no site da Sun umas classes que complementam o JMF e mostram na tela o vídeo que está sendo capturado (o JMF sozinho não mostra).

O chato, porém, é que pra ele capturar vídeo é preciso ter algumas bibliotecas nativas (DLLs ou .so) instaladas no dekstop do usuário.

E com applets, vira aquele parto: fiz um applet assinado (que o usuário tem que aceitar o alerta de segurança), e fiz um esquema pra detectar se o usuário tinha as bibliotecas nativas. Caso não tivesse, eu redirecionava ele para uma página com o instalador.

Bom, aí começaram os problemas: embora gravasse o vídeo, o cliente disse que os usuários do seu sistema seriam os mais novatos possíveis, e não gostou da solução de instalação de bibliotecas nativas.

Além disso, para um applet conseguir usar o microfone não basta ele ser assinado. Se isso já não fosse incômodo o suficiente, eu teria que achar uma solução para criar o arquivo .java.policies na pasta do usuário. E mesmo assim, o applet não consegue gravar e reproduzir ao mesmo tempo (por questões de segurança). Me pareceu ser um bug na verdade, já que em vários fórums disseram que arrumando as policies isso funcionaria.

Com javawebstart, o som era gravado normalmente, mas além do problema das bibliotecas nativas e seu instalador, o cliente não gostou de ser uma aplicação não embutida na página.

Ou seja, resumindo: se você fizer em javawebstart, e instalar bibliotecas nativas no computador do usuário, funciona.

Mas ainda assim, o vídeo gravado não terá compactação, será em RGB ou YUV.

Depois de pesquisar outras soluções, cheguei a duas possíveis: comprar uma biblioteca que permite um applet gravar som e vídeo (da Vimas Technologies), porém só funciona no Windows; ou jogar tudo pro alto e tentar usar o Flash.

Parte 2: Usando Flash

Já que em Java não deu certo, e eu não podia deixar o cliente na mão, fui então pesquisar como fazer o gravador de vídeo em Flash.

Eu usei bastante Flash em 1999 e 2000, na época do Flash 3 e 4, pra fazer umas animações, ou seja, muita água rolou por debaixo da ponte desde então.

Muita gente sabe aqui que não gosto de usar Flash, Applets ou qualquer outro tipo de plugin para fazer coisas que é possível fazer com Javascript+HTML. Porém esse não foi o caso.

Depois de achar na web alguns exemplos ensinando como usar a câmera (existe um objeto ActionScript chamado Camera - simples, não?), eu li que para gravar o vídeo num servidor, eu precisaria de um serviço de hospedagem com suporte ao Flash Media Server, da Adobe.

Outra vantagem, é que o vídeo é gravado diretamente no servidor em formato .flv (que usa o codec h.264).

Após consultar alguns fóruns, indicaram o serviço da Influxis (estrangeiro), que disseram ser ótimo, além de serem parceiros da Adobe.

O cliente contratou o serviço, fui lá e configurei a conta, e aí tentei sair do "olá mundo" com o uso da câmera no Flash. Vi que usando o objeto NetStream, eu conseguia gravar um vídeo da câmera no servidor (e reproduzir, se necessário), bastando conectar o vídeo gravado num objeto Video. Tudo bem simples mesmo.

Bom, aí agora faltava elaborar mais o gravador: colocar botões, capturar os eventos, fazer pausa, stop, etc. E me deparei com algo que não esperava: a bagunça que virou o ActionScript.

Além de 3 versões, o Actionscript 2 é totalmente diferente do 3. Fora isso, boa parte do que eu tive que usar para criar o player, não estava documentada no help do Flash. Pra ajudar, existem vários sites da Adobe com parte da documentação, e coisas que você só acha em fórums (que não sejam da Adobe).

Ou seja, eu tive que ficar procurando pela web cerca de 70% do código final, que era de coisas não documentadas, e ficar na tentativa e erro.

Pra ajudar, depois de 4 horas tentando achar o motivo do gravador de vídeo ter parado de funcionar de repente, eu notei que ele precisa ter a largura e altura mínimas suficiente para mostrarem o alerta de segurança (que confirma se o usuário permite usar a câmera). Caso o flash não tenha altura e largura mínimas pra essa confirmação aparecer, simplesmente não há captura do vídeo.

Enfim, saiu, mais foi um parto. E espero que isso possa ajudar alguém que precise fazer o mesmo.





Anúncios