PHP siguiente nivel (editado)

2013-12-30 - Categorías: General
Pensaba que ya tenia un buen nivel de conocimiento en la programación PHP. Estaba a mitad de camino entre programar webs desde cero, o usar CMSs y adaptarlos. Indagando, indagando, y bien aconsejado me decidí por aprender a fondo sobre el tema, cómo estan hechos los CMSs, y sobre los frameworks de desarrollo. La idea que tenia en mente era no reinventar la rueda una y otra vez con cada proyecto. Ahora resulta que como dice el dicho, cuanto más aprendo, más veo que me falta por aprender. Es chistoso pero así es, a veces me siento contento de haber aprendido, pero miro hacia adelante, no quiero quedarme atrás, y pienso sobre todo lo que quisiera saber.
Por todo ésto les quiero compartir una serie de enlaces a alimento académico y herramientas. Para todos aquellos que estamos en constante reciclaje, que creo la mayoría de los programadores..

Al grano, los recursos:
  • PHP -> Imprescindible, manuales oficiales sobre el lenguaje de programación PHP.
  • LIBROSWEB -> Muchos libros gratis para la comunidad de programadores. Son libros avanzados sobre XHTML, Symfony, Silex, Composer, Git, CSS y más.
  • Composer -> Es una herramienta con la que podemos instalar de forma automática todo tipo de librerías para aplicaciones PHP. Es un manejador de dependencias. Resumiendo, eliges las herramientas, ejecutas el comando de composer y te instala todas las librerías. Por ejemplo, Symfony y Silex se pueden instalar o actualizar usando Composer.
  • Packagist -> Es el repositorio principal de paquetes para Composer. Podemos consultarlo que probablemente encontremos herramientas que nos agilicen los desarrollos.
  • Symfony -> Framework de desarrollo con una comunidad de habla hispana muy grande, podemos encontrar mucha documentación en Internet.
  • Silex -> Microframework basado en algunos componentes que usa Symfony. Muy sencillo para empezar y potente cada vez más cuando vamos aprendiendo a usar sus componentes.
  • Aptana Studio -> Un entorno de desarrollo basado en Eclipse que seguro que a mas de uno le gustará si lo prueba. Tiene de todo para el desarrollo web desde el punto de vista de un programador. Editor de código bueno, autoformateo de código, autocompletado, resaltado de sintáxis. Y es gratis.
  • PHP, la manera correcta -> Proyecto de documentación sobre buenas prácticas a la hora de programar.
Gracias a Albert por gran parte de la información.
Un saludos y ¡que aproveche!

La base de datos más grande de iconos vectoriales gratis

2013-12-30 - Categorías: General
Se trata de un proyecto libre, hecho por y para diseñadores y desarrolladores, cualquier colaboración seguro que será bien recibida. 
Su fundador, Alejandro Sánchez Blanes, se preocupaba diciendo:

«Por qué no construir una nueva herramienta para encontrar y elegir los iconos sin límites, una herramienta que puede funcionar bien en cualquier proyecto, con el tiempo.»

Flaticon es un almacén de iconos vectoriales que viene de la mano de Freepik, ya muy conocido. Pero en éste caso, se orientan a los iconos, todo tipo de iconos simples y sencillos, los ladrillos para tus trabajos.
Los tenemos ordenados por categorías, autores, packs.. también tenemos un buscador. Podemos ir añadiendo a una cesta todos los iconos que queramos y descargarlos de una vez en un archivo comprimido que se generará automáticamente. Podremos elegir los formatos de Webfont, PNG, SVG o descargar en todos los formatos de una vez.
Por otro lado tenemos disponible un plugin para Photoshop, libre en descarga también en la web. En Jnjsite, como viene siendo habitual, nos gustan los proyectos libres así que aquí les dejamos el enlace a la web:
Un saludo!

Poner tu negocio en «la nube»

2013-12-18 - Categorías: General


No es lo mismo poner un negocio en la nube, que ponerlo por las nubes, o estar en las nubes. Es  lo llamado cloud computing en inglés, se traduce por computación en la nube. Pero ¿qué es eso de la nube? ¿dónde está? ¿no está ya mi web en la nube? ¿qué es exactamente la nube de Internet?

Qué no es

Tradicionalmente, si contratamos espacio para poner una web en Internet, o si conectamos un ordenador a Internet, no estamos montando una nube. Solemos venir contratando este servicio a una empresa que nos alquila una cantidad de espacio, una velocidad del ordenador, una cantidad de visitas posibles (traducido en tasa de transferencia), cantidad de emails almacenados, etcétera…
Todo ésto es lo que no es, lo que se viene haciendo de manera tradicional limitando el uso de lo que ponemos en Internet. Hoy en día podemos encontrar soluciones cloud, en la nube, supuestos servicios en la nube que realmente no lo son. Se está utilizando esta forma de nombrar a la nube porque se vende bien, por eso debemos poner especial cuidado.

Qué sí es

