.20/01/2012
Melhorias Core QCodo & QCMS Jan/2012
Postado por: Raphael Cangucu
Core QCodo
Programação:
- QStateCity
- Correção de erros
- Separação da Lista de Cidades em Grupo da Capital e Outras Cidades
- QCpfCnpjToogle
- Correção de erro em momento de edição
- QI18N
- Suporte a criação de tradução customizada (project):
Para isso basta criar a pasta i18n dentro project
Criar também a variável __CUSTOM__ dentro do configuration.inc.php apontando para a pasta customizada
E depois criar or arquivo da linguagem dentro dessa pasta, que ele será preenchido com os termos não encontrados quando o projeto tiver customização ( excelente para o QCMS )
- Suporte a criação de tradução customizada (project):
- QCache
- Mudança da pasta do /core para a tmp/cache
- QSubdomainTextbox
- Criação de textbox próprio para subdomain
- QProgressBar
- Criação de componente integrado ao jquery.ui para barra de progresso
- QGoogleChart
- QGoogleChartBase: Extensão da classe em sua base
- QGoogleChartTimeLine: Componente criado para TimeLine em flash usando o google charts
- QQQuery
- QQDistinctCount: Criação da classe para contar somente nodos distintos em um query
- QQAggregationClause: Extendida para suportar funções internas, o que possibilitou a criação do QQDistinctCount
- QDateListBox
- Modificação para funcionamento todo em Javascript
- QCKEditor
- Correção de erro ao enviar post via server action
- io_classes/FTP
- Criação de classe para uso de funções do protocolo FTP no qcodo
- QCKFinderFileControl
- Selecionador de arquivos via CKFinder
- QCKFinderImageControl
- Selecionador de imagens via CKFinder
- QFileControl
- QRetFileControl
- QBankSlip
- QBankSlipBancoBrasil
- Drawee
- Transferor
- QCurlAsync
- Criação de classe de chamada CURLS de maneira assincrona (ainda não funcional)
Design:
- Criação de CSS para dashboard (básico ainda)
- Inclusão de novos ícones
QCMS
- Correção de problemas na área do site e páginas no que diz respeito a MetaControls e MetaOptions
- Meta para formulário de contato
- Padronização do Meta simples, com suas devidas extensões de classes
- Correção de Cadastro de Clientes
- Correção de assunto e departamentos
- Melhorias no AudioMetaControl
- Remoção da pasta wizard
- Inserção de Banners de forma facilitada, com inclusão de localização sobdemanda
Postado por: Raphael Cangucu
Ao longo desse tempo trabalhando com WEB sempre vem a tona a questão: PERFOMANCE .
E uma das maneiras de otimizar a velocidade de carregamento de páginas web é tratar o seu conteúdo estático de maneira que possa ser carregado da maneira mais rápida possível.
E os conteúdos estáticos de uma página web geralmente são: imagens, folhas de estilo CSS e arquivos javascript e uma boa notícia é que podemos comprimí-lo até atingirem o menor tamanho possível, facilitando assim o download desses arquivos pelos navegadores dos clientes.
Segue abaixo 7 maneiras eficientes de se fazer isso:
É um validador e avisa ao desenvolvedor sobre erros encontrados e indica também maneiras de otimizá-los.
2. Packer
É um compressor para javascripts que irá melhorar o tempo de carregamento da sua página.
3. SquishIt
Uma marca da GitHud, irá ajudá-lo a compactar tanto CSS como JavaScript do seu site, podendo agrupar arquivos em um único, reduzindo assim o número de requisições de arquivos. Tem uma interface um pouco pobre, mas você irá se acostumar com isso.
4. Minify
Minify é uma excelente biblioteca escrita em PHP5 que irá ajudar a compactar os seus arquivos .js e .css em até 70% e pode ser facilmente integrado ao seu site, se escrito em PHP, aqui na Codificar já utilizamos algumas vezes e o resultado sempre é atrativo.
5. JSMin
JSMin, é simples e fácil de usar e remove todos os espaços em brancos de seu código, o que ajuda a diminuir o tamanho de seu arquivo em até 50%.
6. Google Closure Compiler
O pessoal do Google sempre é confiável quando o assunto é velocidade e aprimoramento. Sendo assim, essa ferramenta irá ajudar a remover e corrigir eficientemente erros comuns de código em javascript.
Excelente para quem usa grandes bibliotecas em Javascript.
7. YUI Compressor
Mais uma maneira de comprimir os arquivos CSS e JS e se diz melhor que os concorrentes como Packer e Minify, e é claro que tem o suporte de uma grande empresa como a Yahoo.
Enfim, #ficaadica e façam bom proveito.
.11/11/2011
Modificações Core QCodo + QCMS: 10 e 11/2011
Postado por: Raphael Cangucu
CORE QCODO:
- Correção de erros na geração de código para tabelas customizadas
- Criação da classe QSiteMaps, para criação de sitemaps de site e projetos
- Melhorias nos players QJWPlayer 4 e 5 , adição de atributo AutoPlay
- Atualização do JwPlayer para a versão mais atual da 5
- Adição de novo skin NORDEN para QJWPlayer5
- Adição da classe ApiBase, que será a base de chamadas via WebService, construídos via QCodo
- Adições de novos ícones
- Melhoria na QUrlTextbox para aceitar endereços sem o http://
- Criação do QTabPanel, para abas com CSS para os temas correntes
QCMS:
- Criação da Classe SelectFile, que é similar ao SelectAlbumImage, mas para selecionar arquivos usando o CKFinder
- Criação das pastas data_meta_content e data_meta_site_area, para melhor organização dos Meta Object das tabelas content e site_area
- Limpeza na SeoForm, remoção de funções e códigos não utilizados
- Melhoria da tela de Conteúdo, divisão em Dados Básicos de Dados de SEO
- Diversas modificações de banco: vide pasta migrations
- Criação da Classe MetaType e adição dos tipos básicos de dados
- Criação da tela de lista e edição de audio no /admin
- Adaptação do install-php-ini.php para a versão 5.3 da dreamhost
- Correção de erros das telas de criação e lista de eventos
- Correção de erros das telas de criação e lista de vídeos
Atenciosamente,
Raphael Canguçu
.31/08/2011
Melhorias QCodoficar – Gerador de Código
Postado por: Raphael Cangucu
Modificações liberadas no QCODO da Codificar em 31 de agosto de 2011:
Datagrid:
- Adição de função de formatação do campo na MetaAddColumn:
- declaração:
public function MetaAddColumn($mixContent, $strFunction = null , $objOverrideParameters = null) {…} - uso:
//irá adicionar a coluna 'Percent' e será formatada pela função de atalho para impressão de percentuais
$this->dtgValues->MetaAddColumn('Percent', '_pc');
//pode ser utilizado
- declaração:
- Adição da função MetaAddVirtualAttributeColumn: que permite a adição de colunas com atributos virtuais das queries geradas
- uso:
$this->dtgUserSituations->MetaAddVirtualAttributeColumn('AveragePercent', '_pc');
//já está compatível com a função de formatação
- uso:
- Implementação de novos filtros por intervalo na tela de pesquisa para campos inteiros e float's
- uso: basta usar o novo gerador, implementado em todos arquivos que participam do processo de pesquisa
- Divisão da função MetaDataBinder em MetaDataBinder, MetaBuildConditions e MetaBuildClauses, dividindo em três legíveis funções de acordo com cada etapa do processo de bind do DataGrid
Controles:
- Compatibilização do QDoubleMultipleListbox com o JQuery 1.6.2
- Modificação do QDialogBox para uso do Jquery UI Dialog Box ao invés do componente original do QCODO
- Disponibilização final, com teste do componente, QDateListBox no qual é possível selecionar intervalos de datas, como mês, semana, ultimo mes, ultima semana, este ano, ultimos 30 dias e períodos customizados
Geração de código:
- Criação do arquivos /core/assets/php/custom_codegen/php que permite a geração seletiva de tabelas e bancos de dados disponíveis na aplicação
- Modificação da maneira na qual é instanciada objetos nas funções de instanciamento de valores vindos do banco de dados, fazendo o carregamento estático e uso da técnica lazy load
Javascript:
- Modificação do core/js para aceitar carregamento de Javascripts Online em CDN's
- Substituição do Jquery 1.4.4 pelo 1.6.2
Acredito que por enquanto é isso…
Em breve mais novidades!!
Postado por: Raphael Cangucu
Essa é uma pergunta frequente que nossos clientes nos pergutam a respeito das tecnologias usadas para desenvolver suas soluções.
E respondemos que tecnicamente (quando olhamos detalhes de conceito) não enxergamos diferenças que possam impactar a escolha de uma ou outra linguagem de programação, pois ambas são orientadas a objetos, possuem excelentes frameworks de desenvolvimentos, as duas escalam, um detalhe ou outro de diferença.
O PHP abre margem maior para que profissionais ruins façam coisas ruins. Mas bons profissionais conseguem os mesmos resultados nas duas ferramentas e profissionais ruins conseguem fazer “cagada” com a melhor ferramenta do mundo.
Enfim, vou explicar que além de ser uma escolha meramente técnica ela é também ancorada financeiramente e impacta diretamente nos custos de um projeto, para isso citarei alguns pontos que nos guiam a escolher a arquitetura LAMP (Linux Apache Mysql PHP) ao invés da arquitetura Microsoft:
- Menor custo da Mão de Obra
- Menor tempo de desenvolvimento
- Menor custo de DataCenter
- Escalabilidade futura acessível e barata
Muitas pessoas por não conhecerem bem de tecnologia, costumam ter receios a respeito da linguagem de programação PHP, mas esquecem que:
- É a linguagem WEB mais usada por desenvolvedores
- Consequentemente é a maior comunidade de desenvolvimento e a que mais tem inovações
- O Facebook e o Yahoo foram feitos em cima do PHP e MYSQL
- O Twitter migrou sua linguagem nativa para o PHP por questões de escalabilidade
- A Wikipedia, maior enciclopédia do mundo, é feita usando PHP e MYSQL
- A maior rede de blogs do mundo, o WordPress é feito usando PHP
Eu costumo dizer que linguagem é somente ferramenta e nós apesar de termos projetos em ASP.NET, Ruby, ASP 3, Java, escolhemos o PHP5 como nossa linguagem padrão de desenvolvimento boa parte pelos itens citados acima.
Seguem algumas referências que balizam nossa opinião:
http://www.davidhurst.co.uk/2009/02/25/famous-websites-that-use-php-andor-mysql/
http://www.techenclave.com/programming/php-architectures-power-your-favourite-big-98227.html
http://www.oreillynet.com/onlamp/blog/2006/04/digg_phps_scalability_and_perf.html
http://www.sitepoint.com/why-php-scales/
http://talks.php.net/show/lt2004-lamp/
http://public.yahoo.com/bfrance/radwin/talks/one-year-of-php-oscon2003.htm
http://www.niallkennedy.com/blog/2004/10/flickr-architec.html
http://www.royans.net/arch/facebook-internals/
http://royal.pingdom.com/2007/02/26/what-the-webs-most-popular-sites-are-running-on/
http://royal.pingdom.com/royalfiles/0702_infrastructure_matrix.pdf
Abraços.
Postado por: Luiz Ernani
Backup do banco MySQL via SSH
Para efetuar um Backup do banco MySQL via SSH execute os comandos abaixo logo após conectar-se ao seu servidor.
As palavras em caixa alta (letras maiúsculas) deverão ser substituídas pelos seus dados de acesso.
Para fazer backup de todas as tabelas:
mysqldump -h HOST -u USUARIO -p -R –opt NOMEDOBANCO > backup.sql
Para fazer backup de somente uma tabela:
mysqldump -h HOST -u USUARIO -p -R –opt NOMEDOBANCO NOMEDATABELA > backup.sql
Se estiver encontrando problemas com acentuação dos caracteres utilize:
mysqldump -h HOST -u USUARIO -p -R –opt –default-character-set=utf8 NOMEDOBANCO > backup.sql
O comando acima irá utilizar a codificação Unicode(utf-8) internacional para os caracteres, com suporte a vários idiomas.
Restauração do banco MySQL via SSH
Envie o arquivo .sql para a o seu servidor;
Vá para a pasta onde copiou o arquivo acima e execute o comando abaixo:
mysql -h HOST -u USUARIO -pSENHA -D NOMEDOBANCO < arquivo.sql
Se estiver encontrando problemas com acentuação dos caracteres utilize:
mysql -h HOST -u USUARIO -pSENHA -D NOMEDOBANCO –default-character-set=utf8 < arquivo.sql
Backup local e restauração do banco MySQL via SSH para um servidor remoto
Esta é uma opção elegante, se você quer fazer uma backup no servidor local e restaurar ou replicar o banco de dados em um outro servidor remoto.
O exemplo abaixo faz o backup do banco de dados EXEMPLO no servidor local e faz a restauração como EXEMPLO01 no banco de dados no servidor remoto. Por favor, note que você deve primeiro criar o banco de dados EXEMPLO01 no servidor remoto antes de executar o seguinte comando:
mysqldump -u USUARIO -pSENHA EXEMPLO | mysql \ -u USUARIO -pSENHA –host=HOSTREMOTO -C EXEMPLO01
Observações
Dependendo do tamanho do seu banco de dados, isso pode demorar vários minutos.
Podem ocorrer alguns erros de permissão ao fazer o backup ou a restauração para qualquer comando acima. Caso isso ocorra entre em contato com o seu servidor de hospedagem.
.6/06/2011
Paginador em ASP Clássico
Postado por: Raphael Cangucu
Esses dias estávamos precisando de um paginador descente para ASP Clássica, então resolvemos traduzir um que tinhamos em PHP, que atende muito bem.
<%
intPageCount = intPageCount
intCurrentPage = intCurrentPage
intIndexCount = intIndexCount
strToReturn = “<div class=’paginator’><div class=’base’>”
If (intCurrentPage <= 1) Then
strToReturn = strToReturn & “<span class=’prev off’><span class=’base’>Anterior</span></span> ”
Else
strToReturn = strToReturn & “<a class=’prev on’ href=’?intPage=” & (intCurrentPage-1) &”‘><span class=’base’>Anterior</span></a>”
End If
If (intPageCount <= intIndexCount) Then
‘We have less pages than total indexcount — so let’s go ahead
‘and just display all page indexes
For intIndex = 1 To intPageCount
If (intPageNumber = intIndex) Then
strToReturn = strToReturn & “<span class=’number off active’><span class=’base’>” & intIndex & “</span></span>”
Else
strToReturn = strToReturn & “<a class=’number on’ href=’?intPage=” & (intIndex) &”‘><span class=’base’>” & intIndex & “</span></a>”
End If
Next
Else
‘Figure Out Constants
intMinimumEndOfBunch = intIndexCount – 2
intMaximumStartOfBunch = intPageCount – intIndexCount + 3
intLeftOfBunchCount = Floor((intIndexCount – 5) / 2)
intRightOfBunchCount = Round((intIndexCount – 5.0) / 2.0)
intLeftBunchTrigger = 4 + intLeftOfBunchCount
intRightBunchTrigger = intMaximumStartOfBunch + Round((intIndexCount – 8.0) / 2.0)
If (intCurrentPage < intLeftBunchTrigger) Then
intPageStart = 1
strStartEllipsis = “”
Else
intPageStart = Min(intMaximumStartOfBunch, intCurrentPage – intLeftOfBunchCount)
strStartEllipsis = “<a class=’number on’ href=’?intPage=1′><span class=’base’>1</span></a>”
strStartEllipsis = strStartEllipsis & “<span class=’ellipsis’><span class=’base’>…</span></span>”
End If
If (intCurrentPage > intRightBunchTrigger) Then
intPageEnd = intPageCount
strEndEllipsis = “”
Else
intPageEnd = Max(intMinimumEndOfBunch, intCurrentPage + intRightOfBunchCount)
strEndEllipsis = “<span class=’ellipsis’><span class=’base’>…</span></span>”
strActionParameter = intPageCount
strEndEllipsis = strEndEllipsis & “<a class=’number on’ href=’?intPage=” & (intPageCount) &”‘ ><span class=’base’>” & intPageCount & “</span></a>”
End If
strToReturn = strToReturn & strStartEllipsis
For intIndex = intPageStart To intPageEnd
If (intCurrentPage = intIndex) Then
strToReturn = strToReturn & “<span class=’number off active’><span class=’base’>” & intIndex & “</span></span>”
Else
strToReturn = strToReturn & “<a class=’number on’ href=’?intPage=” & (intIndex) &”‘><span class=’base’>” & intIndex & “</span></a>”
End If
Next
strToReturn = strToReturn & strEndEllipsis
End If
If (intCurrentPage >= intPageCount) Then
strToReturn = strToReturn & “<span class=’next off’><span class=’base’>Próximo</span></span>”
Else
strToReturn = strToReturn & “<a class=’next on’ href=’?intPage=” & (intCurrentPage + 1) &”‘><span class=’base’>Próximo</span></a>”
End If
strToReturn = strToReturn & “</div></div>”
‘print paginator
Response.Write strToReturn
Function Ceil( Number )
Ceil = Int( Number )
if Ceil <> Number then
Ceil = Ceil + 1
end if
End Function
Function Floor( Number )
Floor = Int( Number )
End Function
Function Max( v1, v2 )
If v1 >= v2 Then Max = v1 Else Max = v2
End Function
Function Min( v1, v2 )
If v1 <= v2 Then Min = v1 Else Min = v2
End Function
%>
.23/05/2011
QCodo , trazendo ordem ao caos no PHP
Postado por: Raphael Cangucu
O QCODO é um framework em PHP 5, orientado a objetos (extremamente) que usa-se do mantra “Codifique menos, faça mais” para aumentar a produtividade dos programadores, eliminando o tedioso e repetitivo trabalho, que pode ser facilmente produzido pelo seu gerador de código automático.
Na Codificar, trabalhamos com o QCodo há quase 3 anos e conseguimos excelentes resultados com grande produtividade. Veja alguns de nossos números:
- 3 anos de vida
- 100 projetos
- 3000 solicitações atendidas, dentre elas:
- 470 erros corrigidos
- 1620 funcionalidades criadas
- 420 suportes realizados
- 470 melhorias aprimoradas
O QCodo propõe-se a transformar esse tipo de bagunça:
Em um código MVC, com um controller bem definido, como vemos abaixo:
E um arquivo de template separado, onde será possível implementar a parte visual do site, sem interferência com a camada lógica (de programação).

