segunda-feira, 25 de agosto de 2014

dyld: Symbol not found: __cg_jpeg_resync_to_restart

Ao usar o MAMP PRO e o YUI Compressor surgiu-me este erro:

==> /Applications/MAMP/logs/apache_error.log <==
dyld: Symbol not found: __cg_jpeg_resync_to_restart
  Referenced from: /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
  Expected in: /Applications/MAMP/Library/lib/libJPEG.dylib
 in /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO

==> /Applications/MAMP/logs/php_error.log <==
[25-Aug-2014 12:06:04 Europe/Lisbon] YUI Compressor returned error
O problema é que o MAMP PRO faz export da variável DYLD_LIBRARY_PATH. Solução: editar o ficheiro: "/Applications/MAMP/Library/bin/envvars" e comentar o seu conteúdo. Ficheiro original:
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
# envvars-std - default environment variables for apachectl
#
# This file is generated from envvars-std.in
#
if test "x$DYLD_LIBRARY_PATH" != "x" ; then
  DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
else
  DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib"
fi
export DYLD_LIBRARY_PATH
#
Ficheiro editado:
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
# envvars-std - default environment variables for apachectl
#
# This file is generated from envvars-std.in
#
#if test "x$DYLD_LIBRARY_PATH" != "x" ; then
#  DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
#else
#  DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib"
#fi
#export DYLD_LIBRARY_PATH
#

quarta-feira, 7 de maio de 2014

Windows 8 erro 0x800F0907

A forma mais simples de se ver livre do erro 0x800F0907 do Windows 8 é a seguinte:

1 - Colocar o DVD do Windows no leitor
2 - Abrir uma linha de comandos com permissões de administrador
na pesquisa escrever "cmd" (1), botão direito e "Run as Administrator"
3 - Já na linha de comandos, digitar:
C:\Windows\system32>DISM /online /enable-feature /all /featurename:NetFx3 /source:g:\sources\sxs

Deployment Image Servicing and Management tool
Version: 6.2.9200.16384

Image Version: 6.2.9200.16384

Enabling feature(s)
[==========================100.0%==========================]
The operation completed successfully.

C:\Windows\system32>

ATENÇÃO: respeitem as maiúsculas.

domingo, 16 de março de 2014

EmbedForm with new relation

To insert new attributes to a Product in the default form we just need those few steps:

In the productForm class create the relation with the attribute form.

public function configure() {
    /* Create embedForm with an empty attribute */
    $new_attribute = new ProductAttribute();
    $new_attribute->setProduct($this->object);
    $this->embedForm('new_attribute', new ProductAttributeForm($new_attribute));
    $this->embedRelation('Attributes', new ProductAttributeForm());
}

...and we rewrite the saveEmbeddedForms methods
public function saveEmbeddedForms($con = null, $forms = null) {
    try {
        $new_attribute_form = $this->getEmbeddedForm('new_attribute');
        $values             = $this->getValue('new_attribute');

        /* Validations Rules to save the relation */
        if (empty($values['attribute_id'])) {
            unset($this['new_attribute']);
        }
    } catch (InvalidArgumentException $e) {
        error_log($e->getTraceAsString());
    }
    return parent::saveEmbeddedForms($con, $forms);
}

quarta-feira, 12 de março de 2014

Oracle extension oci8 in PHP5


Install OCI8 on PHP

Needs:
pecl    - sudo apt-get install php-pear
phpize  - sudo apt-get install php5-dev


1. Download "Oracle Instant Client Basic and SDK" from http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
2. Extract the content of both archives to /etc/opt/oci8/
3. Go to /etc/opt/oci8/ and find the file called libclntsh.so.*.* (e.g. libclntsh.so.12.1) and create a symbolic link called libclntsh.so
    . sudo ln -s libclntsh.so.12.1 libclntsh.so
4. Install the package libaio-dev
    . sudo apt-get install libaio-dev