En líneas generales, la nube es un conjunto de servicios que nos ofrece una empresa, los cuales se van ampliando conforme se necesita más. Para que nos entendamos, si tenemos una web y resulta que de repente necesitamos 27 Gigas extra de almacenamiento, si estamos en una nube ésto se amplia automáticamente y pagaremos por la cantidad de espacio que usemos. De igual manera ocurre con todo, tráfico entre la web y los visitantes, velocidad de procesamiento, balanceo de carga en las bases de datos, etcétera.

Es decir, se trata de un sistema escalable automáticamente, que se va aumentando o disminuyendo según es necesario y sólo pagaremos por lo que usemos. Hoy en día hay muy buenas soluciones para ésto y las empresas quieren cada vez más tener éste servicio. Pero no todas lo ofrecen realmente o dan un servicio parcial de lo que realmente es cloud computing.

Terminando

Una nube es un servicio en Internet donde al tener una aplicación web su capacidad para dar servicio aumenta o disminuye automáticamente, es escalable, dando todo el servicio que sea necesario sin colapsarse ni saturarse. De igual manera se paga por lo que se use, ni más ni menos, según las tarifas de cada empresa aumentando los costes o disminuyendo según la cantidad de servicio que se haya dado.
Para citar dos ejemplos de las empresa famosas:
  • Amazon, con sus Amazon Web Services y el Elastic Beanstalk, una solución más que interesante.
  • Google, con su App Engine, simplemente práctico y fácil de usar. 
Un saludo.

Facebook privado

2013-11-22 - Categorías: General
Facebook se está convirtiendo en una herramienta que nos permite mantener el contacto con mucha gente y de una manera muy eficaz. No hay que mitificarlo, pero la realidad es que mucha gente pasa mucho tiempo en las redes sociales, y Facebook va primero en la competición. Dejando al margen las polémicas sobre la falta de privacidad en Internet, sobre lo confiados que podemos llegar a ser a la hora de «compartir nuestra vida», conviene saber que podemos limitar qué se puede ver y quién lo puede ver en ésta red social.

Manos a la obra, nos hemos puesto a trastear todo el Facebook, tocando todos los botones, el resultado de toda ésta aventura ha sido ésta entrada del blog. Vamos al grano.

Configurando la lista de contactos

Para empezar debemos de tener claro que podemos clasificar a nuestros contactos, y en función de ésto verán cierta información o publicaciones sobre nosotros. Algunos tenemos a familiares, amigos del alma, amigos, conocidos, compañeros del trabajo, jefes, clientes, profesores, compañeros de clase, profesores de nuestros hijos, o incluso desconocidos. Muchos con cientos de contactos, ya me es habitual ver gente con más de 500 amigos, 600, 700. Y hasta cierto punto no es razonable mezclar las cosas…

Toda la clasificación de los contactos se hace por lo que Facebook llama listas inteligentes. Es un gran avance y soluciona muchos problemas ocasionados por la falta de privacidad. Las principales son:

  • Con acceso restringido.
  • Conocidos.
  • Amigos.
  • Mejores amigos.
  • Familia.
Podemos hacer otras listas con el nombre que queramos y poner a nuestros contactos en ellas. Éste orden nos va a servir luego para configurar quién ve qué cosas de nuestro Facebook.
En la imagen de arriba podemos ver el famoso botón que tenemos cuando vemos la página o publicación de un amigo, si le damos click se despliega un menú como el de la image. Ahí podemos poner en mejores amigos o en conocidos.

Si le damos a añadir a otra lista, nos saldrá una ventana como la de la imagen de la izquierda, donde podremos poner al contacto en cualquiera de las listas que tengamos definidas. Las listas inteligentes que veremos algunas se crean automáticamente, podemos crear nuevas. Por defecto familia y acceso restringido vienen creadas.

Niveles de privacidad

Para entender la privacidad, tenemos establecidos ciertos niveles de privacidad, parecidos a la clasificación anterior:

  • Acceso restringido.
  • Conocidos.
  • Amigos.
  • Mejores amigos y familia.
La lista de acceso restringido es especial, porque las personas que estén en ésta lista no van a ver casi nada de nosotros, sólo lo que hagamos público. Es decir, sólo verán lo totalmente público, igual que las personas que no están en nuestra lista de amigos. Es el nivel más estricto de privacidad. El siguiente nivel son los conocidos, le siguen los amigos, mejores amigos y familia. A cada siguiente nivel ven lo del anterior más ciertas cosas.
Los familiares y mejores amigos también son un caso especial, porque entre ellos no hay diferenciación en mayor o menor visibilidad. Es decir, un familiar va a ver lo mismo que los amigos y algo más, de igual manera que un mejor amigo. Pero lo publicado para mejores amigos no lo ven los familiares y viceversa. Si queremos publicar algo para mejores amigos y familia tendremos que personalizar la publicación que luego se explica más abajo.

¿Dóndo configuro la privacidad?

Una vez organizados los contactos, ya podemos cambiar la visibilidad de casi todo nuestro Facebook en función de la clasificación que acabamos de hacer. Lo lógico es no publicar lo mismo, o que los clientes de trabajo no anden viendo nuestras fotos privadas de familia o con los amigos. Hay a quién no le importa, pero tenemos la posibilidad de configurarlo.
Para acceder a todas las configuraciones de Facebook debemos hacer click arriba a la derecha en el icono de rueda dentada o en el candado. En el candado tenemos acceso directo a algunas de las configuraciones pero si le damos a ‘Ver más’ podemos acceder al total de configuraciones. Con la rueda dentada, en la opción ‘Configuración de la cuenta’, o ‘Configuración de la privacidad’ llegamos a las mismas configuraciones.

