Instalando o Xdebug 2.1.2 no Mac OS X Lion e Zend Community Server 5.5

O Xdebug é uma ferramenta muito útil para avaliar o desempenho de programas e, como o nome diz, realizar o debug.

Em condições normais utilizariamos o pecl install xdebug mas no Mac isso gera problemas com a plataforma utilizada.

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/zend/lib/php_extensions/xdebug.so' - dlopen(/usr/local/zend/lib/php_extensions/xdebug.so, 9): no suitable image found.  Did find:
	/usr/local/zend/lib/php_extensions/xdebug.so: mach-o, but wrong architecture in Unknown on line 0

Temos então que realizar a compilação manual do Xdebug.

Siga os passos abaixo:
Faça o download dos fontes do xdebug

Extraia o pacote

Execute os comandos

MACOSX_DEPLOYMENT_TARGET=10.7
CFLAGS="-arch i386 -arch x86_64 -g -Os -pipe -no-cpp-precomp"
CCFLAGS="-arch i386 -arch x86_64 -g -Os -pipe"
CXXFLAGS="-arch i386 -arch x86_64 -g -Os -pipe"
LDFLAGS="-arch i386 -arch x86_64 -bind_at_load"
export CFLAGS CXXFLAGS LDFLAGS CCFLAGS MACOSX_DEPLOYMENT_TARGET

Use o phpize

/usr/local/zend/bin/phpize

Siga o processo de configura/make

./configure
make

Copie o xdebug.so (como root ou através do sudo)

cp modules/xdebug.so /usr/local/zend/lib/php_extensions

Desligue o debug padrão do Zend /usr/local/zend/etc/conf.d/debugger.ini (como root ou através do sudo)

; zend_extension_manager.dir.debugger=/usr/local/zend/lib/debugger

Ative o xdebug no começo do /usr/local/zend/etc/php.ini (como root ou através do sudo)

zend_extension = /usr/local/zend/lib/php_extensions/xdebug.so

Reinicie o apache (como root ou através do sudo)

/usr/local/zend/bin/zendctl.sh restart-apache
Share
Posted in Mac OS X, PHP | 1 Comment

Git : Usando o stash para salvar trabalhos em andamento

O git é uma ferramenta para controle de versão muito versátil.  Uma das funcionalidades que acho interessante e útil no dia-a-dia é o stash.

Imagine a seguinte situação, você está trabalhando em um branch em conjunto com outra pessoa e após ter feito algumas alterações você precisa revisar o que esta pessoa fez.

Seu trabalho ainda não está completo para merecer um commit e se você tentar fazer o pull irá ter problemas ou fazer o merge das suas mudanças com as dele.

O que fazer nesse caso?  Uma solução seria copiar seus arquivos para outro local e baixar os dele e depois restaurar os seus.

O git oferece a possibilidade de você armazenar, localmente, as versões in progress de seus arquivos para situações como estas.

Para tanto você deve usar o comando abaixo:

git stash save "mensagem"

Ao fazer isso você irá salvar os arquivos modificados e ainda não comitados para esta área reservada e associar a esta uma mensagem para lhe ajudar a saber o que estava fazendo.

Após este comando ele ira resetar todos os arquivos para a última versão comitada. Você pode fazer o pull ou demais operações e quando quiser retomar o que estava fazendo basta usar o comando

git stash apply stash@{0}

O stash funciona como uma pilha na qual é possível armazenar várias “versões” dos arquivos sendo editados. O comando anterior irá retornar a posição mais antiga (0) da pilha.

Se você quiser ver o que existe no stash use

git stash list

Para obter qualquer outro elemento você simplesmente identifica qual posição deseja obter no apply stash@{x}.

Para limpar a pilha (removendo todas as posições) use

git stash clear
Share
Posted in Desenvolvimento, Git | Tagged , | Leave a comment

Habilitando o mcrypt no ZendServer 5.5 / Mac OS X Lion

