Saturday, June 6, 2009

Instalar Tomcat native library en distribuciones basadas en debian ( Ubuntu )


  • Primero de todo instalamos las dependencias


sudo apt-get install openjdk-6-jdk libapr1-dev libssl-dev gcc make


  • Después nos vamos $CATALINA_HOME/bin y descomprimimos la libreria


sudo tar xzvf tomcat-native.tar.gz


  • Vamos el directorio que acabamos de crear


cd tomcat-native-1.1.14-src/jni/native/


  • Y por ultimo instalamos


sudo ./configure --with-apr=/usr/bin --with-java-home=/usr/lib/jvm/java-6-openjdk && sudo make && sudo make install

Tuesday, June 2, 2009

Solucionar problemas de cache con IE, utilizando CakePhp y Ajax jQuery

Cuando utilizamos métodos ajax jquery que no se realizan mediante post como por ejemplo
  • $.load
  • $.get
  • $getJSON
El ie cachea la petición y no nos refresca el resultado, he encontrado soluciones con el $ajaxSetup de jquery pero esta que propongo me parece mas limpia.

En el AppController function beforeFilter() introducimos este if


if ($this->RequestHandler->isAjax()) {
$this->layout = false;
$this->disableCache();
}

Con el método disableCache de la clase Controller le decimos al navegador que no cachee esta petición.

Friday, May 15, 2009

Configurar apache Virtual Hosts

Siguiendo el hilo de anteriores posts vamos a comentar como configurar apache con Virtual hosts.

En el archivo default dentro de /etc/apache2/sites-available/
es donde vamos a poner nuestros virtual hosts, de primeras el archivo contiene el virtual host por defecto



ServerAdmin webmaster@localhost

DocumentRoot /var/www/

Options FollowSymLinks
AllowOverride None


Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all


ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all


ErrorLog /var/log/apache2/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /var/log/apache2/access.log combined

Alias /doc/ "/usr/share/doc/"

Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128





Justo debajo añadimos el nuestro,




ServerName interlineas
ServerAdmin interlineas@cesser.com

DocumentRoot "/var/www/interlineas/webroot"



Options Indexes FollowSymLinks Includes

AllowOverride All

Order allow,deny

Allow from all






Ahora editamos nuestro hosts sudo gedit /etc/hosts y añadimos la siguiente linea

127.0.0.1 interlineas

El valor del ServerName del VirualHost debe de conincidir con la entrada en el hosts.

Ahora solo queda reiniciar apache sudo /etc/init.d/apache2 restart

Y poner la url en nuestro navegador http://interlineas

Monday, April 27, 2009

Threads ( Hilos ) en PHP

Para los que estemos acostumbrados al api de threads de java y queramos realizar una acción multihilo en php existe una clase PHP_FORK de la cual podemos extender y sobreescribir el método run como haríamos en java para después llamar a start().

Dicha clase utiliza la función pcntl_fork para ejecutar la acción en un nuevo proceso.

Esta función es parte de una extensión para php creada para realizar control de procesos ya que esto no es nativo del lenguaje, dicha extensión solo funciona en entornos Unix, así que lo sentimos por los windowseros pero no podrán realizar este ejemplo:

Ponemos el código en un archivo al mismo nivel que el archivo Fork.php y lo ejecutamos.



include ( './Fork.php' );

class executeThread extends PHP_Fork {
var $counter;

function executeThread($name)
{
$this->PHP_Fork($name);
$this->counter = 0;
}

function run()
{
$i = 0;
while ($i < 5) {
print time() . "-(" . $this->getName() . ")-" . $this->counter++ . "\n";
sleep(1);
$i++;
}
}
}


for ($index = 1; $index < 5; $index++) {
$thread = new executeThread("hilo numero -> ".$index);
$thread->start();
}

?>

Saturday, April 25, 2009

Desinstalando Xampp para Linux e instalando Apache por paquetes

Hace un tiempo que uso Xampp para linux, pero me he decidido por cambiar he instalar PHP, Apache y Mysql por paquetes para no tener que estar especificando en todo momento el socket a la base de datos y demás historias.

Así que vamos manos a la obra, la tarea en si no es muy complicada lo único que tenemos que hacer es
sudo apt-get install php5 php5-cli php5-cgi php5-common php5-curl php5-gd php5-mysql apache2 apache2.2-common apache2-mpm-prefork apache2-utils