Accediendo veremos lo explicado en las siguientes secciones.

Configuraciónes de privacidad, biografía y etiquetado

Hay muchas opciones para configurar, las pricipales para conseguir un Facebook con control de lo que ponemos las tenemos aquí. Es muy útil comprobar lo que ven otras personas de tu biografía mientras que vamos configurando el sistema, ésto lo podemos ver haciendo click en ‘Ver como’, de las configuraciones en ‘Biografía y etiquetado. En la siguiente imagen tenemos todas las configuraciones, sobran explicaciones, ya que Facebook nos relata para qué sirven.
En la opción de ‘Privacidad’,  tenemos una herramienta bien útil con la que podemos limitar el público de publicaciones antiguas. En versiones anteriores de Facebook venía ocurriendo que teníamos publicado a todo el mundo todo lo que poníamos en Facebook. 
No estoy exagerando, aún a fecha de hoy, veo gente de Facebook que no tengo en mi lista de amigos, de la que puedo ver todos sus datos, fotos, amigos, direcciones, teléfonos, etcétera… Ésto es un peligro porque estamos expuestos a que personas malintencionadas usen ésta información para malos fines. Así que, lo suyo sería limitar las publicaciones antiguas siguiendo las instrucciones.
Cómo indica la opción, podemos configurar quién puede ver las publicaciones que hagamos a partir de ahora. Antiguamente ésto venía siendo público, con lo que cualquiera podría ver nuestras publicaciones. Conviene ponerlo por lo menos para los amigos.
Una opción intersante que tenemos es la de no permitir que los buscadores nos encuentren, o que cualquiera pueda hacernos una petición de amistad. Por ejemplo, si desactivamos que los buscadores nos puedan encontrar, aunque alguien tenga nuestra dirección de Facebook, le saldrá un mensaje como el siguiente:

Ya a gusto de cada uno su configuración.

Publicando

A la hora de poner algo en un muro tendremos la oportunidad de limitar la visibilidad. Eligiendo quién va a poder ver lo que publicamos. Lo mismo podemos hacer a la hora de poner fotos, vídeos o álbumes. Podemos incluso limitar foto a foto quién puede verlas.
Como se puede ver en la imagen, si personalizamos la publicación, podremos elegir entre las listas que tengamos para que puedan verlo. También podremos elegir las personas una a una que podran verlo.
Es interesante que en algunas secciones tenemos un lápiz con el que podemos entrar a editar la privacidad de dicha sección. Cada una tiene su forma de configurarse, los libros, películas, información personal, etcétera. Por su naturaleza cada una es distinta y tenemos las instrucciones donde paso a paso Facebook nos va a indicar cómo configurarlo.
Para terminar es intersante saber que podemos reconfigurar la visibilidad de una publicación ya hecha en nuestro muro. Tenemos un botón como el de la imagen de la derecha con el que podemos cambiarlo. Estado a estado, de todas las publicaciones.

Terminando

Hay muchas configuraciones más, pero las principales para la privacidad son las mencionadas anteriormente. Para más información nos remitimos a la Ayuda de Facebook.

Esperamos que les sirva de ayuda.

Saludos.


Tus archivos en la nube con Mega

2013-11-11 - Categorías: General
Mega con sus 50 Gigas gratis y con la buena calidad de su servicio, vemos que gana puntos en la competición por liderar el almacenamiento en la nube. Reciéntemente, el pasado viernes 6 de noviembre del 2013 ha salido de su fase de pruebas, con una interfaz renovada y algunas nuevas características. En los últimos años estamos viendo como el almacenamiento de los discos duros es mayor y cada vez son más baratos.
En Internet los espacios para correos electrónicos, páginas web, o los servicios de almacenamiento en la nube estan creciendo. Drive que nos ofrece 15 Gigas gratis junto con la cuenta de Gmail para correos electrónicos. Dropbox con 2 Gigas iniciales gratis que vas incrementando realizando ciertas tareas. Skydrive de Microsoft con sus 25 Gigas. Y un largo etcétera..

Un poco de historia

Mega nace de la mano del polémico Kim Dotcom. Un año después del cierre de Megaupload nació Mega.co.nz, ofreciendo su servicio de almacenamiento en la nube. En la primera hora de su lanzamiento en enero del 2013 se registraron alrededor de 100 000 personas, en el primer días más de 1 millón, fué tal el éxito que se llegó a colapsar el servicio. Pero los usuarios han sido conscientes del éxito que tuvo su predecesor, Megaupload, que han sido pacientes y en foros varios se pueden leer buenas referencias al respecto.

Características principales

