miércoles, 28 de julio de 2010

PHP: APC acelerador de php

Codigos PHP (normales o con frameworks como Symfony) requieren que tengas instalado un acelerador de PHP usando de manera mucho mas eficiente el cache.. Aqui un buen tip para instalar el APC

Instalacion de alternate php cache(acelerador de php)
# aptitude install apache2-threaded-dev php5-dev libmagic-dev
# pecl install apc

para versiones recientes de Ubuntu

# aptitude install php-apc

modificamos el php.ini

# vim /etc/php5/apache2/php.ini

en la seccion destinada para las extenciones agregamos
extension=apc.so
    [APC]
    apc.enabled=1
    apc.shm_segments = 1
    apc.shm_size = 64
    apc.max_file_size = 10M
    apc.stat = 1

# /etc/init.d/apache2 restart

Listo.. busca en la maquina apc.php descomprimelo y copialo en /var/www/
ejecutalo en el navegador y observa su comportamiento

# updatedb
# locate apc.php

en mi caso /usr/share/doc/php-apc/apc.php.gz

Listo!

martes, 27 de julio de 2010

MySQL: otorgar permisos a la BD a otros hosts

Para dar permisos a otros host para el acceso a las BD en general desde MySQL solo debes ingresar por consola y ejecutar las siguientes lineas:

$ mysql -u root -p
mysql> GRANT ALL ON *.* TO 'root'@'191.168.50.72' IDENTIFIED BY '123456' with grant option;
Si luego de realizar eso aun se genera el error: Access denied for user 'root'@'' (using password: YES) Esto indica que existe un problema con DNS. Para arreglarlo, es necesario ejecutar:
$ mysqladmin -p flush-hosts
para reestablecer la cache interna de DNS. Y listo!

lunes, 26 de julio de 2010

PostgreSQL: crosstab - Filas a columnas en una consulta SQL-

Bien.. hace unos dias me preguntaron como se crea una consulta para transformar filas a columnas, muy usado para generar reportes en tus codigos PHP, pues bien, en SQL server aparentemente debes usar procedimientos almacenados, en Oracle 11g existe una funcion PIVOT, pero investigando por ahi consegui esta informacion en la misma pagina de postgres... Ver.
Normalmente para evitar programar funciones o procedimientos almacenados uno crea codigo php medianamente complejo para armar las consultas y cambiar las filas q contienen resultados o datos de filas a columnas agrupando valores para conseguir un reporte que se entienda aqui voy a explicar como se hace en Postgres 8.3 y 8.4 utilizando las librerias contrib

Primero, debes tener instalado en contrib en la maquina
# aptitude install postgresql-contrib-8.3


el contrib de postgres provee una serie de funciones muy utiles para desarrolladores y administradores (Ej. dblink) asi como tambien la funcion crosstab

para instalar la funcion en tu BD debes ser el usuario postgres en la maquina y por lineas de comando
$ cd /usr/share/postgresql/8.3/contrib
$ psql test < tablefunc.sql


Y listo.. tu bd test tiene habilitada la funcion.. si necesitas q tus otras BD tengan la funcion cargada debes hacer el procedimiento por cada BD.. ahora, si necesitas que todas tus futuras bases de datos vengan con la funcion precargada al momento de crearlas debes hacer esto:

$ cd /usr/share/postgresql/8.3/contrib
$ psql template1 < tablefunc.sql


bien, ya tenemos las funciones cargadas, pero ¿Como la usamos?...
veamos un ejemplo:
creamos una tabla de prueba con datos
CREATE TABLE ct(id SERIAL, rowid TEXT, attribute TEXT, value TEXT);
INSERT INTO ct(rowid, attribute, value) VALUES('test1','att1','val1');
INSERT INTO ct(rowid, attribute, value) VALUES('test1','att2','val2');
INSERT INTO ct(rowid, attribute, value) VALUES('test1','att3','val3');
INSERT INTO ct(rowid, attribute, value) VALUES('test1','att4','val4');
INSERT INTO ct(rowid, attribute, value) VALUES('test2','att1','val5');
INSERT INTO ct(rowid, attribute, value) VALUES('test2','att2','val6');
INSERT INTO ct(rowid, attribute, value) VALUES('test2','att3','val7');
INSERT INTO ct(rowid, attribute, value) VALUES('test2','att4','val8');