5. Install now the oci extension:
    . sudo pecl install oci8
        . when prompt insert the path to the path to instantclient: instantclient,/etc/opt/oci8/
    Build process completed successfully
    Installing '/usr/lib/php5/20121212/oci8.so'
    install ok: channel://pecl.php.net/oci8-2.0.7
    configuration option "php_ini" is not set to php.ini location
    You should add "extension=oci8.so" to php.ini
6. Locate your php.ini and add the line "extension=oci8.so"

terça-feira, 4 de março de 2014

Git color

Edit your ~/.gitconfig and add the followind lines:

[color "status"]
added = green
changed = red bold
untracked = magenta bold
[color "branch"]
remote = yellow
[color]
diff = auto
status = auto
branch = auto
interactive = auto
ui = true
pager = true

domingo, 20 de outubro de 2013

Criar pen USB bootable linux em Macosx

Depois de ter a imagem da distro de Linux que pretendemos (no meu caso, Ubuntu), abrimos um terminal e navegamos até ao directório onde está a imagem.

jimmy@machine:~$ cd Downloads/

Executamos agora o comando que converte a imagem de iso para img:
jimmy@machine:~/Downloads$ hdiutil convert -format UDRW -o ubuntu-12.04.3-desktop-i386.img ubuntu-12.04.3-desktop-i386.iso
Reading Master Boot Record (MBR : 0)…
Reading Ubuntu 12.04.3 LTS i386 (Apple_ISO : 1)…
Reading (Windows_NTFS_Hidden : 2)…
................................................................................................................................................................................................................
Elapsed Time: 21.860s
Speed: 32.3Mbytes/sec
Savings: 0.0%
created: /Users/jimmy/Downloads/ubuntu-12.04.3-desktop-i386.img.dmg

Por omissão, o macosx cria as imagens com .dmg no final, para resolver o problema basta trocar o nome do ficheiro.
jimmy@machine:~/Downloads$ mv ubuntu-12.04.3-desktop-i386.img.dmg ubuntu-12.04.3-desktop-i386.img

Inserimos a drive USB e executamos o seguinte comando para saber onde está a nossa pen, neste caso em (/dev/disk1)
jimmy@machine:~/Downloads$ diskutil list
/dev/disk0
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *320.1 GB disk0
1: EFI 209.7 MB disk0s1
2: Apple_HFS brain 319.7 GB disk0s2
/dev/disk1
#: TYPE NAME SIZE IDENTIFIER
0: FDisk_partition_scheme *8.0 GB disk1
1: DOS_FAT_32 8.0 GB disk1s1

ATENÇÃO: memorize o numero da drive USB, neste caso é 1 (/dev/disk1)

"Desmontamos" a pen com o comando seguinte:
jimmy@machine:~/Downloads$ diskutil unmountDisk /dev/disk1
Unmount of all volumes on disk1 was successful

E corremos o comando que irá preparar a pen com o SO, troque o 1 (/dev/rdisk1) pelo número identificado no passo anterior:
jimmy@machine:~/Downloads$ dd if=ubuntu-12.04.3-desktop-i386.img of=/dev/rdisk1 bs=1m
707+0 records in
707+0 records out
741343232 bytes transferred in 77.944528 secs (9511165 bytes/sec)

quinta-feira, 26 de setembro de 2013

terça-feira, 10 de setembro de 2013

PHP5 Unable to load dynamic library

Problema

PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/mysqli.so' - /usr/lib/php5/20090626/mysqli.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/mysql.so' - /usr/lib/php5/20090626/mysql.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/apc.so' - /usr/lib/php5/20090626/apc.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/curl.so' - /usr/lib/php5/20090626/curl.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/gd.so' - /usr/lib/php5/20090626/gd.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/intl.so' - /usr/lib/php5/20090626/intl.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/mysql.so' - /usr/lib/php5/20090626/mysql.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/mysqli.so' - /usr/lib/php5/20090626/mysqli.so: cannot open shared object file: No such file or directory in Unknown on line 0

