Tutorial de cómo configurar Virtual Host en Windows.
http://www.playasoluciones.cl/component/content/article/7/39
Thursday, December 09, 2010
Thursday, October 28, 2010
Unique Css Article
Plugin para Joomla! 1.5 que permite utilizar un archivo único para un artículo.
Más info:
http://www.playa-soluciones.cl/proyectos-realizados/37-unique-css-article
Más info:
http://www.playa-soluciones.cl/proyectos-realizados/37-unique-css-article
Tuesday, August 24, 2010
Razones por las cuales usar Netbeans para proyectos PHP
Generalmente los desarrolladores hand-code prefieren no utilizar algún IDE por temas filosóficos, por decirlo así. Y se utilizan varias herramientas como Notepad++, Geany, o simplemente El bloc de notas de Windows o gedit para Linux.
Pero al trabajar en proyectos de mayor embergadura, en los cuales el trabajo se divide en uno o varios equipos, se debe compatibilizar el estilo propio de programación con los demás, y esto puede ocasionar pérdida de tiempo innecesaria.
Incluso si se trabaja remotamente esta situación puede convertirse en un grave problema. Y si a esto agregamos las librerías utilizadas, nomenclaturas, convenciones; se puede tornar difícil de digerir por cada desarrollador.
También tenemos el caso del ingreso de un nuevo desarrollador y si el código no está bien documentado y/o tabulado, puede hacer extensa la curva de aprendizaje.
Sabemos que un buen código debe estar documentado, es más, muy documentado. Siguiendo una lógica con respecto a nomenclaturas, convenciones de nombre, tabulaciones, alcance de variables/funciones/métodos.
Esto podría tomarse como trivial, pero cuando un proyecto crece y luego requiere mantención, si el código es poco legible o no tiene documentación, es más costoso el entendimiento de éste que la modificación.
Es aquí donde entra Netbeans, este IDE posee características que son muy valiosas para los desarrolladores, que se convierten en razones del porqué lo recomiendo.
A continuación se detallan algunas:
Auto-completado y documentación de funciones PHP:
Rápido acceso a la documentación de PHP, y si se necesita más información se provee el link directo a la función.
Generador de PHPDoc:
La documentación es un tema muy importante, pero difícil de realizar. Con Netbeans esto se hace fácil: se debe posicionar el cursor en la línea anterior a la declaración de la función, luego escribir /** y presionar [ENTER].
Auto-completado de código propio:
Esto es una consecuencia del punto anterior, al documentar código con el formato esperado, estos serán mostrados como se observa a continuación.
Soporte para CVS, Mercurial, Subversion: (Ejemplo SVN)
Notar la diferencia de colores:
- Verde: Código agregado
- Azul: Código modificado
- Rojo: Código eliminado
Además si se hace click en el cualquiera de estos colores mostrará el código reemplazado. Una gran extensión al [CTRL]+Z.
Atajos de teclado muy útiles:
- Ordenar y tabular código: [ALT]+[SHIFT]+F
- Seleccionar el archivo editando en el proyecto: [ALT]+[SHIFT]+1
- Alternar maximizar ventana: [SHIFT]+[ESC]
- Ir a siguinte ocurrencia de variable/función/método marcado (el cursor debe estar dentro del nombre)
- Ir a declaración de variable/funcion/clase: [CTRL]+B ó [CTRL]+(click)
- Lista de archivos abiertos: [CTRL]+[TAB]
- Duplicar línea: [CTRL]+[SHIFT]+UP ó [CTRL]+[SHIFT]+DOWN
- Mover línea: [ALT]+[SHIFT]+UP ó [ALT]+[SHIFT]+DOWN
- Eliminar línea: [CTRL]+E
- Comentar: [CTRL]+[SHIFT]+C
- Renombrar variable/función/clase: [CTRL]+R
- Ir a declaración: [CTRL]+O
- Ir a archivo: [SHIFT]+[ALT]+O
Existen muchas más como integración con Xdebug, soporte para Symfony, Zend Framework, Smarty, historia local para archivos, entre otros.
Monday, April 19, 2010
Virtual Host Apache Ubuntu
Publico la manera que realmente me funcionó para configurar un virtual host en ubuntu:
Supongamos que vamos a agregar un dominio virtual llamado mi-dominio.com que está alojado en /var/www/mi-dominio.com
Tip
$: comando de consola
1) Agregamos esta línea para el dominio vitual en el archivo /etc/hosts:
127.0.0.1 mi-dominio.com
$ sudo gedit /etc/hosts
2) Agregamos un archivo con el nombre del dominio (mi-dominio.com) a esta ruta, con el siguiente contenido:
Actualización: Para versiones de Apache 2.4.6+ agregar la extensión .conf (mi-dominio.com.conf)
Ruta:
$ sudo nautilus /etc/apache2/sites-available/
Contenido:
- No olvidar quitar los ' [apostrofes]
- La configuración es para sitios que utilizan mod_rewrite. Para activar mod_rewrite en Apache ejecutar: $ sudo a2enmod rewrite
'<'VirtualHost *:80>
ServerAdmin webmaster@mi-dominio.com
ServerName mi-dominio.com
DocumentRoot /var/www/mi-dominio.com
'<'Directory /var/www/mi-dominio.com>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
'<'/Directory>
'<'/VirtualHost>
Actualización Para nuevas versiones de Apache:
Reemplazar esto
Order allow,deny
allow from all
Por esto
Require all granted
3) Activar sitio
$ sudo a2ensite mi-dominio.com
4) Reiniciar apache
$ sudo /etc/init.d/apache2 reload
5) Ahora podemos ingresar a nuestro vistual host:
http://mi-dominio.com
Supongamos que vamos a agregar un dominio virtual llamado mi-dominio.com que está alojado en /var/www/mi-dominio.com
Tip
$: comando de consola
1) Agregamos esta línea para el dominio vitual en el archivo /etc/hosts:
127.0.0.1 mi-dominio.com
$ sudo gedit /etc/hosts
2) Agregamos un archivo con el nombre del dominio (mi-dominio.com) a esta ruta, con el siguiente contenido:
Actualización: Para versiones de Apache 2.4.6+ agregar la extensión .conf (mi-dominio.com.conf)
Ruta:
$ sudo nautilus /etc/apache2/sites-available/
Contenido:
- No olvidar quitar los ' [apostrofes]
- La configuración es para sitios que utilizan mod_rewrite. Para activar mod_rewrite en Apache ejecutar: $ sudo a2enmod rewrite
'<'VirtualHost *:80>
ServerAdmin webmaster@mi-dominio.com
ServerName mi-dominio.com
DocumentRoot /var/www/mi-dominio.com
'<'Directory /var/www/mi-dominio.com>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
'<'/Directory>
'<'/VirtualHost>
Actualización Para nuevas versiones de Apache:
Reemplazar esto
Order allow,deny
allow from all
Por esto
Require all granted
3) Activar sitio
$ sudo a2ensite mi-dominio.com
4) Reiniciar apache
$ sudo /etc/init.d/apache2 reload
5) Ahora podemos ingresar a nuestro vistual host:
http://mi-dominio.com
Wednesday, March 10, 2010
Trabajar con Proyectos remotos con NetBeans, Eclipse o Similares en Ubuntu
Doy a conocer lo que descubrí ayer tratando de trabajar con proyectos remotos desde NetBeans, y me dí cuenta que no posee la opción. Bueno si la posee, pero por FTP, pero en donde trabajo usan la red para compartir archivos.
Vi que hay soluciones como usar un puente ssh, ftp, entre otros. Pero ninguno no me simpatizaban... :P
Y, tratando de encontrar una ruta que NetBeans aceptara me encontré con GVFS y magia!
Entonces para trabajar con proyectos remotos sólo debes asignar el directorio de trabajo así:
~/.gvfs/recurso/proyecto
¡Fácil!
NOTA: Deben abrir primero el directorio remoto antes, si no, no aparecerá en ~/.gvfs
ln -s ~/.gvfs/recurso/proyecto nombre_proyecto
Se creará un link en el directorio actual, y podrás usarlo en netbeans o cualquier ide o editor que uses.
Vi que hay soluciones como usar un puente ssh, ftp, entre otros. Pero ninguno no me simpatizaban... :P
Y, tratando de encontrar una ruta que NetBeans aceptara me encontré con GVFS y magia!
Entonces para trabajar con proyectos remotos sólo debes asignar el directorio de trabajo así:
~/.gvfs/recurso/proyecto
¡Fácil!
NOTA: Deben abrir primero el directorio remoto antes, si no, no aparecerá en ~/.gvfs
Otra solución, crear un link (Actualización)
ln -s ~/.gvfs/recurso/proyecto nombre_proyecto
Se creará un link en el directorio actual, y podrás usarlo en netbeans o cualquier ide o editor que uses.
Thursday, March 04, 2010
noFramework_MVC en google code
He decidido usar el repositiorio de google code para publicar este framework por los eventuales cambios que pueda tener.
La dirección del proyecto es:
http://code.google.com/p/noframeworkmvc/
La dirección del proyecto es:
http://code.google.com/p/noframeworkmvc/
Wednesday, February 17, 2010
MysqliExt: Facilita el manejo de Mysqli
Publico esta clase para facilitar el manejo de Mysli, para abstraer las consultas más comunes y así acelerar el proceso de desarrollo.
Con esta clase puedes hacer:
Para CRUD y listar:
Para Transacciones:
Descargar Mysqli
Con esta clase puedes hacer:
- Consultas CRUD (create, read, update, delete)
- Listar resultados (fetch)
- Transacciones
Para CRUD y listar:
<?php
//usar tabla usuario
$usuario=new ModeloUsuario();
#CRUD
//insertar usuario nuevo. El resultado entrega el id de la informacion insertada
$campos=array(
'nombre' => 'Cristian',
'correo' => 'mi@correo.com',
'direccion' => 'Mi casa #13'
);
$idUsuario=$usuario->create($campos);
//Seleccionar un usuario
$resultado=$usuario->read($idUsuario);
//actualizar usuario
$campos=array(
'nombre' => 'Juan',
'correo' => 'micorreo@mail.com'
);
$resultado=$usuario->update($campos, $idUsuario);
/*//eliminar un usuario
$resultado=$usuario->delete($idUsuario);*/
#Miscelaneos
//seleccionar id
$resultado=$usuario->seleccionarId('nombre', 'Juan');
//listar resultados
$seleccionar="*";
$where="1";
$limit="50";
$resultado=$usuario->fetch($seleccionar, $where, $limit);
//query2
$resultado=$usuario->query2("select CURDATE() as fecha;");
Para Transacciones:
<?php
#transacción
$usuario->iniciarTransaccion();
$usuario=new ModeloUsuario();
//insercion correcta
$campos=array(
'nombre' => 'Alberto',
'correo' => 'correo1@mail.com'
);
$usuario->create($campos);
//insercion correcta
$campos=array(
'nombre' => 'Pedro',
'correo' => 'correo2@mail.com'
);
$usuario->create($campos);
//insercion correcta
$campos=array(
'nombre' => 'Sonia',
'correo' => 'correo3@mail.com'
);
$usuario->create($campos);
//otra tabla #acá ocurre el error
$modeloAvatar=new ModeloAvatar();
$campos=array(
'ur' => 'http...'
);
$modeloAvatar->create($campos);
//al finalizar no habrá cambios en la BD, ya que hay una inserción incorrecta en la transaccion
var_dump($usuario->finalizarTransaccion());
Descargar Mysqli
Sunday, February 14, 2010
Usa __autoload y ahorate código y tiempo
Reconozco que no uso todas las ayudas que presta PHP, pero ahora estoy desarrollando un sistema más o menos complejo y he tenido que recurrir bastante a este tipo de funciones y métodos mágicos de PHP.
Bueno con __autoload no veía el uso, pero al trabajar con POO el uso de include se multiplica bastante, es por eso que preferí usarlo en vez de seguir ignorándolo. El problema era que tengo dos tipos de clases que incluir: los modelos y las librerías, y luego de pensar cree este pequeño script para facilitar el trabajo. Hace la inclusión dependiendo del nombre de la clase, para asignarle la ruta correspondiente:
#Lo uso para noFramework_MVC.
Si no usas este framework puedes utilizar directamente un include.
/**
* Carga automaticamente archivos de clases Modelo[...] y
* clases en lib
* @param string $clase
*/
function __autoload($clase){
//nombre de clases que empiezan con Modelo[nombredelaclase]
if(ereg("^Modelo", $clase)){
Core::cargarClase("app_modelos_$clase");
}
else{
Core::cargarClase("lib_$clase");
}
}
Más info acerca de __autoload
Espero sirva de ejemplo si desean implementar esta útil función.
Bueno con __autoload no veía el uso, pero al trabajar con POO el uso de include se multiplica bastante, es por eso que preferí usarlo en vez de seguir ignorándolo. El problema era que tengo dos tipos de clases que incluir: los modelos y las librerías, y luego de pensar cree este pequeño script para facilitar el trabajo. Hace la inclusión dependiendo del nombre de la clase, para asignarle la ruta correspondiente:
#Lo uso para noFramework_MVC.
Si no usas este framework puedes utilizar directamente un include.
/**
* Carga automaticamente archivos de clases Modelo[...] y
* clases en lib
* @param string $clase
*/
function __autoload($clase){
//nombre de clases que empiezan con Modelo[nombredelaclase]
if(ereg("^Modelo", $clase)){
Core::cargarClase("app_modelos_$clase");
}
else{
Core::cargarClase("lib_$clase");
}
}
Más info acerca de __autoload
Espero sirva de ejemplo si desean implementar esta útil función.
Thursday, February 11, 2010
noFramework_MVC
Hace tiempo que no posteaba sobre PHP, pero no era por que no lo he usado, es porque tenía hartas cosas que ordenar. Una de esas es este Sistema MVC que creé para mi tesis (no fue la tesis) y comparto con cualquier interesado que quiera probarlo.
Este sistema MVC fue creado con el propósito de incentivar el uso del patrón MVC, sin obligar a cambiar los propios paradigmas de programación que se utilicen. Sólo “obliga” a separar la aplicación en controladores, modelos y vistas; como exige MVC, nada más. De aquí en adelante el desarrollador puede optar por el framework que desee, para abstraer la BD por ejemplo, entre otros.
Este manual-tutorial está organizado de manera tal, que una vez finalizado y comprendido, será la manera que se organicen y configuren los proyectos, es decir, está ordenado pos pasos concecutivos.
Se toma en cuenta que el lector posee algunos conceptos de MVC, amplios conocimientos en POO y PHP. Ya que no se altera el uso del lenguaje, sólo la manera de organizar la aplicación.
Se recomienda que al leer este documento se abra el archivo al que se hace refencia.
##NOTAS:
##ACTUALIZACIONES
Este sistema MVC fue creado con el propósito de incentivar el uso del patrón MVC, sin obligar a cambiar los propios paradigmas de programación que se utilicen. Sólo “obliga” a separar la aplicación en controladores, modelos y vistas; como exige MVC, nada más. De aquí en adelante el desarrollador puede optar por el framework que desee, para abstraer la BD por ejemplo, entre otros.
Este manual-tutorial está organizado de manera tal, que una vez finalizado y comprendido, será la manera que se organicen y configuren los proyectos, es decir, está ordenado pos pasos concecutivos.
Se toma en cuenta que el lector posee algunos conceptos de MVC, amplios conocimientos en POO y PHP. Ya que no se altera el uso del lenguaje, sólo la manera de organizar la aplicación.
Se recomienda que al leer este documento se abra el archivo al que se hace refencia.
##NOTAS:
- Al descomprimir dar permisos de escritura al directorio. Si no apareciese en el navegador.
- Por algún motivo que no logro entender, el primer include [include(config.php)] para el archivo indexBoot.php no funciona en Windows, entonces tendrás que copiar el código de config.php y pegarlo directamente en indexBoot.php, reemplazando el include.
##ACTUALIZACIONES
- 14/02/10 - Ya no es obligatorio invocar __construct en los Controladores
- He alojado el proyecto en google code
Tuesday, February 09, 2010
Pinta: Editor Simple
Se acabó la búsqueda...
Este simple editor es ideal para personas que quieres hacer cosas simples y rápidas con imágenes.
www.pinta-project.com/
Además ya lo agregué a mi lista de software favoritos ;)
Este simple editor es ideal para personas que quieres hacer cosas simples y rápidas con imágenes.
www.pinta-project.com/
Además ya lo agregué a mi lista de software favoritos ;)
Friday, February 05, 2010
Sincronizar [sólo] calendario Evolution con Google Calendar
Para poder sincronizar sólo nuestro Google Calendar con Evolution sólo debemos:
Nota: Esto es por si deseas sincronizar sólo el calendario.
- Hacer click en el reloj para desplegar el calendario
- Hacer 2 click en cualquier día
- Hacer 2 click en cualquier día (Sí de nuevo!!!. Para evitar tener que configurar el correo)
- Agregar un calendario google, ingresar tu datos y todo eso
- Cuando termines cierras y podrás ver los eventos en el calendario que se despliega desde el menú.
Nota: Esto es por si deseas sincronizar sólo el calendario.
Sunday, January 31, 2010
Lo mejor que he encontrado para el iPhone!!!
Bueno, tengo que reconocer que no resistí la tentación de comprar un iPhone, así que desde que lo adquirí he estado indagando en varios aspectos para potenciar aún más su uso.
Uno de los grandes problemas que encontraba era que para leer las páginas costaba mucho por el tamaño de la letra, entonces estaba a cada rato haciendo zoom. ¡¡¡Pero esto se acabó!!!
Ayer me reuní con Pablo en la junta mensual de linuxLSC y entre todas las cosas que habalmos me comento de readability, un maracador javascript que hace más simple la vista de una página web. Y es muy útil si quieres ver sólo el contenido.
Y me hice la pregunta: ¿Servirá para iPhone? empecé a indagar y en el sitio oficial no aparece la opción por defecto pero en otro blog encontré el código para poder copiarlo:
--------------------------
javascript:(function(){readStyle='style-ebook';readSize='size-medium';readMargin='margin-narrow';_readability_script=document.createElement('SCRIPT');_readability_script.type='text/javascript';_readability_script.src='http://lab.arc90.com/experiments/readability/js/readability.js?x='+(Math.random());document.getElementsByTagName('head')[0].appendChild(_readability_script);_readability_css=document.createElement('LINK');_readability_css.rel='stylesheet';_readability_css.href='http://lab.arc90.com/experiments/readability/css/readability.css';_readability_css.type='text/css';document.getElementsByTagName('head')[0].appendChild(_readability_css);_readability_print_css=document.createElement('LINK');_readability_print_css.rel='stylesheet';_readability_print_css.href='http://lab.arc90.com/experiments/readability/css/readability-print.css';_readability_print_css.media='print';_readability_print_css.type='text/css';document.getElementsByTagName('head')[0].appendChild(_readability_print_css);})();
--------------------------
Pasos a seguir en el iPhone:
- Copiar el código anterior
- Agregar a marcadores esta página
- Editar el marcador agregado y pegar el código copiado
Y cuando estés leyendo una página y sólo quieres ver lo relevante, vas a marcadores y seleccionas el marcador que hemos creado.
¡Es muy útil!
Monday, January 11, 2010
Aumenta considerablemente la vida de la batería de tu laptop en ubuntu
Hace unos días buscaba la manera de prolongar el tiempo de duración de la batería de mi laptop, ya que varias veces me encuentro en lugares donde es difícil encontrar esa "valiosa energía gratuita que nos entregan las tomas de corriente ajenas".
Después de probar varias que eran un tanto incómodas como: disminuir la luminosidad de la pantalla, bajar la resolución, eliminar compiz -gran sacrificio para el ego ;) -, entre otros; finalmente opté por CPU Frequency Scaling Monitor.
Con esta aplicación he logrado que aumente la duración en casi una hora más, algo muy considerable y fácil de utilizar además.
Para activarla, debes agregarla a un panel y la buscas por su nombre, la agregas y aparecerá un ícono con la frecuencia actual del procesador. Y si le haces click verás las opciones para cambiar la frecuencia (cuando estoy con batería lo cambio a 'Powersave').
Y si tienes varios procesadores, agregas una por cada uno y en preferencias (botón derecho) eliges el procesador correspondiente, en mi caso son dos. Entonces dejo los dos en 'Powersave' cuando estoy con batería.
Obviamente afecta el rendimiento del equipo, pero generalmente cuando estás sin energía no estas utilizando el equipo para producción.
Después de probar varias que eran un tanto incómodas como: disminuir la luminosidad de la pantalla, bajar la resolución, eliminar compiz -gran sacrificio para el ego ;) -, entre otros; finalmente opté por CPU Frequency Scaling Monitor.
Con esta aplicación he logrado que aumente la duración en casi una hora más, algo muy considerable y fácil de utilizar además.
Para activarla, debes agregarla a un panel y la buscas por su nombre, la agregas y aparecerá un ícono con la frecuencia actual del procesador. Y si le haces click verás las opciones para cambiar la frecuencia (cuando estoy con batería lo cambio a 'Powersave').
Y si tienes varios procesadores, agregas una por cada uno y en preferencias (botón derecho) eliges el procesador correspondiente, en mi caso son dos. Entonces dejo los dos en 'Powersave' cuando estoy con batería.
Obviamente afecta el rendimiento del equipo, pero generalmente cuando estás sin energía no estas utilizando el equipo para producción.
Algunos Screens:
En panel
Subscribe to:
Posts (Atom)