Visualizamos los datos

select * from ct

1;"test1";"att1";"val1"
2;"test1";"att2";"val2"
3;"test1";"att3";"val3"
4;"test1";"att4";"val4"
5;"test2";"att1";"val5"
6;"test2";"att2";"val6"
7;"test2";"att3";"val7"
8;"test2";"att4";"val8"



y ahora a ver la funcion en accion: queremos ver test1 y test2 con todos sus valores en la misma fila:
SELECT *
FROM crosstab(
'select rowid, attribute, value
from ct
order by rowid,attribute')
AS ct(row_name text, category_1 text, category_2 text, category_3 text, category_4 text);

"test1";"val1";"val2";"val3";"val4"
"test2";"val5";"val6";"val7";"val8"

Y listo..

jueves, 22 de julio de 2010

Cheat Sheet: Hoja de trucos

Aqui un vinculo que un pana me paso..

Multiples hojas llenas de tips de diversos topicos..

CCS, HTML, Photoshop, PHP

Muy util...
Clik aqui

martes, 20 de julio de 2010

SVN: configuración

Configuración de SVN

# apt-get install subversion
# apt-get install libapache2-svn
# mkdir -p /var/local/repositorio
# svnadmin create /var/local/repositorio/
# chown -R www-data:www-data /var/local/repositorio/
# cd /etc/apache2/mods-available/
# vim dav_svn.conf

<Location /repositorio>
DAV svn
SVNPath /var/local/repositorio
AuthType Basic
AuthName "Subversion repository"
### fichero de passwords
AuthUserFile /etc/subversion/passwd
### permito las opciones GET PROPFIND OPTIONS REPORT a usuarios anonimos
<LimitExcept GET PROPFIND OPTIONS REPORT>
### pero requiero autentificación para el resto de operaciones
Require valid-user
</LimitExcept>
</Location>

# /etc/init.d/apache2 restart
# htpasswd -c /etc/subversion/passwd rramos
# cd /var/local/conf
# vim passwd

viernes, 16 de julio de 2010

PostgreSQL: Calcular la edad y obtener el grupo etario

Esta consulta es util si lo que se desa obtener es la edad de las personas registradas, ademas obtener el grupo etario al cual pertenecen.. Una consulta muy util si se desea realizar estadisticas por grupo etario..

select count(*),
/*substring(age(now(),p.f_nacimiento)::text from 1 for 2)::int as edad, --Descomentar si deseas la edad de las personas*/
case
when substring(age(now(),p.f_nacimiento)::text from 1 for 2)::int between 0 and 12
then '1-. INFANTE (0-12)'
when substring(age(now(),p.f_nacimiento)::text from 1 for 2)::int between 13 and 17
then '2-. ADOLESCENTE (13-17)'
when substring(age(now(),p.f_nacimiento)::text from 1 for 2)::int between 18 and 28
then '3-. JOVEN (18-28)'
when substring(age(now(),p.f_nacimiento)::text from 1 for 2)::int between 29 and 35
then '4-. ADULTO JOVEN (29-35)'
when substring(age(now(),p.f_nacimiento)::text from 1 for 2)::int between 36 and 59
then '5-. ADULTO (36-59)'
when substring(age(now(),p.f_nacimiento)::text from 1 for 2)::int >= 60
then '6-. ADULTO MAYOR (60 o mas)'
end AS grupo_etario
from persona p
group by grupo_etario /*,edad --Descomentar si deseas la edad de las personas*/
order by grupo_etario

jueves, 15 de julio de 2010

Probando SyntaxHighlighter

Despues de algunos intentos al fin me funciono.. la tactica para publicar en blogger es esta.. los script de SyntaxHighlighter debes colocarlos en la pagina del blog no en el articulo(tonto yo q no sabia).. en Diseño -> Edicion de HTML
Dentro de la etiqueta <head> colocas los script q vas a usar para publicar tu codigo.. en mi caso lo siguinte:



tu articulo con el codigo fuente va entre los tags <pre class="brush: js;"> .... </pre>

Y al poner tu codigo de ejemplo se ve asi..

function public HolaMundo
{
return 'Hola!!';
}