"No instalo el query-browser, adminstrator y workbench por que ya los tenia instalados"

pero si ya teníamos instalado php por algún motivo o hemos estado trasteando con los paquetes de antes al arrancar apache nos pueden salir mensajes de error al no cargar el modulo de php y que el navegador nos muestra la ventana de abrir aplicación, en ese caso hacemos uso de "purge" un argumento de apt-get que no usamos muy a menudo con lo que eliminamos todos los paquetes relacionados que tengamos y reinstalamos

sudo apt-get purge php5 php5-cli php5-cgi php5-common php5-curl php5-gd php5-mysql apache2 apache2.2-common apache2-mpm-prefork apache2-utils
sudo apt-get autoremove


Y otra vez

sudo apt-get install php5 php5-cli php5-cgi php5-common php5-curl php5-gd php5-mysql apache2 apache2.2-common apache2-mpm-prefork apache2-utils
Creamos un index

sudo gedit /var/www/index.php

Dentro le ponemos el php info

<?php phpinfo(); ?>

reiniciamos apache " Toda precaución es poca ;) "

sudo /etc/init.d/apache2 restart
ponemos en el navegador http://localhost/ y Et voilá!

P.D -> S.O Ubuntu 9.04 Jaunty Jacklope

Sunday, April 19, 2009

Spring Security Dao Authentication Provider

Vamos ha explicar como configurar fácilmente Spring Security ( Acegi ) para que nos autentique los usuarios mediante Hibernate - Dao.

La única clase que debemos crear es una implementación de la interfaz

org.springframework.security.userdetails.UserDetailsService

que declara un metodo

public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException {

En este método es donde tenemos que realizar toda la recogida de los datos de nuestro modelo de usuarios y roles especifico. Para devolver una instancia de la siguiente clase
org.springframework.security.userdetails.User

El constructor de esta clase recibe un array de GrantedAuthority[] yo he utilizado este metodo para que convertir los nombres de los roles de mi modelo a este Array

public static GrantedAuthority[] convertToGrantedAuthorityArray(Collection roles) {
GrantedAuthority[] result = new GrantedAuthority[roles.size()];

int i = 0;
for (String role : roles) {
result[i++] = new GrantedAuthorityImpl(role);
}

return result;
}


Lo mas sencillo es añadir una Annotation @Service a la clase y el nombre que le demos a la clase es el que debemos añadir en authentication-provider.

Lo siguiente es añair el filtro en nuestro web.xml y crear el archivo de configuración de spring.



securityFilter
org.springframework.web.filter.DelegatingFilterProxy

targetBeanName
springSecurityFilterChain




securityFilter
/*



Para organizarnos mejor creamos un archivo de configuración para el Acegi, en mi caso lo nombro applicationContext-security.xml y yo no tengo que tocar el context-param por le pattern pero sino tendriamos que añadirlo a mano.



contextConfigLocation
/WEB-INF/applicationContext*.xml



Por ultimo personalizamos las reglas de acceso segun necesitemos, aqui pongo un ejemplo sencillo


xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.xsd">



login-processing-url="/j_security_check"/>











Con esto tendriamos la autenticación, en siguientes posts quisiera poner como encriptar las contraseñas así como utilizar jsr250-annotations

Friday, April 17, 2009

Plugin SFTP para eclipse


Por parte de Jcraft se nos aporta un plugin para sincronizar un proyecto mediante sftp.

Normalmente yo lo uso en proyectos PHP en los que no se dispone de SVN.

Para instalarlo solo tenemos que ir a nuestro eclipse ( 3.4 en mi caso )
Help -> Software Updates -> Available Software -> Add Site y añadir http://eclipse.jcraft.com/ Seleccionamos el SFTP Plug-in pulsamos sobre instalar y ya tendríamos el plugin instalado.

Para importar un proyecto mediante Sftp tendremos que pulsar en Import -> Other -> Sftp y seleccionar una carpeta remota.

Se recomienda tener el proyecto PHP creado de antemano y cuando nos da a elegir proyecto seleccionar ese ya que sino no nos permite poner la vista PHP (cosas del .project ).

Una vez importado el proyecto podemos sincronizarlo y que nos muestre los cambios a subir o bajar, como apunte decir que se puede sincronizar en un momento determinado una carpeta del proyecto y no todo el proyecto entero, para que sea mas ligero.

Para sacar la vista de sincronización Pulsamos sobre Window->Show view -> Team -> Synchronize.