Analicemos las principales características técnicas de la cuenta gratuita:
– Tenemos disponibles 50 gigas, que podemos usar con todo tipo de archivos en tamaños y en número.
– Siempre todo el servicio se ofrece a través de conexiones HTTPS, es decir, conexiones cifradas. Incluso las transferencias de archivos entre nosotros y Mega se realizan a través de HTTPS.
– Podemos compartir con quien queramos nuestros ficheros haciendo enlaces que podemos enviar a amigos o a quien consideremos.
– Se ha optimizado al máximo la página web, ofreciendo un servicio ágil donde podemos coger y soltar archivos, renombrarlos, moverlos de carpeta, etcétera.
– Sistema por el que se guardan archivos temporales en nuestro ordenador para agilizar su funcionamiento.
– Podemos usar avatares con nuestros contactos.
– Compartir archivos con nuestros contactos.
– Un árbol de directorios mejorado.
– Ahora podemos seguir subiendo o bajando ficheros mientras que navegamos por las secciones.
– Firefox, está tomando la delantera en compatibilidad y prestaciones.
Todo ésto sin instalar nada en nuestro ordenador, sólo con un registrarnos podremos acceder desde cualquier dispositivo que tenga navegador o con sus aplicaciones a los servicios de Mega.

Otras características

Aún en fase beta, tenemos un cliente de sincronización de archivos para Windows, que permite establecer incluso varias carpetas individuales para que se mantengan iguales tanto en la nube como en tu ordenador. En Google Play tenemos una aplicación para sincronizar ficheros entre nuestro Tablet o Smartphone y Mega.
También tenemos disponible el Kit de Desarrollo para crear programas usando su almacenamiento. Mega está cogiendo fuerza con sus políticas empresariales y está dejando atrás su modelo de negocio de Megaupload. Hay programas para trabajar como distribuidor de cuentas pro. Sus versiones de pago parten de casi 100 € al año por 500 Gigas a los casi 300 € al año por 4 Teras, con anchos de banda muy generosos.
Con las pruebas de la cuenta gratuita se ve que el servicio es muy bueno. Las descargas y subidas a la nube son al máximo que nos permite la red.
Después de las polémicas noticias que corren sobre la privacidad en Internet con respecto al ciber-espionaje por parte EEUU y otros organismos internacionales, la población estamos más conscientes de todo ello. Mega no es que tenga un sistema 100% seguro. Decir eso sería como asegurar que es imposible que te caiga un rayo: si nos ponemos a correr con una bateria conectada a una antena en una noche de tormenta eléctrica por una montaña tenemos muchos puntos para conseguir que nos caiga. De todos modos hay que tener en cuenta que los servidores de Mega están montados en Nueva Zelanda, con sus propias leyes. Y los usuarios siempre seremos los últimos responsables de lo que hagamos con nuestros actos, dentro o fuera de Internet.
Después de los casos de acceso a tus archivos por parte de las empresas (por ejemplo Microsoft que revisa tus archivos automáticamente, Google con sus anuncios relacionados..), Mega se ha curado en salud haciendo muy complicado que ellos mismos puedan acceder a tus archivos. Pero no vamos a entrar en temas criptográficos o ciberseguridad porque no es objetivo de éste artículo.

El futuro próximo

Para antes de terminar el año 2013, se prevee el lanzamiento de la aplicación para iOS y que salga de la fase de pruebas el cliente de sincronización https://mega.co.nz/#sync. En 2014 se espera el lanzamiento de un sistema de mensajería y videoconferencia cifrado y basado en la web.
Lento pero a buen ritmo Mega va sorprendiéndonos con la calidad de sus servicios: buen diseño, usabilidad, servicios innovadores.. Hemos leido sobre la venta de música, películas, podríamos especular sobre las posibilidades de los servicios en la nube. Si hay algo claro, es que en Informática si algo que se pueda pensar, normalmente se puede crear, otro asunto es que merezca la pena invertir tiempo en ello o si la ley lo permite.

Resumiendo

Para terminar queda decir que Mega es un servicio como los otros de que ya disponemos, pero que en las pruebas realizadas ha funcionado muy bien, y tiene precios muy económicos en sus versiones de pago. Seguro que Mega seguirá sorprendiéndonos. Y a fecha de hoy, un servidor que les escribe piensa que Mega con sus servicios está ‘tirando del carro’, motivando a que los grandes competidores como Google, Microsoft, Dropbox.. se pongan las pilas y mejoren sus servicios. Al fin y al cabo, todo ésto es bueno y los beneficiados vamos a ser los usuarios, ya seamos clientes gratuitos o de pago.
Me despido dejándoles el enlace a Mega aquí. Saludos.

El ordenador más económico y potente de mundo

2013-10-30 - Categorías: General
Lleva desde el 2006 entre nosotros. Aunque es muy desconocido fuera del ámbito de la informática es una realidad. En España se están comercializando éstos pequeños ordenadores en kits de inicio que parten desde unos 50 € aproximadamente. Tiene la mejor relación calidad-precio del mercado, ya que no hay detrás una empresa con ánimo de lucro, no hay patentes, software de pago, etcétera.. simplemente un circuito integrado con sus accesorios. Y la total libertad para programarlo o configurarlo a nuestro gusto.