E o melhor disso, é que a partir da leitura da modelagem do seu banco de dados, o QCodo é capaz de gerar grande parte do Código Burro, automaticamente, eliminando assim o trabalho tedioso e valioso de um bom programador.
Atualmente o Framework conta com vários adaptadores, que interpretam diversas bases como: MySQL, Oracle, SQLite 2 e 3, SQL Server e outros bancos de dados.
Quem já trabalhou com ASP.NET terá bastante facilidade de aprender o QCODO, pois a sua estrutura básica é bastante semelhante, com o conceito de Formulários e Controle, contudo terá toda a facilidade e abertura que um projeto de código aberto permite ao você.
Essa é uma rápida introdução ao framework que trabalhamos na Codificar, espero ter passado bem a mensagem.
Em breve, falaremos mais a respeito do QCODO, com exemplos, vídeos e muito mais…
.24/05/2009
Virtual Host com Apache – XAMPP
Postado por: Raphael Cangucu
Virtual Host’s
O domínios virtuais existem para que um único servidor web interprete mais de um domínio.
Para Fazer Domínios Virtuais no Apache existem dois meios: Name Based Virtual Host e IP Based Virtual Host (Dominio Virtual Baseado em Nome e Baseado em IP). O mais indicado é você utilizar o Name Virtual Host!
Para configurar domínios virtuais basta inserir as seguintes linhas no arquivo de configuração do apache:
O Exemplo abaixo é para a configuração do phpMyAdmin como subdomínio em nosso servidor local, onde 192.168.1.200 é o ip da rede interna.
NameVirtualHost 192.168.1.200
#ou
#NameVirtualHost 192.168.1.200:[porta]
<VirtualHost 192.168.1.200>
ServerAdmin "root@codificar.com.br"
DocumentRoot "D:/Projetos/phpMyAdmin"
ServerName phpmyadmin.codificar.com.br
</VirtualHost>
<Directory "D:/Projetos/phpMyAdmin">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>
Na Codificar, utilizamos o arquivo de configuração específico para Virtual Hosts do Xampp ao invés de utilizar o httpd.conf do apache.
.24/10/2008
Programação para WEB do inicio ao fim
Postado por: Raphael Cangucu
O primeiro passo seria aprender HTML, que é uma linguagem de markup com o intuito de inserir e posicionar elementos numa página. O html diz para o seu navegador como ele deverá mostrar a página ao visitante.
http://www.w3schools.com/html/html_intro.asp
Depois de uma passada básica em HTML vc deverá conhecer o novo formato, que é o XHTML, que é uma melhoria do HTML. O XHTML é muito mais limpo e estrito que o HTML, possibilitando uma melhor interpretação e mais funcionalidades ao browser.
http://www.w3schools.com/xhtml/default.asp
Depois de criado o XHTML é necessário embelezá-lo e deixá-lo mais adequado aos olhos humanos. Para isso existem as folhas de estilo de uma home page, que é chamado de CSS .
http://www.w3schools.com/css/default.asp
Depois de conhecermos como diagramar e embelezar uma página na web é necessário adicionar algumas funcionalidades nela, validar formulários, manipular o HTML. Para isso foi criado a linguagem Javascript, que permite adicionar funcionalidades na página interagindo com o visitante.
http://www.w3schools.com/js/default.asp
Mas para trabalhar de maneira mais precisa com o javascript e os elementos XHTML é muito importante saber o que é DOM ( Document Object Modeling ), que é toda estrutura por trás do XHTML, como é realizada a organição no browser e quais funções Javascripts são capazes de realizar toda a manipulação, então é necessário conhecer mais a fundo como manipular o DOM.
http://www.w3schools.com/htmldom/default.asp
Agora já sabemos muito bem como funciona uma página web, como estililzá-la e ainda como manipular de maneira fácil seus elementos. Mas ainda falta uma coisa: Onde irei guardar todos os dados que preciso? Como posso dinamizar muito mais o meu website e permitir maior interação dos visitantes? Para tal, será necessário um servidor e um banco de dados para gerar dados persistentes e provocar interatividade entre os visitantes e o website.
Linguagem que se comunica com o servidor:
http://www.w3schools.com/php/default.asp
Linguagem para se comunicar com o banco de dados:
http://www.w3schools.com/sql/default.asp
Com todos estes tutorias você pode se tornar um excelente desenvolvedor web. =)







