The Word of the Lord

The Word of the Lord

BroadCasts Religious

MayaSpace

MayaSpace

Baby Patron | Web Personal

MuniManantay

MuniManantay

Municipalidad de Manantay

Abogado Garza

Abogado Garza

Lawyer Web Page

Abr
16

Instalar Lamp + SVN + Trac en Ubuntu II

Escrito por Carlos Montalvo hace 10 meses y 4 semanas

En la entrada anterior pudimos instalar un Servidor Web ahora veremos la instalación y configuración de SVN (Subversion).

ulamp

Instalación de SVN

Abrimos la consola (Terminal) y escribimos lo siguiente.

sudo apt-get install subversion
sudo a2enmod dav
sudo /etc/init.d/apache2 restart
sudo apt-get install libapache2-svn
sudo /etc/init.d/apache2 restart

subversion: Con esto instalamos subversion.

a2enmod dav: Activamos el modulo de Apache usado para hacer que los repositorios estén disponible a otros a través de una red.

/etc/init.d/apache2 restart: Reiniciamos el servidor web, esto es necesario para poder ver los cambios realizados.

libapache2-svn: Contiene los módulos que capacitan a Apache funcionar como un servidor de Subversion además del módulo de identificación.

Creación de Repositorio

Primero creamos el directorio:

sudo mkdir /var/svn

A continuación indicarle al Subversion que es un repositorio:

sudo svnadmin create /var/svn/repos

A continuación, abrir el archivo /etc/apache2/httpd.conf y añada las siguientes líneas:

<location /repos>
DAV svn
SVNPath /var/svn/repos
AuthType Basic
AuthName "Repositorio Subversion"
AuthUserFile /etc/subversion/passwd
Require valid-user
</location>

Asignamos permisos para que el servidor web pueda modificar el repositorio:

sudo chown -R www-data /var/svn

Añadimos un usuario le asignamos la contraseña y reiniciamos el servidor web.

sudo htpasswd -c /etc/subversion/passwd calinsoft
sudo /etc/init.d/apache2 restart

Añadimos nuestro proyecto al repositorio, en mi caso mi proyecto lo tengo en esta dirección /home/calinsoft/bobi-system

svn import -m "Mi Primer Proyecto" /home/calinsoft/bobi-system file:///var/svn/repos/bobi-system/trunk

Ahora nos dirigimos a http://localhost/repos y nos pedira el usuario y password que hayamos asignado.

Si necesita un Cliente SVN similar a TortoiseSVN les recomiendo NautilusSVN

Continuara…

Categorizado: Desarrollo Web | Web2Dev
Etiquetado: | | | | | |
Abr
13

Instalar Lamp + SVN + Trac en Ubuntu I

Escrito por Carlos Montalvo hace 11 meses y 1 día

Bueno esto es un asunto que siempre quise hacer en guindos y nunca pude, cuando lo intente en Linux me salio a la primera.

ulamp

Instalando Lamp (Linux Apache2 MySQL5 Php5 )

Abrimos la consola (Terminal) y escribimos lo siguiente.

sudo apt-get install apache2
sudo apt-get install php5 libapache2-mod-php5 php5-gd php5-cli
sudo /etc/init.d/apache2 restart

apache2: Con esto instalamos apache en nuestro Linux. para ver si esta activo vamos al navegador y digitalos http://localhost.

it-works

php5: Con esto instalamos el modulo Php5 para Apache.

libapache2-mod-php5: Instala el modulo de apache para traducir el php.

php5-gd: Modulo de php para la manipulación de las imágenes.

php5-cli(Command Line Interpreter): Para ejecutar php por linea de comando.

/etc/init.d/apache2 restart: Reiniciamos el servidor web, esto es necesario para poder ver los cambios realizados.

sudo apt-get install mysql-server
sudo apt-get install libapache2-mod-auth-mysql php5-mysql phpmyadmin
sudo /etc/init.d/apache2 restart

mysql-server: Instalamos MySQL, el servidor de base de datos.

libapache2-mod-auth-mysql: Modulo de apache para el manejo de autentificaciones con mysql.

php5-mysql: Modulo de php para manejo de conexiones con MySQL.