Raspberry Pi es un proyecto que arrancó en el ámbito de la educación, creando un pequeño ordenador del tamaño de una tarjeta de crédito. Su precio final es realmente barato, sólo 24 libras el modelo de 256 megas de RAM y por 31 libras el de 512 megas. El modelo B, el más avanzado, corre un procesador a 700 MHzs, tiene USB 2.0, HDMI, conector RCA, salida de audio de 3.5 mm, ranura para tarjeta SD, tarjeta de red integrada.. Opcionales se pueden comprar todo tipo de accesorios como cajas, cámaras, para ampliar los puertos USB, etcétera. Y sus aplicaciones como ordenador para la televisión o cualquier otro uso no tiene límites. El consumo que viene a tener es de sólo 3.5 watios, como una lámpara de LEDs, se puede alimentar con un cable micro USB con un simple cargador de móvil.

Tenemos sistemas operativos compatibles que son distribuciones de Linux totalmente gratuitas y orientadas según el uso que se le vaya a dar: para navegar, para almacenar datos en red con discos duros, cualquier cosa es posible. En la página oficial del proyecto tenemos algunas. Para empezar a funcionar con éste micropc se recomienda empezar por una de éstas. Siendo Linux siempre cabe la posibilidad de modificarlo, y disponemos de todo el código fuente para adaptaciones de todo tipo. La página de descargas es:
Los usos que se le vienen dando a éste ordenador no tiene límites. En enero del 2013 se publicaba un proyecto con el que se construyó un supercomputador barato uniendo en red 64 Raspberry Pi:
Hay testimonios de gente ejecutando LibreOffice y Firefox sin ningún problema. Otro ejemplo, junto con Google, está el proyecto Coder para convertir éste pequeño ordenador en un servidor de aplicaciones muy económico. No hacen falta conocimientos avanzados para montar nuestro propio Raspberry Pi en casa. Cada vez más empresas lo estan comercializando con cajas muy presentables con todo tipo de colores, formas e incluso transparentes. No hay más que coger nuestro buscador de Internet favorito y encontraremos infinidad de resultados. Es un pequeño juguete, y a la vez no tan «juguete». Un proyecto en constante desarrollo y con gran futuro, que seguro que va a dar mucho que hablar.
Para más información nos remitimos a su página oficial: http://www.raspberrypi.org/
Saludos.

Conflictos Javascript entre Mootools y jQuery en Joomla solucionado

2013-09-24 - Categorías: General

Me he pasado horas solucionando los conflictos Javascript de una web. Mi caso ha sido con una plantilla de Joomla 2.5 que usa Mootools y jQuery, además de otras extensiones instaladas y plugins internos que usan Javascript. Total, que se cargaba jQuery varias veces (no hay que hacerlo), el orden de carga de los archivos .js no era el correcto. Y el mayor de mis problemas: tanto Mootools como jQuery hacen uso del símbolo $ para programar. Y para colmo usaba el captcha con Aicontactsafe que no funcionaba por el mismo conflicto con el simbolo $, con lo que todo ésto que acabo de escribir es un lio ¿verdad?

Navegando y mezclando soluciones, la solución es simple:
  • En el código fuente de la plantilla, añades en el <head> lo siguiente antes de cargar otros archivos de Javascript:
<script src="rutadondetienesjquery/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">jQuery.noConflict();</script>
  • Y hay que desactivar la carga de jQuery de cualquier extensión, plantilla, módulo… para evitar que se vuelva a cargar.
Mirando el código fuente de la web puedes comprobar si ya tienes la cabecera correcta y entonces todo debe funcionar. Hay quien dice de desactivar Mootools pero se ha venido usando mucho en Joomla y dejarían de funcionar seguramente muchas cosas.
Espero que sirva, a mi me sirvió después de unas horas buscando la solución 😛
Saludos!

El uso de programas Open Source

2013-09-23 - Categorías: General
OpenSource que significa código abierto en castellano, se acuña mucho en éstos tiempos en el ámbito de la informática. Está revolucionando la informática en la empresa y también en nuestros hogares. ¿Sabemos qué tanto podemos ganar por usar programas de código abierto? Son totalmente gratuitos y colaboran en su desarrollo hasta millares de personas de todo el mundo.
Algunos proyectos que le pueden ser muy útiles son:
– La completa suite ofimática LibreOffice.
– El editor de imágenes Gimp.
– Un editor de sonido, el Audacity.
– Otro editor de imágenes pero vectoriales, Inkscape.
VLC, un reproductos multimedia compatible con casi todo.
– Los proyectos de la familia Mozilla, como el navegador Firefox.
– Etcétera..
Tenemos disponibles todo tipo de soluciones: para tratamiento de textos, hojas de cálculo, bases de datos, edición de vídeo, imagen, audio.. Tenemos completos sistemas operativos, gestores de contenidos web, navegadores, entornos de programación, avanzados sistemas de gestión de la información.. y un largo etcétera.
Nos mantenemos al día en los proyectos de código abierto, los utilizamos siendo herramientas esenciales de nuestro negocio. Por ello podemos bajar los precios y dar la mejor calidad.
Reciban un cordial saludo.

Joomla carga muy lento con Windows 7