Solução:

sudo apt-get install php5-mcrypt
sudo apt-get install php5-mysql
sudo apt-get install php5-intl
sudo apt-get install php5-curl
sudo apt-get install php5-gd
sudo apt-get install php-apc

terça-feira, 7 de maio de 2013

Alterar monitor principal no ubuntu

Para alterar o monitor principal do Ubuntu, Mint, etc... (O monitor com a barra)

#!/bin/bash
# Author: Andrew Martin
# Credit: http://ubuntuforums.org/showthread.php?t=1309247
echo "Enter the primary display from the following:" # prompt for the display
xrandr --prop | grep "[^dis]connected" | cut --delimiter=" " -f1 # query connected monitors

read choice # read the users's choice of monitor

xrandr --output $choice --primary

mysql user and database

Moved to a more complete version here


Criar a base de dados:
mysql> CREATE database my_db;

Criar um utilizador mysql:
mysql> CREATE USER 'my_user'@'localhost' IDENTIFIED BY 'my_pass';

Verificar as permissões do utilizador:
mysql> SELECT * FROM mysql.user WHERE User = 'my_user'\G

Verificar os GRANTS de um utilizador:
mysql> SHOW GRANTS FOR my_user;







segunda-feira, 18 de fevereiro de 2013

Drop Foereign Key Error 1025

Apagar uma Foreign Key nem sempre é simples, seguem os passos para contornar o erro 1025 do mysql:


mysql> SHOW CREATE TABLE user_preference;
+---------------------------------------------------------------------------------------------------------+
|CREATE TABLE `user_preference` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`field` varchar(255) DEFAULT NULL,
`user_id` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `user_preference_user_id_idx` (`user_id`)
CONSTRAINT `user_preference_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+---------------------------------------------------------------------------------------------------------+


mysql> ALTER TABLE user_preference DROP FOREIGN KEY user_preference_user_id;
Query OK, 0 rows affected (0.14 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> ALTER TABLE user_preference DROP user_id;
Query OK, 0 rows affected (0.14 sec)
Records: 0 Duplicates: 0 Warnings: 0

terça-feira, 12 de fevereiro de 2013

GeoCaching, instalar o send2cgeo no browser

Num artigo anterior vimos como instalar os mapas para utilizar o cgeo offline, têm surgidos algumas dúvidas sobre como instalar o script nos browsers.

Aconselho a utilização do browser Google Chrome para uma utilização simplificada deste tutorial, pois o Internet Explorer não é suportado e para utilizar com o Firefox necessitam de instalar outra extensão.


Sigam este link para o site do cgeo e façam o download do script (Botão Start) ou façam o download directo a partir daqui.

Depois de feito o download abra o as preferências do Chrome, e vá até ao separador extensões. Procure no seu computador a extensão (send2cgeo.user.js), e arraste-a para a janela de extensões do Google Chrome. Aceite as permissões para finalizar a instalação.

Agora, sempre que abrir o site do Geocaching poderá ver este botão:


Ainda não é tudo, agora precisa de ir "ligar" o seu browser ao seu smartphone. Para isso vá à página de registar o browser e registe o seu browser. De seguida vá à página para registar o disposítivo, aí é-lhe pedido um código, tem de ir ao cgeo (no android), menu -> definições e procurar Send to c:geo, aí clique no botão "Request Registration". É lhe dado um código de 6 dígitos, introduza-o na página do cgeo e a partir de agora estão registados. É possível que esta ligação se venha a perder, basta refazer este passo que ficará tudo funcional novamente.

Já com o browser e o android emparelhados, podem navegar no site do Geocaching e escolher as caches de que pretendem fazer o download clicando em "Send to c:geo".

Por fim, basta agora ir à aplicação, no dispositivo, "Stored" -> Menu -> Manage -> Import From Web e esperar que o download termine.


Aplicação Android blogger

Para todos os utilizadores do blogger como eu, podem agora fazer o download da aplicação Blogger desde o play.

Esta aplicação permite gerir it's vossos blogs simplesmente e sem ter de recorrer ao browser. Podem entre outros colocar mensagens como esta que estou a escrever agora mesmo.

sexta-feira, 8 de fevereiro de 2013

Symfony, Disable CSRF protection

Desactivar a protecção CSRF no formulário:

public function configure()
{
$this->disableCSRFProtection();
}


Desactivar a protecção CSRF no settings.yml:

.settings:
csrf_secret: false

Drop Constraint MySQL Error 1064

Para remover um campo de uma tabela que tenha associado uma ForeignKey:

ALTER TABLE my_table DROP KEY my_table_idx, DROP FOREIGN KEY my_table_id

sábado, 2 de fevereiro de 2013

Configurar Google no Firefox

As pessoas que instalaram recentemente o mint devem-se ter apercebido que o Firefox já está instalado. Mas, estranhamente o motor de busca predefinido não é o Google, mas sim o DuckDuck.

Para resolver este problema (sim, isto para mim é um problema) temos de definir o google como motor de busca principal.

A) Alterar o motor de busca na caixa da pesquisa (predefinido como Yahoo)

1º Passo: Visitar este link Mint Add Google Search engine

2º Passo com a página do link aberto clica no selector de motores de busca e escolher "Add Google"

B) Alterar o motor de buscar na barra do Url

1º Passo: abrir um novo separador e escrever:

about:config

Clicar no botão para continuar.

2º Passo: Alterar o nome do motor, para isso pesquisar a linha "browser.search.order.2" e trocar os valores
"DuckDuckGo" para "Google"

3º Passo: Alterar a query, pesquise então por "keyword.URL" e altere
"https://duckduckgo.com/?t=lm&q=" para "https://www.google.pt/#q="

Feito isto, já está pronto para continuar e utilizar o firefox como sempre o fez.




quarta-feira, 30 de janeiro de 2013

Submeter Formulário com Enter

$("input").keypress(function(event) {
  if (event.which == 13) {
    event.preventDefault();
    $(this).parents('form').submit();
  }
});

quinta-feira, 10 de janeiro de 2013

Git checkout remote branch

Quando trabalhamos em equipa é mais fácil se todos nós temos as branch sincronizadas.

Para irem buscar uma branch que um colega enviou para o repositório, sigam os seguintes passos:

Listagem das branch em repositorio:
$ git remote show repo

output:
* remote repo
Fetch URL: git://path/para/o/repositorio/git
Push URL: git://path/para/o/repositorio/git
HEAD branch: master
Remote branches:
walter tracked
pedro new (next fetch will store in remotes/repo)
filipe tracked
master tracked
Local branch configured for 'git pull':
master merges with remote master
Local refs configured for 'git push':
walter pushes to walter (up to date)
filipe pushes to filipe (local out of date)

Analisando estes resultados podemos ver que já temos as branch walter e filipe, mas a branch pedro é nova.


Temos então de sincronizar a nossa maquina com o repositorio:
$ git fetch repositorio


output:
remote: Counting objects: 378, done.
remote: Compressing objects: 100% (233/233), done.
remote: Total 252 (delta 177), reused 0 (delta 0)
Receiving objects: 100% (252/252), 43.35 KiB, done.
Resolving deltas: 100% (177/177), completed with 53 local objects.
From git://path/para/o/repositorio/git
* [new branch] pedro -> repositorio/pedro
bd3bc48..8dc6358 walter -> repositorio/walter
6db8dee..58e3830 filipe -> repositorio/filipe


Agora que estamos sincronizados com o repositorio, vamos criar a branch pedro para na nossa maquina:
$ git checkout -b pedro repositorio/pedro


output:
Branch pedro set up to track remote branch pedro from repositorio.
Switched to a new branch 'pedro'

Es estamos prontos.



Comandos a reter:
$ git remote show
$ git fetch
$ git checkout -b /

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