phpmyadmin: Administrador de MySQL atravez del navegador ( http://localhost/phpmyadmin ).

PD:Nos pedirá un nombre de usuario y contraseña, esos datos son los que definimos al momento de instalar MySQL.
PD2: Si nos muestra “The requested URL /phpmyadmin/ was not found on this server” ejecuta sudo ln -s /usr/share/phpmyadmin/ /var/www/phpmyadmin esto creara un acceso directo el cual permitira ya ingresar a http://localhost/phpmyadmin

sudo a2enmod rewrite
sudo /etc/init.d/apache2 restart

a2enmod rewrite: Activamos el Mod Rewrite.

En /var/www se publicara las paginas para tu servidor web donde puede probar el funcionamiento de Php, creando un archivo info.php y escribiendo adentro el cual de mostrara los parámetros de configuración y las variables de php y apache.

Continuara…

Categorizado: Desarrollo Web | Web2Dev
Etiquetado: | | | | | |
Feb
04

Jugando con la Api de TinyUrl

Escrito por Carlos Montalvo hace 1 año y 1 mes

TinyURL es un servicio web creado por Kevin Gilbertson, cuyo fin es la de acortar las urls para así ganar espacio en los contenidos limitados.

Gilbertson lanzo su servicio en Febrero del 2002 (casi 7 años ya), aunque se hizo conocido con la llegada de los Blogs y especialmente de Twitter donde el límite de caracteres del contenido era más reducido y era casi una necesidad ganar espacio.

Api

TinyURL nos provee de una sencilla Api para poder acortar automáticamente las urls mediantes aplicaciones web sin necesidad de ir ingresar a su sitio. Llamado a la dirección http://tinyurl.com/api-create.php?url=http://www.calinsoft.com devolverá la dirección URL acortada en el cuerpo de la página.

Jugando

Estuve jugando un poco con ella, algo muy sencillo nada complicado de como poder implementarlo en una aplicación web en php lo pude lograr mediante un formulario.

tinyurl-1

Lo cual genera una respuesta similar a lo que muestra la misma página de TinyURL.

tinyurl-2

El Código

Para quien le interese copio aquí el código con que he logrado hacer esto, de hecho es muy sencillo pero para ejemplo y que aprendas como se usa la Api es muy bueno.

<?php
//http://www.calinsoft.com/2009/02/jugando-con-la-api-de-tinyurl.html
define('apiTinyUrl',
	"http://tinyurl.com/api-create.php?url=");

function TinyURL($url){

	if (!empty($url)):
		# code...

		return file_get_contents( apiTinyUrl . $url );
	else:

		return false;
	endif;

}

?>
<?php if (!$_POST):?>

<form action="" method="post" >
  <table align="center" cellpadding="5" bgcolor="#E7E7F7">
    <tr><td><b>Enter a long URL to make
          <a href="http://tinyurl.com">tiny</a>:</b><br />
        <input type="text" name="url" size="30">
        <input type="submit" name="submit" value="Make TinyURL!"></td>
    </tr>
  </table>
</form>

<?php else:

	if ($convert = TinyURL($_POST['url'])):

		$preview = str_replace("tinyurl","preview.tinyurl",$convert);

?>
<table align="center" cellpadding="5" bgcolor="#E7E7F7">
  <tr>
    <td valign="top"><br /><h1>TinyURL was created!</h1>
      <p>The following URL:
        <blockquote><b>
            <?php echo $_POST['url'];?><br /></b>
          </blockquote>has a length of 20 characters and resulted in the following TinyURL which has a length of 24 characters:
          <blockquote><b>
              <?php echo $convert;?></b>
            <br /><small>[
              <a href="<?php echo $convert;?>" target="_blank">Open in new window</a>]</small>
            </blockquote>Or, give your recipients confidence with a preview TinyURL:
            <blockquote><b>
                <?php echo $preview;?></b>
              <br /><small>[
                <a href="<?php echo $preview;?>" target="_blank">Open in new window</a>]</small>
              </blockquote>
      </p></td>
  </tr>
</table>
<?php

		else:
	?>
	<table align="center" cellpadding="5" bgcolor="#E7E7F7">
  <tr>
    <td valign="top"><br /><h1>TinyURL Error!</h1>
      <p>Invalid Url:
      </p></td>
  </tr>
</table>

<?php

		endif;

endif;
?>

Conclusión

Como se habrán dado cuenta que el método de usar la Api es muy sencillo, además no es la única forma pero creo que esta es la más sencilla y funcional.

Descarga

Demo


Categorizado: Desarrollo Web | Web2Dev
Etiquetado: | |
Ene
31

Sistema de Caché Simple en PHP

Escrito por Carlos Montalvo hace 1 año y 1 mes

Uno de las mejores alternativas para que tus proyectos en php se muestren más rápido es la de implementar un sistema de cache, con lo que ganamos velocidad y él un consumo reducido de nuestro servidor.

Hoy veremos un Sistema de Cache Simple en PHP, pero lo suficientemente flexible como para poder adaptarla a cualquier proyectos y personalizarla conforme a nuestras necesidades.

La Clase de Cache en PHP

/* file     : cache.class.php
 * Clase  : m2Cache
 * Original: http://www.calinsoft.com/2009/01/sistema-de-cache-simple-en-php.html
*/

//Algunos parámetros de configuración
define('ABSPATH', dirname(__FILE__) );

//Directorio donde almacenaremos los archivos cacheados
define('CACHE_DIR',
	ABSPATH . '/cache'); // tiene que tener permisos 777

//El tiempo que la copia se mantendrá vigente.
define('CACHE_TIME', 3600 ); // 3600 segundos 1 hora.

// La dirección de la Pagina Donde nos encontramos
define('PAGE',
	'http://'. $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']
);

// La dirección de la pagina con el nombre encriptado
define('CACHE_LINK',
	CACHE_DIR . "/" . md5( PAGE ) . ".html"
);

class m2Cache
{
       //Variable para activar el Sistema de Cache
	var $enableCache;

	//Variable para almacenar el tiempo de la creación del archivo
	var $time;

	function m2Cache(){
                //por defecto el sistema  de cache estará desactivado
		$this->enableCache	= false;
                //el tiempo por defecto empieza en 0
		$this->time			= 0;

	}

	//Función para activar el Sistema de cache.
	function enable(){

		$this->enableCache = true;

	}

        // Retorna el estado Actual del  Sistema.
	function status(){

		return $this->enableCache;
	}

        // Función Inicio del Cache.
	function startCache()
	{
	         // verificamos estado
		if ($this->status()):
                       //verificamos que existe la pagina en cache
			if ( @file_exists( CACHE_LINK ) ):
			        // si existe obtenemos la hora de creación del archivo.
				$this->time = @filemtime( CACHE_LINK );

                                // verificamos si está adentro del tiempo permitido.
				if ( ( time() - CACHE_TIME ) < $this->time ):
					// si está adentro del tiempo
                                       // mostramos la pagina cacheada.
					@readfile( CACHE_LINK );

					 die();

				 else:
				 	//Si Expiro se elimina, para prevenir conflictos.
				 	@unlink( CACHE_LINK );

				 endif;

			endif;

			//Habilitamos el uso de búferes de salida
			ob_start();

		else:
		       // no está el activado sistema de cache
			return false;

		endif;

	}

	//función de término del sistema de cache
	function endCache()
	{
		//verificamos estado del sistema de cache
		if ($this->status()):

                        //Creamos el archivo
			$fp = fopen( CACHE_LINK , 'w' );
			// escribimos adentro de el.
			@fwrite( $fp , ob_get_contents() );
			//cerramos
			@fclose( $fp );

			//Volcamos el búfer de salida y deshabilitamos el uso del búfer
			ob_end_flush();

		else:
		        // no está el activado sistema de cache
			return false;

		endif;

	}

}

Método de Uso

/* file: index.php
Para usarlo solo incluimos la clase dentro de la pagina que deseemos cachear.
*/

include 'cache.class.php';

// Instanciamos
$cache = new m2Cache();

// Activamos el cache
$cache->enable();

//al comienzo de la pagina añadimos esto

$cache->startCache();

/*
acá vendría la pagina en si comenzando supuestamente por
<html>
<head>
<body>
.......................
.......................
.......................

Y luego

</body>
</html>
*/

//al final añadimos
$cache->endCache();

Conclusión y Descarga de archivos

Con el parámetro CACHE_DIR indicamos el directorio donde almacenaremos la cache , con CACHE_TIME indicamos el tiempo de vida de la cache (en este caso 60 minutos/1 hora) y la función $cache->enable(); de la clase la cual nos permite activar el sistema de cache por defecto esta desactivado (muy bueno cuando uno va hacer cambios en la pagina).

He realizado una mini página sencilla adaptándola al sistema de cache para que observen su funcionamiento correcto, en la cual la estructura de archivos es la siguiente.

sistema_cache

Si tienen alguna duda sobre la clase pregunten, cabe resaltar como dije al principio que esta clase es muy simple pero flexible.

Descarga


Categorizado: Desarrollo Web | Web2Dev
Etiquetado: |
Sep
18

Hoy en día la creación slugs basados en lo títulos de nuestros artículos es muy popular. WordPress, Drupal y muchos más lo utilizan de forma excelente. Sin duda los slugs son muy favorables para el posicionamiento web (SEO) en los buscadores especialmente en Google.

No basta con tener configurado tu htaccess o algún script que permita trabajar con urls amigables, especialmente si trabajamos con una tabla de artículos necesitaremos crear un slug de los títulos para que puedan ser leídos por el método que usemos para generar urls amigables.

Aquí un método que anos ayudara en este proceso.

function caracteres_latinos($cadena){
	//acentos
	$cadena = ereg_replace("(À|Á|Â|Ã|Ä|Å|à|á|â|ã|ä|å)","a",$cadena);
	$cadena = ereg_replace("(È|É|Ê|Ë|è|é|ê|ë)","e",$cadena);
	$cadena = ereg_replace("(Ì|Í|Î|Ï|ì|í|î|ï)","i",$cadena);
	$cadena = ereg_replace("(Ò|Ó|Ô|Õ|Ö|Ø|ò|ó|ô|õ|ö|ø)","o",$cadena);
	$cadena = ereg_replace("(Ù|Ú|Û|Ü|ù|ú|û|ü)","u",$cadena);

	//la ñ
	$cadena = ereg_replace("(Ñ|ñ)","n",$cadena);

	//caracteres extraños
	$cadena = ereg_replace("(Ç|ç)","c",$cadena);
	$cadena = ereg_replace("ÿ","y",$cadena);

	return $cadena;
}

function generar_slug($cadena, $separador = '-'){
	//sin espacios al inicio o al final
	$cadena = trim($cadena);

	//limpiamos caracteres los latinos
	$cadena =  caracteres_latinos($cadena);

	//pasamos a minuscula la cadena
	$cadena = strtolower($cadena);

	//limpiamos saltos de lineas y tab
	$cadena = ereg_replace("[ \t\n\r]+", " ", $cadena);

	//limpiamos todos los caracteres invalidos
	$cadena = ereg_replace("[^ A-Za-z0-9_]", "", $cadena);

	//limpieza de espacios vacios de los valores invalidos al final de la cadena
	$cadena = trim($cadena);

	//reemplazamos los espacios vacios por el separador
	$cadena = str_replace(" ", $separador, $cadena);

	return $cadena;
}

$str = generar_slug('Así es el ejemplo para generar el Slug ¿o no?');

//retornara #-> asi-es-el-ejemplo-para-generar-el-slug-o-no
echo $str;

Muy sencillo pero practico, lo podemos usar para generar un slug del titulo de nuestros artículos y grabarlo en otro campo de nuestra tabla el cual se convertiría en un identificador de la noticia.

Categorizado: Desarrollo Web | Web2Dev
Etiquetado: | | |

En el foro de WebLiveHelp trataban un problema de conversión de array a objeto y viceversa no se si es el mejor método de conversión pero creo una alternativa seria esta..

// Funcion de Objeto a Array
function object_to_array($object)
{
  if(is_array($object) || is_object($object))
  {
    $array = array();
    foreach($object as $key => $value)
    {
      $array[$key] = object_to_array($value);
    }
    return $array;
  }
  return $object;
}

// Funcion de Array a Objeto
function array_to_object($array = array())
{
	return (object) $array;
}

Metodo de funcionamiento
- Trabajando con array_to_object

//creamos un array de dominios
$array_urls = array("a"=>"calinsoft.com","b"=>"gacetaucayalina.com","c"=>"jacknoticias.com");

//Se vuelca la informacion para darnos cuenta de la estructura.
echo "<pre>";
	var_dump($array_urls);
echo "</pre>";

/* nos dara
array(3) {
  ["a"]=>
  string(13) "calinsoft.com"
  ["b"]=>
  string(19) "gacetaucayalina.com"
  ["c"]=>
  string(16) "jacknoticias.com"
}
*/

//Ahora ese array lo convertimos en objeto mediante la funcion "array_to_object"
$object_urls =	array_to_object($array_urls);

//Volcamos la informacion de la conversion
echo "<pre>";
	var_dump($object_urls);
echo "</pre>";

/* nos dara
object(stdClass)#1 (3) {
  ["a"]=>
  string(13) "calinsoft.com"
  ["b"]=>
  string(19) "gacetaucayalina.com"
  ["c"]=>
  string(16) "jacknoticias.com"
}
*/

//Y con el objeto ya creado para mostrar el valor "a"
echo $object_urls->a;
/*nos dara
    "calinsoft.com"
*/

- Trabajando con object_to_array


//Ahora creamos una clase sencilla

class object_urls{

	var $a ;
	var $b ;
	var $c ;

	//php5
	function __construct(){
		$this->a ="calinsoft.con";
		$this->b ="gacetaucayalina.com";
		$this->c ="jacknoticias.com";

	}

	//php4
	function object_urls(){
		$this->__construct();
	}

}

//creamos un instancia de la clase
$object_urls2 = new object_urls();

//Se vuelca la informacion del objeto para darnos cuenta de su estructura.
echo "<pre>";
	var_dump($object_urls2);
echo "</pre>";
/* nos dara
object(object_urls)#2 (3) {
  ["a"]=>
  string(13) "calinsoft.con"
  ["b"]=>
  string(19) "gacetaucayalina.com"
  ["c"]=>
  string(16) "jacknoticias.com"
}

*/

//Ahora convertimos la clase en array mediante la funcion "object_to_array"
$array_urls2 = object_to_array($object_urls2) ;

//Volcamos la informacion de la conversion
echo "<pre>";
	var_dump($array_urls2);
echo "</pre>";
/*nos dara
array(3) {
  ["a"]=>
  string(13) "calinsoft.con"
  ["b"]=>
  string(19) "gacetaucayalina.com"
  ["c"]=>
  string(16) "jacknoticias.com"
}
*/

//Para trabajas con el array solo
echo $array_urls2["a"];

/*nos dara
    "calinsoft.com"
*/

Espero que les aya servido :) .

