quinta-feira, 27 de dezembro de 2012

vim, tips and tricks

Seguem uma série de memos e atalhos para o vim.

Pesquisar: /pesquisa e Enter
Ocorrências seguintes: n

saltar para a linha: [num-linha]gg
ex: 156gg (vai para a linha 156)

mostrar numeros das linhas: :set nu

Alterar pass mysql no MAMP

Para alterar o password do mysql com o MAMP é necessário alterar varios ficheiros, seguem as instruções:

Alteramos primeiro no mysql
/Applications/MAMP$ Library/bin/mysqladmin -u root -p password

Depois vamos editar as configurações do phpmyadmin
$ vim /Applications/MAMP/bin/phpMyAdmin/config.inc.php

Por volta da linha 86 alteramos a palavra root para a nova password
$cfg['Servers'][$i]['password'] = 'root'; // MySQL password (only needed
// with 'config' auth_type)

Caso pretendam alterar a password de root para '', têm de colocar a seguinte linha no mesmo ficheiro:
$cfg['Servers'][$i]['AllowNoPassword'] = true;

De seguida alteramos o index do MAMP
$ vim /Applications/MAMP/bin/mamp/index.php

Na linha 5 encontramos a conexão à base de dados, o segundo 'root' é a pass, alteramos para a nova.
$link = @mysql_connect(':/Applications/MAMP/tmp/mysql/mysql.sock', 'root', 'root');


Reiniciamos o MAMP e está pronto.

quinta-feira, 20 de dezembro de 2012

Force git pull

Já aconteceu termos de alterar dados em produção directamente (péssimo, mas por vezes tem de ser), e depois, ao tentarmos fazer uma git pull temos conflitos.

Nestes casos, queremos descartar as alterações de produção e manter as que fizemos a posteriori, supostamente o git pull origin master --force deveria resolver o nosso problema, mas não, a solução é a seguinte:


git fetch origin master
git reset --hard FETCH_HEAD
git clean -df

quinta-feira, 8 de novembro de 2012

Symfony correr task em acção

Geralmente criamos uma task symfony para correr numa cron, mas por vezes pode-nos dar muito jeito correr a task ao clicar num botão ou depois de guardar um objecto, para resolver isso ficam aqui as poucas linhas que necessitam para correr a task:

// In sfActions
chdir(sfConfig::get('sf_root_dir')); // Trick plugin into thinking you are in a project directory
$task = new sfMyVerySpecialTask($this->dispatcher, new sfFormatter());
$task->run(array('argument_name' => 'argument'), array('option_name' => 'option'));

Fonte: link

segunda-feira, 5 de novembro de 2012

Symfony Task error de "default context"

Um erro recorrente em Symfony é o tão conhecido The "default" context does not exist., este erro dá-se quando tentamos aceder às variáveis de context numa Task.

Para resolver é simples, basta colocar a linha seguinte no execute da task.
sfContext::createInstance($this->configuration);

segunda-feira, 29 de outubro de 2012

Limpar versões antigos do Google Chrome

Hoje o meu portátil queixou-se que tinha pouco espaço em disco, pois vem vou ver o que se passa, ligo o DiskWave (podem aproveitar para fazer download, é grátis) e vejo que nas minhas aplicações, o Google Chrome ocupa 2.31GB, o que é mesmo muito para um browser.

Decidi então limpar a casa:

Aplication -> Botão direito no Google Chrome -> Show Package Content (ver conteúdos do pacote) -> Contents -> Versions

E aqui estão elas:

Selecciono todas os directórios (pastas) excepto a mais recente e apago-as.

Ficou tudo a funcionar na perfeição e eu ganhei cerca de 2.2GB, o Chrome passou agora a ocupar um pequenos 122.23 MB.

quinta-feira, 13 de setembro de 2012

Symfony User Filters

Muitas vezes é importante conseguirmos saber os filtros que o utilizador criou para apresentarmos os dados pedidos.

Estes filtros são guardados como atributo do sf_user, para os conseguir obter basta utilizar estas linhas:

$admin_module = $sf_user->getAttributeHolder()->getAll('admin_module');
        $filters = $admin_module['page.filters'];

em que o page é o nome do modulo que estão a editar.


segunda-feira, 10 de setembro de 2012

Download de ficheiro em Symfony

Por vezes esta simples acção pode ser um bocado complicada. Vamos então ver como podemos fazer o download de um ficheiro de forma simples em Symfony.

Criar-mos a acção executeDownload() e, após criar o ficheiro basta colocar estas poucas linhas:

$resp = $this->getResponse();

    $resp->setContentType('text/csv');
    $resp->setHttpHeader(
              'Content-Disposition', 
              'attachment; filename="' . basename($file_path) . '"');
    $resp->setContent(file_get_contents($file_path));

    return sfView::NONE;

segunda-feira, 3 de setembro de 2012

Widgets Template - Row Format

Personalizar os formulários do Symfony pode ser um castigo, a menos que consigamos perceber como funcionam e as coisas tornam-se mais simples.

