segunda-feira, 2 de dezembro de 2013

Configurando Symfony2 no OSX Mavericks: instalando a extensão Intl

Opa,

Finalmente decidi aprender o framework Symfony2. Apesar de estar propensa a trabalhar mais com Ruby On Rails, ainda não posso deixar totalmente o PHP de lado. Dito isso, resolvi me atualizar no framework PHP que mais gosto e uso: symfony 1.4 para Symfony2. Para isso, é importante notar que uso o PHP que já veio com o OSX (5.4.17 no meu caso), como servidor web uso o Apache2 e já possuo o Homebrew e o PECL instalados.

A primeira coisa que a fazer depois de descompactar o Symfony2 (em geral no diretório /var/www/ ) é configurar seu virtual host do Apache2 ou rodar o servidor web embutido disponível a partir da versão 5.4 do PHP através deste comando:

cd /var/www/project
php app/console server:run


Como não é meu objetivo explicar como fazer isso, deixo para a bem estruturada documentação do Symfony2 ajudar, especificamente na parte de Configuração do Servidor Web. O problema que quero resolver nesse post é a instalação do package intl no Mavericks, que é necessária para a parte de validação. O requerimento pode ser visto ao acessar /config.php. Vamos lá! No terminal, execute:

brew update
brew install icu4c


Depois da instalação, que pode demorar um pouquinho, anote o local onde fica a biblioteca icu4c no seu OSX, no meu caso o caminho foi /usr/local/Cellar/icu4u/52.1, pois ela é a única dependência que o intl precisa. Então, continue executando do terminal:

sudo pecl update-channels
sudo pecl install intl
Specify where ICU libraries and headers can be found [DEFAULT] : /usr/local/Cellar/icu4c/52.1
sudo nano /etc/php.ini (ou sudo vim /etc/php.ini)


No arquivo /etc/php.ini coloque a linha abaixo no arquivo (geralmente no final), salve-o e reinicie o Apache2 do terminal:

extension=intl.so
sudo apachectl restart


Ao acessar novamente o caminho /config.php pelo browser, você verá que o aviso desapareceu :)
É só.

quarta-feira, 16 de outubro de 2013

Lista de lugares web para aprender a programar

Opa!

Criei essa lista de links interessantes para aperfeiçoar ou aprender programação web. A lista pode parecer curta no início, mas pretendo ir atualizando assim que for descobrindo novos lugares. Deixo também algum comentário para saber se já utilizei ou não. Segue:

  1. Code School
    Muito bom! Alguns cursos são gratuitos, mas os melhores são pagos. Eu adorei a metodologia e a produção bem elaborada deles, tanto nos vídeos quanto no material pdf.
  2. Dash
    Ainda não testei, mas pareceu interessante.
  3. Code Academy
    Gosto da filosofia de aprender e ajudar a ensinar. Porém, devido a um erro no sistema, acabei perdendo a maioria das badges que tinha e acabou me desestimulando. Pretendo voltar assim que encontrar tempo. O melhor é que é gratuito.

segunda-feira, 7 de outubro de 2013

Instalando o oh-my-zsh no Ubuntu

Opa!

Acabei achando um guia muito rápido, em inglês claro, e por isso resolvi traduzir e postar aqui para futuras consultas. Fiz isso tanto no Ubuntu 12.04 quanto no 13.04.

Pré-requisitos
apt-get install zsh
apt-get install git-core

Substituindo o shell pelo zsh
wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | zsh
chsh -s `which zsh`

Reiniciando o sistema
sudo shutdown -r 0

Bônus
Se você tem uma conta no github, pode dar um fork no projeto original e fazer suas customizações, como acrescentar atalhos para os comandos mais usados ou fazer seu próprio tema.


É só.



Fonte: https://gist.github.com/tsabat/1498393

domingo, 28 de julho de 2013

Mudar folder (ou diretório ou pasta) das imagens da gem CKEditor com Paperclip usando Rails 3.2

Opa!

Por esses dias precisei alterar em uma aplicação Rails 3.2.12, usando as gems CKEditor e Paperclip, a localização do diretório onde as imagens inseridas pelo CKEditor são guardadas. Depois de alguma pesquisa na internet, verifiquei que era necessário alterar os modelos attachment_file.rb e picture.rb do CKEditor, que ficam localizados na pasta app/models/ckeditor, alterando as seguintes linhas:



has_attached_file :data,
      :url  => "/ckeditor_assets/pictures/:id/:style_:basename.:extension",
      :path => ":rails_root/public/ckeditor_assets/pictures/:id/:style_:basename.:extension",
      :styles => { :content => '600>', :thumb => '118x100#' }


Para a localização que eu queria (no caso a pasta system em public por causa do capistrano):

has_attached_file :data,
      :url  => "/system/ckeditor_assets/pictures/:id/:style_:basename.:extension",
      :path => ":rails_root/public/system/ckeditor_assets/pictures/:id/:style_:basename.:extension",
      :styles => { :content => '600>', :thumb => '118x100#' }

Notar que é possível configurar aí o aparecimento do caminho absoluto no link da imagem. É só completar no parâmetro URL do modelo.

Após isso, só faltou configurar o CKEditor para que não aparecesse tantas opções de plugins, o que é facilmente resolvido ao criar e configurar o arquivo app/assets/javascript/ckeditor/config.js  Contudo, notei que ao colocar o arquivo config.js onde é indicado, mesmo que este esteja vazio, o Uploader que vem configurado com o CKEditor deixa de funcionar. 

Novamente saí catando algo na internet e achei um work-around na própria lista de issues da gem CKEditor. O arquivo config.js necessário para resolver esse problema deve ficar assim (notar que a solução não é minha, mas foi compartilhada nessa issue):

/*
 Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
 */

CKEDITOR.editorConfig = function( config )
{
    // Define changes to default configuration here. For example:
    // config.language = 'fr';
    // config.uiColor = '#AADC6E';

    /* Filebrowser routes */
    // The location of an external file browser, that should be launched when "Browse Server" button is pressed.
    config.filebrowserBrowseUrl = "/ckeditor/attachment_files";

    // The location of an external file browser, that should be launched when "Browse Server" button is pressed in the Flash dialog.
    config.filebrowserFlashBrowseUrl = "/ckeditor/attachment_files";

    // The location of a script that handles file uploads in the Flash dialog.
    config.filebrowserFlashUploadUrl = "/ckeditor/attachment_files";

    // The location of an external file browser, that should be launched when "Browse Server" button is pressed in the Link tab of Image dialog.
    config.filebrowserImageBrowseLinkUrl = "/ckeditor/pictures";

    // The location of an external file browser, that should be launched when "Browse Server" button is pressed in the Image dialog.
    config.filebrowserImageBrowseUrl = "/ckeditor/pictures";

    // The location of a script that handles file uploads in the Image dialog.
    config.filebrowserImageUploadUrl = "/ckeditor/pictures";

    // The location of a script that handles file uploads.
    config.filebrowserUploadUrl = "/ckeditor/attachment_files";

    // Rails CSRF token
    config.filebrowserParams = function(){
        var csrf_token, csrf_param, meta,
            metas = document.getElementsByTagName('meta'),
            params = new Object();

        for ( var i = 0 ; i < metas.length ; i++ ){
            meta = metas[i];

            switch(meta.name) {
                case "csrf-token":
                    csrf_token = meta.content;
                    break;
                case "csrf-param":
                    csrf_param = meta.content;
                    break;
                default:
                    continue;
            }
        }

        if (csrf_param !== undefined && csrf_token !== undefined) {
            params[csrf_param] = csrf_token;
        }

        return params;
    };

    config.addQueryString = function( url, params ){
        var queryString = [];

        if ( !params ) {
            return url;
        } else {
            for ( var i in params )
                queryString.push( i + "=" + encodeURIComponent( params[ i ] ) );
        }

        return url + ( ( url.indexOf( "?" ) != -1 ) ? "&" : "?" ) + queryString.join( "&" );
    };

    // Integrate Rails CSRF token into file upload dialogs (link, image, attachment and flash)
    CKEDITOR.on( 'dialogDefinition', function( ev ){
        // Take the dialog name and its definition from the event data.
        var dialogName = ev.data.name;
        var dialogDefinition = ev.data.definition;
        var content, upload;

        if (CKEDITOR.tools.indexOf(['link', 'image', 'attachment', 'flash'], dialogName) > -1) {
            content = (dialogDefinition.getContents('Upload') || dialogDefinition.getContents('upload'));
            upload = (content == null ? null : content.get('upload'));

            if (upload && upload.filebrowser && upload.filebrowser['params'] === undefined) {
                upload.filebrowser['params'] = config.filebrowserParams();
                upload.action = config.addQueryString(upload.action, upload.filebrowser['params']);
            }
        }
    });
};