Categorizado: Desarrollo Web | Web2Dev
Etiquetado: | | |
Sep
06

Esta es una detección simple mediante las variables globales definidas por el servidor Web para este caso usaremos $_SERVER.

//para Apache
$es_apache = ((strpos($_SERVER['SERVER_SOFTWARE'], 'Apache') !== false) || (strpos($_SERVER['SERVER_SOFTWARE'], 'LiteSpeed') !== false)) ? true : false;

//para IIS (Internet Information Server)
$es_IIS = (strpos($_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS') !== false) ? true : false;

//Metodo de uso
if ($es_apache) echo " Estamos Bajo Apache ";

if ($es_IIS) echo " Estamos IIS ";
Categorizado: Desarrollo Web | Web2Dev
Etiquetado: | | |
Ago
31

Urls Amigables basado en WP_Rewrite API

Escrito por Carlos Montalvo hace 1 año y 6 meses

El tema de las Urls Amigables (friendly urls) esta relacionado con el SEO y el posicionamiento Web en los diversos buscadores algo que se a hablado hasta el cansancio, los métodos de poder construirlas son como los colores ( para todos los gustos ).

En la actualidad las Urls Amigables (friendly urls) no es una simple moda Web 2, si no que en sistemas de gestión de contenidos y servicios prestigiosos como Blogger, Drupal, Wordpress y muchos más lo tienen implementado. ¿Pero cual es el mejor? ya de por si se sabe que implementando Urls Amigables en tus paginas o proyectos Web estas a 2 o 3 pasos arriba que otras paginas que usan las Urls tradicionales muy aparte de la publicidad o herramientas de posicionamiento que usen.

Al principio no todos podían usar Urls Amigables en sus sitios, mucho dependía de tener activado el mod_rewrite , aun que WordPress fue un paso mas allá y nos dio una solución como nos comentaba Andres Nieto a principios de año desconozco si WordPress fue el pionero en esto.

En el posicionamiento Web 2 de los mejores son Blogger y Wordpress por el método que usan aunque este ultimo con la opción de personalizar la estructura de la url a nuestro gusto por ser una herramienta de construcción de blogs de codigo abierto que a permitido que crezca gracias a la comunidad que lo rodea.

Las hasta 3 formas mas conocidas de construir las Urls Amigables es mediante PATH_INFO, mediante directivas en el archivo .htaccess como nos explica manu en TuFunción o mediante peticiones $_GET como nos enseña William Wong Garay en MaestrosDelWeb.

Todos estos métodos construyen Urls Amigables pero tienen sus limitaciones.

  • PATH_INFO no se puede expandir la estructura de Urls Amigables
  • mod_rewrite y .htaccess mientras mas directivas se ralentiza el servidor
  • Metodo $_GET limite del numero de variables a enviar como explica Willy

¿Cual método usa Wordpress? si observamos su archivo .htaccess solo utiliza unas directivas simples.

# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

El archivo clave es wp-includes/rewrite.php (WP_Rewrite API) el encargado de identificar las peticiones que se hacen en el sistema.

¿Pero como trabaja? muy simple con reglas muy similares a las que se usan en el .htaccess con diferencia que estas se procesan en un archivo php y acelerando el proceso.

¿Pero como implementarlo en una pagina que no sea WordPress? … destripando el codigo he logrado desarrollar una clase muy básica basada en WP_Rewrite API que nos permitirá personalizar la estructura de las Urls amigables al estilo Wordpress.

Pueden verlo en funcionamiento en http://web2dev.calinsoft.com/urls-amigables .

El funcionamiento es básico la regla esta compuesta de una Expresion Regular y la marca que vendría hacer los parámetros a usar.

/// para poder obtener una estructura /2008/08/28/urls-amigables-facilmente
$this->rules["([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/(.+?)/?$"]="y=\$matches[1]&m=\$matches[2]&d=\$matches[3]&nslug=\$matches[4]";

//la cual mediante una identificación y parseo previo obtendríamos los valores listo para usarlos segun lo deseemos

Array
(
    [y] => 2008
    [m] => 08
    [d] => 28
    [nslug] => urls-amigables-facilmente
)

Los interesados pueden comentar si creen que es un buen método, tratare de afinar el script y lo publicare en estos días para mis lectores de Feed tendrán una sorpresa.

Descarga

Demo


Categorizado: Desarrollo Web | Web2Dev
Etiquetado: | | | | | |
Ago
02

Comenzando MVC con php

Escrito por Carlos Montalvo hace 1 año y 7 meses

MVC es un patrón de diseño en ingeniería de software, este mismo patrón lo vemos implementado en algunos frameworks PHP tales como.

Ejemplo de una consulta sencilla de la forma más usada.

< ?php
function get_posts()
{
  mysql_connect(...);
 $resultado = mysql_query('SELECT * FROM wp_posts ORDER BY date DESC');

  $posts = array();
  while($post = mysql_fetch_objects($resultado)) {
	$posts[] = $post;
  }
  return $posts;
}
?>

Usando el patrón de diseño MVC en este mismo ejemplo quedaría así.

Modelo ( modelo.php )

< ?php
function get_posts()
{
  mysql_connect(...);
 $resultado = mysql_query('SELECT * FROM wp_posts ORDER BY date DESC');

  $posts = array();
  while($post = mysql_fetch_objects($resultado)) {
	$posts[] = $post;
  }
  return $posts;
}
?>

(Leer más »)

Categorizado: Desarrollo Web | Web2Dev
Etiquetado: | | |