Até ao dia de hoje, sempre que queria modificar um formulário editava o template e reescrevia o html.

posso fazer o mesmo com apenas estava linha de código no formulário:
$this->widgetSchema
     ->getFormFormatter()
     ->setRowFormat('%label%%field%%help%%hidden_fields%');

Podemos utilizar os seguintes atributos:

%label%
      %field%
      %error%
      %help%
      %hidden_fields%

quarta-feira, 8 de agosto de 2012

Criar um validador personalizado em symfony

Por vezes os Validators disponíveis no Symfony não são sufientes para validar os nossos campos, principalmente quando um campo depende de outro, p.e.:
se cmb_a is cheched e cmb_b is checked

       então

     //acção

       senão

     //erro!

Para tal, necessitamos de criar Validators personalizados e aplica-los ao nosso campo. Para tal na nossa classe de formulário acrescentamos as seguintes linhas:

public function configure()
{
    parent::configure();

    $this->validatorSchema['my_field'] = new sfValidatorCallback(
                    array('callback' =>
                        array($this, 'validateMyField')
                    )
    );

}

public function validateMyField($validator, $value)
{
    /* All my action goes here */
    $tainted_values = $this->getTaintedValues();

    if ($tainted_values['my_field_2'] > 0 && $value != '')
    {
        return $value;
    }
    else
    {
        throw new sfValidatorError($validator, "I guess something goes wrong here!");
    }
}


No método validateMyField podemos aceder aos valores todos do formulário obtendo os Tainted values disponíveis utilizando o método getTaintedValues da classe dos formulários.

Realizadas as verificações pretendidas devolvemos o valor ($value) do campo validado ou despoletamos um erro que será apresentado pelo método renderError do formulário.










domingo, 1 de julho de 2012

Print Screen em MacOsX

Exitem diferentes formas de fazer print screen no Mac OS X.

Para fazer um print screen da ecrã completo:
Prima uma vez ⌘ + Shift + 3
Com rato prima no ecrã

Para capturar apenas um porção do ecrã:
Prima uma vez ⌘ + Shift + 4
O rato passa a ser uma cruz com as coordenas do sitio onde está, só tem de clicar no canto superior esquerdo da zona que pretende capturar, arrastar até ao canto inferior direito e largar o botão do rato.

Para capturar uma janela de uma aplicação completa:
Prima uma vez ⌘ + Shift + 4
Prima agora a barra de espaços, o cursor do rato passa a ser uma câmara, clique na janela que pretende capturar
Todas os print screens vão para o Desktop.

terça-feira, 5 de junho de 2012

Android - Draw Something

O Draw Something é um jogo viciante que nós poderá levar a perder horas a desenhar (ou a pensar que desenhamos) com os nossos amigos.

A base do jogo é muito parecida com a do Pictionary, desenhar e esperar que alguém adivinhe. Neste caso são nos propostas 3 palavras com valores diferentes, escolhemos uma e desenhamos o melhor que conseguimos para que o nosso amigo consiga adivinhar. Na volta seguinte, o amigo que adivinhou desenha para nós.



Inicialmente o jogo tem um "enorme" leque de 4 cores apenas, mas pode ser facilmente aumentado ganhando moedas e trocando-as por paletes de cores.



Este jogo é multi-plataformas, poderá jogar contra amigos que o tenham instalado num iPhone.

qrcode

Para instalar a partir da imagem sigam este post: Barcode Scanner

quarta-feira, 22 de fevereiro de 2012

Geocaching offline

Para as pessoas que não têm plano Internet poderem utilizar o c:geo em modo offline, necessitam fazer download dos mapas. Eu utilizei os da mapsforge (Portugal).

Façam download dos mapas e coloquem num directório à escolha no telemóvel.
Na aplicação c:geo acedam a Settings e naveguem até "Map Sources" e seleccionem as opções
OSM: Offline e o caminho para o vosso mapa.





A partir de agora se forem ao live map, o mapa seleccionado será o guardado no telemóvel.

Para armazenar as caches no telemóvel têm 2 formas de o fazer. Pode pesquisar pela aplicação (Search) ou no site. Se quiser pesquisar e enviar directamente para o telemóvel.

Para enviarem as caches do browser para o telemóvel directamente sigam este tutorial (link)




Links:
Mapa Portugal
Lista completa


Update: Para saber como instalar o send2cgeo no seu computador visite este link

quinta-feira, 12 de janeiro de 2012

Datas em PHP

Fartei-me de tanto procurar por isso aqui vai uma série de métodos para obter datas em PHP.

Segunda-feira desta semana:
date('Y-m-d', strtotime(date('Y')."W".date('W')))

Domingo desta semana:
date('Y-m-d', strtotime(date('Y')."W".date('W')."7"))

Quarta-feira da 5ª semana de 2056:
date('Y-m-d', strtotime("2056W53"))

Isto funciona assim:

date('Y-m-d', strtotime(."W"..))

Números da semana
Segunda: 1
Terça:2
...
Domingo: 7