É só.

Fontes:
  • https://github.com/galetahub/ckeditor/issues/238
  • http://stackoverflow.com/questions/3647905/how-exactly-do-you-integrate-ckeditor-with-paperclip-so-it-can-upload-image-file





sexta-feira, 10 de maio de 2013

Inicializar PostegreSQL e MySQL através do Terminal do OSX

Opa!

Como esqueço às vezes como fazer isso e acabo recorrendo muito ao Ctrl+R, é melhor deixar registrado, caso meu histórico de comandos se perca. Primeiro o do PostgreSQL:

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
pg_ctl -D /usr/local/var/postgres stop -s -m fast 


O do MySQL é bem mais fácil:

 mysql.server start
 mysql.server stop
 mysql.server restart


É só.

quarta-feira, 24 de abril de 2013

terça-feira, 23 de abril de 2013

Como usar o FileMerge do OSX no GIT

Opa!

Mais um lembrete de como configurar o uso do FileMerge, aplicativo de comparação de arquivos que já veio no OSX (eu uso atualmente a versão Mountain Lion), para quando precisar no GIT, por exemplo durante um merge.

Configuração Global:

git config --global merge.tool opendiff


Confuguração Local:

git config --local merge.tool opendiff


Bem simples, prático e útil.
Apesar de que eu queria mesmo usar o Kaleidoscope, mas por enquanto ele está acima do meu budget para apps. Assim, vou me contentando com o FileMerge mesmo :)

É só.

Fontes:

segunda-feira, 22 de abril de 2013

Usando PATH absoluto no tinyMCE com symfony 1.4

Opa!

Mais um post rápido, dessa vez para lembrar de como modificar o tinyMCE para exibir o PATH absoluto na imagem, ao invés do relativo. Isso é útil no caso do seu backend do symfony estar hospedado em um local e o seu frontend em outro, geralmente o do cliente. Eis o código:


tinyMCE.init({
    // opções gerais
    mode : "textareas",
    theme : "advanced",
    width: "480",
    height: "400",

    //modificação para path absoluto
    remove_script_host : false,
    relative_urls : false
});
É só.
Fonte: My Monkey Do

segunda-feira, 15 de abril de 2013

Visualizando o log de erro do Apache2 no Mountain Lion

Essa é rápida.
Para verificar qualquer problema que possa estar dando no Apache2 usando o Mountain Lion como ambiente de desenvolvimento, é só dar o comando abaixo:

cat /var/log/apache2/error_log

É só.

quarta-feira, 3 de abril de 2013

Erro na inserção de dados usando symfony 1.4, Doctrine e PostgreSQL: Doctrine_Sequence_Exception on demand sequence

Opa!

Mexendo em um projeto feito em symfony 1.4 me deparei com esse erro.
Ele é relatado no fórum legado do symfony, porém lá não possui resposta alguma e nem é possível contribuir porque a versão atual do symfony é a 2.0, e o symfony 1.x não possui mais o suporte da oficial da comunidade. De qualquer forma, é um erro simples de lidar (pelo menos foi no meu caso).

Descrição
Ao tentar inserir um registro no banco de dados PostgreSQL, ocorre o seguinte erro transcrito e adaptado:  Doctrine_Sequence_Exception on demand sequence nome_do_banco.nome_da_tabela_id_seq could not be created.

O meu arquivo schema.yml estava assim:

Nome_do_modelo:
  connection: doctrine
  tableName: nome_do_banco.nome_da_tabela
  actAs:
    Timestampable: ~
  columns:
    id: { type: integer, primary: true, sequence: nome_do_banco.nome_da_tabela_id_seq }

Até aí eu achava que não tinha nada errado, mas fuçando na internet e olhando os fontes do symfony e do Doctrine, resolvi tentar tirar a parte "_seq" do final e voilá! Funcionou perfeitamente. Assim meu schema.yml final ficou:

Nome_do_modelo:
  connection: doctrine
  tableName: nome_do_banco.nome_da_tabela
  actAs:
    Timestampable: ~
  columns:
    id: { type: integer, primary: true, sequence: nome_do_banco.nome_da_tabela_id }


Lembrar que o nome do meu modelo está no singular e o nome da tabela no PostgreSQL está no plural.

É só :)

terça-feira, 2 de abril de 2013

Configuração de ambiente de desenvolvimento no Mountain Lion

Opa :)

Finalmente voltei ao meu sistema preferido, e assim se faz necessário uma configuração inicial para prepará-lo para desenvolvimento. Vamos lá!

Lista do que instalar:
  1. Brew: http://mxcl.github.com/homebrew/
  2. Git: http://git-scm.com
  3. XCode: https://developer.apple.com/xcode/
  4. ZSH: http://railscasts.com/episodes/308-oh-my-zsh
  5. AMP (Apache+MySQL+PHP): http://coolestguyplanettech.com/downtown/install-and-configure-apache-mysql-php-and-phpmyadmin-osx-108-mountain-lion
    • Configurar date.timezone = 'America/Maceio' em php.ini. No meu caso, o arquivo php.ini não existe e o php está configurado pra procurá-lo dentro de /etc, fazendo-se necessário rodar o comando sudo cp /etc/php.ini.default /etc/php.ini antes de qualquer alteração. Ao final, dar um restart no apache.
  6. brew install mysql:

    • brew info mysql
    • unset TMPDIR
    • mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp
    • /usr/local/opt/mysql/bin/mysqladmin -u root password 'senha'
    • /usr/local/opt/mysql/bin/mysqladmin -u root -h nomeheavenair.home password 'senha'
    • /usr/local/opt/mysql/bin/mysql_secure_installation
    • ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents (para lançar quando o sistema iniciar) 
    • mysql.server start (para iniciar do terminal)
  7. phpMyAdmin:

    • Corrigir o erro 2002: sudo mkdir /var/mysql e sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock
    • Colocar a pasta no DocumentRoot definido pelo apache2 (/Library/WebServer/Documents é o padrão do apache2 que vem no Mountain Lion)
    • Criar a pasta de configuração: mkdir /your-path-to/phpmyadmin/config e chmod o+w /your-path-to/phpmyadmin/config
    • Configurar servidor localhost através de: http://localhost/phpmyadmin/setup
    • Depois da configuração, copiar o /your-path-to/phpmyadmin/config/config.inc.php para /your-path-to/phpmyadmin/ e deletar o diretório config.


  8. rbenv
  9. PostgreSQL
    • Instale através do brew: brew install postgresql
    • Rode o brew doctor pra ver se está tudo OK, se não estiver, corrija o que ele pede. No meu caso foi consertar o PATH para que o caminho do brew viesse antes do caminho do sistema, isto é, meu PATH ficou assim: /usr/local/bin:/usr/local/git/bin:/usr/bin:/bin:/usr/sbin:/sbin (dica: para ver o conteúdo do seu PATH execute no terminal echo $PATH)
E é claro que nada disso foi por acaso, a maioria das dicas peguei com um teamworker (valeu, Toze!) e outras foram vistas em algum lugar dessas referências:


terça-feira, 29 de janeiro de 2013

Desabilitando completamente o Dashboard do Mountain Lion

Opa!

Como uso demais os atalhos do trackpad, principalmente para voltar página na internet, acabo me irritando com o Dashboard. Solução: desativar! Nada que uma boa pesquisa no Google não resolvesse, logo para desativar é só copiar e colar a linha abaixo no terminal:
defaults write com.apple.dashboard mcx-disabled -boolean YES

Depois, reinicie o Dock com o comando abaixo:
killall Dock

Pronto! Nada mais de ir pro Dashboard quando na verdade eu queria voltar uma página na internet!
Porém, para o caso de arrependimentos posteriores, os comandos abaixo reverterão a desativação do Dashboard:
defaults write com.apple.dashboard mcx-disabled -boolean NO
killall Dock

É só.



Fonte: ernieflores