2013-08-27 - Categorías: General
Desarrollando y construyendo una web en Joomla, me encuentro con el problema de que mi instalación en una máquina de trabajo con Windows 7 y Uniform Server tarda mucho en servir las páginas. Llega a tardar del orden de 2 a 10 segundos para cada página.
Después de haber encontrado mi solución y la de muchos otros en situaciones parecidas les expongo aquí las soluciones que encontré y fui probando.
Ésto lo he aplicado a una instalación de un servidor Apache con PHP y MySQL corriendo un Joomla 2.5. Debería de funcionar también si tienes el problema con otros CMS como Drupal o WordPress.

1. Desactivar antivirus o excluir el directorio de instalación del servidor.
2. Desactivar el firewall o permitir el acceso directo de los programas del servidor Apache, PHP y MySQL.
3. Desactivar IPv6 de la máquina.
4. Acceder a la máquina local mediante 127.0.0.1 en vez de poniendo localhost. También se puede modificar el archivo de hosts para ésto. 
5. Editar el fichero php.ini
6. Editar http.conf de Apache para escuchar con IPv4.
7. Si tienes XAMPP instalar Uniform Server, o viceversa. O actualizar a una nueva versión.
8. Poner PHP como módulo de Apache, en vez de como CGI.
9. Desactivar Xdebug.
La solución que me funcionó fué la última, tal vez las otras ayudaron pero la que se notó fué al desactivar el Xdebug de PHP.
Lo dejo aquí por si alguien le sirve.
Saludos.

Tabla seleccionable con Swing

2013-07-21 - Categorías: Java / Java Swing

Parece ser que están dando guerra las tablas xD A continuación les dejo un post con un ejemplo de tabla con cajas seleccionables y otros valores que son en éste caso enteros. Luego tenemos un botón con el que podemos recorrer la tabla (el modelo que representa los valores de la tabla) e ir borrando las filas que tienen la caja seleccionable seleccionada, valga la redundancia… 

Al grano, vamos con el ejemplo:
package swing;

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;

public class TablaSeleccionable extends JFrame {

private static final long serialVersionUID = 1L;
private JPanel contentPane;
private JTable table;

/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TablaSeleccionable frame = new TablaSeleccionable();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
* Create the frame.
*/
public TablaSeleccionable() {
setTitle("Tabla seleccionable by jnj");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 604, 347);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);

JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(10, 11, 560, 227);
getContentPane().add(scrollPane);

String[] columnas = { "Los checkbox", "Un dato", "Otro dato" };
final DefaultTableModel modelo;
modelo = new DefaultTableModel(null, columnas);

// hay que programar nuestra propia función getColumnClass para
// poder poner controles como por ejemplo el checkbox con los datos
// booleanos
table = new JTable(modelo) {
private static final long serialVersionUID = 1L;

@Override
public Class getColumnClass(int column) {
switch (column) {
case 0:
return Boolean.class;
case 1:
return Integer.class;
case 2:
return Integer.class;
default:
return Boolean.class;
}
}
};

table.setBounds(26, 26, 463, 332);
scrollPane.setViewportView(table);

// INSERTA UNOS DATOS EN LA TABLA
for (int i = 0; i < 10; i++) {
Object[] nuevafila = { false, i, i };
modelo.addRow(nuevafila);
}

// BOTON QUE ELIMINA FILAS,
// Recorre de atrás hacia adelante las filas eliminando las
// seleccionadas.
JButton btnEliminarFilas = new JButton("Eliminar filas");
btnEliminarFilas.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
for (int i = 9; i >= 0; i--) {
// si la fila i, columna 0 es true, es porque está
// seleccionado el checkbox, entonces borra
if (((Boolean) modelo.getValueAt(i, 0)) == true) {
modelo.removeRow(i);
}
}

}
});
btnEliminarFilas.setBounds(10, 249, 201, 23);
contentPane.add(btnEliminarFilas);

}
}
En el ejemplo he puesto un DefaultTableModel por su simplicidad. Hay otras formas de hacer lo mismo, como viene siendo habitual en programación. Espero que sirva.
Saludos!

Joomla! Platform 4: Autocarga de clases con JLoader

2013-07-07 - Categorías: PHP
Empieza el domingo interesante. Un poco desesperado porque el framework de Joomla no tiene mucha documentación para usarlo independientemente del CMS pero ahí seguiré atento a los cambios, que seguro que algún día se convertirá en un framework de la categoría de Symfony o Codelgniter, por ejemplo. Con 2700 desarrolladores en todo el mundo, más de 6000 extensiones, con un 2,7% de portales en Internet que usan Joomla! ésto promete.
A fecha de hoy leo en los foros de grupos de desarrollo que con la separación de Joomla Platform del desarrollo del CMS se están cambiando los espacios de nombres y añadiendo más y más funcionalidades. Una de éstas últimas es el nuevo método para autocargar clases.

Con un ejemplo se ve bien sencillo:

<?php

// se importa la Plataforma Joomla.
require_once 'libraries/import.php';

// directorio base que se usa para el autocargador de clases
const JPATH_BASE = __DIR__;

// registra un prefijo cualquiera
JLoader::registerPrefix('Jnj', JPATH_BASE);

// crea una instancia de la clase nueva
$app = JApplicationWeb::getInstance("JnjUnDirectorioEjemploWeb");

// se supone que debemos guardar la applicación en el core
JFactory::$application = $app;

