Programação – Linguagem C
Albino Biasutti Neto, 12/03/2010 | Source: Albino Biasutti Neto :: Blog
Albino Biasutti Neto, 12/03/2010 | Source: Albino Biasutti Neto :: Blog
Hugo Doria, 12/03/2010 | Source: Hugo Dória - hdoria
O número de aplicações WEB tem aumentado bastante nos últimos anos, mas, infelizmente, os desenvolvedores parecem não se preocupar com a segurança delas.
É cada vez mais comum encontrarmos vulnerabilidades nas páginas WEB e uma das mais populares é a SQL Injection.
Felizmente, existem algumas ferramentas que servem para proteger suas aplicações desta falha. Uma delas é o GreenSQL, um um firewall usado para proteger uma base de dados MySQL de ataques de SQL Injection.
Veja o artigo completo aqui.
kalib, 12/03/2010 | Source: Marcelo Cavalcante - kalib

Saudações pessoal!
Quem é vivo sempre aparecer…
Não, eu não abandonei o blog. Apenas estava sem recursos para continuar postando. Meu notebook resolveu apresentar problemas sérios depois de 4 anos na luta e acabei tendo de comprar outro. Ainda não chegou, portanto ainda está difícil conseguir postar por aqui.. mas cá estou.
Como todos já devem saber sou militante do movimento de Software Livre e como tal sempre estou engajado em algum projeto/evento que envolva liberdade e compartilhamento de conhecimento. Neste momento estou me focando no FLISOL Fortaleza 2010.
Para quem ainda não conhece o FLISOL, Festival Latinoamericano de Instalação de Software Livre, é um evento anual que acontece, como o próprio nome indica, simultaneamente em toda a América Latina. Mais de 150 cidades sediam o evento com organizações locais que trocam informações e ajuda entre si para tal.
Desde 2005 estou direta ou indiretamente engajado na organização do mesmo aqui em Fortaleza, portanto neste ano não poderia ser diferente. Um dos grandes diferenciais, e minha maior motivação, deste ano é o fato de estarmos, também, comemorando o aniversário de 5 anos da Comunidade Tux-CE.
O evento se baseia em, basicamente, instalar Software Livre nas máquinas dos visitantes que não possuem experiência
ou não se sintam seguros para o fazerem sozinhos, porém em algumas cidades, como é o caso aqui em Fortaleza, optamos por fazer mais do que simplesmente instalações. Sempre temos palestras, apresentações, demonstrações, distribuição de mídias com distribuições Linux e outros softwares livres, etc…
Neste ano estamos adotando o recurso de “Páginas Amigas” como uma forma de ajudar e ser ajudado! Bem a cara do Software Livre, certo?!
Se você possui um site, blog ou qualquer coisa que o valha, pode submeter-se como uma página amiga do FLISOL. Com isso você terá um banner de seu site, blog ou coisa que o valha exposto em nossa página do FLISOL em troca de um banner do evento no seu. É uma espécie de ajuda mútua onde ambos se beneficiam. Para conseguir mais detahes sobre como se tornar uma página amiga do FLISOL, visite este link.
Amanhã mesmo teremos uma reunião de organização do evento na qual discutiremos mais alguns detalhes sobre o mesmo.
Em breve volto a publicar maiores detalhes.
Abraços!
![]()
Leonardo Schaffer, 10/03/2010 | Source: Arch Linux Brasil
Sérgio Berlotto, 10/03/2010 | Source: Sérgio Berlotto - Site Pessoal
Fonte: http://www.catswhocode.com/blog/10-sql-tips-to-speed-up-your-database
Aproveitando a dica do @pinceladasdaweb, dei uma lida no post e vou fazer uma tradução livre aqui, acrescentando meu ponto de vista e mais algumas dicas sobre SQL em um banco de dados relacional:
1. Defina seu banco de dados com cuidado
Um bom banco de dados é um banco de dados bem desenhado, que não gera tanto trabalho para buscar as informaçoes e que não guarda dados duplicados. É um banco que tem uma estrutura clara e com nomes de tabelas e campos identificáveis.
2. Otimize o que for necessário
Nem todos os SQL que utilizaremos devem e podem ser utilizados. Mas várias instruções podem e DEVEM ser otimizadas. Para o banco cada query tem um custo, e utilizando a ferramenta e EXPLAIN, que tem em praticamente todos os bons bancos de dados, podemos ver o que está afetando mais nossa query. Cuide os joins, linhas desnecessárias, igualdades incorretas, falta de indices, etc…
3. Use algo para agilizar
Utilizar um sistema de cache é sempre muito bom, e não apenas para as querys. Pois tudo que tem que ser gerado e processado gera custo e tempo, sendo que se você já tem um resultado pronto, do que você quer, sendo q o mesmo já foi processado a algum tempo atrás é muito bom ! Isto acaba com o tráfego na rede e no processamento do banco.
No site ele cira algumas ferramentas interessantes. E devem ter outras também.
4. Não selecione o que você não precisa
Corretíssimo! Nada de “select * …” por ai heim !
Coloque na projeção do SQL ( aquela parte depois do “select” e antes do “from” ) apenas os campos que você vai precisar. Isto nos além de gerar menos custo para o banco, acaba organizando nosso retorno e padronizando a aplicação.
5. Limite o numero de linhas a serem retornadas
Geralmente o usuário final, aquele que está vendo aquela listagem de algum item na tela, não vai precisar de todos os itens que tem cadastrado na tabela. Então use paginação ! Sempre ! Limitando o número de linhas a serem retornadas do banco o custo cai ser bem menor e a resposta vai ser mais rápida. O uso de Ajax ( para web ) geralmente ajuda bastante nestes casos.
6. Não coloque chamadas ao banco dentro de loops
Organize seu código, que eu duvido que você não conseguirá unir todos os dados necessários em apenas 1 ou 2 chamadas no banco, ao invés de colocar a query em um loop. Lembre-se, que o quanto menos tiver que acessar o banco melhor !
7. Utilize JOINS ao invés de SUBQUERYs
Concordo ! A não ser em casos muito, muito complexos, não utilize subquerys, elas são muito mais pesadas e são executadas 1 vez para cada linha retornada da nossa query pai, gerando assim um custo enorme para o banco. E subquerys na projeção NEM PENSAR ! NUNCA !
8. Utilize os wildcards
Até certo ponto eu levo isto como uma feature mesmo, do SQL ansi, com o comando LIKE, do que um forma de otimização.
9. Utilize UNION ao invés de OR
Bem, eu não entendi direito o pq desta dica, até mesmo pq eu não utilizo o MySql, mas para mim isto não é válido, pois na grande maioria dos casos esta troca causará um aumento de custo ao banco, e não o contrário. Mas sempre teste sua query com mais de uma forma, talvez este seja seu caso.
10. Use Índices
Sim ! Use indices no seu banco. Mas além das PK e os indices para elas criados automaticamente, utilize somente indices em campos e tabelas que necessitarão deles. Se un indice não é utilizado em nenhum momento, em nenhuma query, exclua-o, pois ele estará gerando trabalho em vão para o banco atualizá-lo.
Como eu faço:
- Rodo a query e analiso
- Crio indices onde eu acho que deve ser criado
- Rodo a query e analiso
- Crio, altero e excluo mais algins indices onde eu acho que deve
- Rodo a query e analiso
- Excluo todos os indices que não estão sendo utilizados
- Rodo a query e analiso
- Pronto!
Geralmente estes poucos passos bastam controlar a criação de indices.
11. Triggers – Tome cuidado com elas
Elas podem nos ajudar muito, mas podem deixar o banco de dados lentão e até gerar dead-locks. Então pense bem se é realmente necessário criar tal procedimento como uma trigger.
12. Sequences/Autoincremento
Estes campos nos facilitam muito o controle das PKs e não oneram em trabalho do banco.
13. Procedimentos pesados, Batch
Estes sim eu aconselho a, sempre que possível, serem executados dentro banco.
A linguagem que roda dentro do banco de dados é muito mais ágil ao trabalhar com os dados do que ficar trazendo e enviando dados do banco até a aplicação. E isto em procedimentos que geram informações de cálculos violentíssimos, ou controles com muitos dados, e que podem demorar para rodar, podem ser colocados dentro do banco.
No PostgresSQL por exemplo, temos não somente o Pl/pgSQL, mas sim inúmeras linguagens que trabalham dentro do DB, no Oracle tem o PL/SQL, e assim vai…
No mais é o seguinte:
Phillipe ( SmithuX ), 10/03/2010 | Source: Phillipe Smith
O médico Canrobert Oliveira, do Hospital Oftalmológico de Brasília, relata ter recebido pacientes com ardência nos olhos após terem visto filmes tridimensionais. Ele fez sugestões à Anvisa (Agência Nacional de Vigilância Sanitária) pedindo uma ação conjunta com o CBO (Conselho Brasileiro de Oftalmologia) para fiscalizar a higienização nos cinemas.
"[Os óculos] são veículos de contaminação de conjuntivite por não serem individualizados ou higienizados para passarem de um espectador a outro", diz. Oliveira sugere que os espectadores passem álcool em gel nas lentes, hastes e armações antes da sessão.
A Cinemark, líder do mercado de exibição no Brasil, com 412 salas, afirma que todos os óculos são higienizados após o uso. Na Grande São Paulo, 20 salas da empresa exibem filmes 3D atualmente.
A questão também preocupa autoridades na Europa. Em fevereiro, o Ministério da Saúde da Itália recolheu mais de 7.000 óculos em cinemas do país alegando "razões de higiene". E promete recolher mais nos próximos dias.
Publicado: Quarta-feira, 10 de Março, 2010.
Fonte: Folha Online
Sérgio Berlotto, 09/03/2010 | Source: Sérgio Berlotto - Site Pessoal
Continuando uma série de posts sobre o ExtJS, vou falar agora sobre uma feature existente em algumas linguagens também, que é o “namespace”.
Pela wikipedia “namespace” é: “In general, a namespace is an abstract container providing context for the items (names, or technical terms, or words) it holds and allowing disambiguation of homonym items having the same name (residing in different namespaces).”
Traduzingo ( mal e porcamente, se puder me ajude! heheh ): “Em geral, um namespace é um recipiente genérico que contextualiza os itens (nomes ou termos técnicos, ou palavras) que contém, permitindo desambiguação de itens homônimos que tem o mesmo nome (que residem em espaços diferentes).”
No ExtJS não é diferente. Como com o Ext acabamos por gerar muitos e muitos componentes, telas, painéis e páginas completas em vários arquivos javascript, nada mais justo que organizar tudo isto separando-os em namespaces. Vejamos alguns exemplos: Digamos nosso usuario_novo.js
Ext.ns("App.NovoUsuario"); //Ext.ns é uma contração para a função Ext.namespace
App.NovoUsuario.janela = new Ext.Window({
//...
});
E depois nosso usuario_edicao.js
Ext.ns("App.EditarUsuario");
App.EditarUsuario.janela = new Ext.Window({
//...
});
Aqui criamos duas Windows ( não coloquei todas as propriedades pois não é o foco ) dentro de dois namespaces diferentes. Conseguimos facilmente contextualizar o que cada objeto criado faz. Isto organiza nosso código e ainda dá um limite de escopo para as variáveis e objetos ali criados.
Outra forma de utilizar o namespace é assim:
var NS = Ext.namespace("App.Modulo");
NS.PainelDeTeste = function(cfg){
NS.PainelDeTeste.superclass.constructor.call ... etc
};
E
Ext.ns("App","App.Edicao","App.Criacao");
App.storegenerico = new Ext.data.Store({
//...
});
App.Edicao.janela = new Ext.Window({
//...
});
App.Criacao.janela = new Ext.Window({
//...
});
Ao dar uma olhada na documentação do proprio Ext, temos uma árvore a esquerda e os dados informativos a direita.Esta árvore representa toda a estrutura montada através dos namespaces do core. E também, quando encontrarmos alguns plugins e widgtes criados por usuários, que não estão na distro padrão do Ext, geralmente estes pertencem ao ns Ext.ux, ficando assim padronizados e organizados.
Resumindo, os namespaces dão organização e legibilidade ao nosso código além de definir escopos.
até+
Links:
hlegius, 06/03/2010 | Source: Helio Costa - hlegius
Se você reparar bem o PHP é no quesito padronização de código uma linguagem bem brasileira. Há os padrões: Pecl, Pecl2, Zend Framework e Java (vulgo Zend Framework Coding Standard for PHP >= 5.3).
Reparando bem, cada modelo tem suas particularidades, porém com mesma base. O Pecl2 e Zend Framework PHP >= 5.3, aqui chamado de Java/Sun/Oracle Coding Standard, tem o mesmo objetivo: atualizar o não-padrão para trabalharem com suporte a Namespaces. O que explico mais adiante.
Antes do namaspace, ou seja, antes do PHP 5.3 a Zend recomendava um padrão que eu sempre achei ridículo, mas pensando bem, não tinha muito como fugir disso:
Arquivo: /application/module/Object.php Nome da Classe: Module_Object
Arquivo: /application/module/client/view/Json.php Nome da Classe: Module_Client_View_Json
Funcional ? Sim, sem dúvidas. Elegante ? Bem…
Bonito fica quando encontramos coisas como:
Arquivo: /application/module/AObject.php Classe: Module_AObject <<abstrata>>
A adoção do prefixo “A” para abstrações e do prefixo “I” para interfaces. Além de nada elegante, só atrapalha o uso de Domain-Driven Design onde, resumidamente falando, tem como foco: transparecer no código o que você ouve de seu cliente/stakeholder.
Salvo engano meu, vi isso em um destes padrões sugeridos para o PHP. Mas infelizmente não encontrei o link :/
E aí veio o PHP 5.3
Com a chegada oficial do PHP 5.3, os padrões ao invés de unificarem-se e sugerir algo em comum, resolveram o que ? Criar mais padrões (o que chega a ser irônico) para brindar a chegada do tão sonhado Namespace (ou pacotes, para os Javeiros).
A Zend sugere o seguinte agora:
Arquivo: /application/module/client/view/Json.php Namespace: \module\client\view Classe: Json
Sim, óbvio ! Temos assim o padrão Zend Framework v2 ou simplesmente, Java Coding Standards. E eu não estou brincando não. No próprio artigo proposto por Matthew Ratzloff, ele cita como referência o link para o site do Java. O foco de Matthew é acabar com um problema grave criado pela Zend Framework: abreviação de nomes devido a quantidade de caracteres.
O pessoal do Pecl, sugeriu algo bem parecido. Manteve as particularidades e adicionou o suporte à namespaces ao seu Coding Standard.
Porém, há os frameworks
Obviamente em meio a sopa de pseudo-padrões, cada framework tem o seu próprio como era de se esperar. symfony, Cake PHP, Zend Framework, Kohana, etc. Cada um com o seu próprio mesclando vários e criando um terceiro.
Em minha sincera opinião, acho o Coding Standard do symfony de longe o mais bizarro: tab com dois espaços e nome de classe iniciado por minúsculo e sufixado com .class.php de longe lidera a aberração.
Para piorar o autoload dele autoriza coisas como:
Arquivo: /apps/module/lib/myObject.class.php Classe: myObjectClass
Isso não funcionará com namespaces. Fato.
Teremos um padrão ?
Gostaria eu que sim. Seria fundamental estabelecer, agora com o reaparecimento de namespaces no PHP – sim, existiu num passado sombrio – um padrão default e que fosse largamente adotado. Complicado é convencer muito ego por aí a fora a abandonar seus pseudo-standards – que de padrão não tem nada – e utilizar um único facilitando a colaboração entre projetos e utilizando o tempo no que realmente importa: criar bons e bem documentados softwares.
Marcelo Cavalcante, 04/03/2010 | Source: Arch Linux Brasil
Sérgio Berlotto, 04/03/2010 | Source: Sérgio Berlotto - Site Pessoal
Já cheguei a comentar algo aqui no blog sobre o ExtJS. Porém nunca fiz uma apresentação formal do mesmo !
Então lá vai:
O que é o ExtJS ?
O ExtJS é um framework de javascript, feito para criar aplicações na web. Com ele conseguimos criar interfaces que se parecem muito com aplicações desktop. Ele nos disponibiliza muitos componentes e funções que facilitam e muito a nossa vida.
Para se ter uma idéia de como trabalhar ( veja bem, uma idéia ! ) podemos comparar a criação de uma tela em ext com a criação de uma tela em GTK, onde vamos criando, adicionando e alinhando os itens da tela, tudo dentro de containers e layouts, mas com a facilidade de que podemos facilmente alterar seus CSS para mudar algo. Com o Ext podemos por exemplo criar uma aplicação voltada ao Adobe AIR, que roda localmente, uma aplicação completamente em Ext ou com inserido em nossa página, interagindo com nosso HTML.
Hoje, na versão 3.1, jah possui o Ext Designer bem desenvolvido, porém é pago, mas é muito bom. Ah, e falando em pago, a licença do Ext é Open-Source somente para projetos open-source, de resto se tem um preço para utilizá-lo, mas nada impede você de baixar, ler os manuais, a documentação e botar a mão na massa, sem nenhuma burocracia.