O Mac vem por padrão com  PHP e o Apache que já permitem o desenvolvimento de aplicativos em qualquer computador Apple.

Entretanto a Apple é notória por usar versões desatualizadas ou com poucas extensões e ainda demorar para liberar atualizações.   Por isso é comum que quem desenvolva no Mac usar distribuições de Apache+MySQL+PHP.

A que tenho usado e recomendo é a Zend Community Server, na sua versão 5.5.  Entretanto no Mac OS Lion a extensão do Mcrypt, usada para criptografia, que vem com ele não funciona.

Siga os passos abaixo para usar esta versão:

  1. Instale o Xcode – você precisará do compilado gcc e das bibliotecas para compilar a extensão.   Você pode instalar o Xcode pelo App Store
  2. Faça o download o libmcrypt em http://sourceforge.net/project/showfiles.php?group_id=87941
  3. Faça o download do fonte do php (neste caso 5.3.8) em http://www.php.net/downloads.php.  É importante que a versão do fonte seja a mesma da que é distribuida com o Zend Server
  4. Descompacte o libmcrypt e mude o diretório para ele
  5. Use o comando abaixo para configurar o fonte
    MACOSX_DEPLOYMENT_TARGET=10.7 CFLAGS='-O3 -fno-common -arch i386 -arch x86_64' LDFLAGS='-O3 -arch i386 -arch x86_64' CXXFLAGS='-O3 -fno-common -arch i386 -arch x86_64' ./configure --disable-dependency-tracking
  6. Compile o libmcrypt
    make -j6
  7. Instale o libmcrypt
    sudo make install
  8. Descompacte o php
  9. Mude o diretório para php-5.3.8/ext/mcrypt
  10. Use o comando abaixo para configurar a extensão
    MACOSX_DEPLOYMENT_TARGET=10.7 CFLAGS='-O3 -fno-common -arch i386 -arch x86_64' LDFLAGS='-O3 -arch i386 -arch x86_64' CXXFLAGS='-O3 -fno-common -arch i386 -arch x86_64' ./configure --with-php-config=/usr/local/zend/bin/php-config
  11. Compile a extensão
    make -j6
  12. Instale a extensão
    sudo cp modules/mcrypt.so /usr/local/zend/lib/php_extensions/
  13. Reinicie o servidor apache e você deve ver algo assim


Share
Posted in Desenvolvimento, Mac OS X, PHP | Tagged , | Leave a comment

Desenvolvimento de software : realidade e desafios

“Nova metodologia de desenvolvimento promete revolucionar a forma como desenvolvemos software”

“A nova versão do Ruby on Rails/C#/Java/node.js introduz funcionalidades que permitirão desenvolver mais rapidamente código”

Estes são dois exemplos de frases que encontro na mídia especializada quando o assunto é desenvolvimento.

Ao mesmo tempo o que encontro são reclamações de que os softwares que adquirimos (ou fabricamos) possuem de uma a três das características abaixo:

  1. Acima do prazo
  2. Acima do orçamento
  3. Não satisfaz às necessidades do usuário

Como alguém que possivelmente já desempenhou todos os papéis da cadeia de produção de software, de Cliente a tester passando por analista,  desenvolvedor e gerente de projeto tal realidade sempre me surpreendeu.

Enquanto Eu não acredite que exista (ou venha existir) a “bala de prata” para software, ou seja, a solução/linguagem/framework/metodologia que atenda a todos os tipos e peculiaridades do software, me assustam os dados que tratam que cerca de 90% do software produzido sofre dos três problemas citados anteriormente.

Em busca de um “por quê” venho estudando nos últimos anos os diversos aspectos envolvidos na produção de software.  Afinal se encontrarmos a causa fica mais fácil encontrar a solução, certo?