// y entonces podemos ejecutarla desde el core
JFactory::getApplication()->execute();

// así queda todo ordenado en el núcleo del framework

Éste podría ser un index.php del directorio principal. Con JLoader se establece un prefijo para las clases, en éste caso, ‘Jnj’. Ahora al cargar la instancia de la clase ‘JnjUnDirectorioEjemploWeb’, la clase se buscará en el directorio ‘/Un/Directorio/Ejemplo/web.php’ y la clase se deberá llamar ‘JnjUnDirectorioEjemploWeb’. Aquí abajo tienen la clase web para ejecutarlo:
<?php
class JnjUnDirectorioEjemploWeb extends JApplicationWeb {
    protected function doExecute()
    {
        $this->setBody("");
        $this->appendBody("<h1>Plataforma Joomla! Autocarga de clases con JLoader</h1>");
        $this->appendBody("Si estas viendo ésto en el navegador es que está bien la autocarga...");
    }
}
Los dos ejemplos y la estructura de directorios se pueden descargar aquí.
Para que funcione debemos tener el framework descomprimido en el mismo directorio raiz de la web, y ejecutarlo desde un navegador, como viene siendo costumbre en éstos minitutoriales.
Ahora eligiendo un prefijo, y organizando las clases del proyecto en directorios podemos ‘autocargar’ todo fácilmente sin tanto import o require. De manera dinámica el framework se encargará de todo.
Espero que sirva. Saludos.

Joomla! Platform 3: Bases de datos

2013-06-25 - Categorías: PHP
Ya llegó el calor, terminaron los exámenes de junio y parece que ya llega el verano, aunque hace poco aún estaba lloviendo en la costa mediterránea de España. Yo sigo con lo mío y hoy les traigo un acceso a bases de datos usando SQLite, una base de datos de dominio público, embebida, no necesita instalación y simplemente con que PHP tenga activada la extensión para ello ya podemos usarla.
Como viene siendo costumbre de la serie que escribo, me voy a centrar en el uso en un servidor web, con lo que el ejemplo es una página web. Se puede también ejecutar en línea de comando pero yo no uso PHP de esa forma así que… vamos al grano.


Materiales

  1. El framework Joomla Platform. Yo he usado la versión 12.3, la oficial veo que es la 12.1 y está en desarrollo la 13.1. Aquí hay más información para los curiosos como yo.
  2. Un entorno de desarrollo. Aquí ya para gustos estan los colores, Eclipse va muy bien y es multiplataforma.
  3. Un servidor para ejecutarlo. XAMPP funciona muy bien y también es multiplataforma.

Empezando

Descomprimo el framework en el directorio si es que no lo tengo ya, entonces hay que crear un fichero .php como en el ejemplo siguiente y veremos rápidamente como funciona:
...
<?php

// se importa la Plataforma Joomla.
require_once 'libraries/import.php';

class laWeb extends JApplicationWeb {
protected function doExecute()
{
$this->setBody("<html><body>");
$this->appendBody("<h1>Plataforma Joomla! SQLite</h1>");

// vector de configuración de la base de datos
// para sqlite sólo hace falta ésto
$option = array();
$option['driver'] = 'sqlite'; // tipo de bd
//$option['host'] = 'direccionhost.com'; // host
//$option['user'] = 'usuario'; //
//$option['password'] = 'contraseña'; //
$option['database'] = 'bdpruebas.sqlite'; // nombre de la bd
//$option['prefix'] = 'pref_'; // prefijo
$dbo = JDatabaseDriver::getInstance($option);

// se puede abreviar usando:
//$dbo = JDatabaseDriver::getInstance(array('driver' => 'sqlite', 'database' => 'bdpruebas.sqlite'));


// crea una tabla para las pruebas, la borra si existe
$dbo->setQuery("DROP TABLE IF EXISTS aleatorios");
$dbo->execute();
$dbo->setQuery('CREATE TABLE IF NOT EXISTS aleatorios (id INTEGER PRIMARY KEY, numero INTEGER)');
$dbo->execute();
$this->appendBody("<p>Creada la base de datos...</p>");

// inserta unos datos en la BD
for ($i = 0; $i < 10; $i++) {
$dbo->setQuery('INSERT INTO aleatorios (id, numero) VALUES (' . $i . ', ' . rand(0,99) . ');');
$dbo->execute();
}
$this->appendBody("<p>Insertados datos...</p>");

// lee la tabla
$this->appendBody("Listando con loadRowList ");
$dbo->setQuery("SELECT * FROM aleatorios;");
$resultados = $dbo->loadRowList();
foreach ($resultados as $res){
$this->appendBody( "<p>" . $res[0] . ", " . $res[1] . "</p>");
}

// lee la tabla de otra forma
$this->appendBody("Listando con loadAssocList ");
$dbo->setQuery("SELECT * FROM aleatorios;");
$resultados = $dbo->loadAssocList();
foreach ($resultados as $res){
$this->appendBody( "<p>" . $res['id'] . ", " . $res['numero'] . "</p>");
}

// lee de nuevo la tabla de otra forma
$this->appendBody("Listando con loadObjectList ");
$dbo->setQuery("SELECT * FROM aleatorios;");
$resultados = $dbo->loadObjectList();
foreach ($resultados as $res){
$this->appendBody( "<p>" . $res->id . ", " . $res->numero . "</p>");
}

$this->appendBody("</body></html>");

}
}

