Usando o Silex Bootstrap (http://github.com/lucasmezencio/silex-bootstrap).
config.ini
bootstrap.php
app.php
index.php
Think about your life because one day can be too late!
Usando o Silex Bootstrap (http://github.com/lucasmezencio/silex-bootstrap).
config.ini
bootstrap.php
app.php
index.php
Então pessoal, dessa vez foi realmente foda.
NUNCA fiquei tanto tempo sem postar aqui, e tipo, não devia ter feito isso. Seriously.
Tirei férias, peguei freela, quebrei o dedo mindinho da mão esquerda, aprendi a mexer com ‘opensocial’, aprendi a mexer com muita coisa, comprei um Motorola Milestone (com Android!! Daqui a pouco, posts sobre Android aqui pra vocês!!), troquei de emprego, troquei de emprego de novo.
Enfim, no meu novo emprego, na Plan B, passei por um probleminha não muito comum (eu acho), lidar com PHP buscando dados de uma base em SQL Server 2005.
Eu estava trabalhando num arquivo cuja codificação era UTF-8. Na hora de exibir os dados vindos do banco, dava erro na codificaão, exibindo aquele caractere com uma ‘?’ dentro de um losango (acho que todo developer conhece esse símbolo!! hahaha..).
Fui tentando as opções de praxe:
<?php echo utf8_encode($bd->nome); echo utf8_decode($bd->nome); echo utf8_encode(htmlentities($bd->nome)); echo htmlentities(utf8_encode($bd->nome)); echo utf8_decode(htmlentities($bd->nome)); echo htmlentities(utf8_decode($bd->nome)); ?>
Acontece que a collation padrão do SQL Server é SQL_Latin1_General_CP1_CI_AS. E isso eu só descobri depois.
Qual foi então a minha solução?! Depois de umas belas pesquisadas e uma grande ajuda do Leandro Rodrigues, conseguimos foi na query de busca dos dados, fazermos um CAST no campo e definimos a collation dele ali mesmo, dessa maneira:
SELECT CAST({campo} AS {tipo}) COLLATE {collation} AS {alias} FROM {tabela}'
Então, o caso foi colocar a collation ‘Latin1_General_BIN’, ficando assim:
SELECT CAST(nome AS nvarchar(255)) COLLATE Latin1_General_BIN AS nome FROM usuarios'
E depois, colocar no PHP a função ‘uft8_encode();’ na hora de exibir os dados.
<?php echo utf8_encode($bd->nome); ?>
Pra quem nunca mexeu com SQL Server e achar estranho, eu digo SIM, existe um tipo de dado chamado ‘nvarchar’, com esse ‘N’ na frente mesmo. ;D
Então é isso, a solução foi essa e funcionou perfeitamente.
Um grande abraço, pessoal!!
O blog Bitcetera apontou 10 razões que mostram como o PHP ainda é melhor do que o Rails. Você concorda?
O mundo da tecnologia é repleto de duelos: o mais emblemático deles é o PC x Mac. Há outros, no entanto, que merecem ser lembrados: Linux e Microsoft; Oracle e SAP, Blu-ray e HD-DVD (que jogou a toalha) e, no terreno do desenvolvimento, o Ruby on Rails versus o PHP. Mas será que há realmente alguma linguagem que seja melhor?
Há algum tempo, Gregg e Jason formaram uma dupla e gravaram uma série de vídeos falando sobre a superioridade do Ruby on Rails em relação ao PHP. Cada um deles era uma linguagem e o cara do Rails acabava indo para praia enquanto o do PHP tentava trocar o banco de dados. A ideia era mostrar como o Ruby, rodando no framework Rails, era muito mais rápido que o PHP.
O blog Bitcetera, no entanto, apontou 10 razões que mostram como o PHP ainda é melhor do que o Rails, abusando da ironia e do humor. “Muitas pessoas morrem todos os anos nas praias, enquanto o risco de cair morto na mesa do escritório é próximo de zero. De fato, dirigir para o trabalho e outras coisas que um programador faz em seu tempo livre são muito mais perigosas do que trabalhar num código e, por mais tempo que leve, é melhor para a sua integridade”, diz o post.
Numa outra análise muito aprofundada, os ‘defensores’ do PHP lembram que um código enxuto não paga as contas. “A menos que você esteja trabalhando num projeto próprio, um código enxuto vai fazer com que o seu salário também dê uma enxugada”, afirma o blog. Eles explicam: são menos horas copiando e colando, menos hora fixando o mesmo erro em dez diferentes linhas e menos tempo para encontrar bugs. Tempo é igual a dinheiro quando se trabalha por hora.
Para ver as 10 razões que mostram como o PHP ainda é melhor do que o Rails acesse o blog Bitcetera. Já um o vídeo do PHP versus Ruby on rails está no Youtube.
Fonte: Info Professional
Olá pessoal, essa noite, conversando com o Breno (@brenowd), ele veio me perguntar como funcionam os ‘snippets’ no Zend Studio.
Pra quem não sabe, ‘snippets’ são templates, ou seja, partes de códigos prontas para agilizarmos nosso trabalho. Na minha opinião, snippets nos deixa um pouco preguiçosos, mas dependendo, realmente nos quebram um galhão! Hehehe..
Bem, o Breno estava acostumado a usar o Dreamweaver, e queria passar a usar o Zend, e estava querendo criar um snippet para um SELECT de uma query MySQL. Então, mãos à obra.
Para criar um snippet no Zend Studio for Eclipse 6, vamos no menu Window > Preferences:
Na janela que abre, no campo de pesquisa, digite snippet, logo em seguida em PHP > Templates:
Vou dar o exemplo aqui, da criação de um snippet de uma query em MySQL, um SELECT pra ser mais preciso. Clicando em New, temos essa tela:
Em ‘name’ você coloca uma palavra para identificar o snippet que está criando, e ao mesmo tempo, a palavra que vai iniciar seu snippet. Em Context é o contexto da linguagem, PHP, PHPDoc ou New PHP (não me pergunte o que é New PHP), e em Pattern, o padrão do nosso snippet. Coloquei assim:
SELECT {$campos} FROM {$tabela};
Onde ‘{$campos}’ e ‘{$tabela}’ são, simplesmente, onde você quer que o cursos de posicione quando você acionar o snippet. O cursor ficará com o ‘{$campos}’ selecionado primeiro, e depois que você digitar qualquer coisa e der tab, ele pulará diretamente para o ‘{$tabela}’. Nesse print, esqueci de colocar o ‘{$END}’ que é onde você quer que o cursor pare depois que der o último tab:
Na imagem anterior, mostro como usar o snippet dentro da função ‘mysql_query’, por exemplo. E o snippet é acionado pelo ‘name’, ao digitar, no meu caso, ‘select’ e teclar ctrl+espaço:
Então, esse é o meu tutorial sobre snippets. Espero que sirva para alguém! =D
O 1º Encontro PHP-MG, que será realizado no dia 25/04/2009, será um evento focado no mercado de desenvolvimento web, proporcionando aos participantes o contato interpessoal e o conhecimento das melhores práticas e últimas novidades e tendências, no que se diz respeito à tecnologia.
O evento visa propiciar aos participantes uma oportunidade inédita no estado, de troca de conhecimentos e networking entre os profissionais mineiros, através de palestras cobrindo os seguintes temas:
Pretendemos com essa realização, fortalecer a comunidade mineira de desenvolvedores PHP, e divulgar para todo o estado, o potencial dos profissionais da região.
Pré-inscrição
Realize aqui a sua pré-inscrição para o 1º Encontro do PHP MG.
Patrocínio Ouro
Java
Chega, encontra o dragão. Desenvolve um framework para aniquilamento
de dragões em múltiplas camadas.
Escreve vários artigos sobre o framework, mas não mata o dragão.
.NET
Chega, olha a idéia do Javanês e a copia, tenta matar o dragão, mas é
comido pelo réptil.
ASP
Os componentes necessários para levantar a espada são proprietários e
caros. Outros tantos componentes proprietários para achar a
localização do dragão, e mais outros tantos a localização da
princesa. Chama então seu amigo programador de PHP.
C
Chega, olha para o dragão com olhar de desprezo, puxa seu canivete,
degola o dragão. Encontra a princesa, mas a ignora para ver os
últimos checkins no cvs do kernel do linux.
C++
Cria um canivete básico e vai juntando funcionalidades até ter uma
espada complexa que apenas ele consegue entender … Mata o dragão,
mas trava no meio da ponte por causa dos memory leaks.
COBOL
Chega, olha o dragão, pensa que tá velho demais para conseguir matar
um bicho daquele tamanho e pegar a princesa e, então, vai embora de
volta ao seu
mundinho.
Pascal
Se prepara durante 10 anos para criar um sistema de aniquilamento de
dragão… Chegando lá descobre que o programa só aceita lagartixas
como entrada.
VB
Monta uma arma de destruição de dragões a partir de vários
componentes, parte pro pau pra cima do dragão e, na hora H, descobre
que a espada só funciona
durante noites chuvosas…
PL/SQL
Coleta dados de outros matadores de dragão, cria tabelas com N
relacionamentos de complexidade ternária, dados em 3 dimensões, OLAP,
demora 15 anos para processar a informação. Enquanto isso a princesa
virou lésbica.
PHP ( eu me encaixo aqui? ah nao! 😛 )
Pesquisa bancos de scripts e acha as classes de construção de espada,
manuseio da espada, localização da princesa e dragão. Remenda tudo e
coloca umas firúlas próprias.
Mata o dragão e casa com a princesa. Como tudo foi feito com
gambiarras, o dragão um dia vai ressuscitar e comer os dois.
Ruby
Chega com uma p*t* fama, falando que é o melhor faz tudo, quando vai
enfrentar o dragão mostra um videozinho dele matando um dragão … O
dragão come ele de tédio.
Smalltalk
Chega, analisa o dragão e a princesa, vira as costas e vai embora,
pois eles são muito inferiores.
ASSEMBLY
Acha que está fazendo o mais certo e enxuto, porém troca um A por um
D, mata a princesa e transa com o dragão.
Shell
Cria uma arma poderosa para matar os dragões, mas na hora H, não se
lembra como usá-la.
Shell (2)
O cara chega no dragão com um script de 2 linhas que mata, corta,
stripa, pica em pedacinhos e empalha o bicho, mas na hora que ele
roda, o script aumenta,
engorda, enfurece e coloca álcool no fogo do dragão.
Fortran
Chega, desenvolve uma solução com 45000 linhas de código, mata o
dragão e vai ao encontro da princesa …
mas esta o chama de tiuzinho e sai correndo atrás do programador java
que era elegante e ficou rico.
FOX PRO
Desenvolve um sistema para matar o dragão, por fora é bonitinho e
funciona, mas por dentro está tudo remendado. Quando ele vai executar
o aniquilador de
dragões lembra que esqueceu de indexar os DBF’s.
CLIPPER
Monta uma rotina que carrega um array de codeblocks para insultar o
dragão, cantar a princesa, carregar a espada para memória, moer o
dragão, limpar a sujeira, lascar leite condensado com morangos na
princesa gostosa, transar com a princesa, tomar banho, ligar o carro,
colocar gasolina e voltar pra casa. Na hora de rodar recebe um “Bound
Error: Array Access” e o dragão come ele com farinha.
ANALISTA DE PROCESSOS
Chega ao dragão com duas toneladas de documentação desenvolvida sobre
o processo de se matar um dragão genérico, desenvolve um fluxograma
super complexo para libertar a princesa e se casar com ela, convence
o dragão que aquilo vai ser bom pra ele e que não será doloroso. Ao
executar o processo ele estima o esforço (usando FPAs) e o tamanho do
estrago que isso vai causar, consegue o aval do papa, do Buda e do
Raul Seixas para o plano, e então compra 2 bombas nucleares, 45
canhões, 1 porta aviões, contrata 300 homens armados até os dentes,
quando na verdade necessitaria apenas da espada que estava na sua mão
o tempo todo.
Navegando por aí, achei no site Pinceladas Da Web esta lista de palavras reservadas do MySQL bastante útil! Pra quem tem dificuldades em declarar alguma coisa no MySQL, aí está:
Palavra | Palavra | Palavra |
---|---|---|
ADD | ALL | ALTER |
ANALYZE | AND | AS |
ASC | ASENSITIVE | BEFORE |
BETWEEN | BIGINT | BINARY |
BLOB | BOTH | BY |
CALL | CASCADE | CASE |
CHANGE | CHAR | CHARACTER |
CHECK | COLLATE | COLUMN |
CONDITION | CONNECTION | CONSTRAINT |
CONTINUE | CONVERT | CREATE |
CROSS | CURRENT_DATE | CURRENT_TIME |
CURRENT_TIMESTAMP | CURRENT_USER | CURSOR |
DATABASE | DATABASES | DAY_HOUR |
DAY_MICROSECOND | DAY_MINUTE | DAY_SECOND |
DEC | DECIMAL | DECLARE |
DEFAULT | DELAYED | DELETE |
DESC | DESCRIBE | DETERMINISTIC |
DISTINCT | DISTINCTROW | DIV |
DOUBLE | DROP | DUAL |
EACH | ELSE | ELSEIF |
ENCLOSED | ESCAPED | EXISTS |
EXIT | EXPLAIN | FALSE |
FETCH | FLOAT | FOR |
FORCE | FOREIGN | FROM |
FULLTEXT | GOTO | GRANT |
GROUP | HAVING | HIGH_PRIORITY |
HOUR_MICROSECOND | HOUR_MINUTE | HOUR_SECOND |
IF | IGNORE | IN |
INDEX | INFILE | INNER |
INOUT | INSENSITIVE | INSERT |
INT | INTEGER | INTERVAL |
INTO | IS | ITERATE |
JOIN | KEY | KEYS |
KILL | LEADING | LEAVE |
LEFT | LIKE | LIMIT |
LINES | LOAD | LOCALTIME |
LOCALTIMESTAMP | LOCK | LONG |
LONGBLOB | LONGTEXT | LOOP |
LOW_PRIORITY | MATCH | MEDIUMBLOB |
MEDIUMINT | MEDIUMTEXT | MIDDLEINT |
MINUTE_MICROSECOND | MINUTE_SECOND | MOD |
MODIFIES | NATURAL | NOT |
NO_WRITE_TO_BINLOG | NULL | NUMERIC |
ON | OPTIMIZE | OPTION |
OPTIONALLY | OR | ORDER |
OUT | OUTER | OUTFILE |
PRECISION | PRIMARY | PROCEDURE |
PURGE | READ | READS |
REAL | REFERENCES | REGEXP |
RENAME | REPEAT | REPLACE |
REQUIRE | RESTRICT | RETURN |
REVOKE | RIGHT | RLIKE |
SCHEMA | SCHEMAS | SECOND_MICROSECOND |
SELECT | SENSITIVE | SEPARATOR |
SET | SHOW | SMALLINT |
SONAME | SPATIA | SPECIFIC |
SQL | SQLEXCEPTION | SQLSTATE |
SQLWARNING | SQL_BIG_RESULT | SQL_CALC_FOUND_ROWS |
SQL_SMALL_RESULT | SSL | STARTING |
STRAIGHT_JOIN | TABLE | TERMINATED |
THEN | TINYBLOB | TINYINT |
TINYTEXT | TO | TRAILING |
TRIGGER | TRUE | UNDO |
UNION | UNIQUE | UNLOCK |
UNSIGNED | UPDATE | USAGE |
USE | USING | UTC_DATE |
UTC_TIME | UTC_TIMESTAMP | VALUES |
VARBINARY | VARCHAR | VARCHARACTER |
VARYING | WHEN | WHERE |
WHILE | WITH | WRITE |
XOR | YEAR_MONTH | ZEROFILL |
Mas como toda regra tem sua excessão o MySQL permite que algumas palavras reservadas sejam usadas como identificadores. Exemplos dessas palavras você pode ver abaixo:
ACTION |
BIT |
DATE |
ENUM |
NO |
TEXT |
TIME |
TIMESTAMP |