Apesar de considerar que ainda há muito espaço para avanços minha conclusão é que, infelizmente, estamos tratando de um problema sem solução. Ao citar isso quero dizer que a despeito de alguma solução verdadeiramente revolucionária (ou mágica) o melhor que podemos fazer é conter o caos que é inerente ao processo e mitigar o impacto dos três problemas venham causar.

Quando converso com um amigo que não é da área técnica Eu sempre escuto que ele não entende como podemos ter tantos problemas nessa área.  Eu tento explicar que apesar de estar englobada em uma área de ciências exatas o desenvolvimento de software já deixou de ser (se é que algum dia verdadeiramente foi) uma área determinística.

Idealmente deveríamos poder, passados 50 anos desde o aparecimento da computação chegar numa fórmula que nos permitisse dizer o que queremos que o software faça e termos uma resposta precisa sobre quanto tempo e quantos recursos ele necessitará.

Donald Knuth, professor de Stanford, escolheu para o título de seus livros o estranho nome de “The Art of Computer Programming”.   O que é estranho é que o termo arte, associado normalmente a criação, foi aplicado a algo que na sua definição não deveria necessitar de nenhuma criatividade.  Dado um problema existe um conjunto finito de soluções para resolvê-lo. Ou não?

Para explicar que motivos me levam a tomar esta decisão é preciso voltar um pouco no tempo e entender o caminho que percorremos até a realidade atual.

Com excessão dos primeiros computadores e seus respectivos programas que eram extremamente limitados, o desenvolvimento de software consistia em você pegar um problema do dia-a-dia, como uma folha de pagamento que precisava ser calculada manualmente, e modelava este problema usando alguma linguagem de desenvolvimento.

E aí se encontram as principais características que são as origens dos problemas:

a) Definição do problema/solução

Mesmo passados muitos anos ainda não temos uma maneira de especificar o problema e a solução de maneira a eliminar a ambiguidade ou possibilidade de interpretação diversa como existem em outras áreas.  Assim sendo uma mesma especificação de software tem uma margem que permite a interpretação diferenciada.

b) Complexidade x Abstração

A maioria dos problemas é suficientemente complexo quando se olha de perto.  Excessões, validações, cenários são variados e a combinação de variáveis é suficientemente grande para tornar o desenvolvimento impossível.

Para contornar essa realidade usamos em nosso dia-a-dia abstrações que visam simplificar o que estamos tentando entender ou resolver em termos mais contidos.  Infelizmente como efeito colateral das abstrações também escondemos detalhes relevantes a solução.

Com isso criamos soluções que funcionam em certas condições mas não em todas.

O que temos feito a esse respeito?

Em minha opinião nada que efetivamente produza resultados.  Basta acompanhar que o ritmo de linguagens e frameworks só aumenta em vez de diminuir.   Ou seja, continuamos a aumentar o caos já que com a quantidade de linguagens, plataformas existentes quem pode realmente se considerar um especialista?

O Java está na versão 7.0 e ainda contem problemas de compatibilidade e funcionamento que existem desde seu lançamento há mais de 15 anos.

Nos preocupamos em “avançar”, criando novas camadas de abstração sobre as que já existiam em vez de se concentrar em resolver problemas.

É por isso que não creio que vejamos uma real melhoria no quadro enquanto a realidade por trás dos problemas não for colocada como prioridade pela indústria.

Share
Posted in Desenvolvimento | Leave a comment

Perspectivas do mercado móvel em 2011 (2a parte)

No último post apresentei minha visão sobre os fatos que aconteceram e estariam para acontecer no mercado móvel.

Passados 6 meses que novidades temos neste setor?

Do ponto de vista estritamente tecnológico não há muito o que se comentar.  O iPad2 foi lançado com a mesma fanfarra que o anterior e finalmente adicionou um item que já era padrão nos demais tablets : câmeras.

Além do hardware melhor e mais fino a Apple conseguiu fazer de novo algo que sempre me intriga: apresentar features já existentes em outros dispositivos mas fazê-lo de maneira que todos (ou quase) esqueçam disso.