JApplicationWeb::getInstance("laWeb")->execute();
...

El ejemplo en descarga está aquí.

El resultado de ejecutarlo desde el navegador debe ser algo tal que así:

Plataforma Joomla! SQLite

Creada la base de datos…
Insertados datos…
Listando con loadRowList
0, 55
1, 4
2, 1
3, 76
4, 95
5, 62
6, 63
7, 16
8, 52
9, 73
Listando con loadAssocList
0, 55
1, 4
2, 1
3, 76
4, 95
5, 62
6, 63
7, 16
8, 52
9, 73
Listando con loadObjectList
0, 55
1, 4
2, 1
3, 76
4, 95
5, 62
6, 63
7, 16
8, 52
9, 73

Explicaciones

Lo que hace el programa es crear el archivo bdpruebas.sqlite si no existe, es un comportamiento peculiar de SQLite. Si usásemos otra base de datos como PostgreSQL o MySQL podríamos usar las sentencias SQL propias de cada base de datos. El código usa las funciones para cargar tablas de datos loadRowList, loadAssocList y loadObjectList. Ésto nos devuelve un objeto que almacenará los datos de la base de datos en nuestro programa. Hay otras funciones para cuando la consulta devuelve sólo una fila o sólo un dato por ejemplo.
Hasta aquí todo bien, pero entonces ¿porqué usar el framework y no usar directamente PHP como siempre sin framework?
Ahora a partir de las últimas versiones se han añadido más bases de datos aparte de la original MySQL, tenemos PostgreSQL, SQLServer, y se preveen el acceso a muchas otras. Ahora bien, tenemos una capa extra que nos va a independizar totalmente de la base de datos, siempre que no usemos las tradicionales sentencias SQL, como en el ejemplo anterior, y construyamos nuestra aplicación usando ésta herramienta. Puede que en un futuro querramos cambiar de base de datos o hacer posible que dicho cambio sea dinámico según configuración del usuario.

Independizando de la base de datos

La historia está en crear la query usando el framework. Tenemos la clase JDatabaseDriver que es la que nos provee de la conexión a la base de datos. Ahora sí, contruimos la $query usando la clase JDatabaseQuery y entonces obtendremos esa compatibilidad de las consultas, inserciones, actualizaciones y borrados de nuestro programa con varios tipos de bases de datos. He simplificado el ejemplo anterior:
...
<?php

// se importa la Plataforma Joomla.
require_once 'libraries/import.php';

class laWeb extends JApplicationWeb {
protected function doExecute()
{
$this->setBody("<html><body>");
$this->appendBody("<h1>Plataforma Joomla! Independizando de la base de datos</h1>");

//
$dbo = JDatabaseDriver::getInstance(array('driver' => 'sqlite', 'database' => 'bdpruebas.sqlite'));

// borrando los datos de la tabla aleatorios
// para tenerla limpia
$query = $dbo->getQuery(true);
$query->delete('aleatorios');
$dbo->setQuery($query);
$dbo->execute();

$this->appendBody("<p>Borrados los datos...</p>");

// inserta unos datos en la BD
for ($i = 0; $i < 10; $i++) {
// crear una nueva consulta
$query = $dbo->getQuery(true);

// se construye
$query->insert('aleatorios')
->columns('id, numero')
->values($i . ', ' . rand(0,99));

// se establece
$dbo->setQuery($query);

// se ejecuta
$dbo->execute();
}
$this->appendBody("<p>Insertados datos...</p>");

// consultado datos
$query->select('*')->from('aleatorios');
$dbo->setQuery($query);
$resultados = $dbo->loadObjectList();
foreach ($resultados as $res){
$this->appendBody( '<p>' . $res->id . ', ' . $res->numero . '</p>');
}

$this->appendBody("</body></html>");

}
}

JApplicationWeb::getInstance("laWeb")->execute();
...

Éste segundo ejemplo está en descarga aquí.

Utilizando la base de datos creada con el primer ejemplo, si guardamos éste segundo en otro fichero .php y lo ejecutamos en el navegador funcionará de forma similar. Ahora, si tenemos la base de datos distinta de SQLite, simplemente con cambiar la línea:
$dbo = JDatabaseDriver::getInstance(array('driver' => 'sqlite', 'database' => 'bdpruebas.sqlite'));
Haciendo la conexión con la base de datos que tengamos, nos aseguramos que el resto de consultas, inserciones, actualizaciones o borrados van a funcionar.

Terminando

Otra vez más, me remito para más información a la documentación oficial:

http://docs.joomla.org/J3.1:Accessing_the_database_using_JDatabasehttp://api.joomla.org/Joomla-Platform/Database/JDatabaseQuery.html#insert

Éste post al final se ha hecho bien largo, ¡otro testamento! xDD Es que las bases de datos lo merecen ¿no cree?

Espero que sirva.
Saludos.

© 2024 JnjSite.com - MIT license

Sitio hecho con WordPress, diseño y programación del tema por Jnj.