Bom, feita a primeira apresantação, vamos partir para o que interessa.
Primeiro, vamos falar um pouco de como integrar o ExtJS com sua aplicação.
O Ext trabalha muito com Ajax, de várias formas ele pode solicitar e enviar informações para um servidor web através de ajax, vejamos um exemplo:
// Um request básico
Ext.Ajax.request({
url: 'foo.php',
success: function(){
//acao a tomar...
},
failure: function(){
//acao a tomar...
},
headers: {
'my-header': 'foo'
},
params: { foo: 'bar' }
});
// Simples envio de um formulário
Ext.Ajax.request({
form: 'some-form',
params: 'foo=bar'
});
No primeiro exemplo, montamos uma chamada ajax, enviando alguns parâmetros ( na propriedade: params ) e aguardamos um retorno, passando uma function na propriedade “success” que faz o que queremos, e se caso ocorrer alguma coisa errada, tratamos com a function na propriedade “failure”. Além de configurar-mos alguns cabeçalhos que serão enviados também, e obviamente para onde estamos enviando nossa requisição, na propriedade “url”.
Eu gosto muito de trabalhar assim com o Ajax, desta forma exemplificada acima, pois fico livre para enviar e aguardar dados da forma que eu quiser, apesar de ter alguns frameworks que integram as chamadas ajax com a linguagem escolhida, mas assim, dando uma engessada no negócio.
Outro detalhe importante: JSON !
Todo o ExtJS trabalha com Json ( mas não só JSON ), tanto para montar os objetos e componentes da tela, como para enviar dados para o servidor, e trabalhar com Json em tudo, primeiro padroniza todo o ambiente, e segundo, facilita muito a nossa vida, pois o Json é simples e muito completo. Com ele conseguimos criar muitos objetos e enviar vários tipos de dados. Então caso não conheça bem o json, dê uma olhada aqui: http://www.json.org/
Muitos objetos do Ext trabalham com dados remotos, ou seja, aguardam que o servidor envie os itens a serem mostrados na tela, como por exemplo: combos, grids, trees, e por ai vai… este exemplo acima é um exemplo de chamada ajax solta, no meio da página, que pode ser chamada de qualquer ponto, e para qualquer intuito, porém, nos componentes a chama do ajax é feita automaticamente pelos “Store” ! hehehe
Bom, outro ponto que acho muito importante também no Ext é o chamado “Store”. O Store é um objeto que age de forma a nos possibilitar ver e alterar muitos registros de dados que por nós foram definidos. É como se fosse um Recordset por exemplo, só que mais maleável. O Store pode estar ligado a um grid, combo, e outros componentes, e até solto, sem estar ligado a componente algum, e pode ter vários modos de leitura, como por exemplo: xml, json e um simples array de dados.
Para você ter uma idéia de como pode ficar bonita uma aplicação feita com o Ext, veja este link: http://www.extjs.com/deploy/dev/examples/forum/forum.html
Agora, alguns links para você poder saber mais:
Site oficial: http://www.extjs.com
Site de Exemplos: http://www.extjs.com/deploy/dev/examples/
Documentação: http://www.extjs.com/deploy/dev/docs/
Feitas estar primeiras introduções sobre o Ext, fiquem no aguardo do proximo post sobre o Ext.
Até lá.