Os rumores agora são que o iPad3 seria liberado este ano juntamente com o iPhone5.  Até o momento não há confirmação de tal e pelas vendas do iPad2 eu particularmente acho que seria uma decisão equivocada.

Como os concorrentes não conseguem se aproximar da Apple mesmo tendo soluções de hardware superiores não vejo por que apressar o lançamento de uma nova versão. É melhor capitalizar sobre os ganhos de escala que o modelo corrente vem apresentando.

Recentemente a HP decidiu mandar sinais confusos para o mercado sobre sua estratégia quanto ao WebOS e a única certeza que temos é que ela está saindo do mercado de tablets.  Ou melhor, saindo por ora!

O Playbook da RIM e o Xoom da Motorola amargam vendas abaixo do esperado e o único concorrente que tem gerado algum volume de vendas é o Galaxy Tab 10.1.

Por enquanto nenhum dispositivo lançado comercialmente usa os modelos Quad-core da Nvidia (ou similar) mas a tendência é que tal seja inevitável em 2012.

A união da Nokia + Microsoft anunciada no início do ano ainda não apresentou resultados concretos mas deve fazê-lo nos próximos meses.  Resta saber se a Nokia ira matar todos os demais dispositivos para apostar no OS móvel da MS.

Num movimento recente o Google comprou a divisão de celulares da Motorola supostamente para ter um controle maior sobre todo o processo e acelerar ainda mais o uso do Android.  Vamos esperar para ver o que na prática isso resultará.

Share
Posted in Geral | Tagged , , , , , , | Leave a comment

Perspectivas do mercado móvel em 2011

“Nvidia planeja lançamento do primeiro chip quad-core para equipamentos móveis em 2011″

Com uma notícia como essas (vide post) fica fácil apostar que o mercado móvel, de forma similar a 2010, mas em ritmo mais acelerado, dominará as novidades no setor de tecnologia em 2011.

A invasão de tablets de primeira geração em 2010 e com os dispositivos de segunda geração chegando este ano todos os demais desenvolvimentos, por mais interessantes do ponto de vista técnico, parecem que serão relegados a um segundo plano.   Este ano deve ser lançado a nova versão do Mac OS (10.7) e a nova versão do Windows (no momento ainda chamado de Windows 8).

A pergunta é quem liga para isso?

A mídia, especializada ou não, só tem atenção para as novas versões do Android voltada para tablets ou não (2.3 ou 3.0), lançamentos como o tablet da RIM (O Playbook), Dell (Streak) e Motorola (Xoom).  Não podemos esquecer também os rumores que rondam o iPad2, que supostamente será anunciado nas próximas semanas.

Todas essas notícias, aliadas ao uso da computação em nuvem, só reforçam as previsões de que em algum momento no futuro nossos tablets e/ou celulares substituirão, em grande parte, os dispositivos tradicionais como desktops e notebooks para as atividades do dia-a-dia.

Eu mesmo adquiri um iPad e confesso que substitui o notebook para as atividades como consultas eventuais a emails ou para se colocar em dia com os sites e news feeds de um modo geral.  Ele passou a ser um aliado para, inclusive nos momentos de lazer, para realizar uma consulta de algum item interessante que ví na televisão.

Outra notícia interessante do mercado foi o anúncio, por parte da Nokia, que passará a utilizar o sistema operacional móvel da microsoft para dar vida a sua linha de celulares, aparentemente eliminado o Symbian e Linux que eram usados em toda a linha, desde os modelos mais simples até seus smartphones.

Para quem quiser maiores informações sobre os lançamentos da Nvidia leia o post e veja que, se concretizadas as previsões, teremos celulares e tablets com uma performance até 100 vezes maior do que a encontrada em 2010 até 2014!

No próximo post comentarei sobre a reação do mercado e análises sobre o acordo Nokisoft (Nokia + Microsoft).

Share
Posted in Geral | Tagged , , , , , , , | Leave a comment